]> git.tdb.fi Git - r2c2.git/blob - source/engineer/engineer.h
333af73a871362d698903965b91319aad1d9f760
[r2c2.git] / source / engineer / engineer.h
1 #ifndef ENGINEER_H_
2 #define ENGINEER_H_
3
4 #include <msp/core/application.h>
5 #include <msp/graphics/simplewindow.h>
6 #include <msp/gl/camera.h>
7 #include <msp/gl/light.h>
8 #include <msp/gl/lighting.h>
9 #include <msp/gl/pipeline.h>
10 #include <msp/gltk/resources.h>
11 #include <msp/gltk/root.h>
12 #include "libr2c2/catalogue.h"
13 #include "libr2c2/driver.h"
14 #include "libr2c2/train.h"
15 #include "3d/layout.h"
16 #include "3d/overlay.h"
17 #include "3d/path.h"
18 #include "3d/trackchain.h"
19 #include "3d/view.h"
20 #include "network/server.h"
21 #include "options.h"
22
23 class MainWindow;
24 class DynamicDialog;
25
26 class Engineer: public Msp::RegisteredApplication<Engineer>
27 {
28 private:
29         Options options;
30
31         Msp::Graphics::SimpleGLWindow window;
32         Msp::Input::Keyboard keyboard;
33         Msp::Input::Mouse mouse;
34         Msp::GLtk::Resources ui_res;
35         Msp::GLtk::Root *root;
36         Msp::GLtk::Arrangement *root_arrangement;
37         bool import_active;
38
39         R2C2::Catalogue catalogue;
40         R2C2::Layout layout;
41         R2C2::Layout3D layout_3d;
42         R2C2::Server *server;
43         Msp::IO::EventDispatcher event_disp;
44         R2C2::Overlay3D *overlay;
45         std::map<R2C2::Train *, Msp::GL::Color> train_colors;
46
47         R2C2::View3D main_view;
48
49         MainWindow *main_wnd;
50         std::list<R2C2::Train *> new_trains;
51         std::list<DynamicDialog *> dyn_dialogs;
52         Msp::Time::TimeStamp status_timeout;
53         R2C2::Vector pointer;
54         std::list<R2C2::TrackChain3D *> emergencies;
55         Msp::Time::TimeStamp emergency_blink_timeout;
56         unsigned emergency_blink_state;
57
58 public:
59         Engineer(int argc, char **argv);
60         ~Engineer();
61
62         const Msp::GLtk::Resources &get_ui_resources() const { return ui_res; }
63         Msp::GLtk::Root &get_root() const { return *root; }
64         const R2C2::Catalogue &get_catalogue() const { return catalogue; }
65         R2C2::Layout &get_layout() { return layout; }
66         R2C2::Layout3D &get_layout_3d() { return layout_3d; }
67         R2C2::View3D &get_main_view() { return main_view; }
68         void set_status(const std::string &);
69         void add_dynamic_dialog(DynamicDialog &);
70         void remove_dynamic_dialog(DynamicDialog &);
71         int main();
72         void quit() { exit(0); }
73 private:
74         void tick();
75         void button_press(unsigned);
76         void axis_motion(unsigned, float, float);
77         void view_all();
78         R2C2::Object *pick_object(const R2C2::Vector &);
79         void emergency(R2C2::Block *, const std::string &);
80         void halt_event(bool);
81         void locomotive_detected(const R2C2::Driver::DetectedLocomotive &);
82         void import_finished(int);
83         void train_added(R2C2::Train &);
84         void process_new_train(R2C2::Train &);
85         virtual void sighandler(int);
86 };
87
88 #endif