-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathObjectTool.h
74 lines (65 loc) · 1.74 KB
/
ObjectTool.h
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
#pragma once
#include "d3dUtil.h"
#include <boost\function.hpp>
#include <boost\bind.hpp>
// Forward declarations.
#pragma region Forward declarations.
namespace GLib {
class Graphics;
class Light;
class Input;
class ModelImporter;
class StaticObject;
class Object3D;
}
class BaseInspector;
#pragma endregion
enum MovingAxis
{
X_AXIS,
Y_AXIS,
Z_AXIS,
XZ_AXIS,
NONE
};
//! The tool that move objects around.
class ObjectTool
{
public:
ObjectTool(GLib::ModelImporter* pImporter);
~ObjectTool();
void Update(GLib::Input* pInput, float dt);
void Draw(GLib::Graphics* pGraphics);
void SetObject(GLib::Object3D* pObject);
void SetInspector(BaseInspector* pInspector);
bool IsMovingObject();
// These are only supposed to be called by an BaseInspector type.
void SetPosition(XMFLOAT3 position);
// Callback hookups.
template <class T>
void AddOnPositionChange(void(T::*_callback)(XMFLOAT3), T* _object) {
onPositionChange = boost::bind(_callback, _object, _1);
}
template <class T>
void AddOnScaleChange(void(T::*_callback)(XMFLOAT3), T* _object) {
onScaleChange = boost::bind(_callback, _object, _1);
}
private:
XMFLOAT3 MoveAxisX(XMFLOAT3 pos, XMFLOAT3 dir);
XMFLOAT3 MoveAxisY(XMFLOAT3 pos, XMFLOAT3 dir);
XMFLOAT3 MoveAxisZ(XMFLOAT3 pos, XMFLOAT3 dir);
void UpdatePosition(XMFLOAT3 delta);
void InitStartingPosition(GLib::Input* pInput, XMFLOAT3& dir, XMFLOAT3& cameraPos, float& dist);
void ScaleAxisArrows();
// Callbacks.
boost::function<void(XMFLOAT3)> onPositionChange;
boost::function<void(XMFLOAT3)> onScaleChange;
private:
GLib::StaticObject* mAxisX;
GLib::StaticObject* mAxisY;
GLib::StaticObject* mAxisZ;
GLib::Object3D* mMovingObject;
MovingAxis mMovingAxis;
XMFLOAT3 mLastPlanePos;
BaseInspector*mInspector;
};