1 #include "LevelEditor.h"
2
LevelEditor(Map & map,Level & level,int pos)3 LevelEditor::LevelEditor(Map& map, Level& level, int pos)
4 {
5 CtrlLayout(*this, "Редактор этажа");
6 MaximizeBox().Sizeable();
7
8 _item = -1;
9 _pos = pos;
10 _map = ↦
11 _level = &level;
12
13 EditView.HideLevelsCtrl();
14 EditView.HideNavButtons();
15
16 LayerList.WhenToolBar = THISBACK(CreateLayerToolBar);
17 LayerList.WhenChangeRow = THISBACK(UpdateItemList);
18 LayerList.AddColumn(t_("#")).Min(HorzLayoutZoom(40)).Max(VertLayoutZoom(40))
19 .HeaderAlignCenter().AlignCenter();
20 LayerList.SetToolBar();
21
22 LayerList.AddColumn(t_("Layer Name"))
23 .HeaderAlignCenter().AlignCenter();
24
25 ItemList.WhenToolBar = THISBACK(CreateItemToolBar);
26 ItemList.WhenChangeRow = THISBACK(OnItemSelect);
27 ItemList.WhenLeftDouble = THISBACK(OnItemProperties);
28 ItemList.AddColumn(t_("#")).Min(HorzLayoutZoom(40)).Max(VertLayoutZoom(40))
29 .HeaderAlignCenter().AlignCenter();
30 ItemList.SetToolBar();
31
32 ItemList.AddColumn(t_("Item Name"))
33 .HeaderAlignCenter().AlignCenter();
34
35 ItemTypeList.Add(t_("Rooms"));
36 ItemTypeList.SetIndex(0);
37
38 LoadMap();
39 UpdateLayerList();
40 }
41
UpdateLayerList()42 void LevelEditor::UpdateLayerList()
43 {
44 if (!_level)
45 return;
46
47 int row = LayerList.GetCurrentRow();
48
49 LayerList.Clear();
50
51 for (int i = 0; i < _level->GetLayers().GetCount(); ++i)
52 {
53 LayerList.Add(i, _level->GetLayers()[i].GetName());
54 }
55
56 if (row >= 0 && row < LayerList.GetRowCount())
57 LayerList.SetCursor(row);
58
59 if (row < 0 && LayerList.GetRowCount())
60 LayerList.SetCursor(0);
61
62 MapLevel* level = EditView.GetCurrentLevel();
63 if (!level) return;
64 else level->ClearEditPoints();
65
66 _item = -1;
67 UpdateItemList();
68 }
69
UpdateItemList()70 void LevelEditor::UpdateItemList()
71 {
72 ItemList.Clear();
73
74 int row = LayerList.GetCurrentRow();
75 if (row < 0) return;
76
77 Layer& lay = _level->GetLayers()[row];
78
79 for (int i = 0; i < lay.GetRooms().GetCount(); ++i)
80 {
81 ItemList.Add(i, lay.GetRooms()[i].GetName());
82 }
83
84 if (ItemList.GetRowCount())
85 ItemList.SetCursor(0);
86
87 OnItemSelect();
88 UpdateMap(ItemList.GetRowCount() > 0);
89 }
90
LoadMap()91 void LevelEditor::LoadMap()
92 {
93 Map map;
94
95 for (int i = 0; i < _pos; ++i)
96 map.GetLevels().Add(Level());
97
98 map.GetLevels().Add(Level(*_level));
99 map.SetName(_map->GetName());
100
101 EditView.LoadMap(map, true);
102 EditView.SetCurrentLevel(_pos);
103 EditView.GetCurrentLevel()->WhenChangePoint = THISBACK(OnChangePoint);
104 EditView.HighQuality(false);
105 }
106
UpdateMap(bool editMode)107 void LevelEditor::UpdateMap(bool editMode)
108 {
109 EditView.UpdateLevel(*_level, _pos, editMode);
110 }
111
Execute()112 int LevelEditor::Execute()
113 {
114 int res = TopWindow::Execute();
115
116 int layer = LayerList.GetCurrentRow();
117 if (layer < 0) return res;
118
119 Layer& lay = _level->GetLayers()[layer];
120
121 int row = ItemList.GetCurrentRow();
122 if (row < 0) return res;
123
124 MapLevel* level = EditView.GetCurrentLevel();
125 if (!level) return res;
126
127 if (_item != -1)
128 {
129 if (_item >= 0 && _item < lay.GetRooms().GetCount())
130 {
131 Room& room = lay.GetRooms()[_item];
132 room.GetVertices().Clear();
133 for (int i = 0; i < level->GetEditPoints().GetCount(); ++i)
134 {
135 room.GetVertices() << level->GetEditPoints()[i];
136 }
137 }
138 _item = -1;
139 }
140
141 return res;
142 }
143