aboutsummaryrefslogtreecommitdiff
path: root/src/doc/feature/scene.dox
blob: d81df4c8ae62ab3fc793fdbf018b903f366ae9f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// vim:ft=doxygen
namespace crepe {
/**

\defgroup feature_scene Scenes
\ingroup feature
\brief User-defined scenes

Scenes can be used to implement game environments, and allow arbitrary game objects to be organized
as part of the game structure. Scenes are implemented as derivative classes of Scene, which are
added to the game using the SceneManager. Scenes describe the start of a Scene and cannot modify
GameObjects during runtime of a Scene (use \ref feature_script "Scripting" for this purpose).

\see SceneManager
\see GameObject
\see Script
\see Scene

\par Example

This example demonstrates how to define and add scenes to the loop/scene manager in the `crepe` framework.
Each concrete scene should be derived from Scene. In the example below, the concrete scene is named MyScene.
A concrete scene should, at least, implement (override) two methods, namely load_scene() and get_name(). The
scene is build (using GameObjects) in the load_scene() method. GameObjects should be made using the
component_manager::new_object(). In the example below, two GameObjects (named object1 and object2) are added
to MyScene. object1 and object2 do not have any non-default Components attached to them, however, if needed,
this should also be done in load_scene(). Each concrete scene must have a unique name. This unique name is
used to load a new concrete scene (via a Script). The unique name is set using the get_name() method. In the
example below, MyScene's unique name is my_scene.
After setting up one or more concrete scene(s), the concrete scene(s) should be added to the loop/scene manager.
This is done in your main(). Firstly, the LoopManager should be instantiated. Than, all the concrete scene(s)
should be added to the loop/scene manger via loop_mgr::add_scene<>(). The templated argument should define the
concrete scene to be added.

```cpp
#include <crepe/api/LoopManager.h>
#include <crepe/api/GameObject.h>
#include <crepe/api/Scene.h>
#include <crepe/types.h>

using namespace crepe;

class MyScene : public Scene {
public:
	void load_scene() {
		ComponentManager & mgr = this->component_manager;
		GameObject object1 = mgr.new_object("object1", "tag_my_scene", vec2{0, 0}, 0, 1);
		GameObject object2 = mgr.new_object("object2", "tag_my_scene", vec2{1, 0}, 0, 1);
	}

	string get_name() const { return "my_scene"; }
};

int main() {
	LoopManager loop_mgr;
	
	// Add the scenes to the loop manager
	loop_mgr.add_scene<MyScene>();

	loop_mgr.start();
}
```

*/
}