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

📄 enemy.h

📁 一个symbian 冒险游戏代码
💻 H
字号:
#ifndef _ENEMY_H
#define _ENEMY_H


#include "MapObject.h"
#include "Surface.h"


class Enemy :
	public MapObject
{
public:
	enum Behavior
	{
		BEHAVIOR_DISABLED,
		BEHAVIOR_PATROL,
		BEHAVIOR_COMBAT,
		BEHAVIOR_FLEE,
	};

	enum BodyState
	{
		BODY_IDLE			= 0,
		BODY_RUN,
		BODY_ATTACK,
		BODY_BACKUP,
		BODY_HIT,
		BODY_DEATH,
		BODY_DEAD,
		BODY_COUNT
	};

	enum Animation
	{
		ANIM_IDLE			= 0,
		ANIM_RUN,
		ANIM_ATTACK,
		ANIM_BACKUP,
		ANIM_HIT,
		ANIM_DEATH,
		ANIM_COUNT
	};

	enum EnemyType
	{
		ENEMY_NONE			= 0,
		ENEMY_GHOUL,
		ENEMY_OGRE,
		ENEMY_HELLBEAST,
		ENEMY_COUNT
	};

	Enemy();
	~Enemy();

	void		stand();
	void		run();
	void		run( Dir dir );
	void		hit();
	void		die();
	void		attack();
	void		backUp();
	void		wait();

	void		setType( EnemyType type );
	void		setBehavior( Behavior beh );
	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		read( io::InputStream* in );
	void		write( io::OutputStream* out );

	void		addItem( const char* ) {};
	void		removeItem( const char* ) {};

	bool		isInState( 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;}
	FixVec2		center() const;

	bool		isDead() const		{return m_state == BODY_DEAD;}

	bool		isInterruptable();

	static const char*	toString( EnemyType type );
	static EnemyType	toEnemyType( const char* sz );

	static void	initStatic();
	static void	deinitStatic();

private:
	friend class Map;

	int			Enemy_storeStart; //Stored data start
	Fix			m_time;
	Fix			m_dirChangeTime;
	Fix			m_attackDamage;
	Fix			m_attackSkill;
	Fix			m_aggression;
	Fix			m_cowardness;
	int			m_collisionCount;
	int			m_state;
	int			m_type;
	int			m_behavior;
	Fix			m_attackRange;
	Fix			m_attackAngle;
	Fix			m_attackTime;
	Fix			m_backUpTime;
	Fix			m_waitTime;
	Fix			m_sinceRunningTime;
	int			m_attackCounter;
	int			m_attackHitCounter;
	int			m_hitPointMarker;
	int			m_animationSwitchBoard[BODY_COUNT];
	bool		m_combatGreen;
	int			Enemy_storeEnd; //Stored data end

	void		behaviorPatrol( Fix dt );
	void		behaviorCombat( Fix dt );
	void		behaviorFlee( Fix dt );

	void		updateAttack( Fix dt );
	void		updateBackUp( Fix dt );
	void		updateRun( Fix dt );
	void		updateHit( Fix dt );
	void		updateDeath( Fix dt );
	void		updateWait( Fix dt );

	void		tryAttack();

	FixVec2		renderPositionLow( int side ) const;
	void		resetStatisticsCombat( bool combatGreen = true );
	void		resetStatisticsFlee();

	bool		animEnded() const;
};


#endif // _ENEMY_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -