DIE Engine
Loading...
Searching...
No Matches
editor.h
Go to the documentation of this file.
1
11
12#ifndef EDITOR_H
13#define EDITOR_H
14
15#include "env.h"
16#include "map.h"
17#include "renderer.h"
18
19#include <QVector2D>
20#include <QVector3D>
21#include <QList>
22
23#include <functional>
24#include <stdint.h>
25
41
48
49constexpr int EDIT_UNSELECTED = -1;
50
51constexpr int EDITOR_NODE_RADIUS = 8;
52constexpr int EDITOR_WALL_RADIUS = 16;
53constexpr int EDITOR_SPRITE_RADIUS = 12;
54
55/*****************************************************************************/
56class Editor
57{
58public:
59 Editor();
60 void init();
61 void terminate();
62
64 void snapCoords(QVector2D & pos);
65
67
69
73
85
86 QList<uint16_t> copyNodeIDs;
87 QList<Node> copyNodes;
88 QList<Wall> copyWalls;
89
91 float gridSize;
92 float zoom;
93 float viewMinY;
94 float viewMaxY;
95
96 bool gravity;
99
100 bool inView(const QVector3D & pos) const {
101 return pos.y() >= viewMinY && pos.y() <= viewMaxY;
102 }
103
104 void selectAll();
105 void deselect();
106 void clearSelection();
107 void cut();
108 void copy();
109
111 void paste(VIEW_MODES mode, QVector2D pos);
112 void align();
113
114// Per-object operations.
115// The FindInCircle searches start right after the current selection,
116// so repeated clicks cycle through overlapping objects.
117 void nodeSelect(int nId);
118 bool nodeAdd(QVector3D pos, int & nId);
119 void nodeDelete(int nId);
120 void nodeSelectAll();
121 void nodeDeselectAll();
122 bool nodeFindInCircle(VIEW_MODES mode, QVector2D pos, int & nId);
123 bool nodeFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & nId);
124
125 void wallSelect(int wId);
126 bool wallAdd(int n1, int n2, uint16_t texId, int & wId);
127 void wallDelete(int wId);
128 void wallSelectAll();
129 void wallDeselectAll();
130 bool wallFindInCircle(VIEW_MODES mode, QVector2D pos, int & wId);
131 bool wallFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & wId);
132
133 void submapSelect(int mId);
134 bool submapAdd(int node, int & mId);
135 void submapDelete(int mId);
136 void submapSelectAll();
137 void submapDeselectAll();
138 bool submapFindInCircle(VIEW_MODES mode, QVector2D pos, int & mId);
139 bool submapFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & mId);
140
141 void doorSelect(int dId);
142 bool doorAdd(int node, uint16_t texId, int & dId);
143 void doorDelete(int dId);
144 void doorSelectAll();
145 void doorDeselectAll();
146 bool doorFindInCircle(VIEW_MODES mode, QVector2D pos, int & dId);
147 bool doorFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & dId);
148
149 void liftSelect(int eId);
150 bool liftAdd(int node, uint16_t texId, int & eId);
151 void liftDelete(int eId);
152 void liftSelectAll();
153 void liftDeselectAll();
154 bool liftFindInCircle(VIEW_MODES mode, QVector2D pos, int & eId);
155 bool liftFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & eId);
156
157 void spriteSelect(int sId);
158 bool spriteAdd(int node, uint16_t texId, int & sId);
159 void spriteDelete(int sId);
160 void spriteSelectAll();
161 void spriteDeselectAll();
162 bool spriteFindInCircle(VIEW_MODES mode, QVector2D pos, int & bId);
163 bool spriteFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & bId);
164
165 void staircaseSelect(int hId);
166 bool staircaseAdd(int node, uint16_t texId, int & hId);
167 void staircaseDelete(int hId);
168 void staircaseSelectAll();
170 bool staircaseFindInCircle(VIEW_MODES mode, QVector2D pos, int & hId);
171 bool staircaseFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & hId);
172
173 void lightSelect(int lId);
174 bool lightAdd(int node, int & lId);
175 void lightDelete(int lId);
176 void lightSelectAll();
177 void lightDeselectAll();
178 bool lightFindInCircle(VIEW_MODES mode, QVector2D pos, int & lId);
179 bool lightFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & lId);
180
181 void speakerSelect(int aId);
182 bool speakerAdd(int node, int & aId);
183 void speakerDelete(int aId);
184 void speakerSelectAll();
185 void speakerDeselectAll();
186 bool speakerFindInCircle(VIEW_MODES mode, QVector2D pos, int & aId);
187 bool speakerFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int & aId);
188
189 void pathSelect(int pId);
190 bool pathAdd(int & pId);
191 void pathDelete(int pId);
192 void pathSelectAll();
193 void pathDeselectAll();
194
196 static QVector2D to2D(VIEW_MODES mode, const QVector3D & pos);
197
199 static QVector3D to3D(VIEW_MODES mode, const QVector2D & pos, const QVector3D & ref);
200
201private:
202 int findCopiedNodeID(uint16_t id);
203 float effectiveGridSize() const;
204
205 template <typename T, typename Container>
206 bool findInCircle(
207 VIEW_MODES mode,
208 const QVector2D & pos,
209 int & outId,
210 const Container & items,
211 std::function<int(const T&)> getNodeId,
212 int selectedIndex);
213
214 template <typename T, typename Container>
215 bool findInRect(
216 VIEW_MODES mode,
217 const QVector2D & c1,
218 const QVector2D & c2,
219 int & outId,
220 const Container & items,
221 std::function<int(const T&)> getNodeId);
222};
223
224extern Editor editor;
225
226#endif // EDITOR_H
Definition editor.h:57
int selectedStaircase
Definition editor.h:80
bool spriteFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &bId)
Definition editor.cpp:748
void pathSelect(int pId)
Definition editor.cpp:946
void staircaseSelect(int hId)
Definition editor.cpp:756
void nodeDeselectAll()
Definition editor.cpp:330
bool speakerFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &aId)
Definition editor.cpp:938
bool liftAdd(int node, uint16_t texId, int &eId)
Definition editor.cpp:633
bool nodeFindInCircle(VIEW_MODES mode, QVector2D pos, int &nId)
Definition editor.cpp:336
void lightSelectAll()
Definition editor.cpp:855
QList< uint16_t > copyNodeIDs
Definition editor.h:86
void copy()
Definition editor.cpp:139
static QVector3D to3D(VIEW_MODES mode, const QVector2D &pos, const QVector3D &ref)
Lift a 2D editor view position back to world space (ref fills the missing axis).
Definition editor.cpp:1009
void submapDelete(int mId)
Definition editor.cpp:515
int selectedPath
Definition editor.h:83
bool lightFindInCircle(VIEW_MODES mode, QVector2D pos, int &lId)
Definition editor.cpp:867
void pathDelete(int pId)
Definition editor.cpp:964
bool submapAdd(int node, int &mId)
Definition editor.cpp:503
void pathSelectAll()
Definition editor.cpp:970
bool wallFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &wId)
Definition editor.cpp:467
void liftSelectAll()
Definition editor.cpp:668
void nodeSelect(int nId)
Definition editor.cpp:203
void nodeSelectAll()
Definition editor.cpp:324
Map rootMap
Definition editor.h:71
void speakerSelect(int aId)
Definition editor.cpp:883
void wallDelete(int wId)
Definition editor.cpp:389
void spriteDelete(int sId)
Definition editor.cpp:722
bool lightFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &lId)
Definition editor.cpp:875
void pathDeselectAll()
Definition editor.cpp:976
int selectedLift
Definition editor.h:78
bool submapFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &mId)
Definition editor.cpp:545
void wallSelect(int wId)
Definition editor.cpp:352
QList< Node > copyNodes
Definition editor.h:87
bool staircaseFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &hId)
Definition editor.cpp:817
bool liftFindInCircle(VIEW_MODES mode, QVector2D pos, int &eId)
Definition editor.cpp:680
static QVector2D to2D(VIEW_MODES mode, const QVector3D &pos)
Project a world position onto a 2D editor view.
Definition editor.cpp:1001
void align()
Definition editor.cpp:197
Viewpoint viewPoint
Definition editor.h:68
int selectedLight
Definition editor.h:81
int selectedSubmap
Definition editor.h:76
void doorSelect(int dId)
Definition editor.cpp:553
void speakerDeselectAll()
Definition editor.cpp:924
bool wallFindInCircle(VIEW_MODES mode, QVector2D pos, int &wId)
Definition editor.cpp:407
float zoom
Definition editor.h:92
bool submapFindInCircle(VIEW_MODES mode, QVector2D pos, int &mId)
Definition editor.cpp:537
void terminate()
Definition editor.cpp:66
Map * editedMap
Definition editor.h:72
int selectedDoor
Definition editor.h:77
void spriteSelectAll()
Definition editor.cpp:728
bool staircaseFindInCircle(VIEW_MODES mode, QVector2D pos, int &hId)
Definition editor.cpp:809
bool pathAdd(int &pId)
Definition editor.cpp:954
void doorSelectAll()
Definition editor.cpp:597
void staircaseDelete(int hId)
Definition editor.cpp:791
void lightDeselectAll()
Definition editor.cpp:861
float viewMaxY
Definition editor.h:94
bool speakerFindInCircle(VIEW_MODES mode, QVector2D pos, int &aId)
Definition editor.cpp:930
void init()
Definition editor.cpp:30
void submapSelect(int mId)
Definition editor.cpp:495
void staircaseDeselectAll()
Definition editor.cpp:803
bool liftFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &eId)
Definition editor.cpp:688
int selectedSpeaker
Definition editor.h:82
void speakerSelectAll()
Definition editor.cpp:918
uint16_t selectedTextureID
Definition editor.h:84
void lightSelect(int lId)
Definition editor.cpp:825
void selectAll()
Definition editor.cpp:76
void submapDeselectAll()
Definition editor.cpp:531
bool wallAdd(int n1, int n2, uint16_t texId, int &wId)
Definition editor.cpp:360
void wallSelectAll()
Definition editor.cpp:395
bool doorAdd(int node, uint16_t texId, int &dId)
Definition editor.cpp:561
Env env
Definition editor.h:70
void snapCoords(QVector2D &pos)
Snap a 2D position to the active grid.
Definition editor.cpp:990
bool nodeFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &nId)
Definition editor.cpp:344
void nodeDelete(int nId)
Definition editor.cpp:224
void liftDeselectAll()
Definition editor.cpp:674
float viewMinY
Definition editor.h:93
bool speakerAdd(int node, int &aId)
Definition editor.cpp:891
void staircaseSelectAll()
Definition editor.cpp:797
bool doorFindInRect(VIEW_MODES mode, QVector2D c1, QVector2D c2, int &dId)
Definition editor.cpp:617
void speakerDelete(int aId)
Definition editor.cpp:906
void doorDelete(int dId)
Definition editor.cpp:591
bool wallSelector
Definition editor.h:98
void lightDelete(int lId)
Definition editor.cpp:849
bool inView(const QVector3D &pos) const
Definition editor.h:100
bool lightAdd(int node, int &lId)
Definition editor.cpp:833
void liftSelect(int eId)
Definition editor.cpp:625
float gridSize
Definition editor.h:91
QList< Wall > copyWalls
Definition editor.h:88
bool staircaseAdd(int node, uint16_t texId, int &hId)
Definition editor.cpp:764
void doorDeselectAll()
Definition editor.cpp:603
int selectedWall
Definition editor.h:75
bool nodeAdd(QVector3D pos, int &nId)
Definition editor.cpp:212
void liftDelete(int eId)
Definition editor.cpp:662
bool spriteFindInCircle(VIEW_MODES mode, QVector2D pos, int &bId)
Definition editor.cpp:740
void submapSelectAll()
Definition editor.cpp:525
bool spriteAdd(int node, uint16_t texId, int &sId)
Definition editor.cpp:704
int selectedSprite
Definition editor.h:79
void clearSelection()
Definition editor.cpp:109
bool gravity
Definition editor.h:96
Editor()
Definition editor.cpp:24
bool gridSnap
Definition editor.h:90
void spriteDeselectAll()
Definition editor.cpp:734
void deselect()
Definition editor.cpp:95
void spriteSelect(int sId)
Definition editor.cpp:696
void cut()
Definition editor.cpp:134
EDIT_MODES editMode
Definition editor.h:66
int selectedNode
Definition editor.h:74
void wallDeselectAll()
Definition editor.cpp:401
bool collisions
Definition editor.h:97
bool doorFindInCircle(VIEW_MODES mode, QVector2D pos, int &dId)
Definition editor.cpp:609
void paste(VIEW_MODES mode, QVector2D pos)
Paste the copied objects, positioned relative to the last copied node.
Definition editor.cpp:159
Definition env.h:67
Definition map.h:50
Editor editor
Definition editor.cpp:21
constexpr int EDITOR_WALL_RADIUS
Definition editor.h:52
constexpr int EDITOR_NODE_RADIUS
Definition editor.h:51
constexpr int EDITOR_SPRITE_RADIUS
Definition editor.h:53
EDIT_MODES
Definition editor.h:26
@ EDIT_MODE_TAGS
Definition editor.h:37
@ EDIT_MODE_NODES
Definition editor.h:27
@ EDIT_MODE_PATHS
Definition editor.h:36
@ EDIT_MODE_SUBMAPS
Definition editor.h:29
@ EDIT_MODE_SPEAKERS
Definition editor.h:35
@ EDIT_MODE_STAIRCASES
Definition editor.h:30
@ EDIT_MODE_LIGHTS
Definition editor.h:34
@ EDIT_MODE_DOORS
Definition editor.h:31
@ EDIT_MODE_CONFIG
Definition editor.h:39
@ EDIT_MODE_SPRITES
Definition editor.h:33
@ EDIT_MODE_LIFTS
Definition editor.h:32
@ EDIT_MODE_STAGE
Definition editor.h:38
@ EDIT_MODE_WALLS
Definition editor.h:28
constexpr int EDIT_UNSELECTED
Definition editor.h:49
VIEW_MODES
Definition editor.h:42
@ VIEW_SIDE
Definition editor.h:44
@ VIEW_3D
Definition editor.h:46
@ VIEW_TOP
Definition editor.h:43
@ VIEW_FRONT
Definition editor.h:45
Camera position and orientation.
Definition renderer.h:47