File: AirBaseHandler.h

package info (click to toggle)
spring 0.81.2.1%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,496 kB
  • ctags: 37,096
  • sloc: cpp: 238,659; ansic: 13,784; java: 12,175; awk: 3,428; python: 1,159; xml: 738; perl: 405; sh: 297; makefile: 267; pascal: 228; objc: 192
file content (77 lines) | stat: -rw-r--r-- 1,627 bytes parent folder | download
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
#ifndef AIRBASEHANDLER_H
#define AIRBASEHANDLER_H

#include <list>
#include <set>
#include <boost/noncopyable.hpp>

#include "System/Object.h"
#include "System/float3.h"

class CUnit;

class CAirBaseHandler: public boost::noncopyable
{
	CR_DECLARE(CAirBaseHandler);
	CR_DECLARE_SUB(LandingPad);
	CR_DECLARE_SUB(AirBase);

private:
	struct AirBase;

public:

	class LandingPad: public CObject,  public boost::noncopyable {
		CR_DECLARE(LandingPad);

	public:
		LandingPad(CUnit* u, int p, AirBase* b):
			unit(u), piece(p), base(b) {}

		CUnit* GetUnit() const { return unit; }
		int GetPiece() const { return piece; }
		AirBase* GetBase() const { return base; }

	private:
		CUnit* unit;
		int piece;
		AirBase* base;
	};

private:

	struct AirBase: public boost::noncopyable {
		CR_DECLARE_STRUCT(AirBase);
		AirBase(CUnit* u) : unit(u) {}
		CUnit* unit;
		std::list<LandingPad*> freePads;
		std::list<LandingPad*> pads;
	};

public:
	CAirBaseHandler(void);
	~CAirBaseHandler(void);

	void RegisterAirBase(CUnit* base);
	void DeregisterAirBase(CUnit* base);

	LandingPad* FindAirBase(CUnit* unit, float minPower);
	void LeaveLandingPad(LandingPad* pad);

	float3 FindClosestAirBasePos(CUnit* unit, float minPower);

private:
	typedef std::list<AirBase*> AirBaseLst;
	typedef std::list<AirBase*>::iterator AirBaseLstIt;
	typedef std::list<LandingPad*> PadLst;
	typedef std::list<LandingPad*>::iterator PadLstIt;

	std::vector< AirBaseLst > freeBases;
	std::vector< AirBaseLst > bases;

	// IDs of units registered as airbases
	std::set<int> airBaseIDs;
};

extern CAirBaseHandler* airBaseHandler;
#endif /* AIRBASEHANDLER_H */