summaryrefslogtreecommitdiffstats
path: root/src/physics.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/physics.h')
-rw-r--r--src/physics.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/physics.h b/src/physics.h
new file mode 100644
index 0000000..3eb83f5
--- /dev/null
+++ b/src/physics.h
@@ -0,0 +1,228 @@
+// physics.h
+
+#ifndef _PHYSICS_H_
+#define _PHYSICS_H_
+
+
+class CInstanceManager;
+class CD3DEngine;
+class CLight;
+class CParticule;
+class CTerrain;
+class CWater;
+class CCamera;
+class CObject;
+class CBrain;
+class CMotion;
+class CSound;
+
+
+enum PhysicsType
+{
+ TYPE_ROLLING = 1,
+ TYPE_FLYING = 2,
+};
+
+enum PhysicsMode
+{
+ MO_ADVACCEL = 0,
+ MO_RECACCEL = 1,
+ MO_STOACCEL = 2,
+ MO_MOTACCEL = 3,
+ MO_ADVSPEED = 4,
+ MO_RECSPEED = 5,
+ MO_MOTSPEED = 6,
+ MO_CURSPEED = 7,
+ MO_TERFORCE = 8,
+ MO_TERSPEED = 9,
+ MO_TERSLIDE = 10,
+ MO_REASPEED = 11,
+};
+
+
+typedef struct
+{
+ D3DVECTOR advanceAccel; // accélération de départ (+)
+ D3DVECTOR recedeAccel; // accélération de départ (+)
+ D3DVECTOR stopAccel; // accélération d'arrêt (+)
+ D3DVECTOR motorAccel; // accélération actuelle (+/-)
+
+ D3DVECTOR advanceSpeed; // vitesse en marche avant (+)
+ D3DVECTOR recedeSpeed; // vitesse en marche arrière (+)
+ D3DVECTOR motorSpeed; // vitesse souhaitée (+/-)
+ D3DVECTOR currentSpeed; // vitesse actuelle (+/-)
+
+ D3DVECTOR terrainForce; // force de résistance du terrain (+)
+ D3DVECTOR terrainSpeed; // vitesse du terrain (+/-)
+ D3DVECTOR terrainSlide; // limite vitesse de glissement (+)
+
+ D3DVECTOR realSpeed; // vitesse réelle (+/-)
+
+ D3DVECTOR finalInclin; // inclinaison finale
+}
+Motion;
+
+
+
+
+class CPhysics
+{
+public:
+ CPhysics(CInstanceManager* iMan, CObject* object);
+ ~CPhysics();
+
+ void DeleteObject(BOOL bAll=FALSE);
+
+ BOOL EventProcess(const Event &event);
+
+ void SetBrain(CBrain* brain);
+ void SetMotion(CMotion* motion);
+
+ void SetType(PhysicsType type);
+ PhysicsType RetType();
+
+ BOOL Write(char *line);
+ BOOL Read(char *line);
+
+ void SetGravity(float value);
+ float RetGravity();
+
+ float RetFloorHeight();
+
+ void SetLinMotion(PhysicsMode mode, D3DVECTOR value);
+ D3DVECTOR RetLinMotion(PhysicsMode mode);
+ void SetLinMotionX(PhysicsMode mode, float value);
+ void SetLinMotionY(PhysicsMode mode, float value);
+ void SetLinMotionZ(PhysicsMode mode, float value);
+ float RetLinMotionX(PhysicsMode mode);
+ float RetLinMotionY(PhysicsMode mode);
+ float RetLinMotionZ(PhysicsMode mode);
+
+ void SetCirMotion(PhysicsMode mode, D3DVECTOR value);
+ D3DVECTOR RetCirMotion(PhysicsMode mode);
+ void SetCirMotionX(PhysicsMode mode, float value);
+ void SetCirMotionY(PhysicsMode mode, float value);
+ void SetCirMotionZ(PhysicsMode mode, float value);
+ float RetCirMotionX(PhysicsMode mode);
+ float RetCirMotionY(PhysicsMode mode);
+ float RetCirMotionZ(PhysicsMode mode);
+
+ float RetLinStopLength(PhysicsMode sMode=MO_ADVSPEED, PhysicsMode aMode=MO_STOACCEL);
+ float RetCirStopLength();
+ float RetLinMaxLength(float dir);
+ float RetLinTimeLength(float dist, float dir=1.0f);
+ float RetLinLength(float dist);
+
+ void SetMotor(BOOL bState);
+ BOOL RetMotor();
+ void SetLand(BOOL bState);
+ BOOL RetLand();
+ void SetSwim(BOOL bState);
+ BOOL RetSwim();
+ void SetCollision(BOOL bCollision);
+ BOOL RetCollision();
+ void SetFreeze(BOOL bFreeze);
+ BOOL RetFreeze();
+ void SetReactorRange(float range);
+ float RetReactorRange();
+
+ void SetMotorSpeed(D3DVECTOR speed);
+ void SetMotorSpeedX(float speed);
+ void SetMotorSpeedY(float speed);
+ void SetMotorSpeedZ(float speed);
+ D3DVECTOR RetMotorSpeed();
+ float RetMotorSpeedX();
+ float RetMotorSpeedY();
+ float RetMotorSpeedZ();
+
+ void CreateInterface(BOOL bSelect);
+ Error RetError();
+
+protected:
+ BOOL EventFrame(const Event &event);
+ void WaterFrame(float aTime, float rTime);
+ void SoundMotor(float rTime);
+ void SoundMotorFull(float rTime, ObjectType type);
+ void SoundMotorSlow(float rTime, ObjectType type);
+ void SoundMotorStop(float rTime, ObjectType type);
+ void SoundReactorFull(float rTime, ObjectType type);
+ void SoundReactorStop(float rTime, ObjectType type);
+ void FrameParticule(float aTime, float rTime);
+ void MotorUpdate(float aTime, float rTime);
+ void EffectUpdate(float aTime, float rTime);
+ void UpdateMotionStruct(float rTime, Motion &motion);
+ void FloorAdapt(float aTime, float rTime, D3DVECTOR &pos, D3DVECTOR &angle);
+ void FloorAngle(const D3DVECTOR &pos, D3DVECTOR &angle);
+ int ObjectAdapt(const D3DVECTOR &pos, const D3DVECTOR &angle);
+ BOOL JostleObject(CObject* pObj, D3DVECTOR iPos, float iRad, D3DVECTOR oPos, float oRad);
+ BOOL JostleObject(CObject* pObj, float force);
+ BOOL ExploOther(ObjectType iType, CObject *pObj, ObjectType oType, float force);
+ int ExploHimself(ObjectType iType, ObjectType oType, float force);
+
+ void PowerParticule(float factor, BOOL bBreak);
+ void CrashParticule(float crash);
+ void MotorParticule(float aTime, float rTime);
+ void WaterParticule(float aTime, D3DVECTOR pos, ObjectType type, float floor, float advance, float turn);
+ void WheelParticule(int color, float width);
+
+protected:
+ CInstanceManager* m_iMan;
+ CD3DEngine* m_engine;
+ CLight* m_light;
+ CParticule* m_particule;
+ CTerrain* m_terrain;
+ CWater* m_water;
+ CCamera* m_camera;
+ CObject* m_object;
+ CBrain* m_brain;
+ CMotion* m_motion;
+ CSound* m_sound;
+
+ PhysicsType m_type; // TYPE_*
+ float m_gravity; // force de gravitation
+ float m_time; // temps absolu
+ D3DVECTOR m_motorSpeed; // vitesse du moteur (-1..1)
+ Motion m_linMotion; // mouvement linéaire
+ Motion m_cirMotion; // mouvement circulaire
+ BOOL m_bMotor;
+ BOOL m_bLand;
+ BOOL m_bSwim;
+ BOOL m_bCollision;
+ BOOL m_bObstacle;
+ BOOL m_bFreeze;
+ int m_repeatCollision;
+ float m_linVibrationFactor;
+ float m_cirVibrationFactor;
+ float m_inclinaisonFactor;
+ float m_lastPowerParticule;
+ float m_lastSlideParticule;
+ float m_lastMotorParticule;
+ float m_lastWaterParticule;
+ float m_lastUnderParticule;
+ float m_lastPloufParticule;
+ float m_lastFlameParticule;
+ BOOL m_bWheelParticuleBrake;
+ D3DVECTOR m_wheelParticulePos[2];
+ float m_absorbWater;
+ float m_reactorTemperature;
+ float m_reactorRange;
+ float m_timeReactorFail;
+ float m_timeUnderWater;
+ float m_lastEnergy;
+ float m_lastSoundWater;
+ float m_lastSoundInsect;
+ float m_restBreakParticule;
+ float m_floorLevel; // niveau du sol
+ float m_floorHeight; // hauteur au-dessus du sol
+ int m_soundChannel;
+ int m_soundChannelSlide;
+ float m_soundTimePshhh;
+ float m_soundTimeJostle;
+ float m_soundTimeBoum;
+ BOOL m_bSoundSlow;
+ BOOL m_bForceUpdate;
+ BOOL m_bLowLevel;
+};
+
+
+#endif //_PHYSICS_H_