Skyscraper 2.0
manager.cpp
Go to the documentation of this file.
1/*
2 Scalable Building Simulator - Manager Classes
3 The Skyscraper Project - Version 2.0
4 Copyright (C)2004-2024 Ryan Thoryk
5 https://www.skyscrapersim.net
6 https://sourceforge.net/projects/skyscraper/
7 Contact - ryan@skyscrapersim.net
8
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22*/
23
24#include "globals.h"
25#include "sbs.h"
26#include "floor.h"
27#include "elevator.h"
28#include "shaft.h"
29#include "stairs.h"
30#include "door.h"
31#include "revolvingdoor.h"
32#include "dynamicmesh.h"
33#include "vehicle.h"
34#include "controller.h"
35#include "profiler.h"
36#include "manager.h"
37
38namespace SBS {
39
40Manager::Manager(Object* parent) : Object(parent)
41{
42 //manager constructor
43}
44
46{
47 //set up SBS object
48 SetValues("FloorManager", "Floor Manager", true);
49
50 get_result = 0;
51 get_number = 0;
52 floors = new DynamicMesh(this, GetSceneNode(), "Floor Container");
53 interfloors = new DynamicMesh(this, GetSceneNode(), "Interfloor Container");
54 columnframes = new DynamicMesh(this, GetSceneNode(), "Columnframe Container");
55 EnableLoop(true);
56}
57
59{
60 //delete floors
61 for (size_t i = 0; i < Array.size(); i++)
62 {
63 if (Array[i].object)
64 {
65 Array[i].object->parent_deleting = true;
66 delete Array[i].object;
67 }
68 Array[i].object = 0;
69 }
70
71 //delete dynamic meshes
72 if (floors)
73 delete floors;
74 floors = 0;
75 if (interfloors)
76 delete interfloors;
77 interfloors = 0;
78 if (columnframes)
79 delete columnframes;
80 columnframes = 0;
81}
82
84{
85 //create a new floor object
86
87 if (Get(number))
88 return 0;
89
90 Map floor;
91 floor.number = number;
92 floor.object = new Floor(this, this, number);
93 Array.emplace_back(floor);
94
95 if (number < 0)
96 sbs->Basements++;
97 else
98 sbs->Floors++;
99 return floor.object;
100}
101
103{
104 //return the number of floors, including basements
105 return (int)Array.size();
106}
107
109{
110 //return pointer to floor object
111
112 //return previous cached entry if the same
113 if (get_number == number && get_result)
114 return get_result;
115
116 if (Array.size() > 0)
117 {
118 //quick prediction
119 if (sbs->Basements + number < (int)Array.size() && sbs->Basements + number >= 0)
120 {
121 Map floor = Array[sbs->Basements + number];
122 if (floor.number == number)
123 {
124 if (floor.object)
125 {
126 get_number = number;
127 get_result = floor.object;
128 return floor.object;
129 }
130 else
131 {
132 get_number = 0;
133 get_result = 0;
134 return 0;
135 }
136 }
137 else if (number < 0)
138 {
139 if (-(number + 1) < (int)Array.size())
140 {
141 floor = Array[-(number + 1)];
142 if (floor.number == number)
143 {
144 if (floor.object)
145 {
146 get_number = number;
147 get_result = floor.object;
148 return floor.object;
149 }
150 else
151 {
152 get_number = 0;
153 get_result = 0;
154 return 0;
155 }
156 }
157 }
158 }
159 }
160 }
161
162 for (size_t i = 0; i < Array.size(); i++)
163 {
164 if (Array[i].number == number)
165 {
166 get_number = number;
167 get_result = Array[i].object;
168 return get_result;
169 }
170 }
171
172 get_number = 0;
173 get_result = 0;
174 return 0;
175}
176
178{
179 if (index < 0 || index >= (int)Array.size())
180 return 0;
181
182 return Array[index].object;
183}
184
185Floor* FloorManager::GetByID(const std::string &id)
186{
187 for (size_t i = 0; i < Array.size(); i++)
188 {
189 if (Array[i].object)
190 {
191 if (Array[i].object->ID == id)
192 return Array[i].object;
193 }
194 }
195 return 0;
196}
197
198Floor* FloorManager::GetByNumberID(const std::string &id)
199{
200 for (size_t i = 0; i < Array.size(); i++)
201 {
202 if (Array[i].object)
203 {
204 if (Array[i].object->NumberID == id)
205 return Array[i].object;
206 }
207 }
208 return 0;
209}
210
212{
213 //remove a floor (does not delete the object)
214 for (size_t i = 0; i < Array.size(); i++)
215 {
216 if (Array[i].object == floor)
217 {
218 if (Array[i].object->Number < 0)
219 sbs->Basements--;
220 else
221 sbs->Floors--;
222
223 Array.erase(Array.begin() + i);
224
225 //clear cached values
226 get_result = 0;
227 get_number = 0;
228 return;
229 }
230 }
231}
232
234{
235 //enable or disable all floors
236 for (size_t i = 0; i < Array.size(); i++)
237 Array[i].object->Enabled(value);
238
239 //enable/disable dynamic meshes
240 floors->Enabled(value);
241 interfloors->Enabled(value);
242 columnframes->Enabled(value);
243}
244
246{
247 SBS_PROFILE("FloorManager::Loop");
248
249 LoopChildren();
250}
251
253{
254 //set up SBS object
255 SetValues("ElevatorManager", "Elevator Manager", true);
256
257 get_result = 0;
258 get_number = 0;
259 EnableLoop(true);
260}
261
263{
264 //delete elevators
265 for (size_t i = 0; i < Array.size(); i++)
266 {
267 if (Array[i].object)
268 {
269 Array[i].object->parent_deleting = true;
270 delete Array[i].object;
271 }
272 Array[i].object = 0;
273 }
274}
275
277{
278 //create a new elevator object
279
280 if (Get(number))
281 return 0;
282
283 Map elev;
284 elev.number = number;
285 elev.object = new Elevator(this, number);
286 Array.emplace_back(elev);
287 return elev.object;
288}
289
291{
292 //return the number of elevators
293 return (int)Array.size();
294}
295
297{
298 //return pointer to elevator object
299
300 if (number < 1 || number > GetCount())
301 return 0;
302
303 if (get_number == number && get_result)
304 return get_result;
305
306 if ((int)Array.size() > number - 1)
307 {
308 //quick prediction
309 if (Array[number - 1].number == number)
310 {
311 if (Array[number - 1].object)
312 {
313 get_number = number;
314 get_result = Array[number - 1].object;
315 return get_result;
316 }
317 else
318 {
319 get_number = 0;
320 get_result = 0;
321 return 0;
322 }
323 }
324 }
325
326 for (size_t i = 0; i < Array.size(); i++)
327 {
328 if (Array[i].number == number)
329 {
330 get_number = number;
331 get_result = Array[i].object;
332 return get_result;
333 }
334 }
335
336 get_number = 0;
337 get_result = 0;
338 return 0;
339}
340
342{
343 if (index < 0 || index >= (int)Array.size())
344 return 0;
345
346 return Array[index].object;
347}
348
350{
351 //remove an elevator (does not delete the object)
352 for (size_t i = 0; i < Array.size(); i++)
353 {
354 if (Array[i].object == elevator)
355 {
356 Array.erase(Array.begin() + i);
357
358 //clear cached values
359 get_result = 0;
360 get_number = 0;
361 return;
362 }
363 }
364}
365
367{
368 //turn off elevators, if the related shaft is only partially shown
369
370 for (size_t i = 0; i < Array.size(); i++)
371 {
372 Shaft *shaft = Array[i].object->GetShaft();
373
374 if (value == false)
375 value = shaft->GetShowFull();
376
377 Array[i].object->Enabled(value);
378 }
379}
380
382{
383 SBS_PROFILE("ElevatorManager::Loop");
384
385 if (sbs->ProcessElevators == true)
386 LoopChildren();
387}
388
390{
391 //set up SBS object
392 SetValues("ShaftManager", "Shaft Manager", true, false);
393
394 get_result = 0;
395 get_number = 0;
396 EnableLoop(true);
397}
398
400{
401 //delete shafts
402 for (size_t i = 0; i < Array.size(); i++)
403 {
404 if (Array[i].object)
405 {
406 Array[i].object->parent_deleting = true;
407 delete Array[i].object;
408 }
409 Array[i].object = 0;
410 }
411}
412
413Shaft* ShaftManager::Create(int number, Real CenterX, Real CenterZ, int _startfloor, int _endfloor)
414{
415 //create a shaft object
416
417 for (size_t i = 0; i < Array.size(); i++)
418 {
419 if (Array[i].number == number)
420 {
421 std::string num = ToString(number);
422 ReportError("Shaft " + num + " already exists");
423 return 0;
424 }
425 }
426
427 //verify floor range
428 if (_startfloor > _endfloor)
429 {
430 ReportError("CreateShaft: starting floor is greater than ending floor");
431 return 0;
432 }
433
434 if (sbs->IsValidFloor(_startfloor) == false)
435 {
436 std::string num = ToString(_startfloor);
437 ReportError("CreateShaft: Invalid starting floor " + num);
438 return 0;
439 }
440 if (sbs->IsValidFloor(_endfloor) == false)
441 {
442 std::string num = ToString(_endfloor);
443 ReportError("CreateShaft: Invalid ending floor " + num);
444 return 0;
445 }
446
447 Map shaft;
448 shaft.number = number;
449 shaft.object = new Shaft(this, number, CenterX, CenterZ, _startfloor, _endfloor);
450 Array.emplace_back(shaft);
451 return shaft.object;
452}
453
455{
456 //return the number of shafts
457 return (int)Array.size();
458}
459
461{
462 //return pointer to shaft object
463
464 if (number < 1 || number > GetCount())
465 return 0;
466
467 if (get_number == number && get_result)
468 return get_result;
469
470 if ((int)Array.size() > number - 1)
471 {
472 //quick prediction
473 if (Array[number - 1].number == number)
474 {
475 if (Array[number - 1].object)
476 {
477 get_number = number;
478 get_result = Array[number - 1].object;
479 return get_result;
480 }
481 else
482 {
483 get_number = 0;
484 get_result = 0;
485 return 0;
486 }
487 }
488 }
489
490 for (size_t i = 0; i < Array.size(); i++)
491 {
492 if (Array[i].number == number)
493 {
494 get_number = number;
495 get_result = Array[i].object;
496 return get_result;
497 }
498 }
499
500 get_number = 0;
501 get_result = 0;
502 return 0;
503}
504
506{
507 if (index < 0 || index >= (int)Array.size())
508 return 0;
509
510 return Array[index].object;
511}
512
514{
515 //remove a shaft (does not delete the object)
516 for (size_t i = 0; i < Array.size(); i++)
517 {
518 if (Array[i].object == shaft)
519 {
520 Array.erase(Array.begin() + i);
521
522 //clear cached values
523 get_result = 0;
524 get_number = 0;
525 return;
526 }
527 }
528}
529
531{
532 //enable or disable all shafts
533 for (size_t i = 0; i < Array.size(); i++)
534 Array[i].object->EnableWhole(value, true, true);
535}
536
538{
539 SBS_PROFILE("ShaftManager::Loop");
540
541 LoopChildren();
542}
543
545{
546 //set up SBS object
547 SetValues("StairwellManager", "Stairwell Manager", true, false);
548
549 get_result = 0;
550 get_number = 0;
551 EnableLoop(true);
552}
553
555{
556 //delete stairwell
557 for (size_t i = 0; i < Array.size(); i++)
558 {
559 if (Array[i].object)
560 {
561 Array[i].object->parent_deleting = true;
562 delete Array[i].object;
563 }
564 Array[i].object = 0;
565 }
566}
567
568Stairwell* StairwellManager::Create(int number, Real CenterX, Real CenterZ, int _startfloor, int _endfloor)
569{
570 //create a stairwell object
571
572 for (size_t i = 0; i < Array.size(); i++)
573 {
574 if (Array[i].number == number)
575 {
576 std::string num = ToString(number);
577 ReportError("Stairwell " + num + " already exists");
578 return 0;
579 }
580 }
581
582 //verify floor range
583 if (_startfloor > _endfloor)
584 {
585 ReportError("CreateStairwell: starting floor is greater than ending floor");
586 return 0;
587 }
588 if (sbs->IsValidFloor(_startfloor) == false)
589 {
590 std::string num = ToString(_startfloor);
591 ReportError("CreateStairwell: Invalid starting floor " + num);
592 return 0;
593 }
594 if (sbs->IsValidFloor(_endfloor) == false)
595 {
596 std::string num = ToString(_endfloor);
597 ReportError("CreateStairwell: Invalid ending floor " + num);
598 return 0;
599 }
600
601 Map stairs;
602 stairs.number = number;
603 stairs.object = new Stairwell(this, number, CenterX, CenterZ, _startfloor, _endfloor);
604 Array.emplace_back(stairs);
605 return stairs.object;
606}
607
609{
610 //return the number of stairwells
611 return (int)Array.size();
612}
613
615{
616 //return pointer to stairs object
617
618 if (number < 1 || number > GetCount())
619 return 0;
620
621 if (get_number == number && get_result)
622 return get_result;
623
624 if ((int)Array.size() > number - 1)
625 {
626 //quick prediction
627 if (Array[number - 1].number == number)
628 {
629 if (Array[number - 1].object)
630 {
631 get_number = number;
632 get_result = Array[number - 1].object;
633 return get_result;
634 }
635 else
636 {
637 get_number = 0;
638 get_result = 0;
639 return 0;
640 }
641 }
642 }
643
644 for (size_t i = 0; i < Array.size(); i++)
645 {
646 if (Array[i].number == number)
647 {
648 get_number = number;
649 get_result = Array[i].object;
650 return get_result;
651 }
652 }
653
654 get_number = 0;
655 get_result = 0;
656 return 0;
657}
658
660{
661 if (index < 0 || index >= (int)Array.size())
662 return 0;
663
664 return Array[index].object;
665}
666
668{
669 //remove a stairs object (does not delete the object)
670 for (size_t i = 0; i < Array.size(); i++)
671 {
672 if (Array[i].object == stairs)
673 {
674 Array.erase(Array.begin() + i);
675
676 //clear cached values
677 get_result = 0;
678 get_number = 0;
679 return;
680 }
681 }
682}
683
685{
686 //enable or disable all stairwells
687 for (size_t i = 0; i < Array.size(); i++)
688 Array[i].object->EnableWhole(value, true);
689}
690
692{
693 SBS_PROFILE("StairwellManager::Loop");
694
695 LoopChildren();
696}
697
699{
700 //set up SBS object
701 SetValues("DoorManager", "Door Manager", true);
702
703 //create a dynamic mesh for doors
704 wrapper = new DynamicMesh(this, GetSceneNode(), "Door Container", 0, true);
705 wrapper->force_combine = true;
706 EnableLoop(true);
707}
708
710{
711 //delete doors
712 for (size_t i = 0; i < Array.size(); i++)
713 {
714 if (Array[i])
715 {
716 Array[i]->parent_deleting = true;
717 delete Array[i];
718 }
719 Array[i] = 0;
720 }
721
722 if (wrapper)
723 delete wrapper;
724 wrapper = 0;
725}
726
727Door* DoorManager::AddDoor(std::string name, const std::string &open_sound, const std::string &close_sound, bool open_state, const std::string &texture, const std::string &side_texture, Real thickness, const std::string &face_direction, const std::string &open_direction, bool rotate, Real open_speed, Real close_speed, Real CenterX, Real CenterZ, Real width, Real height, Real voffset, Real tw, Real th, Real side_tw, Real side_th)
728{
729 int number = (int)Array.size() + 1;
730 if (name == "")
731 name = "Door " + ToString(number);
732
733 Door* door = new Door(this, wrapper, name, open_sound, close_sound, rotate);
734 door->CreateDoor(open_state, texture, side_texture, thickness, face_direction, open_direction, open_speed, close_speed, CenterX, CenterZ, width, height, voffset, tw, th, side_tw, side_th);
735 Array.emplace_back(door);
736 return door;
737}
738
739Door* DoorManager::CreateDoor(std::string name, const std::string &open_sound, const std::string &close_sound, bool rotate)
740{
741 int number = (int)Array.size() + 1;
742 if (name == "")
743 name = "Door " + ToString(number);
744
745 Door* door = new Door(this, wrapper, name, open_sound, close_sound, rotate);
746 Array.emplace_back(door);
747 return door;
748}
749
750Door* DoorManager::GetDoor(const std::string &name)
751{
752 for (size_t i = 0; i < Array.size(); i++)
753 {
754 if (Array[i]->GetName() == name)
755 return Array[i];
756 }
757 return 0;
758}
759
761{
762 //remove a door from the array
763 //this does not delete the object
764 for (size_t i = 0; i < Array.size(); i++)
765 {
766 if (Array[i] == door)
767 {
768 Array.erase(Array.begin() + i);
769 return;
770 }
771 }
772}
773
775{
776 //return the number of doors
777 return (int)Array.size();
778}
779
781{
782 if (index < 0 || index >= (int)Array.size())
783 return 0;
784
785 return Array[index];
786}
787
789{
790 SBS_PROFILE("DoorManager::Loop");
791
792 LoopChildren();
793}
794
796{
797 //set up SBS object
798 SetValues("RevolvingDoorManager", "Revolving Door Manager", true);
799
800 //create a dynamic mesh for doors
801 wrapper = new DynamicMesh(this, GetSceneNode(), "Revolving Door Container", 0, true);
802 wrapper->force_combine = true;
803 EnableLoop(true);
804}
805
807{
808 //delete doors
809 for (size_t i = 0; i < Array.size(); i++)
810 {
811 if (Array[i])
812 {
813 Array[i]->parent_deleting = true;
814 delete Array[i];
815 }
816 Array[i] = 0;
817 }
818
819 if (wrapper)
820 delete wrapper;
821 wrapper = 0;
822}
823
824RevolvingDoor* RevolvingDoorManager::AddDoor(std::string name, bool run, const std::string &soundfile, const std::string &texture, Real thickness, bool clockwise, int segments, Real speed, Real rotation, Real CenterX, Real CenterZ, Real width, Real height, Real voffset, Real tw, Real th)
825{
826 int number = (int)Array.size() + 1;
827 if (name == "")
828 name = "RevolvingDoor " + ToString(number);
829
830 RevolvingDoor* door = new RevolvingDoor(this, wrapper, name, run, soundfile, texture, thickness, clockwise, segments, speed, rotation, CenterX, CenterZ, width, height, voffset, tw, th);
831 Array.emplace_back(door);
832 return door;
833}
834
836{
837 //remove a door from the array
838 //this does not delete the object
839 for (size_t i = 0; i < Array.size(); i++)
840 {
841 if (Array[i] == door)
842 {
843 Array.erase(Array.begin() + i);
844 return;
845 }
846 }
847}
848
850{
851 //return the number of doors
852 return (int)Array.size();
853}
854
856{
857 if (index < 0 || index >= (int)Array.size())
858 return 0;
859
860 return Array[index];
861}
862
864{
865 SBS_PROFILE("RevolvingDoorManager::Loop");
866
867 LoopChildren();
868}
869
871{
872 //set up SBS object
873 SetValues("VehicleManager", "Vehicle Manager", true);
874
875 get_result = 0;
876 get_number = 0;
877 EnableLoop(true);
878}
879
881{
882 //delete vehicles
883 for (size_t i = 0; i < Array.size(); i++)
884 {
885 if (Array[i].object)
886 {
887 Array[i].object->parent_deleting = true;
888 delete Array[i].object;
889 }
890 Array[i].object = 0;
891 }
892}
893
895{
896 //create a new vehicle object
897
898 if (Get(number))
899 return 0;
900
901 Map v;
902 v.number = number;
903 v.object = new Vehicle(this, number);
904 Array.emplace_back(v);
905 return v.object;
906}
907
909{
910 //return the number of vehicles
911 return (int)Array.size();
912}
913
915{
916 //return pointer to vehicle object
917
918 if (number < 1 || number > GetCount())
919 return 0;
920
921 if (get_number == number && get_result)
922 return get_result;
923
924 if ((int)Array.size() > number - 1)
925 {
926 //quick prediction
927 if (Array[number - 1].number == number)
928 {
929 if (Array[number - 1].object)
930 {
931 get_number = number;
932 get_result = Array[number - 1].object;
933 return get_result;
934 }
935 else
936 {
937 get_number = 0;
938 get_result = 0;
939 return 0;
940 }
941 }
942 }
943
944 for (size_t i = 0; i < Array.size(); i++)
945 {
946 if (Array[i].number == number)
947 {
948 get_number = number;
949 get_result = Array[i].object;
950 return get_result;
951 }
952 }
953
954 get_number = 0;
955 get_result = 0;
956 return 0;
957}
958
960{
961 if (index < 0 || index >= (int)Array.size())
962 return 0;
963
964 return Array[index].object;
965}
966
968{
969 //remove a vehicle (does not delete the object)
970 for (size_t i = 0; i < Array.size(); i++)
971 {
972 if (Array[i].object == vehicle)
973 {
974 Array.erase(Array.begin() + i);
975
976 //clear cached values
977 get_result = 0;
978 get_number = 0;
979 return;
980 }
981 }
982}
983
985{
986 SBS_PROFILE("VehicleManager::Loop");
987
988 LoopChildren();
989}
990
992{
993 //set up SBS object
994 SetValues("ControllerManager", "Controller Manager", true, false);
995
996 get_result = 0;
997 get_number = 0;
998 EnableLoop(true);
999}
1000
1002{
1003 //delete controllers
1004 for (size_t i = 0; i < Array.size(); i++)
1005 {
1006 if (Array[i].object)
1007 {
1008 Array[i].object->parent_deleting = true;
1009 delete Array[i].object;
1010 }
1011 Array[i].object = 0;
1012 }
1013}
1014
1016{
1017 //create a controller object
1018
1019 for (size_t i = 0; i < Array.size(); i++)
1020 {
1021 if (Array[i].number == number)
1022 {
1023 std::string num = ToString(number);
1024 ReportError("Controller " + num + " already exists");
1025 return 0;
1026 }
1027 }
1028
1029 Map controller;
1030 controller.number = number;
1031 controller.object = new DispatchController(this, number);
1032 Array.emplace_back(controller);
1033 return controller.object;
1034}
1035
1037{
1038 //return the number of controllers
1039 return (int)Array.size();
1040}
1041
1043{
1044 //return pointer to controller object
1045
1046 if (number < 1 || number > GetCount())
1047 return 0;
1048
1049 if (get_number == number && get_result)
1050 return get_result;
1051
1052 if ((int)Array.size() > number - 1)
1053 {
1054 //quick prediction
1055 if (Array[number - 1].number == number)
1056 {
1057 if (Array[number - 1].object)
1058 {
1059 get_number = number;
1060 get_result = Array[number - 1].object;
1061 return get_result;
1062 }
1063 else
1064 {
1065 get_number = 0;
1066 get_result = 0;
1067 return 0;
1068 }
1069 }
1070 }
1071
1072 for (size_t i = 0; i < Array.size(); i++)
1073 {
1074 if (Array[i].number == number)
1075 {
1076 get_number = number;
1077 get_result = Array[i].object;
1078 return get_result;
1079 }
1080 }
1081
1082 get_number = 0;
1083 get_result = 0;
1084 return 0;
1085}
1086
1088{
1089 if (index < 0 || index >= (int)Array.size())
1090 return 0;
1091
1092 return Array[index].object;
1093}
1094
1096{
1097 //remove a controller (does not delete the object)
1098 for (size_t i = 0; i < Array.size(); i++)
1099 {
1100 if (Array[i].object == controller)
1101 {
1102 Array.erase(Array.begin() + i);
1103
1104 //clear cached values
1105 get_result = 0;
1106 get_number = 0;
1107 return;
1108 }
1109 }
1110}
1111
1113{
1114 SBS_PROFILE("ControllerManager::Loop");
1115
1116 LoopChildren();
1117}
1118
1119
1120}
ControllerManager(Object *parent)
Definition manager.cpp:991
void Remove(DispatchController *controller)
Definition manager.cpp:1095
DispatchController * GetIndex(int index)
Definition manager.cpp:1087
std::vector< Map > Array
Definition manager.h:235
DispatchController * get_result
Definition manager.h:238
DispatchController * Create(int number)
Definition manager.cpp:1015
DispatchController * Get(int number)
Definition manager.cpp:1042
Door * GetDoor(const std::string &name)
Definition manager.cpp:750
void RemoveDoor(Door *door)
Definition manager.cpp:760
std::vector< Door * > Array
Definition manager.h:170
DynamicMesh * wrapper
Definition manager.h:171
Door * CreateDoor(std::string name, const std::string &open_sound, const std::string &close_sound, bool rotate)
Definition manager.cpp:739
Door * AddDoor(std::string name, const std::string &open_sound, const std::string &close_sound, bool open_state, const std::string &texture, const std::string &side_texture, Real thickness, const std::string &face_direction, const std::string &open_direction, bool rotate, Real open_speed, Real close_speed, Real CenterX, Real CenterZ, Real width, Real height, Real voffset, Real tw, Real th, Real side_tw, Real side_th)
Definition manager.cpp:727
DoorManager(Object *parent)
Definition manager.cpp:698
Door * GetIndex(int index)
Definition manager.cpp:780
DoorWrapper * CreateDoor(bool open_state, const std::string &texture, const std::string &side_texture, Real thickness, const std::string &face_direction, const std::string &open_direction, Real open_speed, Real close_speed, Real CenterX, Real CenterZ, Real width, Real height, Real voffset, Real tw, Real th, Real side_tw, Real side_th)
Definition door.cpp:294
void Enabled(bool value, MeshObject *client=0)
std::vector< Map > Array
Definition manager.h:95
ElevatorManager(Object *parent)
Definition manager.cpp:252
Elevator * GetIndex(int index)
Definition manager.cpp:341
void EnableAll(bool value)
Definition manager.cpp:366
Elevator * Create(int number)
Definition manager.cpp:276
Elevator * get_result
Definition manager.h:98
void Remove(Elevator *elevator)
Definition manager.cpp:349
Elevator * Get(int number)
Definition manager.cpp:296
Floor * get_result
Definition manager.h:71
Floor * GetByID(const std::string &id)
Definition manager.cpp:185
std::vector< Map > Array
Definition manager.h:63
FloorManager(Object *parent)
Definition manager.cpp:45
Floor * Create(int number)
Definition manager.cpp:83
void EnableAll(bool value)
Definition manager.cpp:233
Floor * GetByNumberID(const std::string &id)
Definition manager.cpp:198
Floor * GetIndex(int index)
Definition manager.cpp:177
void Remove(Floor *floor)
Definition manager.cpp:211
DynamicMesh * floors
Definition manager.h:66
DynamicMesh * columnframes
Definition manager.h:68
DynamicMesh * interfloors
Definition manager.h:67
Floor * Get(int number)
Definition manager.cpp:108
void Enabled(bool value)
Definition floor.cpp:377
Manager(Object *parent)
Definition manager.cpp:40
const std::string & GetName()
Definition object.cpp:53
virtual bool ReportError(const std::string &message)
Definition object.cpp:84
void LoopChildren()
Definition object.cpp:579
SceneNode * GetSceneNode()
Definition object.cpp:240
void SetValues(const std::string &type, const std::string &name, bool is_permanent, bool is_movable=true)
Definition object.cpp:144
void EnableLoop(bool value)
Definition object.cpp:521
void RemoveDoor(RevolvingDoor *door)
Definition manager.cpp:835
RevolvingDoorManager(Object *parent)
Definition manager.cpp:795
std::vector< RevolvingDoor * > Array
Definition manager.h:186
RevolvingDoor * AddDoor(std::string name, bool run, const std::string &soundfile, const std::string &texture, Real thickness, bool clockwise, int segments, Real speed, Real rotation, Real CenterX, Real CenterZ, Real width, Real height, Real voffset, Real tw, Real th)
Definition manager.cpp:824
DynamicMesh * wrapper
Definition manager.h:187
RevolvingDoor * GetIndex(int index)
Definition manager.cpp:855
bool ProcessElevators
Definition sbs.h:177
bool IsValidFloor(int floor)
Definition sbs.cpp:2492
int Basements
Definition sbs.h:159
int Floors
Definition sbs.h:158
void Remove(Shaft *shaft)
Definition manager.cpp:513
Shaft * GetIndex(int index)
Definition manager.cpp:505
std::vector< Map > Array
Definition manager.h:122
ShaftManager(Object *parent)
Definition manager.cpp:389
Shaft * Get(int number)
Definition manager.cpp:460
Shaft * get_result
Definition manager.h:125
Shaft * Create(int number, Real CenterX, Real CenterZ, int _startfloor, int _endfloor)
Definition manager.cpp:413
void EnableAll(bool value)
Definition manager.cpp:530
void EnableWhole(bool value, bool EnableShaftDoors, bool force=false)
Definition shaft.cpp:145
bool GetShowFull()
Definition shaft.h:75
void Remove(Stairwell *stairs)
Definition manager.cpp:667
void EnableAll(bool value)
Definition manager.cpp:684
Stairwell * Create(int number, Real CenterX, Real CenterZ, int _startfloor, int _endfloor)
Definition manager.cpp:568
StairwellManager(Object *parent)
Definition manager.cpp:544
std::vector< Map > Array
Definition manager.h:149
Stairwell * GetIndex(int index)
Definition manager.cpp:659
Stairwell * get_result
Definition manager.h:152
Stairwell * Get(int number)
Definition manager.cpp:614
void EnableWhole(bool value, bool force=false)
Definition stairs.cpp:134
VehicleManager(Object *parent)
Definition manager.cpp:870
Vehicle * Create(int number)
Definition manager.cpp:894
Vehicle * Get(int number)
Definition manager.cpp:914
void Remove(Vehicle *elevator)
Definition manager.cpp:967
Vehicle * GetIndex(int index)
Definition manager.cpp:959
Vehicle * get_result
Definition manager.h:212
std::vector< Map > Array
Definition manager.h:209
Ogre::Real Real
Definition globals.h:57
std::string ToString(int number)
Definition globals.cpp:279
#define SBS_PROFILE(name)
Definition profiler.h:131
DispatchController * object
Definition manager.h:232