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