#pragma once #include "Ogre.h" #include "NXOgre.h" using namespace Ogre; using namespace NxOgre; enum PlayerAnimState { PLAYERANIMSTATE_STAND, PLAYERANIMSTATE_IDLE, PLAYERANIMSTATE_ATTACK, PLAYERANIMSTATE_BLOCK, PLAYERANIMSTATE_WALK, PLAYERANIMSTATE_PAIN, PLAYERANIMSTATE_DEATH, PLAYERANIMSTATE_URN }; class MyCharMoveController; class PlayerCharacter : public FrameListener { public: PlayerCharacter(String name, Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, bool debug = false); virtual void addPlayerMesh(String meshname, float meshscale, bool rotateModel); bool frameStarted(const FrameEvent& evt); virtual void addWeaponModel(String meshname, String attachBoneName); void doAction(float dt); static unsigned int frameListenerPriority; protected: String mName; Entity* mCharacterMeshEntity; Entity* mWeaponEntity; Bone* mWeaponAttachBone; SceneNode* mWeaponNode; SceneNode* mWeaponBoundNode; SceneNode* mWeaponBoundDebugNode; SceneNode* mPlayerBoundDebugNode; Actor* mWeaponBound; Scene* mScene; Character* mPlayerCharacter; SceneNode* mPlayerNode; float mMeshScale; AnimationState* mCharacterMesh_AnimState; SceneManager* mSceneManager; PlayerAnimState mCurrentAnimState; int mWeapon; bool mMoving; bool mForceAnimChange; MyCharMoveController* mCharacterController; Vector3 mPlayerDimensions; bool mRunning; SceneNode* mWeaponNode2; bool mDebug; virtual String getAnimStateName(PlayerAnimState as, int option = 0){return "stand";} virtual void setAnimState(PlayerAnimState as) { if(mCurrentAnimState != PLAYERANIMSTATE_WALK) { mCharacterMesh_AnimState = mCharacterMeshEntity->getAnimationState(getAnimStateName(as)); mCharacterMesh_AnimState->setLoop(true); mCharacterMesh_AnimState->setEnabled(true); } } }; class FPSPlayer : public PlayerCharacter { public: FPSPlayer(Scene* scene, SceneManager* sceneManager, Vector3 dimensions, Vector3 startPosition, float cameraHeight, Camera* cam, bool debug = false); ~FPSPlayer(void); void addPlayerMesh(String meshname, float meshscale, bool rotateModel); virtual void processKeyInputs(InputReader* inputDevice); bool frameStarted(const FrameEvent& evt); virtual void processMouseInputs(InputReader* inputDevice); void addWeaponModel(String meshname, String attachBoneName); Vector3 getPosition(){return mPlayerNode->getWorldPosition(); return mPlayerCharacter->getGlobalPosition();} // Vector3 getOrienation(){return mPlayerCharacter->getGlobalOrientation();} static FPSPlayer* thePlayer; static FPSPlayer* getPlayer(){return thePlayer;} protected: Camera* mCamera; float mCameraHeight; String getAnimStateName(PlayerAnimState as, int option = 0); void setAnimState(PlayerAnimState as); };