// vim:ft=doxygen namespace crepe { /** \defgroup feature_script Scripting \ingroup feature \brief User-defined scripts for game objects 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) \see Script \see BehaviorScript \see GameObject \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*. ```cpp #include <crepe/api/Script.h> #include <crepe/api/BehaviorScript.h> class MyScript : public crepe::Script { void init() { // called once } void update() { // called on fixed update } }; ``` Concrete scripts can be instantiated and attached to \ref GameObject "game objects" using the BehaviorScript \ref Component "component". ```cpp using namespace crepe; GameObject obj = component_manager.new_object("name"); // create BehaviorScript instance BehaviorScript & behavior_script = obj.add_component<BehaviorScript>(); // attach (and instantiate) MyScript to behavior_script behavior_script.set_script<MyScript>(); // the above can also be done in a single call for convenience: obj.add_component<BehaviorScript>().set_script<MyScript>(); ``` */ }