]> git.tdb.fi Git - libs/demoscene.git/blob - source/stage.cpp
dfb668852760d3526f20c2939c2f8d2b7889e88b
[libs/demoscene.git] / source / stage.cpp
1 #include <msp/gl/view.h>
2 #include "demo.h"
3 #include "stage.h"
4
5 using namespace std;
6 using namespace Msp;
7
8 Stage::Stage():
9         pipeline(0)
10 { }
11
12 Stage::~Stage()
13 {
14         delete pipeline;
15 }
16
17 void Stage::set_camera(const GL::Camera &c)
18 {
19         camera.set_object_matrix(c.get_object_matrix());
20         camera.set_up_direction(c.get_up_direction());
21         camera.set_field_of_view(c.get_field_of_view());
22         camera.set_depth_clip(c.get_near_clip(), c.get_far_clip());
23 }
24
25
26 Stage::UseInView::UseInView():
27         view(0),
28         stage(0)
29 { }
30
31 Stage::UseInView::UseInView(GL::View &v, Stage &s):
32         view(&v),
33         stage(&s)
34 { }
35
36 void Stage::UseInView::validate() const
37 {
38         if(!view)
39                 throw logic_error("null view");
40         if(!stage)
41                 throw logic_error("null stage");
42 }
43
44 void Stage::UseInView::start(float, float)
45 {
46         view->set_camera(&stage->camera);
47         view->set_content(stage->pipeline);
48 }
49
50
51 Stage::SetCamera::SetCamera():
52         stage(0),
53         camera(0)
54 { }
55
56 Stage::SetCamera::SetCamera(Stage &s, const GL::Camera &c):
57         stage(&s),
58         camera(&c)
59 { }
60
61 void Stage::SetCamera::validate() const
62 {
63         if(!stage)
64                 throw logic_error("null stage");
65         if(!camera)
66                 throw logic_error("null camera");
67 }
68
69 void Stage::SetCamera::start(float, float)
70 {
71         stage->set_camera(*camera);
72 }
73
74
75 Stage::UseInView::Loader::Loader(UseInView &u, Demo &d):
76         DataFile::DerivedObjectLoader<UseInView, Action::Loader>(u, d)
77 {
78         add("stage", &Loader::stage);
79         add("view", &Loader::view);
80 }
81
82 void Stage::UseInView::Loader::stage(const string &n)
83 {
84         obj.stage = &demo.get_thing<Stage>(n);
85 }
86
87 void Stage::UseInView::Loader::view(const string &n)
88 {
89         obj.view = &demo.get_thing<GL::View>(n);
90 }
91
92
93 Stage::SetCamera::Loader::Loader(SetCamera &s, Demo &d):
94         DataFile::DerivedObjectLoader<SetCamera, Action::Loader>(s, d)
95 {
96         add("camera", &Loader::camera);
97         add("stage", &Loader::stage);
98 }
99
100 void Stage::SetCamera::Loader::stage(const string &n)
101 {
102         obj.stage = &demo.get_thing<Stage>(n);
103 }
104
105 void Stage::SetCamera::Loader::camera(const string &n)
106 {
107         obj.camera = &demo.get_resources().get<GL::Camera>(n);
108 }