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
|
#ifndef __CAMERA_CONTROLLER_H__
#define __CAMERA_CONTROLLER_H__
#include <string>
#include <vector>
#include <map>
#include "float3.h"
class CCameraController
{
public:
typedef std::map<std::string, float> StateMap;
public:
CCameraController();
virtual ~CCameraController(void);
virtual const std::string GetName() const = 0;
virtual void KeyMove(float3 move) = 0;
virtual void MousePress(int x, int y, int button) = 0;
virtual void MouseRelease(int x, int y, int button) = 0;
virtual void MouseMove(float3 move) = 0;
virtual void ScreenEdgeMove(float3 move) = 0;
virtual void MouseWheelMove(float move) = 0;
virtual void Update() {}
virtual float3 GetPos() = 0;
virtual float3 GetDir() = 0;
/// In degree!
float GetFOV() const { return fov; };
virtual void SetPos(const float3& newPos) { pos = newPos; };
virtual bool DisableTrackingByKey() { return true; }
// return the position to send to new controllers SetPos
virtual float3 SwitchFrom() const = 0;
virtual void SwitchTo(bool showText = true) = 0;
virtual void GetState(StateMap& sm) const = 0;
virtual bool SetState(const StateMap& sm) = 0;
virtual void SetTrackingInfo(const float3& pos, float radius) { SetPos(pos); }
/**
* Whether the camera's distance to the ground or to the units
* should be used to determine whether to show them as icons or normal.
* This is called every frame, so it can be dynamically,
* eg depend on the current position/angle.
*/
virtual bool GetUseDistToGroundForIcons();
/// should this mode appear when we toggle the camera controller?
bool enabled;
protected:
bool SetStateBool(const StateMap& sm, const std::string& name, bool& var);
bool SetStateFloat(const StateMap& sm, const std::string& name, float& var);
protected:
float fov;
float mouseScale;
float scrollSpeed;
float3 pos;
/**
* Where to switch from Camera-Unit-distance to Camera-Ground-distance
* for deciding whether to draw 3D view or icon of units.
* * 1.0 = 0 degree = overview
* * 0.0 = 90 degree = first person
*/
float switchVal;
};
#endif // __CAMERA_CONTROLLER_H__
|