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

📄 field.h

📁 2002年
💻 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 + -