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

📄 economytracker.h

📁 这是整套横扫千军3D版游戏的源码
💻 H
字号:
#ifndef ECONOMYTRACKER_H#define ECONOMYTRACKER_H#include "GlobalAI.h"struct EconomyUnitTracker;struct BuildingTracker {	CR_DECLARE_STRUCT(BuildingTracker);	int unitUnderConstruction;	int category;	float hpLastFrame;	float damage;								// track the damage to get the right ETA	float hpSomeTimeAgo;						// for nano-stalling support	float damageSomeTimeAgo;					// unused	int startedRealBuildingFrame;	int etaFrame;								// ETA frame made localy (with nanostall), based on last 16 frames only	float maxTotalBuildPower;					// without the builders that are still moving (real possible build power)	float assignedTotalBuildPower;				// with the builders that are still moving (possible build power in the future)	float energyUsage;							// current usage (with nanostall), last 16 frames	float metalUsage;							// current usage (with nanostall), last 16 frames		bool buildTask;								// buildTask, if it has one	int factory;								// factory, if it has one	EconomyUnitTracker* economyUnitTracker;		// pointer to the planed EconomyUnitTracker for this unit	void clear(void) {		unitUnderConstruction		= 0;		category					= 0;		hpLastFrame					= 0;		damage						= 0;		// track the damage to get the right ETA		hpSomeTimeAgo				= 0;		// for nano-stalling support		damageSomeTimeAgo			= 0;		// unused		startedRealBuildingFrame	= -1;		etaFrame					= -1;		// ETA frame made localy (with nanostall), based on last 16 frames		maxTotalBuildPower			= 0;		// without the builders that are still moving (real possible build power)		assignedTotalBuildPower		= 0;		// with the builders that are still moving (possible build power in the future)		energyUsage					= 0;		// current usage (with nanostall), last 16 frames		metalUsage					= 0;		// current usage (with nanostall), last 16 frames		buildTask					= false;	// buildTask, if it has one		factory						= 0;		// factory, if it has one		economyUnitTracker			= NULL;		// pointer to the planed EconomyUnitTracker for this unit	}};struct EconomyUnitTracker {	CR_DECLARE_STRUCT(EconomyUnitTracker);	void PostLoad();	int economyUnitId;							// Only economyUnitId and createFrame gives a correct ID	int createFrame;							// If the unit is under construction, this is the globally made ETA	BuildingTracker* buildingTracker;			// pointer to the BuildingTracker for this unit (if not done), MUST be updated before use	bool alive;	const UnitDef* unitDef;						// We will lose the unit id later on	int dieFrame;	int category;	float totalEnergyMake;						// total lifetime sum	float totalMetalMake;						// total lifetime sum	float totalEnergyUsage;						// total lifetime sum	float totalMetalUsage;						// total lifetime sum	float lastUpdateEnergyMake;					// last 16 frame sum	float lastUpdateMetalMake;					// last 16 frame sum	float lastUpdateEnergyUsage;				// last 16 frame sum	float lastUpdateMetalUsage;					// last 16 frame sum	bool dynamicChangingUsage;					// for windmills and units with guns	bool nonEconomicUnit;						// for units that is to be ignored by the economy planner (?)	float estimateEnergyChangeFromDefWhileOn;	// sum change from unitDef*	float estimateMetalChangeFromDefWhileOn;	// sum change from unitDef*	float estimateEnergyChangeFromDefWhileOff;	// sum change from unitDef*	float estimateMetalChangeFromDefWhileOff;	// sum change from unitDef*	void clear(void) {		economyUnitId = 0;		createFrame = 0;		// BuildingTracker* buildingTracker;		alive = false;		unitDef = 0;		dieFrame = 0;		category = 0;		totalEnergyMake = 0;		totalMetalMake = 0;		totalEnergyUsage = 0;		totalMetalUsage = 0;		lastUpdateEnergyMake = 0;		lastUpdateMetalMake = 0;		lastUpdateEnergyUsage = 0;		lastUpdateMetalUsage = 0;		dynamicChangingUsage = false;		estimateEnergyChangeFromDefWhileOn = 0;		estimateMetalChangeFromDefWhileOn = 0;		estimateEnergyChangeFromDefWhileOff = 0;		estimateMetalChangeFromDefWhileOff = 0;	}	};/*Intended to contain units under construction only.High speed loop version (late design)*/struct UnitStateRequirement {	/*	If this is the "current" frame, then its what this unit will do with the economy the next 16 frames.	energy/metal usage is either from builders, or from the units own doing.	*/	int frame;	bool underConstruction;	bool nanoStallPoint;	bool constructionCompletedPoint;	bool constructionStartPoint;	bool constructionSpeedChangePoint;	/*	If this is true, and its not controllable, no more UnitStateRequirement's will be made for this unit	If controllableUsage is true, then it will be moved to a list that match its nature.	*/	bool unitEntersService; 	float energyChange;	float metalChange;		// This is for units that are completed only	// and then only if they are controllable	bool controllableUsage;		// We can change the economy effects of the unit	bool unitStateOrder;		// What the units order are intended to be. Metalmakers are off if energy is lower than some value.	float energyChangeOff;	float metalChangeOff;};struct controllableUnitEconomyForcast {};struct TotalEconomyState {	int frame;				// frame this state represents	int madeInFrame;		// frame this state was made	float energyStored;	float metalStored;	float energyMake;	float metalMake;	float energyUsage;		// from construction only	float metalUsage;		// from construction only	float energyStorageSize;	float metalStorageSize;};/* * This holds information about when a builder might * manage to get to its build site and start working */struct BuilderETAdata {	int builderID;	int estimateRealStartFrame;						// what frame this builder will start working.	int estimateFramesForNanoBuildActivation;		// constant or based on the last startup time	int estimateETAforMoveingToBuildSite;			// ETA, updated every 16 frames or so (0 = its there)	float distanceToSiteBeforeItCanStartBuilding;	// def->buildDistance or something.};/*This is a planed building. Its either a metal or energy making building (or unit).The same as a TaskPlan, with more data (in order to avoid changing the TaskPlan struct)*/struct EconomyBuildingPlan {};class CEconomyTracker {	public:		CR_DECLARE(CEconomyTracker);		CEconomyTracker(AIClasses* ai);		~CEconomyTracker();		void frameUpdate(int);		void UnitCreated(int unit);		void UnitFinished(int unit);		void UnitDestroyed(int unit);		void UnitDamaged(int unit, float damage);	private:		vector<list<BuildingTracker> > allTheBuildingTrackers;		list<EconomyUnitTracker*> deadEconomyUnitTrackers;		list<EconomyUnitTracker*> newEconomyUnitTrackers;		list<EconomyUnitTracker*> activeEconomyUnitTrackers;		list<EconomyUnitTracker*> underConstructionEconomyUnitTrackers;		AIClasses* ai;		void updateUnitUnderConstruction(BuildingTracker* bt);		void SetUnitDefDataInTracker(EconomyUnitTracker* economyUnitTracker);		TotalEconomyState makePrediction(int targetFrame);		bool trackerOff;		float oldEnergy;		float oldMetal;		float constructionEnergy;		float constructionMetal;		float constructionEnergySum;		float constructionMetalSum;};#endif

⌨️ 快捷键说明

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