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
18
19#include <functional>
20#include <memory>
21#include <vector>
22
23class CEditor;
24class CEditorImage;
25class CEditorSound;
26class CLayerFront;
27class CLayerGroup;
28class CLayerGame;
29class CLayerImage;
30class CLayerSound;
31class CLayerSpeedup;
32class CLayerSwitch;
33class CLayerTele;
34class CLayerTune;
35class CQuad;
37
39{
45
46 void Run() override;
47
48public:
49 CDataFileWriterFinishJob(IStorage *pStorage, const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer);
50 const char *RealFilename() const { return m_aRealFilename; }
51 const char *ErrorMessage() const { return m_aErrorMessage; }
52};
53
54using FErrorHandler = std::function<void(const char *pErrorMessage)>;
55
57{
58public:
78
79 const CEditor *Editor() const { return m_pEditor; }
80 CEditor *Editor() { return m_pEditor; }
81
94 void OnModify();
95 void ResetModifiedState();
96
97 std::vector<std::shared_ptr<CLayerGroup>> m_vpGroups;
98 std::vector<std::shared_ptr<CEditorImage>> m_vpImages;
99 std::vector<std::shared_ptr<CEnvelope>> m_vpEnvelopes;
100 std::vector<std::shared_ptr<CEditorSound>> m_vpSounds;
101 std::vector<CEditorMapSetting> m_vSettings;
102
103 std::shared_ptr<CLayerGroup> m_pGameGroup;
104 std::shared_ptr<CLayerGame> m_pGameLayer;
105 std::shared_ptr<CLayerTele> m_pTeleLayer;
106 std::shared_ptr<CLayerSpeedup> m_pSpeedupLayer;
107 std::shared_ptr<CLayerFront> m_pFrontLayer;
108 std::shared_ptr<CLayerSwitch> m_pSwitchLayer;
109 std::shared_ptr<CLayerTune> m_pTuneLayer;
110
112 {
113 public:
114 char m_aAuthor[32];
115 char m_aVersion[16];
116 char m_aCredits[128];
117 char m_aLicense[32];
118
119 void Reset();
120 void Copy(const CMapInfo &Source);
121 };
124
125 // Undo/Redo
141
142 // Selections
144 std::vector<int> m_vSelectedLayers;
145 std::vector<int> m_vSelectedQuads;
151 std::vector<std::pair<int, int>> m_vSelectedEnvelopePoints;
152 std::pair<int, int> m_SelectedTangentInPoint;
153 std::pair<int, int> m_SelectedTangentOutPoint;
157
159
160 // Component states
162
163 // Housekeeping
164 void Clean();
165 void CreateDefault();
166 void CheckIntegrity();
167
168 // Indices
169 void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction);
170 void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction);
171 void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction);
172
173 // I/O
174 bool Save(const char *pFilename, const FErrorHandler &ErrorHandler);
175 bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler);
176 bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler);
177 bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler);
178 void PerformSanityChecks(const FErrorHandler &ErrorHandler);
179 bool PerformAutosave(const FErrorHandler &ErrorHandler);
180
181 // Groups
182 std::shared_ptr<CLayerGroup> SelectedGroup() const;
183 std::shared_ptr<CLayerGroup> NewGroup();
184 int MoveGroup(int IndexFrom, int IndexTo);
185 void DeleteGroup(int Index);
186 void MakeGameGroup(std::shared_ptr<CLayerGroup> pGroup);
187
188 // Layers
189 std::shared_ptr<CLayer> SelectedLayer(int Index) const;
190 std::shared_ptr<CLayer> SelectedLayerType(int Index, int Type) const;
191 void SelectLayer(int LayerIndex, int GroupIndex = -1);
192 void AddSelectedLayer(int LayerIndex);
193 void SelectNextLayer();
194 void SelectPreviousLayer();
195 void SelectGameLayer();
196 void MakeGameLayer(const std::shared_ptr<CLayer> &pLayer);
197 void MakeTeleLayer(const std::shared_ptr<CLayer> &pLayer);
198 void MakeSpeedupLayer(const std::shared_ptr<CLayer> &pLayer);
199 void MakeFrontLayer(const std::shared_ptr<CLayer> &pLayer);
200 void MakeSwitchLayer(const std::shared_ptr<CLayer> &pLayer);
201 void MakeTuneLayer(const std::shared_ptr<CLayer> &pLayer);
202
203 // Quads
204 std::vector<CQuad *> SelectedQuads();
205 bool IsQuadSelected(int Index) const;
206 int FindSelectedQuadIndex(int Index) const;
207 void SelectQuad(int Index);
208 void ToggleSelectQuad(int Index);
209 void DeselectQuads();
210 bool IsQuadCornerSelected(int Index) const;
211 bool IsQuadPointSelected(int QuadIndex, int Index) const;
212 void SelectQuadPoint(int QuadIndex, int Index);
213 void ToggleSelectQuadPoint(int QuadIndex, int Index);
214 void DeselectQuadPoints();
215 void DeleteSelectedQuads();
216
217 // Envelopes
218 std::shared_ptr<CEnvelope> NewEnvelope(CEnvelope::EType Type);
219 void InsertEnvelope(int Index, std::shared_ptr<CEnvelope> &pEnvelope);
220 void UpdateEnvelopeReferences(int Index, std::shared_ptr<CEnvelope> &pEnvelope, std::vector<std::shared_ptr<IEditorEnvelopeReference>> &vpEditorObjectReferences);
221 std::vector<std::shared_ptr<IEditorEnvelopeReference>> DeleteEnvelope(int Index);
222 int MoveEnvelope(int IndexFrom, int IndexTo);
223 template<typename F>
224 std::vector<std::shared_ptr<IEditorEnvelopeReference>> VisitEnvelopeReferences(F &&Visitor);
225 bool IsEnvelopeUsed(int EnvelopeIndex) const;
227
228 // Envelope points
229 int FindEnvPointIndex(int Index, int Channel) const;
230 void SelectEnvPoint(int Index);
231 void SelectEnvPoint(int Index, int Channel);
232 void ToggleEnvPoint(int Index, int Channel);
233 bool IsEnvPointSelected(int Index, int Channel) const;
234 bool IsEnvPointSelected(int Index) const;
235 void DeselectEnvPoints();
236 bool IsTangentSelected() const;
237 bool IsTangentOutPointSelected(int Index, int Channel) const;
238 bool IsTangentOutSelected() const;
239 void SelectTangentOutPoint(int Index, int Channel);
240 bool IsTangentInPointSelected(int Index, int Channel) const;
241 bool IsTangentInSelected() const;
242 void SelectTangentInPoint(int Index, int Channel);
243 std::pair<CFixedTime, int> SelectedEnvelopeTimeAndValue() const;
244
245 // Images
246 std::shared_ptr<CEditorImage> SelectedImage() const;
247 void SelectImage(const std::shared_ptr<CEditorImage> &pImage);
248 void SelectNextImage();
249 void SelectPreviousImage();
250 bool IsImageUsed(int ImageIndex) const;
251 std::vector<int> SortImages();
252
253 // Sounds
254 std::shared_ptr<CEditorSound> SelectedSound() const;
255 void SelectSound(const std::shared_ptr<CEditorSound> &pSound);
256 void SelectNextSound();
257 void SelectPreviousSound();
258 bool IsSoundUsed(int SoundIndex) const;
260
261 void PlaceBorderTiles();
262
263 void AddTileArt(CImageInfo &&Image, const char *pFilename, bool IgnoreHistory);
264
265 void AddQuadArt(CImageInfo &&Image, const CQuadArtParameters &Parameters, bool IgnoreHistory);
266
267private:
269};
270
271#endif
CDataFileWriterFinishJob(IStorage *pStorage, const char *pRealFilename, const char *pTempFilename, CDataFileWriter &&Writer)
Definition map_io.cpp:62
void Run() override
Definition map_io.cpp:41
CDataFileWriter m_Writer
Definition map.h:44
const char * ErrorMessage() const
Definition map.h:51
char m_aErrorMessage[2 *IO_MAX_PATH_LENGTH+128]
Definition map.h:43
IStorage * m_pStorage
Definition map.h:40
char m_aRealFilename[IO_MAX_PATH_LENGTH]
Definition map.h:41
char m_aTempFilename[IO_MAX_PATH_LENGTH]
Definition map.h:42
const char * RealFilename() const
Definition map.h:50
Definition datafile.h:65
Definition editor_history.h:13
Definition image.h:12
Definition map.h:112
char m_aAuthor[32]
Definition map.h:114
char m_aCredits[128]
Definition map.h:116
void Copy(const CMapInfo &Source)
Definition map.cpp:25
char m_aVersion[16]
Definition map.h:115
void Reset()
Definition map.cpp:17
char m_aLicense[32]
Definition map.h:117
bool IsTangentInPointSelected(int Index, int Channel) const
Definition map.cpp:807
bool m_Modified
Definition map.h:87
bool IsQuadPointSelected(int QuadIndex, int Index) const
Definition map.cpp:485
std::shared_ptr< CLayerSwitch > m_pSwitchLayer
Definition map.h:108
void AddTileArt(CImageInfo &&Image, const char *pFilename, bool IgnoreHistory)
Definition tile_art.cpp:140
CMapInfo m_MapInfoTmp
Definition map.h:123
CEditor * m_pEditor
Definition map.h:268
void PlaceBorderTiles()
Definition map.cpp:1031
bool Append(const char *pFilename, int StorageType, bool IgnoreHistory, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1077
void SelectLayer(int LayerIndex, int GroupIndex=-1)
Definition map.cpp:321
std::pair< CFixedTime, int > SelectedEnvelopeTimeAndValue() const
Definition map.cpp:823
CSoundSourceCircleShapePropTracker m_SoundSourceCircleShapePropTracker
Definition map.h:140
CSoundSourceOperationTracker m_SoundSourceOperationTracker
Definition map.h:137
void SelectSound(const std::shared_ptr< CEditorSound > &pSound)
Definition map.cpp:984
void MakeGameGroup(std::shared_ptr< CLayerGroup > pGroup)
Definition map.cpp:290
CLayerGroupPropTracker m_LayerGroupPropTracker
Definition map.h:131
int FindEnvPointIndex(int Index, int Channel) const
Definition map.cpp:720
void OnModify()
Definition map.cpp:33
void InsertEnvelope(int Index, std::shared_ptr< CEnvelope > &pEnvelope)
Definition map.cpp:565
std::vector< CEditorMapSetting > m_vSettings
Definition map.h:101
void MakeTuneLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:426
void ToggleEnvPoint(int Index, int Channel)
Definition map.cpp:747
std::shared_ptr< CEditorImage > SelectedImage() const
Definition map.cpp:853
float m_LastSaveTime
Definition map.h:93
void RemoveUnusedEnvelopes()
Definition map.cpp:696
bool PerformPreSaveSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:446
CEditorHistory m_EditorHistory
Definition map.h:126
bool IsQuadSelected(int Index) const
Definition map.cpp:447
std::vector< std::shared_ptr< CLayerGroup > > m_vpGroups
Definition map.h:97
int m_CurrentQuadIndex
Definition map.h:148
std::vector< std::shared_ptr< CEditorImage > > m_vpImages
Definition map.h:98
void ResetModifiedState()
Definition map.cpp:40
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition map.h:82
int m_ShiftBy
Definition map.h:158
std::shared_ptr< CLayerTele > m_pTeleLayer
Definition map.h:105
void ModifyEnvelopeIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:234
void SelectNextSound()
Definition map.cpp:996
std::shared_ptr< CEnvelope > NewEnvelope(CEnvelope::EType Type)
Definition map.cpp:547
int m_SelectedQuadPoints
Definition map.h:146
void SelectPreviousImage()
Definition map.cpp:899
void SelectPreviousSound()
Definition map.cpp:1001
bool Load(const char *pFilename, int StorageType, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:474
void DeleteGroup(int Index)
Definition map.cpp:282
int m_SelectedGroup
Definition map.h:143
bool IsTangentSelected() const
Definition map.cpp:786
void ModifyImageIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:225
void DeselectQuadPoints()
Definition map.cpp:516
std::shared_ptr< CLayerFront > m_pFrontLayer
Definition map.h:107
void SelectTangentInPoint(int Index, int Channel)
Definition map.cpp:817
std::vector< std::shared_ptr< CEditorSound > > m_vpSounds
Definition map.h:100
void SelectTangentOutPoint(int Index, int Channel)
Definition map.cpp:801
void Clean()
Definition map.cpp:48
CEnvelopeEditorOperationTracker m_EnvOpTracker
Definition map.h:130
void SelectQuad(int Index)
Definition map.cpp:460
CEditorHistory m_ServerSettingsHistory
Definition map.h:127
CLayerSoundsPropTracker m_LayerSoundsPropTracker
Definition map.h:136
std::vector< std::shared_ptr< IEditorEnvelopeReference > > DeleteEnvelope(int Index)
Definition map.cpp:580
CEditorHistory m_EnvelopeEditorHistory
Definition map.h:128
std::pair< int, int > m_SelectedTangentInPoint
Definition map.h:152
int MoveGroup(int IndexFrom, int IndexTo)
Definition map.cpp:267
CEditorMap(CEditor *pEditor)
Definition map.h:59
void ToggleSelectQuad(int Index)
Definition map.cpp:466
bool m_UpdateEnvPointInfo
Definition map.h:150
void DeselectEnvPoints()
Definition map.cpp:779
void SelectGameLayer()
Definition map.cpp:386
CSoundSource * SelectedSoundSource() const
Definition map.cpp:1021
int m_SelectedQuadEnvelope
Definition map.h:147
std::vector< int > m_vSelectedQuads
Definition map.h:145
float m_LastModifiedTime
Definition map.h:92
CLayerTilesCommonPropTracker m_LayerTilesCommonPropTracker
Definition map.h:133
void CreateDefault()
Definition map.cpp:96
std::shared_ptr< CLayerGroup > SelectedGroup() const
Definition map.cpp:252
void MakeSpeedupLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:411
std::vector< std::shared_ptr< IEditorEnvelopeReference > > VisitEnvelopeReferences(F &&Visitor)
Definition map.cpp:631
int m_SelectedSoundSource
Definition map.h:156
const CEditor * Editor() const
Definition map.h:79
CLayerQuadsPropTracker m_LayerQuadPropTracker
Definition map.h:135
CMapInfo m_MapInfo
Definition map.h:122
void DeleteSelectedQuads()
Definition map.cpp:521
CSoundSourcePropTracker m_SoundSourcePropTracker
Definition map.h:138
void MakeTeleLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:406
std::vector< std::shared_ptr< CEnvelope > > m_vpEnvelopes
Definition map.h:99
void SelectPreviousLayer()
Definition map.cpp:362
bool IsTangentInSelected() const
Definition map.cpp:812
bool IsSoundUsed(int SoundIndex) const
Definition map.cpp:1006
CQuadEditTracker m_QuadTracker
Definition map.h:129
bool IsEnvPointSelected(int Index, int Channel) const
Definition map.cpp:762
CLayerTilesPropTracker m_LayerTilesPropTracker
Definition map.h:134
bool PerformAutosave(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1251
bool IsQuadCornerSelected(int Index) const
Definition map.cpp:480
void SelectNextLayer()
Definition map.cpp:338
void AddSelectedLayer(int LayerIndex)
Definition map.cpp:332
CQuadKnife::CState m_QuadKnifeState
Definition map.h:161
std::vector< CQuad * > SelectedQuads()
Definition map.cpp:431
bool m_ModifiedAuto
Definition map.h:91
void SelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:490
void UpdateEnvelopeReferences(int Index, std::shared_ptr< CEnvelope > &pEnvelope, std::vector< std::shared_ptr< IEditorEnvelopeReference > > &vpEditorObjectReferences)
Definition map.cpp:573
bool IsTangentOutPointSelected(int Index, int Channel) const
Definition map.cpp:791
void MakeSwitchLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:421
std::shared_ptr< CLayerGroup > m_pGameGroup
Definition map.h:103
CSoundSourceRectShapePropTracker m_SoundSourceRectShapePropTracker
Definition map.h:139
void SelectImage(const std::shared_ptr< CEditorImage > &pImage)
Definition map.cpp:862
void MakeGameLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:401
std::vector< int > SortImages()
Definition map.cpp:939
bool Save(const char *pFilename, const FErrorHandler &ErrorHandler)
Definition map_io.cpp:71
std::pair< int, int > m_SelectedTangentOutPoint
Definition map.h:153
int FindSelectedQuadIndex(int Index) const
Definition map.cpp:452
std::shared_ptr< CLayer > SelectedLayer(int Index) const
Definition map.cpp:297
void MakeFrontLayer(const std::shared_ptr< CLayer > &pLayer)
Definition map.cpp:416
bool m_ValidSaveFilename
Definition map.h:83
CEditor * Editor()
Definition map.h:80
void CheckIntegrity()
Definition map.cpp:122
int m_SelectedImage
Definition map.h:154
CLayerPropTracker m_LayerPropTracker
Definition map.h:132
std::shared_ptr< CLayerSpeedup > m_pSpeedupLayer
Definition map.h:106
void PerformSanityChecks(const FErrorHandler &ErrorHandler)
Definition map_io.cpp:1216
bool IsImageUsed(int ImageIndex) const
Definition map.cpp:924
void SelectNextImage()
Definition map.cpp:874
void ToggleSelectQuadPoint(int QuadIndex, int Index)
Definition map.cpp:496
std::shared_ptr< CLayerGame > m_pGameLayer
Definition map.h:104
void SelectEnvPoint(int Index)
Definition map.cpp:733
bool IsEnvelopeUsed(int EnvelopeIndex) const
Definition map.cpp:681
std::vector< int > m_vSelectedLayers
Definition map.h:144
std::shared_ptr< CEditorSound > SelectedSound() const
Definition map.cpp:975
void AddQuadArt(CImageInfo &&Image, const CQuadArtParameters &Parameters, bool IgnoreHistory)
Definition quad_art.cpp:174
int MoveEnvelope(int IndexFrom, int IndexTo)
Definition map.cpp:602
std::vector< std::pair< int, int > > m_vSelectedEnvelopePoints
Definition map.h:151
bool IsTangentOutSelected() const
Definition map.cpp:796
std::shared_ptr< CLayerTune > m_pTuneLayer
Definition map.h:109
std::shared_ptr< CLayer > SelectedLayerType(int Index, int Type) const
Definition map.cpp:313
int m_SelectedEnvelope
Definition map.h:149
void ModifySoundIndex(const FIndexModifyFunction &IndexModifyFunction)
Definition map.cpp:243
int m_SelectedSound
Definition map.h:155
std::shared_ptr< CLayerGroup > NewGroup()
Definition map.cpp:259
void DeselectQuads()
Definition map.cpp:475
Definition sound.h:9
Definition editor.h:109
Definition editor_trackers.h:76
EType
Definition envelope.h:18
Definition image.h:12
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 quad_art.h:15
Definition editor_trackers.h:21
Definition quad_knife.h:10
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:11
Definition storage.h:21
std::function< void(const char *pErrorMessage)> FErrorHandler
Definition map.h:54
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
std::function< void(int *pIndex)> FIndexModifyFunction
Definition layer.h:11