mirror of
https://github.com/bulletphysics/bullet3
synced 2025-01-10 17:30:12 +00:00
284 lines
6.9 KiB
Objective-C
284 lines
6.9 KiB
Objective-C
/*
|
|
Bullet Continuous Collision Detection and Physics Library
|
|
Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
|
|
|
|
This software is provided 'as-is', without any express or implied warranty.
|
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
including commercial applications, and to alter it and redistribute it freely,
|
|
subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
#ifndef GL_DIALOG_WINDOW_H
|
|
#define GL_DIALOG_WINDOW_H
|
|
|
|
class btCollisionObject;
|
|
|
|
|
|
//think different
|
|
#if defined(__APPLE__) && !defined (VMDMESA)
|
|
#include <TargetConditionals.h>
|
|
#if (defined (TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || (defined (TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR)
|
|
#import <OpenGLES/ES1/gl.h>
|
|
#define glOrtho glOrthof
|
|
#else
|
|
#include <OpenGL/gl.h>
|
|
#include <OpenGL/glu.h>
|
|
#include <GLUT/glut.h>
|
|
#endif
|
|
#else
|
|
|
|
|
|
#ifdef _WINDOWS
|
|
#include <windows.h>
|
|
#include <GL/gl.h>
|
|
#include <GL/glu.h>
|
|
#else
|
|
#include <GL/glut.h>
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#include "LinearMath/btScalar.h"
|
|
#include "LinearMath/btAlignedObjectArray.h"
|
|
class btTypedConstraint;
|
|
|
|
class GL_DialogWindow;
|
|
|
|
enum GL_DIALOG_CONTROL_TYPES
|
|
{
|
|
GL_TEXT_CONTROL=1,
|
|
GL_TOGGLE_CONTROL,
|
|
GL_SLIDER_CONTROL,
|
|
GL_CONTROL_MAX_TYPE
|
|
};
|
|
|
|
class GL_DialogControl
|
|
{
|
|
protected:
|
|
int m_type;
|
|
|
|
public:
|
|
|
|
virtual ~GL_DialogControl()
|
|
{
|
|
}
|
|
virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime)=0;
|
|
|
|
int getType() const
|
|
{
|
|
return m_type;
|
|
}
|
|
};
|
|
|
|
struct GL_TextControl : public GL_DialogControl
|
|
{
|
|
public:
|
|
|
|
btAlignedObjectArray<const char*> m_textLines;
|
|
|
|
GL_TextControl()
|
|
{
|
|
m_type = GL_TEXT_CONTROL;
|
|
}
|
|
|
|
virtual ~GL_TextControl() {}
|
|
|
|
virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime);
|
|
};
|
|
|
|
|
|
struct GL_ToggleControl : public GL_DialogControl
|
|
{
|
|
btCollisionObject* m_toggleBody;
|
|
GL_DialogWindow* m_parentWindow;
|
|
|
|
const char* m_toggleText;
|
|
|
|
public:
|
|
|
|
bool m_active;
|
|
|
|
|
|
GL_ToggleControl(const char* toggleText,btCollisionObject* toggleBody, GL_DialogWindow* parentWindow)
|
|
:m_toggleBody(toggleBody),
|
|
m_parentWindow(parentWindow),
|
|
m_toggleText(toggleText),
|
|
m_active(false)
|
|
{
|
|
m_type = GL_TOGGLE_CONTROL;
|
|
}
|
|
|
|
virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime);
|
|
};
|
|
|
|
struct GL_SliderControl : public GL_DialogControl
|
|
{
|
|
btCollisionObject* m_sliderBody;
|
|
GL_DialogWindow* m_parentWindow;
|
|
btScalar m_lowerLimit;
|
|
btScalar m_upperLimit;
|
|
btTypedConstraint* m_constraint;
|
|
|
|
const char* m_sliderText;
|
|
public:
|
|
|
|
GL_SliderControl(const char* sliderText,btCollisionObject* sliderBody, GL_DialogWindow* parentWindow, btScalar lowerLimit,btScalar upperLimit,btTypedConstraint* constaint)
|
|
:m_sliderBody(sliderBody),
|
|
m_parentWindow(parentWindow),
|
|
m_lowerLimit(lowerLimit),
|
|
m_upperLimit(upperLimit),
|
|
m_constraint(constaint),
|
|
m_sliderText(sliderText)
|
|
{
|
|
m_type = GL_SLIDER_CONTROL;
|
|
}
|
|
|
|
virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime);
|
|
|
|
btScalar btGetFraction();
|
|
|
|
btScalar getLowerLimit()
|
|
{
|
|
return m_lowerLimit;
|
|
}
|
|
btScalar getUpperLimit()
|
|
{
|
|
return m_upperLimit;
|
|
}
|
|
btTypedConstraint* getConstraint()
|
|
{
|
|
return m_constraint;
|
|
}
|
|
};
|
|
|
|
///Very basic OpenGL Graphical Userinterface Window with text, toggle, slider control
|
|
class GL_DialogWindow
|
|
{
|
|
|
|
int m_dialogHorPos;
|
|
int m_dialogVertPos;
|
|
int m_dialogWidth;
|
|
int m_dialogHeight;
|
|
|
|
int m_screenWidth;
|
|
int m_screenHeight;
|
|
|
|
const char* m_dialogTitle;
|
|
|
|
//saved OpenGL settings
|
|
GLfloat m_PrevLineWidth;
|
|
GLint m_PrevTexEnv;
|
|
GLint m_PrevPolygonMode[2];
|
|
GLint m_MaxClipPlanes;
|
|
GLint m_PrevTexture;
|
|
GLint m_PrevArrayBufferARB;
|
|
GLint m_PrevElementArrayBufferARB;
|
|
GLboolean m_PrevVertexProgramARB;
|
|
GLboolean m_PrevFragmentProgramARB;
|
|
GLuint m_PrevProgramObjectARB;
|
|
GLboolean m_PrevTexture3D;
|
|
GLboolean m_PrevActiveTexture1D[32];
|
|
GLboolean m_PrevActiveTexture2D[32];
|
|
GLboolean m_PrevActiveTexture3D[32];
|
|
GLint m_PrevActiveTextureARB;
|
|
bool m_SupportTexRect;
|
|
GLboolean m_PrevTexRectARB;
|
|
GLint m_PrevBlendEquation;
|
|
GLint m_PrevBlendEquationRGB;
|
|
GLint m_PrevBlendEquationAlpha;
|
|
GLint m_PrevBlendSrcRGB;
|
|
GLint m_PrevBlendDstRGB;
|
|
GLint m_PrevBlendSrcAlpha;
|
|
GLint m_PrevBlendDstAlpha;
|
|
GLint m_ViewportInit[4];
|
|
GLfloat m_ProjMatrixInit[16];
|
|
|
|
btCollisionObject* m_collisionObject;
|
|
|
|
btAlignedObjectArray<GL_DialogControl*> m_controls;
|
|
|
|
protected:
|
|
|
|
|
|
void saveOpenGLState();
|
|
void restoreOpenGLState();
|
|
|
|
// void drawLine(int _X0, int _Y0, int _X1, int _Y1, unsigned int _Color0, unsigned int _Color1, bool antiAliased);
|
|
// void drawRect(int horStart, int vertStart, int horEnd, int vertEnd, unsigned int argbColor00,unsigned int argbColor10,unsigned int argbColor01,unsigned int argbColor11);
|
|
|
|
public:
|
|
|
|
|
|
GL_DialogWindow(int horPos,int vertPos,int dialogWidth,int dialogHeight,btCollisionObject* colObject, const char* dialogTitle);
|
|
|
|
virtual ~GL_DialogWindow();
|
|
|
|
void draw(btScalar deltaTime);
|
|
|
|
void setScreenSize(int width, int height);
|
|
|
|
void setStartPosition(int dialogHorPos,int dialogVertPos);
|
|
|
|
void addControl(GL_DialogControl* control)
|
|
{
|
|
m_controls.push_back(control);
|
|
}
|
|
|
|
void removeControl(GL_DialogControl* control)
|
|
{
|
|
m_controls.remove(control);
|
|
}
|
|
|
|
btCollisionObject* getCollisionObject()
|
|
{
|
|
return m_collisionObject;
|
|
}
|
|
|
|
int getDialogHorPos() const
|
|
{
|
|
return m_dialogHorPos;
|
|
}
|
|
int getDialogVertPos() const
|
|
{
|
|
return m_dialogVertPos;
|
|
}
|
|
int getDialogWidth() const
|
|
{
|
|
return m_dialogWidth;
|
|
}
|
|
|
|
int getDialogHeight() const
|
|
{
|
|
return m_dialogHeight;
|
|
}
|
|
int getScreenWidth() const
|
|
{
|
|
return m_screenWidth;
|
|
}
|
|
int getScreenHeight() const
|
|
{
|
|
return m_screenHeight;
|
|
}
|
|
|
|
int getNumControls() const
|
|
{
|
|
return m_controls.size();
|
|
}
|
|
|
|
const GL_DialogControl* getControl(int index) const
|
|
{
|
|
return m_controls[index];
|
|
}
|
|
GL_DialogControl* getControl(int index)
|
|
{
|
|
return m_controls[index];
|
|
}
|
|
};
|
|
|
|
#endif //GL_DIALOG_WINDOW_H
|