command.h

来自「2002年」· C头文件 代码 · 共 156 行

H
156
字号
#ifndef _command
#define _command


#include "types.h"
#include "smp_datastruct.h"
#include "clientparam.h"

const int CP_num_stored_CMDs = 50;
const int CP_num_commands_at_one_cycle = 5;


class Command{
public:
	union{
		float power;
		float dist;
		float x;
		int No;
	};
	union{
		float angle;
		float y;
	};
    
	Time time;
    CMDType type;
public:
	Command() { type = CMD_none; }

	CMDType GetCMDType(){ return type; }
	AngleDeg GetAngle(){ return angle; };
	float GetPower() { return power; }

	//void send_init_message();
/****       Action command      ********************/
	void move(float X,float Y);
	void turn(float Moment);
	void dash(float Power);
	void kick(float Power,float ang);
	void seize(float ang);
	void say(char* MSG);
	void turn_neck(float ang);
	void change_view();
	void disconnect();
	void stay(float desire_bdfc = 360.0f);	
	void Tackle(float Power);
	void PointTo(float dir,float dist);
	void Attentionto(int No);
	void donothing();
	
	/*void operator =(Command& cmd){angle = cmd.angle;x = cmd.x; y =cmd.y; 
	time =cmd.time; type = cmd.type; power = cmd.power;}*/
	inline bool valid();
	inline bool valid(Time time);
	void Reset(){ type = CMD_none; }
};

class Actions{
private:
	/* temparory variants */
	char qual_string[10], width_string[10];
	/* action effects */
	TimedDataArray<float, CP_num_stored_CMDs> kickrates, turnrates, dashrates, usedpower;
	TimedDataArray<Vector, CP_num_stored_CMDs> kickeffects, dasheffects;
	TimedDataArray<AngleDeg,CP_num_stored_CMDs> turneffects, turn_neckeffects;
	Command commands[CP_num_stored_CMDs];		//commands buffer
	inline int CmdIndex(int No){ return No % CP_num_stored_CMDs >= 0 ? No % CP_num_stored_CMDs : No % CP_num_stored_CMDs + CP_num_stored_CMDs;}
	
	bool turn_valid;
	bool dash_valid;
	bool kick_valid;
	bool turn_neck_valid;
	bool say_valid;
	int kicks,dashes,turns,turn_necks,says;
	int latest;									//latest pos in commands buffer

	Time lastcatchtime;
/*	stamina control	*/
	bool IsCriticalAction;
	float max_power;
	float min_power;
	float effort_max_power;
	float effort_min_power;
/*******************************************/
public:
	Actions();
	
	float Kickrate();
	float Dashrate();
	float Turnrate();
	float Turnrate(float speed);
	float Kickrate(Time time);
	float Turnrate(Time time);
	float Dashrate(Time time);
	float CalcKickRate(AngleDeg ang, float distance);
	/********   buffered command effects  **************/
	Vector KickEffect(Time time);
	Vector DashEffect(Time time);
	AngleDeg TurnEffect(Time time);
	AngleDeg TurnNeckEffect(Time time);
	float	UsedPower(Time time);
	void ResetKickEffect(Time time);
	void ResetDashEffect(Time time);
	void ResetTurnEffect(Time time);
	void ResetTurnneckEffect(Time time);
	void SetKickEffect(float x, float y, float power, Time time);
	void SetDashEffect(float x, float y, float power, Time time);
	void SetTurnEffect(float v, Time time);
	void SetTurnNeckEffect(float v, Time time);

	/*	Preprocess	*/
	void  PreProcess();

	bool cancatch(Time time);
	/******      basic actions    *******************/
	void send_init_message();
	void init_clang();
	void move(float X,float Y);
	void move(float X,float Y, AngleDeg ang);
	void move(Vector pos);
	void turn(float Moment);
	void dash(float Power);
	void kick(float Power,float ang);
	void turn_neck(float ang);
	void seize(float ang);
	void say(char* MSG);
	
	void Tackle(float Power);		
	void PointTo(float dist,float dir=0 );
	void Attentionto(int No);

	void change_view(VIEWWIDTH width,VIEWQUALITY quality);
	void disconnect();
	void execute(Command& command);
	void send_action(); // all command is sent by this procedure
	/**********************************************/
	bool Valid(CMDType type); //is the type command valid
	bool Commanded(CMDType type,Time time);//is type command commanded at time
	/*********************************************/
	float Max_KickEffect();//max kick effect for the current cycle
	float Max_DashEffect();//max dash effect for the current cycle
	AngleDeg Max_TurnAng();//max turn effect for the current cycle
	AngleDeg Min_TurnAng();//min turn effect for the current cycle

	void ActionsInvalidation();
	Vector SummarizeKickeffectPos(Time prev, Time last, float speed_decay);
	Vector SummarizeKickeffectVel(Vector ivel, Time prev, Time last, float speed_decay, float max_speed);
	Vector SummarizeDasheffectPos(Vector ivel, Time prev, Time last, float speed_decay, float max_speed);
	Vector SummarizeDasheffectVel(Vector ivel, Time prev, Time last, float speed_decay, float max_speed);
	AngleDeg SummarizeTurneffect(Time prev, Time last);
	AngleDeg SummarizeTurnneckeffect(Time prev, Time last);
	/*********************************************/
};
#endif

⌨️ 快捷键说明

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