DDraceNetwork Documentation
Loading...
Searching...
No Matches
map.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_EDITOR_MAPITEMS_MAP_H
4#define GAME_EDITOR_MAPITEMS_MAP_H
5
6#include <base/types.h>
7
10
16
17#include <functional>
18#include <memory>
19#include <vector>
20
21class CEditor;
22class CEditorImage;
23class CEditorSound;
24class CLayerFront;
25class CLayerGroup;
26class CLayerGame;
27class CLayerImage;
28class CLayerSound;
29class CLayerSpeedup;
30class CLayerSwitch;
31class CLayerTele;
32class CLayerTune;
33class CQuad;
35
37{
41
42 void Run() override;
43
44public:
45 CDataFileWriterFinishJob(const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer);
46 const char *GetRealFilename() const { return m_aRealFilename; }
47 const char *GetTempFilename() const { return m_aTempFilename; }
48};
49
50using FErrorHandler = std::function<void(const char *pErrorMessage)>;
51
53{
54public:
74
75 const CEditor *Editor() const { return m_pEditor; }
76 CEditor *Editor() { return m_pEditor; }
77
90 void OnModify();
91 void ResetModifiedState();
92
93 std::vector<std::shared_ptr<CLayerGroup>> m_vpGroups;
94 std::vector<std::shared_ptr<CEditorImage>> m_vpImages;
95 std::vector<std::shared_ptr<CEnvelope>> m_vpEnvelopes;
96 std::vector<std::shared_ptr<CEditorSound>> m_vpSounds;
97 std::vector<CEditorMapSetting> m_vSettings;
98
99 std::shared_ptr<CLayerGroup> m_pGameGroup;
100 std::shared_ptr<CLayerGame> m_pGameLayer;
101 std::shared_ptr<CLayerTele> m_pTeleLayer;
102 std::shared_ptr<CLayerSpeedup> m_pSpeedupLayer;
103 std::shared_ptr<CLayerFront> m_pFrontLayer;
104 std::shared_ptr<CLayerSwitch> m_pSwitchLayer;
105 std::shared_ptr<CLayerTune> m_pTuneLayer;
106
108 {
109 public:
110 char m_aAuthor[32];
111 char m_aVersion[16];
112 char m_aCredits[128];
113 char m_aLicense[32];
114
115 void Reset();
116 void Copy(const CMapInfo &Source);
117 };
120
121 // Undo/Redo
137
138 // Selections
140 std::vector<int> m_vSelectedLayers;
141 std::vector<int> m_vSelectedQuads;
147 std::vector<std::pair<int, int>> m_vSelectedEnvelopePoints;
148 std::pair<int, int> m_SelectedTangentInPoint;
149 std::pair<int, int> m_SelectedTangentOutPoint;
153
155
156 // Quad knife
158 {
159 public:
164 };
166
167 // Housekeeping
168 void Clean();
169 void CreateDefault();
170 void CheckIntegrity();
171
172 // Indices
173 void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction);
174 void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction);
175 void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction);
176
177 // I/O
178 bool Save(const char *pFilename, const FErrorHandler &ErrorHandler);
179 bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler);
180 bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler);
181 bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler);
182 void PerformSanityChecks(const FErrorHandler &ErrorHandler);
183 bool PerformAutosave(const FErrorHandler &ErrorHandler);
184
185 // Groups
186 std::shared_ptr<CLayerGroup> SelectedGroup() const;
187 std::shared_ptr<CLayerGroup> NewGroup();
188 int MoveGroup(int IndexFrom, int IndexTo);
189 void DeleteGroup(int Index);
190 void MakeGameGroup(std::shared_ptr<CLayerGroup> pGroup);
191
192 // Layers
193 std::shared_ptr<CLayer> SelectedLayer(int Index) const;
194 std::shared_ptr<CLayer> SelectedLayerType(int Index, int Type) const;
195 void SelectLayer(int LayerIndex, int GroupIndex = -1);
196 void AddSelectedLayer(int LayerIndex);
197 void SelectNextLayer();
198 void SelectPreviousLayer();
199 void SelectGameLayer();
200 void MakeGameLayer(const std::shared_ptr<CLayer> &pLayer);
201 void MakeTeleLayer(const std::shared_ptr<CLayer> &pLayer);
202 void MakeSpeedupLayer(const std::shared_ptr<CLayer> &pLayer);
203 void MakeFrontLayer(const std::shared_ptr<CLayer> &pLayer);
204 void MakeSwitchLayer(const std::shared_ptr<CLayer> &pLayer);
205 void MakeTuneLayer(const std::shared_ptr<CLayer> &pLayer);
206
207 // Quads
208 std::vector<CQuad *> SelectedQuads();
209 bool IsQuadSelected(int Index) const;
210 int FindSelectedQuadIndex(int Index) const;
211 void SelectQuad(int Index);
212 void ToggleSelectQuad(int Index);
213 void DeselectQuads();
214 bool IsQuadCornerSelected(int Index) const;
215 bool IsQuadPointSelected(int QuadIndex, int Index) const;
216 void SelectQuadPoint(int QuadIndex, int Index);
217 void ToggleSelectQuadPoint(int QuadIndex, int Index);
218 void DeselectQuadPoints();
219 void DeleteSelectedQuads();
220
221 // Envelopes
222 std::shared_ptr<CEnvelope> NewEnvelope(CEnvelope::EType Type);
223 void InsertEnvelope(int Index, std::shared_ptr<CEnvelope> &pEnvelope);
224 void UpdateEnvelopeReferences(int Index, std::shared_ptr<CEnvelope> &pEnvelope, std::vector<std::shared_ptr<IEditorEnvelopeReference>> &vpEditorObjectReferences);
225 std::vector<std::shared_ptr<IEditorEnvelopeReference>> DeleteEnvelope(int Index);
226 int MoveEnvelope(int IndexFrom, int IndexTo);
227 template<typename F>
228 std::vector<std::shared_ptr<IEditorEnvelopeReference>> VisitEnvelopeReferences(F &&Visitor);
229 bool IsEnvelopeUsed(int EnvelopeIndex) const;
231
232 // Envelope points
233 int FindEnvPointIndex(int Index, int Channel) const;
234 void SelectEnvPoint(int Index);
235 void SelectEnvPoint(int Index, int Channel);
236 void ToggleEnvPoint(int Index, int Channel);
237 bool IsEnvPointSelected(int Index, int Channel) const;
238 bool IsEnvPointSelected(int Index) const;
239 void DeselectEnvPoints();
240 bool IsTangentSelected() const;
241 bool IsTangentOutPointSelected(int Index, int Channel) const;
242 bool IsTangentOutSelected() const;
243 void SelectTangentOutPoint(int Index, int Channel);
244 bool IsTangentInPointSelected(int Index, int Channel) const;
245 bool IsTangentInSelected() const;
246 void SelectTangentInPoint(int Index, int Channel);
247 std::pair<CFixedTime, int> SelectedEnvelopeTimeAndValue() const;
248
249 // Images
250 std::shared_ptr<CEditorImage> SelectedImage() const;
251 void SelectImage(const std::shared_ptr<CEditorImage> &pImage);
252 void SelectNextImage();
253 void SelectPreviousImage();
254 bool IsImageUsed(int ImageIndex) const;
255 std::vector<int> SortImages();
256
257 // Sounds
258 std::shared_ptr<CEditorSound> SelectedSound() const;
259 void SelectSound(const std::shared_ptr<CEditorSound> &pSound);
260 void SelectNextSound();
261 void SelectPreviousSound();
262 bool IsSoundUsed(int SoundIndex) const;
264
265 void PlaceBorderTiles();
266
267private:
269};
270
271#endif
void Run() override
Definition map_io.cpp:35
CDataFileWriter m_Writer
Definition map.h:40
const char * GetRealFilename() const
Definition map.h:46
CDataFileWriterFinishJob(const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer)
Definition map_io.cpp:40
char m_aRealFilename[IO_MAX_PATH_LENGTH]
Definition map.h:38
const char * GetTempFilename() const
Definition map.h:47
char m_aTempFilename[IO_MAX_PATH_LENGTH]
Definition map.h:39
Definition datafile.h:61
Definition editor_history.h:13
Definition image.h:10
Definition map.h:108
char m_aAuthor[32]
Definition map.h:110
char m_aCredits[128]
Definition map.h:112
void Copy(const CMapInfo &Source)
Definition map.cpp:25
char m_aVersion[16]
Definition map.h:111
void Reset()
Definition map.cpp:17
char m_aLicense[32]
Definition map.h:113
Definition map.h:158
int m_Count
Definition map.h:162
bool m_Active
Definition map.h:160
int m_SelectedQuadIndex
Definition map.h:161
vec2 m_aPoints[4]
Definition map.h:163
bool IsTangentInPointSelected(int Index, int Channel) const
Definition map.cpp:836
bool m_Modified
Definition map.h:83
bool IsQuadPointSelected(int QuadIndex, int Index) const
Definition map.cpp:488
std::shared_ptr< CLayerSwitch > m_pSwitchLayer
Definition map.h:104
CMapInfo m_MapInfoTmp
Definition map.h:119
CEditor * m_pEditor
Definition map.h:268
void PlaceBorderTiles()
Definition map.cpp:1076
bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1067
void SelectLayer(int LayerIndex, int GroupIndex=-1)
Definition map.cpp:324
std::pair< CFixedTime, int > SelectedEnvelopeTimeAndValue() const
Definition map.cpp:852
CSoundSourceCircleShapePropTracker m_SoundSourceCircleShapePropTracker
Definition map.h:136
CSoundSourceOperationTracker m_SoundSourceOperationTracker
Definition map.h:133
void SelectSound(const std::shared_ptr< CEditorSound > &pSound)
Definition map.cpp:1025
void MakeGameGroup(std::shared_ptr< CLayerGroup > pGroup)
Definition map.cpp:293
CLayerGroupPropTracker m_LayerGroupPropTracker
Definition map.h:127
int FindEnvPointIndex(int Index, int Channel) const
Definition map.cpp:749
void OnModify()
Definition map.cpp:33
void InsertEnvelope(int Index, std::shared_ptr< CEnvelope > &pEnvelope)
Definition map.cpp:568
std::vector< CEditorMapSetting > m_vSettings
Definition map.h:97
void MakeTuneLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:429
void ToggleEnvPoint(int Index, int Channel)
Definition map.cpp:776
std::shared_ptr< CEditorImage > SelectedImage() const
Definition map.cpp:882
float m_LastSaveTime
Definition map.h:89
void RemoveUnusedEnvelopes()
Definition map.cpp:725
bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:422
CEditorHistory m_EditorHistory
Definition map.h:122
bool IsQuadSelected(int Index) const
Definition map.cpp:450
std::vector< std::shared_ptr< CLayerGroup > > m_vpGroups
Definition map.h:93
int m_CurrentQuadIndex
Definition map.h:144
std::vector< std::shared_ptr< CEditorImage > > m_vpImages
Definition map.h:94
void ResetModifiedState()
Definition map.cpp:40
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition map.h:78
int m_ShiftBy
Definition map.h:154
std::shared_ptr< CLayerTele > m_pTeleLayer
Definition map.h:101
void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:237
void SelectNextSound()
Definition map.cpp:1037
std::shared_ptr< CEnvelope > NewEnvelope(CEnvelope::EType Type)
Definition map.cpp:550
int m_SelectedQuadPoints
Definition map.h:142
void SelectPreviousImage()
Definition map.cpp:928
void SelectPreviousSound()
Definition map.cpp:1042
bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:450
void DeleteGroup(int Index)
Definition map.cpp:285
int m_SelectedGroup
Definition map.h:139
bool IsTangentSelected() const
Definition map.cpp:815
void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:228
void DeselectQuadPoints()
Definition map.cpp:519
std::shared_ptr< CLayerFront > m_pFrontLayer
Definition map.h:103
void SelectTangentInPoint(int Index, int Channel)
Definition map.cpp:846
std::vector< std::shared_ptr< CEditorSound > > m_vpSounds
Definition map.h:96
void SelectTangentOutPoint(int Index, int Channel)
Definition map.cpp:830
void Clean()
Definition map.cpp:48
CEnvelopeEditorOperationTracker m_EnvOpTracker
Definition map.h:126
void SelectQuad(int Index)
Definition map.cpp:463
CEditorHistory m_ServerSettingsHistory
Definition map.h:123
CLayerSoundsPropTracker m_LayerSoundsPropTracker
Definition map.h:132
std::vector< std::shared_ptr< IEditorEnvelopeReference > > DeleteEnvelope(int Index)
Definition map.cpp:583
CEditorHistory m_EnvelopeEditorHistory
Definition map.h:124
std::pair< int, int > m_SelectedTangentInPoint
Definition map.h:148
int MoveGroup(int IndexFrom, int IndexTo)
Definition map.cpp:270
CEditorMap(CEditor *pEditor)
Definition map.h:55
void ToggleSelectQuad(int Index)
Definition map.cpp:469
bool m_UpdateEnvPointInfo
Definition map.h:146
void DeselectEnvPoints()
Definition map.cpp:808
void SelectGameLayer()
Definition map.cpp:389
CSoundSource * SelectedSoundSource() const
Definition map.cpp:1066
int m_SelectedQuadEnvelope
Definition map.h:143
std::vector< int > m_vSelectedQuads
Definition map.h:141
float m_LastModifiedTime
Definition map.h:88
CLayerTilesCommonPropTracker m_LayerTilesCommonPropTracker
Definition map.h:129
void CreateDefault()
Definition map.cpp:99
std::shared_ptr< CLayerGroup > SelectedGroup() const
Definition map.cpp:255
void MakeSpeedupLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:414
std::vector< std::shared_ptr< IEditorEnvelopeReference > > VisitEnvelopeReferences(F &&Visitor)
Definition map.cpp:634
int m_SelectedSoundSource
Definition map.h:152
const CEditor * Editor() const
Definition map.h:75
CLayerQuadsPropTracker m_LayerQuadPropTracker
Definition map.h:131
CMapInfo m_MapInfo
Definition map.h:118
void DeleteSelectedQuads()
Definition map.cpp:524
CSoundSourcePropTracker m_SoundSourcePropTracker
Definition map.h:134
void MakeTeleLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:409
std::vector< std::shared_ptr< CEnvelope > > m_vpEnvelopes
Definition map.h:95
void SelectPreviousLayer()
Definition map.cpp:365
bool IsTangentInSelected() const
Definition map.cpp:841
bool IsSoundUsed(int SoundIndex) const
Definition map.cpp:1047
CQuadEditTracker m_QuadTracker
Definition map.h:125
bool IsEnvPointSelected(int Index, int Channel) const
Definition map.cpp:791
CLayerTilesPropTracker m_LayerTilesPropTracker
Definition map.h:130
bool PerformAutosave(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1241
bool IsQuadCornerSelected(int Index) const
Definition map.cpp:483
void SelectNextLayer()
Definition map.cpp:341
void AddSelectedLayer(int LayerIndex)
Definition map.cpp:335
std::vector< CQuad * > SelectedQuads()
Definition map.cpp:434
bool m_ModifiedAuto
Definition map.h:87
void SelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:493
void UpdateEnvelopeReferences(int Index, std::shared_ptr< CEnvelope > &pEnvelope, std::vector< std::shared_ptr< IEditorEnvelopeReference > > &vpEditorObjectReferences)
Definition map.cpp:576
bool IsTangentOutPointSelected(int Index, int Channel) const
Definition map.cpp:820
void MakeSwitchLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:424
std::shared_ptr< CLayerGroup > m_pGameGroup
Definition map.h:99
CSoundSourceRectShapePropTracker m_SoundSourceRectShapePropTracker
Definition map.h:135
void SelectImage(const std::shared_ptr< CEditorImage > &pImage)
Definition map.cpp:891
void MakeGameLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:404
std::vector< int > SortImages()
Definition map.cpp:980
bool Save(const char *pFilename, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:47
std::pair< int, int > m_SelectedTangentOutPoint
Definition map.h:149
int FindSelectedQuadIndex(int Index) const
Definition map.cpp:455
std::shared_ptr< CLayer > SelectedLayer(int Index) const
Definition map.cpp:300
void MakeFrontLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:419
bool m_ValidSaveFilename
Definition map.h:79
CEditor * Editor()
Definition map.h:76
void CheckIntegrity()
Definition map.cpp:125
int m_SelectedImage
Definition map.h:150
CLayerPropTracker m_LayerPropTracker
Definition map.h:128
std::shared_ptr< CLayerSpeedup > m_pSpeedupLayer
Definition map.h:102
void PerformSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1206
bool IsImageUsed(int ImageIndex) const
Definition map.cpp:953
void SelectNextImage()
Definition map.cpp:903
void ToggleSelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:499
CQuadKnife m_QuadKnife
Definition map.h:165
std::shared_ptr< CLayerGame > m_pGameLayer
Definition map.h:100
void SelectEnvPoint(int Index)
Definition map.cpp:762
bool IsEnvelopeUsed(int EnvelopeIndex) const
Definition map.cpp:684
std::vector< int > m_vSelectedLayers
Definition map.h:140
std::shared_ptr< CEditorSound > SelectedSound() const
Definition map.cpp:1016
int MoveEnvelope(int IndexFrom, int IndexTo)
Definition map.cpp:605
std::vector< std::pair< int, int > > m_vSelectedEnvelopePoints
Definition map.h:147
bool IsTangentOutSelected() const
Definition map.cpp:825
std::shared_ptr< CLayerTune > m_pTuneLayer
Definition map.h:105
std::shared_ptr< CLayer > SelectedLayerType(int Index, int Type) const
Definition map.cpp:316
int m_SelectedEnvelope
Definition map.h:145
void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:246
int m_SelectedSound
Definition map.h:151
std::shared_ptr< CLayerGroup > NewGroup()
Definition map.cpp:262
void DeselectQuads()
Definition map.cpp:478
Definition sound.h:9
Definition editor.h:108
Definition editor_trackers.h:76
EType
Definition envelope.h:18
Definition layer_front.h:7
Definition layer_game.h:7
Definition editor_trackers.h:249
Definition layer_group.h:12
Definition editor_trackers.h:200
Definition editor_trackers.h:260
Definition editor_trackers.h:271
Definition layer_speedup.h:20
Definition layer_switch.h:20
Definition layer_tele.h:18
Definition editor_trackers.h:228
Definition editor_trackers.h:211
Definition layer_tune.h:18
Definition editor_trackers.h:21
Definition mapitems.h:337
Definition editor_trackers.h:304
Definition editor_trackers.h:103
Definition editor_trackers.h:282
Definition editor_trackers.h:293
Definition mapitems.h:588
Definition references.h:13
IJob()
Definition jobs.cpp:9
std::function< void(const char *pErrorMessage)> FErrorHandler
Definition map.h:50
std::function< void(int *pIndex)> FIndexModifyFunction
Definition layer.h:11
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:49
vector2_base< float > vec2
Definition vmath.h:161