📄 field.h
字号:
#ifndef __FIELD_H__
#define __FIELD_H__
// field.h: interface for the fields class.
//
#include "bpn.h"
#include "geometry.h"
#include "types.h"
#include "serverparam.h"
#include "clientparam.h"
#include "player.h"
const int CP_max_visible_players = SP_team_size + SP_team_size / 2;
class DirectionDanger{
public:
float dir_danger[CP_num_divisions];
Index<Player*, SP_team_size> Ghosts;
void Initialize();
float dir_conf[CP_num_divisions];
float DirConf(AngleDeg dir);
void Update_dirdanger(Time time);
float DirDanger(AngleDeg dir);
float DirDanger(AngleDeg dir, float delta);
};
class Field :
public DirectionDanger{
private:
double sensitivity_input[2];
double sensitivity_output;
public:
Field();
Rect shootablearea;
void Initialize();
BPN DF_SensitivityNet;
BPN OffSensitivityNet;
float GetDefensiveSensitivity(const Vector& pos);
float GetOffensiveSensitivity(const Vector& pos);
inline bool WithInShootableArea(const Vector& pos){return shootablearea.IsWithin(pos);}
/** Stat players in some field**/
int NumOpponentsInCone(AngleDeg direction, float distance, AngleDeg angle_range);
int NumOpponentsInCone(Vector pos, AngleDeg direction, float distance, AngleDeg angle_range);
int NumTeammatesInCone(AngleDeg direction, float distance, AngleDeg angle_range);
int NumTeammatesInCone(Vector pos, AngleDeg direction, float distance, AngleDeg angle_range);
int NumNoneGoalieTeammatesInCone(Vector end1, Vector end2, AngleDeg angle_range);
int NumNoneGoalieTeammatesInCone(Vector pos, AngleDeg direction, float distance, AngleDeg angle_range);
int NumOpponentsWithin(float distance);
int NumOpponentsWithin(float distance, Vector pos);
int NumOpponentsWithin(float Dist, AngleDeg angle, float ofDist, AngleDeg ofangle);
int NumTeammatesWithin(float distance);
int NumTeammatesWithin(float distance, Vector pos);
int NumTeammatesWithin(float Dist, AngleDeg angle, float ofDist, AngleDeg ofangle);
bool IsInvalidZone(const Vector& Pos);
float GetOffsideLine();
UNum GuessOffside();
bool IsOffside();
bool Maybeoffside();
float CalcThreat(UNum No);
float FitPosDegree(Vector CurrentPos, Vector TargetPos,float radius = 2.5);
float FitPosDegree(UNum No, Vector TargetPos, float radius = 2.5);
bool IsBlocked(UNum No);
bool IsBlocked(char side, UNum No);
UNum theirgoalie;
UNum mygoalie;
inline bool IsValidmygoalie(){return bool(0 < mygoalie && mygoalie<=SP_team_size);}
inline bool IsValidtheirgoalie(){return bool(0 < theirgoalie && theirgoalie<=SP_team_size);}
TimedDataArray<float, 5> offsideline;
TimedDataArray<UNum, 5> Behindestopp;
TimedDataArray<UNum, 5> Susoffsideopp;
void SetArounds();
void SetBallInf();
int num_my_visible_players;
int num_their_visible_players;
int num_visible_players;
inline int Num_MyVisiblePlayers(){ return num_my_visible_players; }
inline int Num_TheirVisiblePlayers(){ return num_their_visible_players; }
inline int Num_VisiblePlayers(){ return num_visible_players;}
UNum MyVisiblePlayers[CP_max_visible_players];
UNum TheirVisiblePlayers[CP_max_visible_players];
UNum MyPlayers_Close2Ball[CP_max_visible_players]; // sorted by the distance between players and the ball
UNum TheirPlayers_Close2Ball[CP_max_visible_players]; // sorted by the distance between players and the ball
UNum Players_Close2Ball[2 * CP_max_visible_players];
Player& MyPlayer_Close2Ball(int idx);
Player& TheirPlayer_Close2Ball(int idx);
Player& GetPlayer_Close2Ball(int idx);
UNum MyPlayers_Close2Me[CP_max_visible_players]; // sorted by the distance between players and me
UNum TheirPlayers_Close2Me[CP_max_visible_players]; // sorted by the distance between players and me
UNum Players_Close2Me[2 * CP_max_visible_players];
Player& MyPlayer_Close2Me(int idx);
Player& TheirPlayer_Close2Me(int idx);
Player& GetPlayer_Close2Me(int idx);
UNum MyPlayers_InFront[CP_max_visible_players];
UNum MyPlayers_InBehind[CP_max_visible_players];
UNum TheirPlayers_InFront[CP_max_visible_players];
UNum TheirPlayers_InBehind[CP_max_visible_players];
UNum TheirPlayers_Danger[CP_max_visible_players];
Player& MyPlayer_InFront(int idx);
Player& MyPlayer_InBehind(int idx);
Player& TheirPlayer_InBehind(int idx);
Player& TheirPlayer_InFront(int idx);
Player& MyPlayer_CtrlOfBall(int idx);
Player& TheirPlayer_CtrlOfBall(int idx);
int TheirPlayerNum_CtrlOfBall(int idx);
int MyPlayerNum_CtrlOfBall(int idx);
/********************************************************/
};
#endif //__FIELD_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -