diff options
Diffstat (limited to 'src/doc/feature')
| -rw-r--r-- | src/doc/feature/bgm.dox | 22 | ||||
| -rw-r--r-- | src/doc/feature/config.dox | 61 | ||||
| -rw-r--r-- | src/doc/feature/gameobject.dox | 4 | ||||
| -rw-r--r-- | src/doc/feature/scene.dox | 15 | ||||
| -rw-r--r-- | src/doc/feature/script.dox | 48 | ||||
| -rw-r--r-- | src/doc/feature/script_ecs.dox | 57 | ||||
| -rw-r--r-- | src/doc/feature/sfx.dox | 24 | 
7 files changed, 199 insertions, 32 deletions
| diff --git a/src/doc/feature/bgm.dox b/src/doc/feature/bgm.dox new file mode 100644 index 0000000..968abb8 --- /dev/null +++ b/src/doc/feature/bgm.dox @@ -0,0 +1,22 @@ +// vim:ft=doxygen +namespace crepe { +/** + +\defgroup feature_bgm Playing background music +\ingroup feature +\brief Add background music to a scene using the AudioSource component + +This page shows how to implement background music using the AudioSource +effects. + +\see AudioSource + +\par Example + +\note This example assumes you already have a GameObject. If not, read +\"\ref feature_gameobject\" first. + +\todo Merge #60 + +*/ +} diff --git a/src/doc/feature/config.dox b/src/doc/feature/config.dox new file mode 100644 index 0000000..ae3a054 --- /dev/null +++ b/src/doc/feature/config.dox @@ -0,0 +1,61 @@ +// vim:ft=doxygen +namespace crepe { +/** + +\defgroup feature_config Engine configuration +\ingroup feature +\brief Configure default values and global options + +Default values and options that apply to the engine globally are read from a +singleton struct named Config. + +\see Config + +\par Example + +Configuration options may be set individually or by assigning a [designated +initializer list][desginit]. All of Config's members have default values and can +safely be omitted from initializer lists. + +[desginit]: https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers + +```cpp +#include <crepe/api/Config.h> + +int main() { +	auto & config = crepe::Config::get_instance(); + +	// Designated initializer list +	config = { +		// specify options here +	}; + +	// Reset default options +	config = {}; + +	// Set specific option +	config.log.color = false; +} +``` + +\par Options + +\noop Display config properties in monospace font +\htmlonly +<style> +tr td:first-child { font-family: monospace; } +</style> +\endhtmlonly + +|Option|Description| +|-|-| +|\ref Config::asset::root_pattern ".asset.root_pattern"|\copybrief Config::asset::root_pattern| +|\ref Config::log::color ".log.color"|\copybrief Config::log::color| +|\ref Config::log::level ".log.level"|\copybrief Config::log::level| +|\ref Config::physics::gravity ".physics.gravity"|\copybrief Config::physics::gravity| +|\ref Config::savemgr::location ".savemgr.location"|\copybrief Config::savemgr::location| +|\ref Config::window_settings::default_size ".window_settings.default_size"|\copybrief Config::window_settings::default_size| +|\ref Config::window_settings::window_title ".window_settings.window_title"|\copybrief Config::window_settings::window_title| + +*/ +} diff --git a/src/doc/feature/gameobject.dox b/src/doc/feature/gameobject.dox index c561874..ac3927c 100644 --- a/src/doc/feature/gameobject.dox +++ b/src/doc/feature/gameobject.dox @@ -2,9 +2,9 @@  namespace crepe {  /** -\defgroup feature_gameobject GameObjects +\defgroup feature_gameobject Entity basics  \ingroup feature -\brief GameObject to create a Scene +\brief Building game entities using a GameObject  GameObjects are the fundamental building blocks of a Scene. They represent entities  in the game world and can have various components attached to them to define their diff --git a/src/doc/feature/scene.dox b/src/doc/feature/scene.dox index 4124e37..b680eec 100644 --- a/src/doc/feature/scene.dox +++ b/src/doc/feature/scene.dox @@ -40,31 +40,28 @@ 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/Engine.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); +		GameObject object1 = new_object("object1", "tag_my_scene", vec2{0, 0}, 0, 1); +		GameObject object2 = new_object("object2", "tag_my_scene", vec2{1, 0}, 0, 1);  	}  	string get_name() const { return "my_scene"; }  };  int main() { -	LoopManager loop_mgr; +	Engine foo;  	// Add the scenes to the loop manager -	loop_mgr.add_scene<MyScene>(); +	foo.add_scene<MyScene>(); -	loop_mgr.start(); +	return foo.main();  }  ``` diff --git a/src/doc/feature/script.dox b/src/doc/feature/script.dox index d25a63b..162b0f5 100644 --- a/src/doc/feature/script.dox +++ b/src/doc/feature/script.dox @@ -2,19 +2,14 @@  namespace crepe {  /** -\defgroup feature_script Scripting +\defgroup feature_script Scripting basics  \ingroup feature -\brief User-defined scripts for game objects +\brief Create a concrete Script and attach it to a GameObject  Scripts can be used to implement game behavior, and allow arbitrary code to run  as part of the game loop. Scripts are implemented as derivative classes of -Script, which are added to game objects using the BehaviorScript \ref Component -"component". - -\todo This section is incomplete: -- Utility functions to get components/events/etc inside script -- How to listen for events -- Extensions of script (keylistener) +Script, which are added to \ref GameObject "game objects" using the \ref +BehaviorScript \ref Component "component".  \see Script  \see BehaviorScript @@ -22,11 +17,14 @@ Script, which are added to game objects using the BehaviorScript \ref Component  \par Example -First, define a class that inherits from Script. This class acts as an -interface, and has two functions (\ref Script::init "\c init()" and \ref -Script::update "\c update()"), which may be implemented (they are empty by -default). From now on, this derivative class will be referred to as a *concrete -script*. +\note This example assumes you already have a GameObject. If not, read +\"\ref feature_gameobject\" first. + +First, define a class (anywhere) that inherits from Script. The Script class +acts as an interface, and has three functions (\ref Script::init "\c init()", +\ref Script::fixed_update "\c fixed_update()" and \ref Script::frame_update +"\c frame_update()"), which *may* be implemented (they are empty by default). +From now on, this derivative class will be referred to as a *concrete script*.  ```cpp  #include <crepe/api/Script.h> @@ -36,25 +34,33 @@ class MyScript : public crepe::Script {  	void init() {  		// called once  	} -	void update() { + +	void fixed_update(crepe::duration_t delta_time) {  		// called on fixed update  	} +	void frame_update(crepe::duration_t delta_time) { +		// called for every rendered frame +	}  };  ``` -Concrete scripts can be instantiated and attached to \ref GameObject -"game objects" using the BehaviorScript \ref Component "component". +After defining a concrete script, it can be instantiated and attached to \ref +feature_gameobject "game objects" during \ref feature_scene +"scene initialization" using a BehaviorScript component:  ```cpp  using namespace crepe; -GameObject obj = component_manager.new_object("name"); +GameObject obj; -// create BehaviorScript instance +// Create a BehaviorScript component to hold MyScript  BehaviorScript & behavior_script = obj.add_component<BehaviorScript>(); -// attach (and instantiate) MyScript to behavior_script + +// Instantiate (and attach) MyScript to behavior_script  behavior_script.set_script<MyScript>(); +``` -// the above can also be done in a single call for convenience: +The above can also be done in a single call for convenience: +```cpp  obj.add_component<BehaviorScript>().set_script<MyScript>();  ``` diff --git a/src/doc/feature/script_ecs.dox b/src/doc/feature/script_ecs.dox new file mode 100644 index 0000000..8bd3376 --- /dev/null +++ b/src/doc/feature/script_ecs.dox @@ -0,0 +1,57 @@ +// vim:ft=doxygen +namespace crepe { +/** + +\defgroup feature_script_ecs Using ECS inside Script +\ingroup feature +\brief Query the component manager inside a concrete Script + +Script provides several methods to request references to components during +runtime. These methods may be used in cases where it is either not practical or +impossible to manually pass the references required to implement a certain +behavior. + +\see Script +\see ComponentManager + +\par Example + +\note This example assumes you already have a concrete Script. If not, read +\"\ref feature_script\" first. + +The component manager can be queried for components inside Script using the +following methods: + +- For requesting components on the same GameObject as this Script instance: +	- Script::get_component(): \copybrief Script::get_component +	- Script::get_components(): \copybrief Script::get_components +- For requesting components in the current Scene: +	- Script::get_components_by_id(): \copybrief Script::get_components_by_id +	- Script::get_components_by_name(): \copybrief Script::get_components_by_name +	- Script::get_components_by_tag(): \copybrief Script::get_components_by_tag + +```cpp +#include <crepe/util/Log.h> +#include <crepe/api/Script.h> +#include <crepe/api/Metadata.h> + +using namespace crepe; + +class MyScript : public Script { +	void show_self() { +		Metadata & own_metadata = get_component<Metadata>(); +		logf("My name is {}", own_metadata.name); +	} + +	void list_enemies() { +		RefVector<Metadata> enemies = get_components_by_tag<Metadata>("enemy"); +		logf("There are {} enemies:", enemies.size()); +		for (const Metadata & enemy : enemies) { +			logf("- {}", enemy.name); +		} +	} +}; +``` + +*/ +} diff --git a/src/doc/feature/sfx.dox b/src/doc/feature/sfx.dox new file mode 100644 index 0000000..2a5c9cc --- /dev/null +++ b/src/doc/feature/sfx.dox @@ -0,0 +1,24 @@ +// vim:ft=doxygen +namespace crepe { +/** + +\defgroup feature_sfx Playing sound effects +\ingroup feature +\brief Fire a sound effect using the AudioSource component + +This page shows how to implement one-shot sound effects using the AudioSource +component's 'fire and forget'-style API. + +\see AudioSource + +\par Example + +\note This example assumes you already have a GameObject to attach the +AudioSource component to, and uses a Script to control the AudioSource instance. +Separate pages describing these features in more detail can be found at \"\ref +feature_gameobject\" and \"\ref feature_script\" respectively. + +\todo Merge #60 + +*/ +} |