⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player.h

📁 一个symbian 冒险游戏代码
💻 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 + -