File: CCoverageHandler.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 (66 lines) | stat: -rw-r--r-- 1,905 bytes parent folder | download | duplicates (4)
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
#ifndef E323_CCOVERAGEHANDLER_H
#define E323_CCOVERAGEHANDLER_H

#include <string>
#include <map>

#include "CCoverageCell.h"

class ARegistrar;
class CUnit;

class CCoverageHandler: ARegistrar {

public:
	CCoverageHandler(AIClasses* _ai): ai(_ai) { visualizationEnabled = false; }
	~CCoverageHandler() {}

	/* Register unit */
	void addUnit(CUnit* unit);
	/* Get closest build site */
	float3 getNextClosestBuildSite(const CUnit* builder, UnitType* toBuild);
	/* Get the most valuable build site */
	float3 getNextImportantBuildSite(UnitType* toBuild);

	float3 getClosestDefendedPos(float3& pos) const;
	/* Not implemented */
	float3 getBestDefendedPos(float safetyLevel = 0.0f) const;
	/* Update call */
	void update();
	/* Overloaded */
	void remove(ARegistrar& obj);

	float getCoreRange(CCoverageCell::NType type, UnitType* ut);
	/* Get number of cores in a layer */
	int getLayerSize(CCoverageCell::NType layer);
	/* Get coverage type which can be based upon units of this type */
	CCoverageCell::NType getCoreType(const UnitType* ut) const;

	bool isUnitCovered(int uid, CCoverageCell::NType layer);

	ARegistrar::NType regtype() const { return ARegistrar::COVERAGE_HANDLER; }

	bool toggleVisualization();

protected:
	AIClasses* ai;

private:
	bool visualizationEnabled;
	CCoverageCell::NType visualizationLayer;
	std::map<CCoverageCell::NType, std::list<CCoverageCell*> > layers;
	std::map<CCoverageCell::NType, std::map<int, CCoverageCell*> > unitsCoveredBy;
	std::map<int, CCoverageCell*> coreUnits;
	std::map<int, int> unitsCoveredCount;

	/* Update position using k-means clusterization method */
	void updateBestBuildSite(UnitType* toBuild, float3& pos);
	/* Get list of units worth to cover by current layer */
	std::map<int, CUnit*>* getScanList(CCoverageCell::NType layer) const;

	void addUncoveredUnits(CCoverageCell* c);

	void visualizeLayer(CCoverageCell::NType layer);
};

#endif