File: AAIConfig.h

package info (click to toggle)
spring 104.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 47,512 kB
  • sloc: cpp: 391,093; ansic: 79,943; python: 12,356; java: 12,201; awk: 5,889; sh: 1,826; xml: 655; makefile: 486; perl: 405; php: 211; objc: 194; sed: 2
file content (176 lines) | stat: -rw-r--r-- 4,415 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
// -------------------------------------------------------------------------
// AAI
//
// A skirmish AI for the Spring engine.
// Copyright Alexander Seizinger
//
// Released under GPL license: see LICENSE.html for more information.
// -------------------------------------------------------------------------

#ifndef AAI_CONFIG_H
#define AAI_CONFIG_H

#include "LegacyCpp/IAICallback.h"

#include <stdio.h>
#include <list>
#include <vector>

using std::string;
using std::list;
using std::vector;

class AAI;
namespace springLegacyAI {
	struct UnitDef;
}

using namespace springLegacyAI;

struct CostMultiplier
{
	int id;
	float multiplier;
};

/// Converts a string to one that can be used in a file name (eg. "Abc.123 $%^*" -> "Abc.123_____")
std::string MakeFileSystemCompatible(const std::string& str);

class AAIConfig
{
public:
	AAIConfig(void);

	void LoadConfig(AAI *ai);

	bool initialized;

	// constants (will be loaded in aaiconfig)

	// mod specific
	float SECTOR_SIZE;
	int MIN_ENERGY;  // min energy make value to be considered beeing a power plant
	int MAX_UNITS;
	int MAX_SCOUTS;
	int MAX_XROW;
	int MAX_YROW;
	int X_SPACE;
	int Y_SPACE;
	int MAX_GROUP_SIZE;
	int MAX_AIR_GROUP_SIZE;
	int MAX_SUBMARINE_GROUP_SIZE;
	int MAX_NAVAL_GROUP_SIZE;
	int MAX_ANTI_AIR_GROUP_SIZE;
	int MAX_ARTY_GROUP_SIZE;
	float MIN_EFFICIENCY;

	int MAX_BUILDERS_PER_TYPE; // max builders of same unit type
	int MAX_FACTORIES_PER_TYPE;
	int MAX_BUILDQUE_SIZE;
	int MAX_ASSISTANTS;
	int MIN_ASSISTANCE_BUILDTIME;
	int MAX_BASE_SIZE;
	float SCOUT_SPEED;
	float GROUND_ARTY_RANGE;
	float SEA_ARTY_RANGE;
	float HOVER_ARTY_RANGE;
	float STATIONARY_ARTY_RANGE;
	int AIRCRAFT_RATE;
	int HIGH_RANGE_UNITS_RATE;
	int FAST_UNITS_RATE;
	int SIDES;
	int MIN_ENERGY_STORAGE;
	int MIN_METAL_STORAGE;
	int MAX_METAL_COST;
	int MAX_AIR_TARGETS;
	std::vector<std::string> START_UNITS;
	std::vector<std::string> SIDE_NAMES;

	list<int> SCOUTS;
	list<int> ATTACKERS;
	list<int> TRANSPORTERS;
	list<int> METAL_MAKERS;
	list<int> DONT_BUILD;

	//float KBOT_MAX_SLOPE;
	//float VEHICLE_MAX_SLOPE;
	//float HOVER_MAX_SLOPE;
	float NON_AMPHIB_MAX_WATERDEPTH;
	float METAL_ENERGY_RATIO;
	int MAX_DEFENCES;
	int MAX_STAT_ARTY;
	int MAX_AIR_BASE;
	bool AIR_ONLY_MOD;
	int MAX_STORAGE;
	int MAX_MEX_DISTANCE;
	int MAX_MEX_DEFENCE_DISTANCE;
	float MIN_METAL_MAKER_ENERGY;
	int MIN_FACTORIES_FOR_DEFENCES;
	int MIN_FACTORIES_FOR_STORAGE;
	float MIN_AIR_SUPPORT_EFFICIENCY;
	int UNIT_SPEED_SUBGROUPS;
	float MAX_COST_LIGHT_ASSAULT;
	float MAX_COST_MEDIUM_ASSAULT;
	float MAX_COST_HEAVY_ASSAULT;
	int MAX_ATTACKS;

	vector<CostMultiplier> cost_multipliers;

	// combat behaviour
	float FALLBACK_DIST_RATIO;	// units will try to fall back if enemy is closer than ratio of weapons range of the unit
	float MIN_FALLBACK_RANGE;	// units with lower weapons' range will not fall back
	float MAX_FALLBACK_RANGE;	// maximum distance units will try to keep to their enemies
	float MIN_FALLBACK_TURNRATE; // units with lower turnrate will not try to fall back

	// internal
	float CLIFF_SLOPE;  // cells with greater slope will be considered to be cliffs
	int MAX_SECTOR_IMPORTANCE;

	// game specific
	int SCOUT_UPDATE_FREQUENCY;
	float SCOUTING_MEMORY_FACTOR;
	float LEARN_SPEED;
	int LEARN_RATE;
	int GAME_PERIODS;

	/**
	 * open a file in springs data directory
	 * @param filename relative path of the file in the spring data dir
	 * @param mode mode file to open, see manpage of fopen
	 */
	std::string GetFileName(AAI* ai, const std::string& filename, const std::string& prefix = "", const std::string& suffix = "", bool write = false) const;
	std::string getUniqueName(AAI* ai, bool game, bool gamehash, bool map, bool maphash) const;

private:
	~AAIConfig(void);

	const UnitDef* GetUnitDef(AAI* ai, const std::string& name);
	int GetInt(AAI* ai, FILE* file);
	float GetFloat(AAI* ai, FILE* file);
	std::string GetString(AAI* ai, FILE* file);

	int CONSTRUCTION_TIMEOUT;
	float WATER_MAP_RATIO;
	float LAND_WATER_MAP_RATIO;
	float LIGHT_ASSAULT_RATIO;
	int MIN_FACTORIES_FOR_RADAR_JAMMER;
//	int MAX_MEX_DEFENCE_COST;
	int MAX_METAL_MAKERS;
	float MIN_SECTOR_THREAT;
//	float SHIP_MIN_WATERDEPTH;
	int MIN_AIR_ATTACK_COST;
	int MAX_BUILDERS;
	int MIN_ASSISTANCE_BUILDSPEED;
	int AIR_DEFENCE;
	float MEDIUM_ASSAULT_RATIO;
	float HEAVY_ASSAULT_RATIO;
	float SUPER_HEAVY_ASSAULT_RATIO;
	int MIN_SUBMARINE_WATERLINE;

};

extern AAIConfig *cfg;


#endif