source: GTP/trunk/App/Demos/Illum/Ogre/src/SpaceStation/include/Characters.h @ 2472

Revision 2472, 4.0 KB checked in by szirmay, 17 years ago (diff)
Line 
1#pragma once
2
3#include "Ogre.h"
4#include "OgreBillboardParticleRenderer.h"
5#include "OgreIlluminationManager.h"
6#include "NXOgre.h"
7
8using namespace Ogre;
9using namespace NxOgre;
10
11enum PlayerAnimState
12{
13        PLAYERANIMSTATE_STAND,
14        PLAYERANIMSTATE_IDLE,
15        PLAYERANIMSTATE_ATTACK,
16        PLAYERANIMSTATE_BLOCK,
17        PLAYERANIMSTATE_WALK,
18        PLAYERANIMSTATE_PAIN,
19        PLAYERANIMSTATE_DEATH,
20        PLAYERANIMSTATE_TURN
21};
22
23class PlayerCharacter;
24class MyCharMoveController;
25
26class CharacterManager
27{
28public:
29        static CharacterManager& getSingleton()
30        {
31                if(mSingleton == 0)
32                        mSingleton = new CharacterManager();
33                return *mSingleton;
34        }
35        PlayerCharacter* getTrigger(NxOgre::Actor* a)
36        {
37                if(triggers.find(a)== triggers.end())
38                        return 0;
39                return triggers[a];
40        }
41        PlayerCharacter* getTarget(NxOgre::Actor* a)
42        {
43                if(targets.find(a)== targets.end())
44                        return 0;
45                return targets[a];
46        }
47
48        void addTrigger(NxOgre::Actor* a, PlayerCharacter* c){triggers[a] = c;}
49        void addTarget(NxOgre::Actor* a, PlayerCharacter* c){targets[a] = c;}
50       
51        SceneManager* mSceneManager;
52        Scene* mScene;
53
54protected:
55        CharacterManager(){}
56        static CharacterManager* mSingleton;
57        std::map<NxOgre::Actor*, PlayerCharacter*> triggers;
58        std::map<NxOgre::Actor*, PlayerCharacter*> targets;
59       
60};
61
62
63class PlayerCharacter  : public FrameListener
64{
65public:
66
67        PlayerCharacter(String name, Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, bool debug = false);
68       
69        virtual void addPlayerMesh(String meshname, float meshscale, bool rotateModel);
70        virtual bool frameStarted(const FrameEvent& evt);
71        virtual void doAction(float dt){}
72        virtual float getHit(){return 0;}
73        virtual void addHit(float hit){mHealth -= hit; if(mHealth < 0) mHealth = 0;}
74       
75        static unsigned int frameListenerPriority;
76
77        Entity* getMeshEntity(){return mCharacterMeshEntity;}
78       
79protected:
80       
81        String mName;
82        Entity* mCharacterMeshEntity;
83        SceneNode*  mPlayerBoundDebugNode;
84        Scene* mScene;
85        Character* mPlayerCharacter;
86        SceneNode* mPlayerNode;
87        float mMeshScale;
88        AnimationState* mCharacterMesh_AnimState;
89        SceneManager* mSceneManager;
90        PlayerAnimState mCurrentAnimState;
91        int mWeapon;
92        bool mMoving;
93        bool mForceAnimChange;
94        MyCharMoveController* mCharacterController;
95        Vector3 mPlayerDimensions;
96        bool mRunning;
97        bool isAlive;
98       
99        bool mDebug;
100
101        float mHealth;
102               
103        float getAnimSpeed(){return 1.2;}
104        virtual String getAnimStateName(PlayerAnimState as,  int option = 0){return "stand";}
105        virtual void setAnimState(PlayerAnimState as){}
106       
107};
108
109class AlienCharacter : public PlayerCharacter
110{
111public:
112        AlienCharacter(String name, Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, bool debug = false);
113        ~AlienCharacter(){}
114
115        void doAction(float dt);
116       
117        bool frameStarted(const FrameEvent& evt)
118        {               
119                return PlayerCharacter::frameStarted(evt);
120        }
121protected:
122        String getAnimStateName(PlayerAnimState as,  int option = 0);
123        void setAnimState(PlayerAnimState as);
124
125        static float MaxHealth;
126};
127
128class FPSPlayer : public PlayerCharacter
129{
130public:
131        FPSPlayer(Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, float cameraHeight, Camera* cam, bool debug = false);
132        ~FPSPlayer(void);
133
134        void addPlayerMesh(String meshname, float meshscale, bool rotateModel);
135        virtual void processKeyInputs(InputReader* inputDevice);
136        bool frameStarted(const FrameEvent& evt);
137        virtual void processMouseInputs(InputReader* inputDevice);     
138        Vector3 getPosition(){return mPlayerNode->getWorldPosition();
139                return mPlayerCharacter->getGlobalPosition();}
140        Vector3 getDirection()
141        {
142                Vector3 dir = mCamera->getDerivedDirection();
143                dir.normalise();
144                return dir;
145        }
146//      Vector3 getOrienation(){return mPlayerCharacter->getGlobalOrientation();}
147       
148        static FPSPlayer* thePlayer;
149        static FPSPlayer* getPlayer(){return thePlayer;}
150       
151protected:
152
153        Camera* mCamera;
154        float mCameraHeight;
155        Light* mFlashLight;
156               
157        String getAnimStateName(PlayerAnimState as,  int option = 0);
158        void setAnimState(PlayerAnimState as);
159};
Note: See TracBrowser for help on using the repository browser.