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

📄 aaibrain.h

📁 这是整套横扫千军3D版游戏的源码
💻 H
字号:
// -------------------------------------------------------------------------
// AAI
//
// A skirmish AI for the TA Spring engine.
// Copyright Alexander Seizinger
// 
// Released under GPL license: see LICENSE.html for more information.
// -------------------------------------------------------------------------


#pragma once

#include "aidef.h"
#include "AAISector.h"
#include "AAIGroup.h"

class AAI;
class AAIBuildTable;
class AAIExecute;
class AIIMap;

class AAIBrain
{
public:
	AAIBrain(AAI *ai);
	~AAIBrain(void);
	
	// adds sector to the base
	void AddSector(AAISector *sector);

	// for internal use
	bool SectorInList(list<AAISector*> mylist, AAISector *sector);
	list<AAISector*> GetSectors();

	void RemoveProducer(list<ProductionRequest> builders, int builder_id);   

	// returns dest attack sector
	AAISector* GetAttackDest(bool land, bool water, AttackType type);

	// returns a sector to proceed with attack
	AAISector* GetNextAttackDest(AAISector *current_sector, bool land, bool water);

	// checks for new neighbours (and removes old ones if necessary)
	void UpdateNeighbouringSectors(); 

	// recalculates the center of the base
	void UpdateBaseCenter();

	// updates max units spotted
	void UpdateMaxCombatUnitsSpotted(vector<float>& units_spotted);

	void UpdateAttackedByValues();
	void AttackedBy(int combat_category_id);

	// recalculates def capabilities of all units
	void UpdateDefenceCapabilities();

	// adds/subtracts def. cap. for a single unit
	void AddDefenceCapabilities(int def_id, UnitCategory category);
	void SubtractDefenceCapabilities(int def_id, UnitCategory category);

	// returns true if sufficient ressources to build unit are availbale
	bool RessourcesForConstr(int unit, int workertime = 175);

	// returns true if enough metal for constr.
	bool MetalForConstr(int unit, int workertime = 175);

	// returns true if enough energy for constr.
	bool EnergyForConstr(int unit, int wokertime = 175);

	// returns pos where scout schould be sent to
	AAISector* GetNewScoutDest(int scout);

	// returns true if sector is considered to be safe
	bool IsSafeSector(AAISector *sector);

	// adds new sectors to base
	bool ExpandBase(SectorType sectorType);

	// returns how much ressources can be spent for unit construction atm 
	float Affordable();

	void DefendCommander(int attacker);

	void BuildUnits();

	void BuildUnitOfCategory(UnitCategory category, float cost, float ground_eff, float air_eff, float hover_eff, float sea_eff, float submarine_eff, float stat_eff, bool urgent);
	
	// returns game period
	int GetGamePeriod();

	//  0 = sectors the ai uses to build its base, 1 = direct neighbours etc.
	vector<list<AAISector*> > sectors; 
	int max_distance;

	float3 base_center;

	// are there any free metal spots within the base
	bool freeBaseSpots;		
	bool expandable; 

	// holding max number of units of a category spotted at the same time
	vector<float> max_units_spotted;
	vector<float> attacked_by;
	vector<float> defence_power_vs;

	// pos where com spawned
	float3 start_pos;

	float best_power_plant_output;
		
	AAIExecute *execute;

private:
	AAI *ai;
	AAIMap *map;
	IAICallback *cb;
	AAIBuildTable *bt;
};

⌨️ 快捷键说明

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