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 + -
显示快捷键?