OSDN Git Service

1b1c60b418167c3505f5de0523d328d499c52606
[skyscrapersim/skyscraper.git] / src / meshcontrol.cpp
1 /* $Id$ */
2
3 /*
4         Skyscraper 1.2 Alpha - Mesh Control Form
5         Copyright (C)2005-2009 Ryan Thoryk
6         http://www.skyscrapersim.com
7         http://sourceforge.net/projects/skyscraper
8         Contact - ryan@tliquest.net
9
10         This program is free software; you can redistribute it and/or
11         modify it under the terms of the GNU General Public License
12         as published by the Free Software Foundation; either version 2
13         of the License, or (at your option) any later version.
14
15         This program is distributed in the hope that it will be useful,
16         but WITHOUT ANY WARRANTY; without even the implied warranty of
17         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18         GNU General Public License for more details.
19
20         You should have received a copy of the GNU General Public License
21         along with this program; if not, write to the Free Software
22         Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23 */
24
25 //(*InternalHeaders(MeshControl)
26 #include <wx/intl.h>
27 #include <wx/string.h>
28 //*)
29 #include "debugpanel.h"
30 #include "meshcontrol.h"
31 #include "globals.h"
32 #include "sbs.h"
33 #include "camera.h"
34 #include "floor.h"
35 #include "elevator.h"
36
37 extern SBS *Simcore; //external pointer to the SBS engine
38 MeshControl *p; //self pointer
39
40 //(*IdInit(MeshControl)
41 const long MeshControl::ID_chkExternal = wxNewId();
42 const long MeshControl::ID_chkBuildings = wxNewId();
43 const long MeshControl::ID_chkLandscape = wxNewId();
44 const long MeshControl::ID_chkSky = wxNewId();
45 const long MeshControl::ID_chkElevators = wxNewId();
46 const long MeshControl::ID_chkFloor = wxNewId();
47 const long MeshControl::ID_chkShafts = wxNewId();
48 const long MeshControl::ID_chkStairs = wxNewId();
49 const long MeshControl::ID_chkColumnFrame = wxNewId();
50 const long MeshControl::ID_chkAllFloors = wxNewId();
51 const long MeshControl::ID_chkAllShafts = wxNewId();
52 const long MeshControl::ID_chkAllStairs = wxNewId();
53 const long MeshControl::ID_chkAllColumnFrames = wxNewId();
54 const long MeshControl::ID_bOk = wxNewId();
55 //*)
56
57 BEGIN_EVENT_TABLE(MeshControl,wxDialog)
58         //(*EventTable(MeshControl)
59         //*)
60 END_EVENT_TABLE()
61
62 MeshControl::MeshControl(wxWindow* parent,wxWindowID id)
63 {
64         //(*Initialize(MeshControl)
65         wxStaticBoxSizer* StaticBoxSizer2;
66         wxStaticBoxSizer* StaticBoxSizer3;
67         wxStaticBoxSizer* StaticBoxSizer1;
68         wxBoxSizer* BoxSizer3;
69
70         Create(parent, wxID_ANY, _("Realtime Mesh Control"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY"));
71         BoxSizer1 = new wxBoxSizer(wxVERTICAL);
72         BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
73         StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, this, _("Global Objects"));
74         chkExternal = new wxCheckBox(this, ID_chkExternal, _("External"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkExternal"));
75         chkExternal->SetValue(false);
76         StaticBoxSizer1->Add(chkExternal, 0, wxTOP|wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
77         chkBuildings = new wxCheckBox(this, ID_chkBuildings, _("Buildings"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkBuildings"));
78         chkBuildings->SetValue(false);
79         StaticBoxSizer1->Add(chkBuildings, 0, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
80         chkLandscape = new wxCheckBox(this, ID_chkLandscape, _("Landscape"), wxDefaultPosition, wxSize(100,-1), 0, wxDefaultValidator, _T("ID_chkLandscape"));
81         chkLandscape->SetValue(false);
82         StaticBoxSizer1->Add(chkLandscape, 0, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
83         chkSky = new wxCheckBox(this, ID_chkSky, _("Sky"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkSky"));
84         chkSky->SetValue(false);
85         StaticBoxSizer1->Add(chkSky, 0, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
86         chkElevators = new wxCheckBox(this, ID_chkElevators, _("Elevators"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkElevators"));
87         chkElevators->SetValue(false);
88         StaticBoxSizer1->Add(chkElevators, 1, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
89         BoxSizer2->Add(StaticBoxSizer1, 1, wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL, 5);
90         BoxSizer3 = new wxBoxSizer(wxVERTICAL);
91         StaticBoxSizer2 = new wxStaticBoxSizer(wxVERTICAL, this, _("Per-Floor Objects"));
92         chkFloor = new wxCheckBox(this, ID_chkFloor, _("Level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkFloor"));
93         chkFloor->SetValue(false);
94         StaticBoxSizer2->Add(chkFloor, 0, wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
95         chkShafts = new wxCheckBox(this, ID_chkShafts, _("Shafts"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkShafts"));
96         chkShafts->SetValue(false);
97         StaticBoxSizer2->Add(chkShafts, 1, wxBOTTOM|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
98         chkStairs = new wxCheckBox(this, ID_chkStairs, _("Stairs"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkStairs"));
99         chkStairs->SetValue(false);
100         StaticBoxSizer2->Add(chkStairs, 1, wxBOTTOM|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
101         chkColumnFrame = new wxCheckBox(this, ID_chkColumnFrame, _("Column Frame"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkColumnFrame"));
102         chkColumnFrame->SetValue(false);
103         StaticBoxSizer2->Add(chkColumnFrame, 1, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
104         BoxSizer3->Add(StaticBoxSizer2, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
105         StaticBoxSizer3 = new wxStaticBoxSizer(wxVERTICAL, this, _("Grouped Objects"));
106         chkAllFloors = new wxCheckBox(this, ID_chkAllFloors, _("All Floors"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkAllFloors"));
107         chkAllFloors->SetValue(false);
108         StaticBoxSizer3->Add(chkAllFloors, 1, wxTOP|wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
109         chkAllShafts = new wxCheckBox(this, ID_chkAllShafts, _("All Shafts"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkAllShafts"));
110         chkAllShafts->SetValue(false);
111         StaticBoxSizer3->Add(chkAllShafts, 1, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
112         chkAllStairs = new wxCheckBox(this, ID_chkAllStairs, _("All Stairs"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkAllStairs"));
113         chkAllStairs->SetValue(false);
114         StaticBoxSizer3->Add(chkAllStairs, 1, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
115         chkAllColumnFrames = new wxCheckBox(this, ID_chkAllColumnFrames, _("All Column Frames"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkAllColumnFrames"));
116         chkAllColumnFrames->SetValue(false);
117         StaticBoxSizer3->Add(chkAllColumnFrames, 1, wxBOTTOM|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
118         BoxSizer3->Add(StaticBoxSizer3, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
119         BoxSizer2->Add(BoxSizer3, 1, wxLEFT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
120         BoxSizer1->Add(BoxSizer2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10);
121         bOk = new wxButton(this, ID_bOk, _("OK"), wxPoint(75,145), wxDefaultSize, 0, wxDefaultValidator, _T("ID_bOk"));
122         BoxSizer1->Add(bOk, 0, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10);
123         SetSizer(BoxSizer1);
124         BoxSizer1->Fit(this);
125         BoxSizer1->SetSizeHints(this);
126         Center();
127
128         Connect(ID_chkExternal,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkExternal_Click);
129         Connect(ID_chkBuildings,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkBuildings_Click);
130         Connect(ID_chkLandscape,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkLandscape_Click);
131         Connect(ID_chkSky,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkSky_Click);
132         Connect(ID_chkElevators,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkElevators_Click);
133         Connect(ID_chkFloor,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkFloor_Click);
134         Connect(ID_chkShafts,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkShafts_Click);
135         Connect(ID_chkStairs,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkStairs_Click);
136         Connect(ID_chkColumnFrame,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkColumnFrame_Click);
137         Connect(ID_chkAllFloors,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkAllFloors_Click);
138         Connect(ID_chkAllShafts,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkAllShafts_Click);
139         Connect(ID_chkAllStairs,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkAllStairs_Click);
140         Connect(ID_chkAllColumnFrames,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&MeshControl::On_chkAllColumnFrames_Click);
141         Connect(ID_bOk,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&MeshControl::On_bOk_Click);
142         //*)
143         p = this;
144         OnInit();
145 }
146
147 MeshControl::~MeshControl()
148 {
149 }
150
151
152 void MeshControl::OnInit()
153 {
154         chkElevators->SetValue(true);
155 }
156
157 void MeshControl::On_bOk_Click(wxCommandEvent& event)
158 {
159         p->Hide();
160 }
161
162 void MeshControl::On_chkSky_Click(wxCommandEvent& event)
163 {
164         Simcore->EnableSkybox(chkSky->GetValue());
165 }
166
167 void MeshControl::On_chkLandscape_Click(wxCommandEvent& event)
168 {
169         Simcore->EnableLandscape(chkLandscape->GetValue());
170 }
171
172 void MeshControl::On_chkBuildings_Click(wxCommandEvent& event)
173 {
174         Simcore->EnableBuildings(chkBuildings->GetValue());
175 }
176
177 void MeshControl::On_chkExternal_Click(wxCommandEvent& event)
178 {
179         Simcore->EnableExternal(chkExternal->GetValue());
180 }
181
182 void MeshControl::On_chkFloor_Click(wxCommandEvent& event)
183 {
184         Simcore->GetFloor(Simcore->camera->CurrentFloor)->Enabled(chkFloor->GetValue());
185 }
186
187 void MeshControl::On_chkElevators_Click(wxCommandEvent& event)
188 {
189         if (chkElevators->GetValue() == true)
190         {
191                 for (int i = 1; i <= Simcore->Elevators(); i++)
192                         Simcore->GetElevator(i)->Enabled(true);
193         }
194         else
195         {
196                 for (int i = 1; i <= Simcore->Elevators(); i++)
197                         Simcore->GetElevator(i)->Enabled(false);
198         }
199 }
200
201 void MeshControl::On_chkShafts_Click(wxCommandEvent& event)
202 {
203         for (int i = 1; i <= Simcore->Shafts(); i++)
204                 Simcore->GetShaft(i)->Enabled(Simcore->camera->CurrentFloor, chkShafts->GetValue(), true);
205 }
206
207 void MeshControl::On_chkStairs_Click(wxCommandEvent& event)
208 {
209         for (int i = 1; i <= Simcore->StairsNum(); i++)
210                 Simcore->GetStairs(i)->Enabled(Simcore->camera->CurrentFloor, chkStairs->GetValue());
211 }
212
213 void MeshControl::On_chkAllFloors_Click(wxCommandEvent& event)
214 {
215         for (int i = -Simcore->Basements; i < Simcore->Floors; i++)
216                 Simcore->GetFloor(i)->Enabled(chkAllFloors->GetValue());
217 }
218
219 void MeshControl::On_chkAllShafts_Click(wxCommandEvent& event)
220 {
221         for (int i = 1; i <= Simcore->Shafts(); i++)
222         {
223                 for (int j = -Simcore->Basements; j <= Simcore->Floors; j++)
224                         Simcore->GetShaft(i)->Enabled(j, chkAllShafts->GetValue(), true);
225         }
226 }
227
228 void MeshControl::On_chkAllStairs_Click(wxCommandEvent& event)
229 {
230         for (int i = 1; i <= Simcore->StairsNum(); i++)
231         {
232                 for (int j = -Simcore->Basements; j <= Simcore->Floors; j++)
233                         Simcore->GetStairs(i)->Enabled(j, chkAllStairs->GetValue());
234         }
235 }
236
237 void MeshControl::On_chkColumnFrame_Click(wxCommandEvent& event)
238 {
239         Simcore->GetFloor(Simcore->camera->CurrentFloor)->EnableColumnFrame(chkColumnFrame->GetValue());
240 }
241
242 void MeshControl::On_chkAllColumnFrames_Click(wxCommandEvent& event)
243 {
244         for (int i = -Simcore->Basements; i < Simcore->Floors; i++)
245                 Simcore->GetFloor(i)->EnableColumnFrame(chkAllColumnFrames->GetValue());
246 }