1#ifndef GAME_EDITOR_MAPITEMS_LAYER_TELE_H
2#define GAME_EDITOR_MAPITEMS_LAYER_TELE_H
3
4#include "layer_tiles.h"
5
6struct STeleTileStateChange
7{
8 bool m_Changed;
9 struct SData
10 {
11 int m_Number;
12 int m_Type;
13 int m_Index;
14 } m_Previous, m_Current;
15};
16
17class CLayerTele : public CLayerTiles
18{
19public:
20 CLayerTele(CEditorMap *pMap, int w, int h);
21 CLayerTele(const CLayerTele &Other);
22 ~CLayerTele() override;
23
24 CTeleTile *m_pTeleTile;
25 unsigned char m_TeleNumber;
26 unsigned char m_TeleCheckpointNumber;
27
28 void Resize(int NewW, int NewH) override;
29 void Shift(EShiftDirection Direction) override;
30 [[nodiscard]] bool IsEmpty() const override;
31 void BrushDraw(CLayer *pBrush, vec2 WorldPos) override;
32 void BrushFlipX() override;
33 void BrushFlipY() override;
34 void BrushRotate(float Amount) override;
35 void FillSelection(bool Empty, CLayer *pBrush, CUIRect Rect) override;
36 int FindNextFreeNumber(bool Checkpoint) const;
37 bool ContainsElementWithId(int Id, bool Checkpoint) const;
38 void GetPos(int Number, int Offset, int &TeleX, int &TeleY);
39
40 int m_GotoTeleOffset;
41 ivec2 m_GotoTeleLastPos;
42
43 EditorTileStateChangeHistory<STeleTileStateChange> m_History;
44 void ClearHistory() override
45 {
46 CLayerTiles::ClearHistory();
47 m_History.clear();
48 }
49
50 std::shared_ptr<CLayer> Duplicate() const override;
51 const char *TypeName() const override;
52
53private:
54 void RecordStateChange(int x, int y, STeleTileStateChange::SData Previous, STeleTileStateChange::SData Current);
55
56 friend class CLayerTiles;
57};
58
59#endif
60