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