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

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