📄 player.h
字号:
#ifndef _PLAYER_H
#define _PLAYER_H
#include "MapObject.h"
#include "Surface.h"
#include <lang/String.h>
class Enemy;
class Player :
public MapObject
{
public:
enum BodyState
{
BODY_NONE = 0,
BODY_IDLE,
BODY_WALK,
BODY_WALK_WOUNDED,
BODY_ATTACK,
BODY_DRINK,
BODY_DEATH,
BODY_DEAD,
BODY_TAKE_WEAPON,
BODY_PUT_WEAPON,
BODY_STILL,
BODY_COUNT
};
enum Animation
{
ANIM_NONE = 0,
ANIM_IDLE,
ANIM_WALK_SWORD,
ANIM_WALK_SPEAR,
ANIM_WALK_SHOTGUN,
ANIM_ATTACK_SWORD,
ANIM_ATTACK_SPEAR,
ANIM_ATTACK_SHOTGUN,
ANIM_CHANGEWEAPON_SWORD,
ANIM_CHANGEWEAPON_SPEAR,
ANIM_CHANGEWEAPON_SHOTGUN,
ANIM_DRINK,
ANIM_DEATH,
ANIM_COUNT,
ANIM_WEAPON_DEPENDENT = 65536,
ANIM_WALK_BASE = ANIM_WALK_SWORD,
ANIM_ATTACK_BASE = ANIM_ATTACK_SWORD,
ANIM_CHANGEWEAPON_BASE = ANIM_CHANGEWEAPON_SWORD,
ANIM_DEFAULT = ANIM_IDLE
};
enum Weapon
{
WEAPON_SWORD = 0,
WEAPON_SPEAR,
WEAPON_SHOTGUN,
WEAPON_COUNT
};
enum
{
MAX_ITEM_COUNT = 32,
MAX_ITEM_NAME_LENGTH = 32
};
Player();
~Player();
void read( io::InputStream* in );
void write( io::OutputStream* out );
void stand();
void walk( Dir dir );
void hit();
void die( MapObject* killer );
void cheat();
void attack();
void drink();
void changeWeapon();
void setState( BodyState state, bool endTime = false );
void update( Fix dt );
void draw( Surface& dst );
void damage( Fix hp, MapObject* enemy );
void disturb( MapObject* enemy );
void setVirtualState( BodyState virtualState );
void clearVirtualState();
Fix getWeaponSkill();
Fix getWeaponDamage();
Fix getWeaponRange();
Fix getWeaponAngle();
Fix getWeaponDelay();
Fix getWeaponSlowdownFactor();
void setWeapon( char* name, Fix skill, Fix damage, Fix range, Fix angle, Fix delay, Fix slowdownFactor );
void addItem( const char* name );
void removeItem( const char* name );
bool hasItem( const char* name );
int findEmptyItemSlot();
bool isInState( const char* statename );
void setState( const char* statename );
FixVec2 blockRenderPositionReference() const;
FixVec2 blockRenderPositionExtreme() const;
Surface& bodyAnim( int* refX, int* refY );
const Surface& bodyAnim( int* refX, int* refY ) const;
BodyState state() const {return (BodyState) m_state;}
BodyState virtualState() const {return (BodyState) m_virtualState;}
FixVec2 center() const;
MapObject* killer() const {return m_killer;}
Fix time() const {return m_time;}
bool isDead() const {return m_state == BODY_DEAD;}
bool isInterruptable();
static void initStatic();
static void deinitStatic();
private:
MapObject* m_killer;
int Player_storeStart; //Stored data start
Fix m_time;
Fix m_weaponSkills[WEAPON_COUNT];
Fix m_weaponDamages[WEAPON_COUNT];
Fix m_weaponRanges[WEAPON_COUNT];
Fix m_weaponAngles[WEAPON_COUNT];
Fix m_weaponDelays[WEAPON_COUNT];
Fix m_weaponSlowdownFactors[WEAPON_COUNT];
Fix m_speedModifier;
Fix m_speedModifyTime;
int m_animationSwitchBoard[BODY_COUNT];
int m_itemCount;
int m_currentWeapon;
int m_nextWeapon;
char m_itemList[MAX_ITEM_COUNT][MAX_ITEM_NAME_LENGTH];
int m_state;
int Player_storeEnd; //Stored data end
int m_virtualState;
Surface* m_previousAnim;
int m_previousRefX;
int m_previousRefY;
bool m_freezeAnim;
bool m_weaponInHand;
void updateAttack( Fix dt, Fix skill, Fix damage, Fix range, Fix anglecos );
void updateWalk( Fix dt, bool wounded = false );
void updateDeath( Fix dt );
void updateDrink( Fix dt );
void tryAttack( Fix skill, Fix damage, Fix range, Fix anglecos );
FixVec2 renderPositionLow( int side ) const;
Fix getModifiedSpeed();
bool animEnded() const;
};
#endif // _PLAYER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -