source: GTP/trunk/App/Demos/Illum/Ogre/src/Common/include/FPSPlayer.h @ 2459

Revision 2459, 5.6 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 FireBall;
25class MyCharMoveController;
26
27class CharacterManager
28{
29public:
30        static CharacterManager& getSingleton()
31        {
32                if(mSingleton == 0)
33                        mSingleton = new CharacterManager();
34                return *mSingleton;
35        }
36        PlayerCharacter* getTrigger(NxOgre::Actor* a)
37        {
38                if(triggers.find(a)== triggers.end())
39                        return 0;
40                return triggers[a];
41        }
42        PlayerCharacter* getTarget(NxOgre::Actor* a)
43        {
44                if(targets.find(a)== targets.end())
45                        return 0;
46                return targets[a];
47        }
48
49        void addTrigger(NxOgre::Actor* a, PlayerCharacter* c){triggers[a] = c;}
50        void addTarget(NxOgre::Actor* a, PlayerCharacter* c){targets[a] = c;}
51
52        void levelUP();
53       
54        SceneManager* mSceneManager;
55        Scene* mScene;
56
57protected:
58        CharacterManager(){}
59        static CharacterManager* mSingleton;
60        std::map<NxOgre::Actor*, PlayerCharacter*> triggers;
61        std::map<NxOgre::Actor*, PlayerCharacter*> targets;
62       
63};
64
65
66class PlayerCharacter  : public FrameListener
67{
68public:
69
70        PlayerCharacter(String name, Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, bool debug = false);
71       
72        virtual void addPlayerMesh(String meshname, float meshscale, bool rotateModel);
73        virtual bool frameStarted(const FrameEvent& evt);
74        virtual void addWeaponModel(String meshname, String attachBoneName);
75        virtual void doAction(float dt){}
76        virtual float getHit(){return 0;}
77        virtual void addHit(float hit){mHealth -= hit; if(mHealth < 0) mHealth = 0;}
78       
79        static unsigned int frameListenerPriority;
80       
81protected:
82       
83        String mName;
84        Entity* mCharacterMeshEntity;
85        Entity* mWeaponEntity;
86        Bone* mWeaponAttachBone;
87    SceneNode* mWeaponNode;
88        SceneNode*  mWeaponBoundNode;
89        SceneNode*  mWeaponBoundDebugNode;
90        SceneNode*  mPlayerBoundDebugNode;
91        Actor* mWeaponBound;
92        Scene* mScene;
93        Character* mPlayerCharacter;
94        SceneNode* mPlayerNode;
95        float mMeshScale;
96        AnimationState* mCharacterMesh_AnimState;
97        SceneManager* mSceneManager;
98        PlayerAnimState mCurrentAnimState;
99        int mWeapon;
100        bool mMoving;
101        bool mForceAnimChange;
102        MyCharMoveController* mCharacterController;
103        Vector3 mPlayerDimensions;
104        bool mRunning;
105        bool isAlive;
106       
107        SceneNode* mWeaponNode2;
108        bool mDebug;
109
110        float mHealth;
111               
112        float getAnimSpeed(){return 1.2;}
113        virtual String getAnimStateName(PlayerAnimState as,  int option = 0){return "stand";}
114        virtual void setAnimState(PlayerAnimState as){}
115       
116};
117
118class TrollCharacter : public PlayerCharacter
119{
120public:
121        TrollCharacter(String name, Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, bool debug = false);
122        ~TrollCharacter(){}
123
124        void doAction(float dt);
125        float getHit(){ if(mCurrentAnimState == PLAYERANIMSTATE_ATTACK) return 20; else return 0;}
126        void addHit(float hit);
127
128        bool frameStarted(const FrameEvent& evt)
129        {
130        /*      OverlayElement* healthUI = OverlayManager::getSingleton().getOverlayElement("MannaColumn");
131                float relHealth = mHealth / MaxHealth;
132                healthUI->setHeight(0.29 * relHealth);
133                healthUI->setTop(0.005 +  (1.0 - relHealth) * 0.29);*/
134               
135                return PlayerCharacter::frameStarted(evt);
136        }
137protected:
138        String getAnimStateName(PlayerAnimState as,  int option = 0);
139        void setAnimState(PlayerAnimState as);
140
141        static float MaxHealth;
142};
143
144class FPSPlayer : public PlayerCharacter
145{
146public:
147        FPSPlayer(Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, float cameraHeight, Camera* cam, bool debug = false);
148        ~FPSPlayer(void);
149
150        void addPlayerMesh(String meshname, float meshscale, bool rotateModel);
151        virtual void processKeyInputs(InputReader* inputDevice);
152        bool frameStarted(const FrameEvent& evt);
153        virtual void processMouseInputs(InputReader* inputDevice);     
154        void addWeaponModel(String meshname, String attachBoneName);
155        Vector3 getPosition(){return mPlayerNode->getWorldPosition();
156                return mPlayerCharacter->getGlobalPosition();}
157        Vector3 getDirection()
158        {
159                Vector3 dir = mCamera->getDerivedDirection();
160                dir.normalise();
161                return dir;
162        }
163//      Vector3 getOrienation(){return mPlayerCharacter->getGlobalOrientation();}
164        float getHit()
165        {
166                if(mCurrentAnimState == PLAYERANIMSTATE_ATTACK){
167                        if(mWeapon) return 20;
168                        else return 15;
169                }else return 0;
170        }
171        void addHit(float hit)
172        {
173                if(isAlive)
174                {
175                        PlayerCharacter::addHit(hit);
176                        if(mHealth <= 0)//death
177                        {
178                                static deaths = 0;
179                                deaths++;
180                                isAlive = false;
181                                OverlayElement* deathsTextBox = OverlayManager::getSingleton().getOverlayElement("Deaths");
182                                        deathsTextBox->setCaption("Deaths: "+StringConverter::toString(deaths));
183                        }
184                }
185        }
186
187        void levelUp(){mMaxHealth += 30; mHealth = mMaxHealth;}
188
189        static FPSPlayer* thePlayer;
190        static FPSPlayer* getPlayer(){return thePlayer;}
191        void addCharacterInRange(PlayerCharacter* c){mCharactersInRange.insert(c);}
192        void removeCharacterInRange(PlayerCharacter* c){mCharactersInRange.erase(c);}
193
194protected:
195
196        Camera* mCamera;
197        float mCameraHeight;
198        float mStrength;
199        float mMaxStrength;
200        float mManna;
201        float mMaxManna;
202        float mMaxHealth;
203        FireBall* mFireBall;
204       
205        std::set<PlayerCharacter*> mCharactersInRange;
206
207        String getAnimStateName(PlayerAnimState as,  int option = 0);
208        void setAnimState(PlayerAnimState as);
209};
Note: See TracBrowser for help on using the repository browser.