DDNet 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
25
26#include <functional>
27#include <memory>
28#include <vector>
29
30class CEditor;
31class CEditorImage;
32class CEditorSound;
33class CLayerFront;
34class CLayerGroup;
35class CLayerGame;
36class CLayerImage;
37class CLayerSound;
38class CLayerSpeedup;
39class CLayerSwitch;
40class CLayerTele;
41class CLayerTune;
42class CQuad;
44
46{
52
53 void Run() override;
54
55public:
56 CDataFileWriterFinishJob(IStorage *pStorage, const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer);
57 const char *RealFilename() const { return m_aRealFilename; }
58 const char *ErrorMessage() const { return m_aErrorMessage; }
59};
60
61using FErrorHandler = std::function<void(const char *pErrorMessage)>;
62
64{
65public:
66 explicit CEditorMap(CEditor *pEditor);
67
68 const CEditor *Editor() const { return m_pEditor; }
69 CEditor *Editor() { return m_pEditor; }
70
95 void OnModify();
96 void ResetModifiedState();
97
98 // UI elements
101
102 std::vector<std::shared_ptr<CLayerGroup>> m_vpGroups;
103 std::vector<std::shared_ptr<CEditorImage>> m_vpImages;
104 std::vector<std::shared_ptr<CEnvelope>> m_vpEnvelopes;
105 std::vector<std::shared_ptr<CEditorSound>> m_vpSounds;
106 std::vector<CEditorMapSetting> m_vSettings;
107
108 std::shared_ptr<CLayerGroup> m_pGameGroup;
109 std::shared_ptr<CLayerGame> m_pGameLayer;
110 std::shared_ptr<CLayerTele> m_pTeleLayer;
111 std::shared_ptr<CLayerSpeedup> m_pSpeedupLayer;
112 std::shared_ptr<CLayerFront> m_pFrontLayer;
113 std::shared_ptr<CLayerSwitch> m_pSwitchLayer;
114 std::shared_ptr<CLayerTune> m_pTuneLayer;
115
117 {
118 public:
119 char m_aAuthor[32];
120 char m_aVersion[16];
121 char m_aCredits[128];
122 char m_aLicense[32];
123
124 void Reset();
125 void Copy(const CMapInfo &Source);
126 };
129
130 // Undo/Redo
146
147 // Selections
149 std::vector<int> m_vSelectedLayers;
150 std::vector<int> m_vSelectedQuads;
156 std::vector<std::pair<int, int>> m_vSelectedEnvelopePoints;
157 std::pair<int, int> m_SelectedTangentInPoint;
158 std::pair<int, int> m_SelectedTangentOutPoint;
162
166
167 // Component states
178
179 // Housekeeping
180 void CreateDefault();
181 void CheckIntegrity();
182
183 // Indices
184 void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction);
185 void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction);
186 void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction);
187
188 // I/O
189 bool Save(const char *pFilename, const FErrorHandler &ErrorHandler);
190 bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler);
191 bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler);
192 bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler);
193 void PerformSanityChecks(const FErrorHandler &ErrorHandler);
194 bool PerformAutosave(const FErrorHandler &ErrorHandler);
195
196 // Groups
197 std::shared_ptr<CLayerGroup> SelectedGroup() const;
198 std::shared_ptr<CLayerGroup> NewGroup();
199 int MoveGroup(int IndexFrom, int IndexTo);
200 void DeleteGroup(int Index);
201 void MakeGameGroup(std::shared_ptr<CLayerGroup> pGroup);
202
203 // Layers
204 std::shared_ptr<CLayer> SelectedLayer(int Index) const;
205 std::shared_ptr<CLayer> SelectedLayerType(int Index, int Type) const;
206 void SelectLayer(int LayerIndex, int GroupIndex = -1);
207 void AddSelectedLayer(int LayerIndex);
208 void SelectNextLayer();
209 void SelectPreviousLayer();
210 void SelectGameLayer();
211 void MakeGameLayer(const std::shared_ptr<CLayer> &pLayer);
212 void MakeTeleLayer(const std::shared_ptr<CLayer> &pLayer);
213 void MakeSpeedupLayer(const std::shared_ptr<CLayer> &pLayer);
214 void MakeFrontLayer(const std::shared_ptr<CLayer> &pLayer);
215 void MakeSwitchLayer(const std::shared_ptr<CLayer> &pLayer);
216 void MakeTuneLayer(const std::shared_ptr<CLayer> &pLayer);
217
218 // Quads
219 std::vector<CQuad *> SelectedQuads();
220 bool IsQuadSelected(int Index) const;
221 int FindSelectedQuadIndex(int Index) const;
222 void SelectQuad(int Index);
223 void ToggleSelectQuad(int Index);
224 void DeselectQuads();
225 bool IsQuadCornerSelected(int Index) const;
226 bool IsQuadPointSelected(int QuadIndex, int Index) const;
227 void SelectQuadPoint(int QuadIndex, int Index);
228 void ToggleSelectQuadPoint(int QuadIndex, int Index);
229 void DeselectQuadPoints();
230 void DeleteSelectedQuads();
231
232 // Envelopes
233 std::shared_ptr<CEnvelope> NewEnvelope(CEnvelope::EType Type);
234 void InsertEnvelope(int Index, std::shared_ptr<CEnvelope> &pEnvelope);
235 void UpdateEnvelopeReferences(int Index, std::shared_ptr<CEnvelope> &pEnvelope, std::vector<std::shared_ptr<IEditorEnvelopeReference>> &vpEditorObjectReferences);
236 std::vector<std::shared_ptr<IEditorEnvelopeReference>> DeleteEnvelope(int Index);
237 int MoveEnvelope(int IndexFrom, int IndexTo);
238 template<typename F>
239 std::vector<std::shared_ptr<IEditorEnvelopeReference>> VisitEnvelopeReferences(F &&Visitor);
240 bool IsEnvelopeUsed(int EnvelopeIndex) const;
242
243 // Envelope points
244 int FindEnvPointIndex(int Index, int Channel) const;
245 void SelectEnvPoint(int Index);
246 void SelectEnvPoint(int Index, int Channel);
247 void ToggleEnvPoint(int Index, int Channel);
248 bool IsEnvPointSelected(int Index, int Channel) const;
249 bool IsEnvPointSelected(int Index) const;
250 void DeselectEnvPoints();
251 bool IsTangentSelected() const;
252 bool IsTangentOutPointSelected(int Index, int Channel) const;
253 bool IsTangentOutSelected() const;
254 void SelectTangentOutPoint(int Index, int Channel);
255 bool IsTangentInPointSelected(int Index, int Channel) const;
256 bool IsTangentInSelected() const;
257 void SelectTangentInPoint(int Index, int Channel);
258 std::pair<CFixedTime, int> SelectedEnvelopeTimeAndValue() const;
259
260 // Images
261 std::shared_ptr<CEditorImage> SelectedImage() const;
262 void SelectImage(const std::shared_ptr<CEditorImage> &pImage);
263 void SelectNextImage();
264 void SelectPreviousImage();
265 bool IsImageUsed(int ImageIndex) const;
266 std::vector<int> SortImages();
267
268 // Sounds
269 std::shared_ptr<CEditorSound> SelectedSound() const;
270 void SelectSound(const std::shared_ptr<CEditorSound> &pSound);
271 void SelectNextSound();
272 void SelectPreviousSound();
273 bool IsSoundUsed(int SoundIndex) const;
275
276 void PlaceBorderTiles();
277
278 void AddTileArt(CImageInfo &&Image, const char *pFilename, bool IgnoreHistory);
279
280 void AddQuadArt(CImageInfo &&Image, const CQuadArtParameters &Parameters, bool IgnoreHistory);
281
282private:
284};
285
286#endif
CDataFileWriterFinishJob(IStorage *pStorage, const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer)
Definition map_io.cpp:55
void Run() override
Definition map_io.cpp:41
CDataFileWriter m_Writer
Definition map.h:51
const char * ErrorMessage() const
Definition map.h:58
char m_aErrorMessage[2 *IO_MAX_PATH_LENGTH+128]
Definition map.h:50
IStorage * m_pStorage
Definition map.h:47
char m_aRealFilename[IO_MAX_PATH_LENGTH]
Definition map.h:48
char m_aTempFilename[IO_MAX_PATH_LENGTH]
Definition map.h:49
const char * RealFilename() const
Definition map.h:57
Definition datafile.h:65
Definition editor_history.h:57
Definition editor_history.h:14
Definition image.h:12
Definition map.h:117
char m_aAuthor[32]
Definition map.h:119
char m_aCredits[128]
Definition map.h:121
void Copy(const CMapInfo &Source)
Definition map.cpp:25
char m_aVersion[16]
Definition map.h:120
void Reset()
Definition map.cpp:17
char m_aLicense[32]
Definition map.h:122
bool IsTangentInPointSelected(int Index, int Channel) const
Definition map.cpp:819
bool m_Modified
Definition map.h:88
bool IsQuadPointSelected(int QuadIndex, int Index) const
Definition map.cpp:514
std::shared_ptr< CLayerSwitch > m_pSwitchLayer
Definition map.h:113
bool m_PreviewZoom
Definition map.h:165
void AddTileArt(CImageInfo &&Image, const char *pFilename, bool IgnoreHistory)
Definition tile_art.cpp:140
CMapInfo m_MapInfoTmp
Definition map.h:128
CEditor * m_pEditor
Definition map.h:283
char m_TabCloseButtonId
Definition map.h:100
void PlaceBorderTiles()
Definition map.cpp:1043
bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1110
void SelectLayer(int LayerIndex, int GroupIndex=-1)
Definition map.cpp:350
std::pair< CFixedTime, int > SelectedEnvelopeTimeAndValue() const
Definition map.cpp:835
CSoundSourceCircleShapePropTracker m_SoundSourceCircleShapePropTracker
Definition map.h:145
CSoundSourceOperationTracker m_SoundSourceOperationTracker
Definition map.h:142
void SelectSound(const std::shared_ptr< CEditorSound > &pSound)
Definition map.cpp:996
void MakeGameGroup(std::shared_ptr< CLayerGroup > pGroup)
Definition map.cpp:319
CLayerGroupPropTracker m_LayerGroupPropTracker
Definition map.h:136
int FindEnvPointIndex(int Index, int Channel) const
Definition map.cpp:732
void OnModify()
Definition map.cpp:108
void InsertEnvelope(int Index, std::shared_ptr< CEnvelope > &pEnvelope)
Definition map.cpp:577
std::vector< CEditorMapSetting > m_vSettings
Definition map.h:106
CMapEnvelopeEvaluator m_EnvelopeEvaluator
Definition map.h:172
CEditorHistoryUiState m_EditorHistoryUiState
Definition map.h:177
void MakeTuneLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:455
CEditorUiElements m_EditorUiElements
Definition map.h:176
void ToggleEnvPoint(int Index, int Channel)
Definition map.cpp:759
std::shared_ptr< CEditorImage > SelectedImage() const
Definition map.cpp:865
float m_LastSaveTime
Definition map.h:94
void RemoveUnusedEnvelopes()
Definition map.cpp:708
bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:439
CFontTyper::CState m_FontTyperState
Definition map.h:175
CEditorHistory m_EditorHistory
Definition map.h:131
bool IsQuadSelected(int Index) const
Definition map.cpp:476
std::vector< std::shared_ptr< CLayerGroup > > m_vpGroups
Definition map.h:102
int m_CurrentQuadIndex
Definition map.h:153
std::vector< std::shared_ptr< CEditorImage > > m_vpImages
Definition map.h:103
void ResetModifiedState()
Definition map.cpp:117
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition map.h:74
int m_ShiftBy
Definition map.h:163
std::shared_ptr< CLayerTele > m_pTeleLayer
Definition map.h:110
void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:263
void SelectNextSound()
Definition map.cpp:1008
std::shared_ptr< CEnvelope > NewEnvelope(CEnvelope::EType Type)
Definition map.cpp:559
int m_SelectedQuadPoints
Definition map.h:151
void SelectPreviousImage()
Definition map.cpp:911
CProofMode::CState m_ProofModeState
Definition map.h:170
void SelectPreviousSound()
Definition map.cpp:1013
bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:467
char m_aAutosaveName[IO_MAX_PATH_LENGTH]
Definition map.h:82
void DeleteGroup(int Index)
Definition map.cpp:311
int m_SelectedGroup
Definition map.h:148
bool IsTangentSelected() const
Definition map.cpp:798
void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:254
void DeselectQuadPoints()
Definition map.cpp:545
std::shared_ptr< CLayerFront > m_pFrontLayer
Definition map.h:112
void SelectTangentInPoint(int Index, int Channel)
Definition map.cpp:829
std::vector< std::shared_ptr< CEditorSound > > m_vpSounds
Definition map.h:105
void SelectTangentOutPoint(int Index, int Channel)
Definition map.cpp:813
CEnvelopeEditorOperationTracker m_EnvOpTracker
Definition map.h:135
void SelectQuad(int Index)
Definition map.cpp:489
CEditorHistory m_ServerSettingsHistory
Definition map.h:132
CLayerSoundsPropTracker m_LayerSoundsPropTracker
Definition map.h:141
std::vector< std::shared_ptr< IEditorEnvelopeReference > > DeleteEnvelope(int Index)
Definition map.cpp:592
CEditorHistory m_EnvelopeEditorHistory
Definition map.h:133
std::pair< int, int > m_SelectedTangentInPoint
Definition map.h:157
int MoveGroup(int IndexFrom, int IndexTo)
Definition map.cpp:296
CEditorMap(CEditor *pEditor)
Definition map.cpp:33
void ToggleSelectQuad(int Index)
Definition map.cpp:495
bool m_UpdateEnvPointInfo
Definition map.h:155
CEnvelopeEditor::CState m_EnvelopeEditorState
Definition map.h:173
void DeselectEnvPoints()
Definition map.cpp:791
void SelectGameLayer()
Definition map.cpp:415
CSoundSource * SelectedSoundSource() const
Definition map.cpp:1033
int m_SelectedQuadEnvelope
Definition map.h:152
std::vector< int > m_vSelectedQuads
Definition map.h:150
float m_LastModifiedTime
Definition map.h:93
CLayerTilesCommonPropTracker m_LayerTilesCommonPropTracker
Definition map.h:138
void CreateDefault()
Definition map.cpp:125
std::shared_ptr< CLayerGroup > SelectedGroup() const
Definition map.cpp:281
void MakeSpeedupLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:440
std::vector< std::shared_ptr< IEditorEnvelopeReference > > VisitEnvelopeReferences(F &&Visitor)
Definition map.cpp:643
int m_SelectedSoundSource
Definition map.h:161
const CEditor * Editor() const
Definition map.h:68
CLayerQuadsPropTracker m_LayerQuadPropTracker
Definition map.h:140
bool m_CloseOnSave
Definition map.h:84
CMapInfo m_MapInfo
Definition map.h:127
void DeleteSelectedQuads()
Definition map.cpp:550
CSoundSourcePropTracker m_SoundSourcePropTracker
Definition map.h:143
void MakeTeleLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:435
std::vector< std::shared_ptr< CEnvelope > > m_vpEnvelopes
Definition map.h:104
void SelectPreviousLayer()
Definition map.cpp:391
bool IsTangentInSelected() const
Definition map.cpp:824
bool IsSoundUsed(int SoundIndex) const
Definition map.cpp:1018
CQuadEditTracker m_QuadTracker
Definition map.h:134
bool IsEnvPointSelected(int Index, int Channel) const
Definition map.cpp:774
CLayerTilesPropTracker m_LayerTilesPropTracker
Definition map.h:139
char m_TabSelectButtonId
Definition map.h:99
bool PerformAutosave(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1285
bool IsQuadCornerSelected(int Index) const
Definition map.cpp:509
void SelectNextLayer()
Definition map.cpp:367
void AddSelectedLayer(int LayerIndex)
Definition map.cpp:361
CQuadKnife::CState m_QuadKnifeState
Definition map.h:171
std::vector< CQuad * > SelectedQuads()
Definition map.cpp:460
CMapGrid::CState m_MapGridState
Definition map.h:169
bool m_ModifiedAuto
Definition map.h:92
void SelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:519
void UpdateEnvelopeReferences(int Index, std::shared_ptr< CEnvelope > &pEnvelope, std::vector< std::shared_ptr< IEditorEnvelopeReference > > &vpEditorObjectReferences)
Definition map.cpp:585
bool IsTangentOutPointSelected(int Index, int Channel) const
Definition map.cpp:803
void MakeSwitchLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:450
std::shared_ptr< CLayerGroup > m_pGameGroup
Definition map.h:108
CSoundSourceRectShapePropTracker m_SoundSourceRectShapePropTracker
Definition map.h:144
void SelectImage(const std::shared_ptr< CEditorImage > &pImage)
Definition map.cpp:874
void MakeGameLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:430
char m_aDisplayName[IO_MAX_PATH_LENGTH]
Definition map.h:78
CMapSettingsBackend::CContextWithInput m_MapSettingsCommandContext
Definition map.h:174
std::vector< int > SortImages()
Definition map.cpp:951
bool Save(const char *pFilename, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:64
std::pair< int, int > m_SelectedTangentOutPoint
Definition map.h:158
int FindSelectedQuadIndex(int Index) const
Definition map.cpp:481
std::shared_ptr< CLayer > SelectedLayer(int Index) const
Definition map.cpp:326
void MakeFrontLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:445
bool m_ValidSaveFilename
Definition map.h:83
CEditor * Editor()
Definition map.h:69
void CheckIntegrity()
Definition map.cpp:151
int m_SelectedImage
Definition map.h:159
CLayerPropTracker m_LayerPropTracker
Definition map.h:137
std::shared_ptr< CLayerSpeedup > m_pSpeedupLayer
Definition map.h:111
void PerformSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1250
bool IsImageUsed(int ImageIndex) const
Definition map.cpp:936
void SelectNextImage()
Definition map.cpp:886
void ToggleSelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:525
std::shared_ptr< CLayerGame > m_pGameLayer
Definition map.h:109
void SelectEnvPoint(int Index)
Definition map.cpp:745
bool IsEnvelopeUsed(int EnvelopeIndex) const
Definition map.cpp:693
std::vector< int > m_vSelectedLayers
Definition map.h:149
std::shared_ptr< CEditorSound > SelectedSound() const
Definition map.cpp:987
void AddQuadArt(CImageInfo &&Image, const CQuadArtParameters &Parameters, bool IgnoreHistory)
Definition quad_art.cpp:174
int MoveEnvelope(int IndexFrom, int IndexTo)
Definition map.cpp:614
std::vector< std::pair< int, int > > m_vSelectedEnvelopePoints
Definition map.h:156
bool IsTangentOutSelected() const
Definition map.cpp:808
std::shared_ptr< CLayerTune > m_pTuneLayer
Definition map.h:114
std::shared_ptr< CLayer > SelectedLayerType(int Index, int Type) const
Definition map.cpp:342
int m_SelectedEnvelope
Definition map.h:154
void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:272
int m_SelectedSound
Definition map.h:160
CMapView::CState m_MapViewState
Definition map.h:168
std::shared_ptr< CLayerGroup > NewGroup()
Definition map.cpp:288
bool m_ShowDetail
Definition map.h:164
void DeselectQuads()
Definition map.cpp:504
Definition sound.h:9
Definition editor_ui.h:19
Definition editor.h:108
Definition editor_trackers.h:77
Definition envelope_editor.h:22
EType
Definition envelope.h:18
Definition font_typer.h:22
Definition image.h:12
Definition layer_front.h:7
Definition layer_game.h:7
Definition editor_trackers.h:250
Definition layer_group.h:12
Definition editor_trackers.h:201
Definition editor_trackers.h:261
Definition editor_trackers.h:272
Definition layer_speedup.h:20
Definition layer_switch.h:20
Definition layer_tele.h:18
Definition editor_trackers.h:229
Definition editor_trackers.h:212
Definition layer_tune.h:18
Definition envelope_evaluator.h:10
Definition map_grid.h:12
Definition editor_server_settings.h:312
Definition map_view.h:27
Definition proof_mode.h:20
Definition quad_art.h:15
Definition editor_trackers.h:21
Definition quad_knife.h:10
Definition mapitems.h:337
Definition editor_trackers.h:305
Definition editor_trackers.h:104
Definition editor_trackers.h:283
Definition editor_trackers.h:294
Definition mapitems.h:588
Definition references.h:13
IJob()
Definition jobs.cpp:11
Definition storage.h:21
std::function< void(const char *pErrorMessage)> FErrorHandler
Definition map.h:61
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
std::function< void(int *pIndex)> FIndexModifyFunction
Definition layer.h:11