1 /* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
2 
3 #ifndef UNIT_TRACKER_H
4 #define UNIT_TRACKER_H
5 
6 #include <set>
7 #include "System/float3.h"
8 
9 class CUnit;
10 
11 class CUnitTracker
12 {
13 	public:
14 		CUnitTracker();
15 		~CUnitTracker();
16 
17 		void Track();
18 		void Disable();
Enabled()19 		bool Enabled() const { return enabled; }
20 
21 		void SetCam();
22 
23 		int  GetMode() const;
24 		void IncMode();
25 		/// @param trackMode see enum CUnitTracker::TrackMode
26 		void SetMode(int trackMode);
27 		enum TrackMode {
28 			TrackSingle = 0,
29 			TrackAverage,
30 			TrackExtents,
31 			TrackModeCount
32 		};
33 
34 	protected:
35 		void NextUnit();
36 		void MakeTrackGroup();
37 		void CleanTrackGroup();
38 		CUnit* GetTrackUnit();
39 		float3 CalcAveragePos() const;
40 		float3 CalcExtentsPos() const;
41 
42 	protected:
43 		bool enabled;
44 		bool doRoll;
45 		bool firstUpdate;
46 
47 		int trackMode;
48 		int trackUnit;
49 		std::set<int> trackGroup;
50 
51 		int timeOut;
52 		int lastFollowUnit;
53 		float lastUpdateTime;
54 
55 		float3 trackPos;
56 		float3 trackDir;
57 
58 		float3 oldUp[32];
59 		float3 oldCamDir;
60 		float3 oldCamPos;
61 
62 		static const char* modeNames[TrackModeCount];
63 };
64 
65 extern CUnitTracker unitTracker;
66 
67 #endif /* UNIT_TRACKER_H */
68