OSDN Git Service

Added support for dynamic runloops, which should help reduce per-frame loop overhead...
[skyscrapersim/skyscraper.git] / src / sbs / manager.h
1 /* $Id$ */
2
3 /*
4         Scalable Building Simulator - Manager Classes
5         The Skyscraper Project - Version 1.10 Alpha
6         Copyright (C)2004-2016 Ryan Thoryk
7         http://www.skyscrapersim.com
8         http://sourceforge.net/projects/skyscraper
9         Contact - ryan@skyscrapersim.com
10
11         This program is free software; you can redistribute it and/or
12         modify it under the terms of the GNU General Public License
13         as published by the Free Software Foundation; either version 2
14         of the License, or (at your option) any later version.
15
16         This program is distributed in the hope that it will be useful,
17         but WITHOUT ANY WARRANTY; without even the implied warranty of
18         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19         GNU General Public License for more details.
20
21         You should have received a copy of the GNU General Public License
22         along with this program; if not, write to the Free Software
23         Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24 */
25
26 #ifndef _SBS_MANAGER_H
27 #define _SBS_MANAGER_H
28
29 namespace SBS {
30
31 class SBSIMPEXP FloorManager : public Object
32 {
33 public:
34         FloorManager(Object* parent);
35         ~FloorManager();
36         Floor* Create(int number);
37         int GetCount(); //all floors including basements
38         Floor* Get(int number);
39         Floor* GetIndex(int index);
40         void Remove(Floor *floor);
41         void EnableAll(bool value);
42         DynamicMesh* GetFloorDynMesh() { return floors; }
43         DynamicMesh* GetIFloorDynMesh() { return interfloors; }
44         DynamicMesh* GetColumnDynMesh() { return columnframes; }
45
46 private:
47         struct Map
48         {
49                 int number; //floor number
50                 Floor* object; //floor object reference
51         };
52
53         std::vector<Map> Array; //floor object array
54
55         //dynamic mesh objects
56         DynamicMesh* floors;
57         DynamicMesh* interfloors;
58         DynamicMesh* columnframes;
59
60         //function caching
61         Floor* get_result;
62         int get_number;
63 };
64
65 class SBSIMPEXP ElevatorManager : public Object
66 {
67 public:
68         ElevatorManager(Object* parent);
69         ~ElevatorManager();
70         Elevator* Create(int number);
71         int GetCount();
72         Elevator* Get(int number);
73         Elevator* GetIndex(int index);
74         void Remove(Elevator *elevator);
75         void EnableAll(bool value);
76
77 private:
78         struct Map
79         {
80                 int number; //elevator number
81                 Elevator* object; //elevator object reference
82         };
83
84         std::vector<Map> Array; //elevator object array
85
86         //function caching
87         Elevator* get_result;
88         int get_number;
89 };
90
91 class SBSIMPEXP ShaftManager : public Object
92 {
93 public:
94         ShaftManager(Object* parent);
95         ~ShaftManager();
96         Shaft* Create(int number, float CenterX, float CenterZ, int _startfloor, int _endfloor);
97         int GetCount();
98         Shaft* Get(int number);
99         Shaft* GetIndex(int index);
100         void Remove(Shaft *shaft);
101         void EnableAll(bool value);
102
103 private:
104         struct Map
105         {
106                 int number; //shaft number
107                 Shaft* object; //shaft object reference
108         };
109
110         std::vector<Map> Array; //shaft object array
111
112         //function caching
113         Shaft* get_result;
114         int get_number;
115 };
116
117 class SBSIMPEXP StairsManager : public Object
118 {
119 public:
120         StairsManager(Object* parent);
121         ~StairsManager();
122         Stairs* Create(int number, float CenterX, float CenterZ, int _startfloor, int _endfloor);
123         int GetCount();
124         Stairs* Get(int number);
125         Stairs* GetIndex(int index);
126         void Remove(Stairs *stairs);
127         void EnableAll(bool value);
128
129 private:
130         struct Map
131         {
132                 int number; //stairwell number
133                 Stairs* object; //stairwell object reference
134         };
135
136         std::vector<Map> Array; //stairs object array
137
138         //function caching
139         Stairs* get_result;
140         int get_number;
141 };
142
143 class SBSIMPEXP DoorManager : public Object
144 {
145 public:
146         DoorManager(Object* parent);
147         ~DoorManager();
148         Door* AddDoor(const std::string &open_sound, const std::string &close_sound, bool open_state, const std::string &texture, float thickness, int direction, float speed, float CenterX, float CenterZ, float width, float height, float voffset, float tw, float th);
149         void RemoveDoor(Door *door);
150         int GetCount();
151         Door* GetIndex(int index);
152         void Loop();
153
154 private:
155         std::vector<Door*> Array;
156         DynamicMesh *wrapper; //door dynamic mesh wrapper
157 };
158
159 }
160
161 #endif