RigsofRods
Soft-body Physics Simulation
ScriptEngine.h
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2020 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
25 
26 #pragma once
27 
28 #ifdef USE_ANGELSCRIPT
29 
30 #define DEFAULT_TERRAIN_SCRIPT "default.as" // Used when map creator doesn't provide custom script.
31 
32 #include "AngelScriptBindings.h"
33 #include "Application.h"
34 #include "GameContext.h"
35 #include "GameScript.h"
36 #include "InterThreadStoreVector.h"
37 #include "ScriptEvents.h"
38 
39 #include <Ogre.h>
40 #include "scriptdictionary/scriptdictionary.h"
41 #include "scriptbuilder/scriptbuilder.h"
42 
43 #include <map>
44 
45 namespace RoR {
46 
49 
51 inline void TRIGGER_EVENT_ASYNC(scriptEvents type, int arg1, int arg2ex = 0, int arg3ex = 0, int arg4ex = 0, std::string arg5ex = "", std::string arg6ex = "", std::string arg7ex = "", std::string arg8ex = "")
52 {
53  ScriptEventArgs* args = new ScriptEventArgs{ type, arg1, arg2ex, arg3ex, arg4ex, arg5ex, arg6ex, arg7ex, arg8ex };
55 }
56 
58 enum class ScriptCategory
59 {
60  INVALID,
61  ACTOR,
62  TERRAIN,
63  CUSTOM
64 };
65 
67 
69 struct ScriptUnit
70 {
71  ScriptUnit();
72  ~ScriptUnit();
73 
76  unsigned int eventMask = 0;
77  AngelScript::asIScriptModule* scriptModule = nullptr;
78  AngelScript::asIScriptFunction* frameStepFunctionPtr = nullptr;
79  AngelScript::asIScriptFunction* eventCallbackFunctionPtr = nullptr;
80  AngelScript::asIScriptFunction* eventCallbackExFunctionPtr = nullptr;
81  AngelScript::asIScriptFunction* defaultEventCallbackFunctionPtr = nullptr;
83  Ogre::String scriptName;
84  Ogre::String scriptHash;
85  Ogre::String scriptBuffer;
86 };
87 
88 typedef std::map<ScriptUnitID_t, ScriptUnit> ScriptUnitMap;
89 
91 {
92  std::string lsr_filename;
93  std::string lsr_buffer;
96 };
97 
99 {
101 
104 };
105 
110 
111 // Params to `RoR::ScriptEngine::getFunctionByDeclAndLogCandidates()`
112 const std::string GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT = "void {}(int, string, string, int)";
113 const std::string GETFUNC_DEFAULTEVENTCALLBACK_NAME = "defaultEventCallback";
114 
117 {
118  // Generic success - 0 by common convention.
119  SCRIPTRETCODE_SUCCESS = AngelScript::asSUCCESS, // = AngelScript::0
120 
121  // AngelScript technical codes
122  SCRIPTRETCODE_AS_ERROR = AngelScript::asERROR, // = AngelScript::-1 etc...
123  SCRIPTRETCODE_AS_CONTEXT_ACTIVE = AngelScript::asCONTEXT_ACTIVE,
124  SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED = AngelScript::asCONTEXT_NOT_FINISHED,
125  SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED = AngelScript::asCONTEXT_NOT_PREPARED,
126  SCRIPTRETCODE_AS_INVALID_ARG = AngelScript::asINVALID_ARG,
127  SCRIPTRETCODE_AS_NO_FUNCTION = AngelScript::asNO_FUNCTION,
128  SCRIPTRETCODE_AS_NOT_SUPPORTED = AngelScript::asNOT_SUPPORTED,
129  SCRIPTRETCODE_AS_INVALID_NAME = AngelScript::asINVALID_NAME,
130  SCRIPTRETCODE_AS_NAME_TAKEN = AngelScript::asNAME_TAKEN,
131  SCRIPTRETCODE_AS_INVALID_DECLARATION = AngelScript::asINVALID_DECLARATION,
132  SCRIPTRETCODE_AS_INVALID_OBJECT = AngelScript::asINVALID_OBJECT,
133  SCRIPTRETCODE_AS_INVALID_TYPE = AngelScript::asINVALID_TYPE,
134  SCRIPTRETCODE_AS_ALREADY_REGISTERED = AngelScript::asALREADY_REGISTERED,
135  SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS = AngelScript::asMULTIPLE_FUNCTIONS,
136  SCRIPTRETCODE_AS_NO_MODULE = AngelScript::asNO_MODULE,
137  SCRIPTRETCODE_AS_NO_GLOBAL_VAR = AngelScript::asNO_GLOBAL_VAR,
138  SCRIPTRETCODE_AS_INVALID_CONFIGURATION = AngelScript::asINVALID_CONFIGURATION,
139  SCRIPTRETCODE_AS_INVALID_INTERFACE = AngelScript::asINVALID_INTERFACE,
140  SCRIPTRETCODE_AS_CANT_BIND_ALL_FUNCTIONS = AngelScript::asCANT_BIND_ALL_FUNCTIONS,
141  SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED = AngelScript::asLOWER_ARRAY_DIMENSION_NOT_REGISTERED,
142  SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP = AngelScript::asWRONG_CONFIG_GROUP,
143  SCRIPTRETCODE_AS_CONFIG_GROUP_IS_IN_USE = AngelScript::asCONFIG_GROUP_IS_IN_USE,
144  SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE = AngelScript::asILLEGAL_BEHAVIOUR_FOR_TYPE,
145  SCRIPTRETCODE_AS_WRONG_CALLING_CONV = AngelScript::asWRONG_CALLING_CONV,
146  SCRIPTRETCODE_AS_BUILD_IN_PROGRESS = AngelScript::asBUILD_IN_PROGRESS,
147  SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED = AngelScript::asINIT_GLOBAL_VARS_FAILED,
148  SCRIPTRETCODE_AS_OUT_OF_MEMORY = AngelScript::asOUT_OF_MEMORY,
149  SCRIPTRETCODE_AS_MODULE_IS_IN_USE = AngelScript::asMODULE_IS_IN_USE,
150 
151  // RoR ScriptEngine return codes
152  // Following is analysis of former state (most but not all funcs returned 0 on success)
153  // ~ executeString() [script: not exported] - used to return 0 on success, 1 on internal error and negative number otherwise.
154  // ~ addFunction() [script: `game.addScriptFunction()`] - used to return 0 on success, 1 on internal error and negative number otherwise.
155  // ~ functionExists() [script: `game.scriptFunctionExists()`] - used to return function ID (always >0) on success, negative number on error.
156  // ~ deleteFunction() [script: `game.deleteScriptFunction()`] - used to return function ID (always >0) on success, negative number on error.
157  // ~ addVariable() [script: `game.addScriptVariable()` ] - used to return 0 on success, 1 on internal error and negative number otherwise.
158  // ~ variableExists() [script: `game.scriptVariableExists()`] - newly added, returns 0 on success and negative number otherwise.
159  // ~ deleteVariable() [script: `game.deleteScriptVariable()` ] - used to return 0 on success, 1 on internal error and negative number otherwise.
160  // ~ getVariable() [script: `game.getScriptVariable()` ] - recently added, returns 0 on success and negative number otherwise.
164  SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS = -1004, // The scpecified ScriptUnitID_t was invalid
167 };
168 
173 class ScriptEngine : public Ogre::LogListener
174 {
175  friend class GameScript;
176 
177 public:
178 
179  ScriptEngine();
180  ~ScriptEngine();
181 
190  ScriptUnitID_t loadScript(Ogre::String scriptname, ScriptCategory category = ScriptCategory::TERRAIN,
191  ActorPtr associatedActor = nullptr, std::string buffer = "");
192 
197  void unloadScript(ScriptUnitID_t unique_id);
198 
203  void framestep(Ogre::Real dt);
204 
205  void setForwardScriptLogToConsole(bool doForward);
206 
211  void triggerEvent(scriptEvents eventnum, int arg1=0, int arg2ex=0, int arg3ex=0, int arg4ex=0, std::string arg5ex="", std::string arg6ex="", std::string arg7ex="", std::string arg8ex="");
212 
213  void setEventsEnabled(bool val) { m_events_enabled = val; }
214 
219  ScriptRetCode_t executeString(Ogre::String command);
220 
227  void queueStringForExecution(const Ogre::String command);
228 
234  ScriptRetCode_t addFunction(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
235 
240  ScriptRetCode_t functionExists(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
241 
246  ScriptRetCode_t deleteFunction(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
247 
252  ScriptRetCode_t addVariable(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
253 
258  ScriptRetCode_t variableExists(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
259 
264  ScriptRetCode_t deleteVariable(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
265 
269  ScriptRetCode_t getVariable(const Ogre::String& varName, void *ref, int typeID, ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
270 
275  AngelScript::asIScriptFunction* getFunctionByDeclAndLogCandidates(ScriptUnitID_t nid, GetFuncFlags_t flags, const std::string& funcName, const std::string& fmtFuncDecl);
276 
277  int fireEvent(std::string instanceName, float intensity);
278 
279  void envokeCallback(int functionId, eventsource_t* source, NodeNum_t nodenum = NODENUM_INVALID, int type = 0);
280 
287  void forwardExceptionAsScriptEvent(const std::string& from);
288 
289  AngelScript::asIScriptEngine* getEngine() { return engine; };
290 
291  // method from Ogre::LogListener
292  void messageLogged(const Ogre::String& message, Ogre::LogMessageLevel lml, bool maskDebug, const Ogre::String& logName, bool& skipThisMessage);
293 
294  inline void SLOG(const char* msg) { this->scriptLog->logMessage(msg); }
295  inline void SLOG(std::string msg) { this->scriptLog->logMessage(msg); }
296 
297  bool scriptUnitExists(ScriptUnitID_t unique_id);
298  ScriptUnit& getScriptUnit(ScriptUnitID_t unique_id);
299  ScriptUnitID_t getTerrainScriptUnit() const { return m_terrain_script_unit; }
300  ScriptUnitID_t getCurrentlyExecutingScriptUnit() const { return m_currently_executing_script_unit; }
301  ScriptUnitMap const& getScriptUnits() const { return m_script_units; }
302 
303 protected:
304 
307 
311  void init();
312 
316  Ogre::String composeModuleName(Ogre::String const& scriptName, ScriptCategory origin, ScriptUnitID_t id);
317 
322  int setupScriptUnit(int unit_id);
323 
328  bool prepareContextAndHandleErrors(ScriptUnitID_t nid, int asFunctionID);
329 
335 
340  ScriptRetCode_t validateScriptModule(const ScriptUnitID_t nid, AngelScript::asIScriptModule*& out_mod);
341 
343 
346 
350  void msgCallback(const AngelScript::asSMessageInfo* msg);
351 
356  void lineCallback(AngelScript::asIScriptContext* ctx);
357 
362  void exceptionCallback(AngelScript::asIScriptContext* ctx);
363 
365 
366  AngelScript::asIScriptEngine* engine;
367  AngelScript::asIScriptContext* context;
374  bool m_events_enabled = true;
375 
377 };
378 
380 
381 } // namespace RoR
382 
383 #else // USE_ANGELSCRIPT
384 inline void TRIGGER_EVENT_ASYNC(scriptEvents type, int arg1, int arg2ex = 0, int arg3ex = 0, int arg4ex = 0, std::string arg5ex = "", std::string arg6ex = "", std::string arg7ex = "", std::string arg8ex = "")
385 {
386 }
387 #endif // USE_ANGELSCRIPT
RoR::ScriptUnit
Represents a loaded script and all associated resources/handles.
Definition: ScriptEngine.h:69
GameContext.h
Game state manager and message-queue provider.
RoR::ScriptUnit::frameStepFunctionPtr
AngelScript::asIScriptFunction * frameStepFunctionPtr
script function pointer to the frameStep function
Definition: ScriptEngine.h:78
RoR::SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED
@ SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED
Definition: ScriptEngine.h:141
RoR::ScriptEngine::unloadScript
void unloadScript(ScriptUnitID_t unique_id)
Unloads a script.
Definition: ScriptEngine.cpp:1033
RoR::ScriptEngine::getScriptUnits
ScriptUnitMap const & getScriptUnits() const
Definition: ScriptEngine.h:301
RoR::ScriptEngine::setEventsEnabled
void setEventsEnabled(bool val)
Definition: ScriptEngine.h:213
RoR::ScriptEngine::msgCallback
void msgCallback(const AngelScript::asSMessageInfo *msg)
Optional (but very recommended!) callback providing diagnostic info when things fail to start (most n...
Definition: ScriptEngine.cpp:197
RoR::SCRIPTRETCODE_ENGINE_NOT_CREATED
@ SCRIPTRETCODE_ENGINE_NOT_CREATED
Definition: ScriptEngine.h:162
RoR::ScriptEngine::exceptionCallback
void exceptionCallback(AngelScript::asIScriptContext *ctx)
Optional callback invoked when the script critically fails, allowing debugging.
Definition: ScriptEngine.cpp:234
RoR::ScriptEngine
This class represents the angelscript scripting interface.
Definition: ScriptEngine.h:173
RoR::LoadScriptRequest::lsr_filename
std::string lsr_filename
Load from resource (file). If buffer is supplied, use this as display name only.
Definition: ScriptEngine.h:92
RoR::SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS
@ SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS
Definition: ScriptEngine.h:135
RoR::SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED
@ SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED
Definition: ScriptEngine.h:124
RoR::ScriptEngine::scriptUnitExists
bool scriptUnitExists(ScriptUnitID_t unique_id)
Definition: ScriptEngine.cpp:1063
RoR::ScriptEventArgs
Args for eventCallbackEx() queued via MSG_SIM_SCRIPT_EVENT_TRIGGERED See descriptions at enum RoR::sc...
Definition: ScriptEvents.h:103
RoR::SCRIPTRETCODE_AS_WRONG_CALLING_CONV
@ SCRIPTRETCODE_AS_WRONG_CALLING_CONV
Definition: ScriptEngine.h:145
RoR::SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP
@ SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP
Definition: ScriptEngine.h:142
RoR::ScriptRetCode
ScriptRetCode
Common return codes for script manipulation funcs (add/get/delete | funcs/variables)
Definition: ScriptEngine.h:116
RoR::GETFUNCFLAG_OPTIONAL
const GetFuncFlags_t GETFUNCFLAG_OPTIONAL
Only logs warning if candidate is found, to help modder find a typo.
Definition: ScriptEngine.h:107
RoR::SCRIPTUNITID_INVALID
static const ScriptUnitID_t SCRIPTUNITID_INVALID
Definition: ForwardDeclarations.h:42
AngelScriptBindings.h
RoR::ScriptUnit::eventMask
unsigned int eventMask
filter mask for script events
Definition: ScriptEngine.h:76
RoR::ScriptEngine::deleteVariable
ScriptRetCode_t deleteVariable(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Deletes a global variable from the script.
Definition: ScriptEngine.cpp:656
RoR::ScriptEngine::setupScriptUnit
int setupScriptUnit(int unit_id)
Helper for loadScript(), does the actual building without worry about unit management.
Definition: ScriptEngine.cpp:877
RoR::eventsource_t
< Scripting
Definition: Collisions.h:40
RoR::NODENUM_INVALID
static const NodeNum_t NODENUM_INVALID
Definition: ForwardDeclarations.h:55
RoR::ScriptRetCode_t
int ScriptRetCode_t
see enum RoR::ScriptRetCode - combines AngelScript codes and RoR internal codes.
Definition: ForwardDeclarations.h:82
RoR::ScriptEngine::composeModuleName
Ogre::String composeModuleName(Ogre::String const &scriptName, ScriptCategory origin, ScriptUnitID_t id)
Packs name + important info to one string, for logging and reporting purposes.
Definition: ScriptEngine.cpp:823
RoR::ScriptEngine::addFunction
ScriptRetCode_t addFunction(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Adds a global function to the script.
Definition: ScriptEngine.cpp:519
RoR::TRIGGER_EVENT_ASYNC
void TRIGGER_EVENT_ASYNC(scriptEvents type, int arg1, int arg2ex=0, int arg3ex=0, int arg4ex=0, std::string arg5ex="", std::string arg6ex="", std::string arg7ex="", std::string arg8ex="")
Asynchronously (via MSG_SIM_SCRIPT_EVENT_TRIGGERED) invoke script function eventCallbackEx(),...
Definition: ScriptEngine.h:51
RoR::ScriptCategoryToString
const char * ScriptCategoryToString(ScriptCategory c)
Definition: ScriptEngine.cpp:66
RoR::ScriptCategory::INVALID
@ INVALID
RoR::SCRIPTRETCODE_AS_ALREADY_REGISTERED
@ SCRIPTRETCODE_AS_ALREADY_REGISTERED
Definition: ScriptEngine.h:134
RoR::ScriptEngine::getEngine
AngelScript::asIScriptEngine * getEngine()
Definition: ScriptEngine.h:289
RoR::LoadScriptRequest::lsr_buffer
std::string lsr_buffer
Load from memory buffer.
Definition: ScriptEngine.h:93
RoR::ScriptEngine::setForwardScriptLogToConsole
void setForwardScriptLogToConsole(bool doForward)
Definition: ScriptEngine.cpp:1051
RoR::ScriptEngine::forwardExceptionAsScriptEvent
void forwardExceptionAsScriptEvent(const std::string &from)
Forwards useful info from C++ try{}catch{} exceptions to script in the form of game event.
Definition: ScriptEngine.cpp:247
RoR::GetFuncFlags_t
BitMask_t GetFuncFlags_t
Flags for RoR::ScriptEngine::getFunctionByDeclAndLogCandidates()
Definition: ScriptEngine.h:106
RoR::ScriptEngine::queueStringForExecution
void queueStringForExecution(const Ogre::String command)
Queues a string for execution.
Definition: ScriptEngine.cpp:497
RoR::ScriptUnitMap
std::map< ScriptUnitID_t, ScriptUnit > ScriptUnitMap
Definition: ScriptEngine.h:88
BITMASK
#define BITMASK(OFFSET)
Definition: BitFlags.h:10
RoR::ScriptEngine::framestep
void framestep(Ogre::Real dt)
Calls the script's framestep function to be able to use timed things inside the script.
Definition: ScriptEngine.cpp:403
RoR::SCRIPTUNITID_DEFAULT
static const ScriptUnitID_t SCRIPTUNITID_DEFAULT
The script defined in .terrn2 [Scripts], or 'default.as' ~ classic behavior.
Definition: ForwardDeclarations.h:43
RefCountingObjectPtr< Actor >
RoR::ScriptEngine::getFunctionByDeclAndLogCandidates
AngelScript::asIScriptFunction * getFunctionByDeclAndLogCandidates(ScriptUnitID_t nid, GetFuncFlags_t flags, const std::string &funcName, const std::string &fmtFuncDecl)
Finds a function by full declaration, and if not found, finds candidates by name and logs them to Ang...
Definition: ScriptEngine.cpp:759
RoR::GETFUNC_DEFAULTEVENTCALLBACK_NAME
const std::string GETFUNC_DEFAULTEVENTCALLBACK_NAME
Definition: ScriptEngine.h:113
RoR::ScriptEngine::prepareContextAndHandleErrors
bool prepareContextAndHandleErrors(ScriptUnitID_t nid, int asFunctionID)
Helper for executing any script function/snippet; does asIScriptContext::Prepare() and reports any er...
Definition: ScriptEngine.cpp:365
RoR::SCRIPTRETCODE_SCRIPTUNIT_NO_MODULE
@ SCRIPTRETCODE_SCRIPTUNIT_NO_MODULE
Definition: ScriptEngine.h:165
RoR::SCRIPTRETCODE_AS_INVALID_INTERFACE
@ SCRIPTRETCODE_AS_INVALID_INTERFACE
Definition: ScriptEngine.h:139
RoR::LoadScriptRequest::lsr_category
ScriptCategory lsr_category
Definition: ScriptEngine.h:94
RoR::ActorInstanceID_t
int ActorInstanceID_t
Unique sequentially generated ID of an actor in session. Use ActorManager::GetActorById()
Definition: ForwardDeclarations.h:38
RoR::SCRIPTRETCODE_AS_INVALID_CONFIGURATION
@ SCRIPTRETCODE_AS_INVALID_CONFIGURATION
Definition: ScriptEngine.h:138
RoR::ScriptEngine::init
void init()
This function initialzies the engine and registeres all types.
Definition: ScriptEngine.cpp:119
RoR::ScriptUnit::~ScriptUnit
~ScriptUnit()
Definition: ScriptEngine.cpp:83
RoR::NodeNum_t
uint16_t NodeNum_t
Node position within Actor::ar_nodes; use RoR::NODENUM_INVALID as empty value.
Definition: ForwardDeclarations.h:54
RoR::SCRIPTRETCODE_AS_NO_MODULE
@ SCRIPTRETCODE_AS_NO_MODULE
Definition: ScriptEngine.h:136
RoR::ScriptEngine::variableExists
ScriptRetCode_t variableExists(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Adds a global variable to the script.
Definition: ScriptEngine.cpp:640
RoR::SCRIPTRETCODE_AS_CANT_BIND_ALL_FUNCTIONS
@ SCRIPTRETCODE_AS_CANT_BIND_ALL_FUNCTIONS
Definition: ScriptEngine.h:140
RoR::ScriptUnit::scriptName
Ogre::String scriptName
Definition: ScriptEngine.h:83
RoR::SCRIPTRETCODE_AS_INVALID_ARG
@ SCRIPTRETCODE_AS_INVALID_ARG
Definition: ScriptEngine.h:126
InterThreadStoreVector< Ogre::String >
RoR::ScriptEngine::executeContextAndHandleErrors
int executeContextAndHandleErrors(ScriptUnitID_t nid)
Helper for executing any script function/snippet; registers Line/Exception callbacks (on demand) and ...
Definition: ScriptEngine.cpp:278
RoR::ACTORINSTANCEID_INVALID
static const ActorInstanceID_t ACTORINSTANCEID_INVALID
Definition: ForwardDeclarations.h:39
RoR::ScriptUnit::scriptCategory
ScriptCategory scriptCategory
Definition: ScriptEngine.h:75
RoR::GameContext::PushMessage
void PushMessage(Message m)
Doesn't guarantee order! Use ChainMessage() if order matters.
Definition: GameContext.cpp:66
RoR::SCRIPTRETCODE_AS_CONTEXT_ACTIVE
@ SCRIPTRETCODE_AS_CONTEXT_ACTIVE
Definition: ScriptEngine.h:123
RoR::SCRIPTRETCODE_AS_INVALID_OBJECT
@ SCRIPTRETCODE_AS_INVALID_OBJECT
Definition: ScriptEngine.h:132
RoR::ScriptEngine::envokeCallback
void envokeCallback(int functionId, eventsource_t *source, NodeNum_t nodenum=NODENUM_INVALID, int type=0)
Definition: ScriptEngine.cpp:462
RoR::ScriptUnit::defaultEventCallbackFunctionPtr
AngelScript::asIScriptFunction * defaultEventCallbackFunctionPtr
script function pointer for spawner events
Definition: ScriptEngine.h:81
RoR::SCRIPTRETCODE_AS_MODULE_IS_IN_USE
@ SCRIPTRETCODE_AS_MODULE_IS_IN_USE
Definition: ScriptEngine.h:149
RoR::SE_NO_EVENTS
@ SE_NO_EVENTS
Definition: ScriptEvents.h:67
RoR::ScriptEngine::lineCallback
void lineCallback(AngelScript::asIScriptContext *ctx)
Optional callback which receives diagnostic info for every executed statement.
Definition: ScriptEngine.cpp:216
RoR::ScriptEngine::~ScriptEngine
~ScriptEngine()
Definition: ScriptEngine.cpp:106
RoR::LoadScriptRequest::lsr_associated_actor
ActorInstanceID_t lsr_associated_actor
For ScriptCategory::ACTOR.
Definition: ScriptEngine.h:95
RoR::ScriptEngine::scriptLog
Ogre::Log * scriptLog
Definition: ScriptEngine.h:368
Application.h
Central state/object manager and communications hub.
RoR::SCRIPTRETCODE_AS_ERROR
@ SCRIPTRETCODE_AS_ERROR
Definition: ScriptEngine.h:122
RoR::App::GetGameContext
GameContext * GetGameContext()
Definition: Application.cpp:283
RoR::ScriptEngine::m_currently_executing_script_unit
ScriptUnitID_t m_currently_executing_script_unit
Definition: ScriptEngine.h:372
RoR::SCRIPTRETCODE_AS_NOT_SUPPORTED
@ SCRIPTRETCODE_AS_NOT_SUPPORTED
Definition: ScriptEngine.h:128
GameScript.h
RoR::ScriptCallbackArgs
Definition: ScriptEngine.h:98
RoR::SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS
@ SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS
Definition: ScriptEngine.h:164
RoR::ScriptEngine::m_currently_executing_event_trigger
scriptEvents m_currently_executing_event_trigger
Definition: ScriptEngine.h:373
RoR::ScriptEngine::m_events_enabled
bool m_events_enabled
Hack to enable fast shutdown without cleanup.
Definition: ScriptEngine.h:374
RoR::SCRIPTRETCODE_UNSPECIFIED_ERROR
@ SCRIPTRETCODE_UNSPECIFIED_ERROR
Definition: ScriptEngine.h:161
RoR::ScriptEngine::triggerEvent
void triggerEvent(scriptEvents eventnum, int arg1=0, int arg2ex=0, int arg3ex=0, int arg4ex=0, std::string arg5ex="", std::string arg6ex="", std::string arg7ex="", std::string arg8ex="")
triggers an event; Not to be used by the end-user.
Definition: ScriptEngine.cpp:781
RoR::LoadScriptRequest
Definition: ScriptEngine.h:90
RoR::SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED
@ SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED
Definition: ScriptEngine.h:125
RoR::ScriptEngine::engine
AngelScript::asIScriptEngine * engine
instance of the scripting engine
Definition: ScriptEngine.h:366
RoR::ScriptUnit::eventCallbackFunctionPtr
AngelScript::asIScriptFunction * eventCallbackFunctionPtr
script function pointer to the event callback function
Definition: ScriptEngine.h:79
RoR::ScriptCategory::TERRAIN
@ TERRAIN
Defined in terrn2 file under '[Scripts]', receives terrain eventbox notifications.
RoR::ScriptUnit::scriptHash
Ogre::String scriptHash
Definition: ScriptEngine.h:84
RoR::ScriptEngine::loadScript
ScriptUnitID_t loadScript(Ogre::String scriptname, ScriptCategory category=ScriptCategory::TERRAIN, ActorPtr associatedActor=nullptr, std::string buffer="")
Loads a script.
Definition: ScriptEngine.cpp:828
RoR::ScriptUnit::ScriptUnit
ScriptUnit()
Definition: ScriptEngine.cpp:78
RoR::GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT
const std::string GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT
Definition: ScriptEngine.h:112
RoR::ScriptUnit::associatedActor
ActorPtr associatedActor
For ScriptCategory::ACTOR.
Definition: ScriptEngine.h:82
RoR::GameScript
Proxy class that can be called by script functions.
Definition: GameScript.h:41
RoR::ScriptEngine::fireEvent
int fireEvent(std::string instanceName, float intensity)
Definition: ScriptEngine.cpp:432
RoR::ScriptEngine::getVariable
ScriptRetCode_t getVariable(const Ogre::String &varName, void *ref, int typeID, ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Retrieves a global variable from any running script.
Definition: ScriptEngine.cpp:676
RoR::GETFUNCFLAG_REQUIRED
const GetFuncFlags_t GETFUNCFLAG_REQUIRED
Always logs warning that function was not found.
Definition: ScriptEngine.h:108
RoR::ScriptCallbackArgs::eventsource
eventsource_t * eventsource
Definition: ScriptEngine.h:102
RoR::ScriptEngine::addVariable
ScriptRetCode_t addVariable(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Adds a global variable to the script.
Definition: ScriptEngine.cpp:624
RoR::Message
Unified game event system - all requests and state changes are reported using a message.
Definition: GameContext.h:51
RoR::SCRIPTRETCODE_FUNCTION_NOT_EXISTS
@ SCRIPTRETCODE_FUNCTION_NOT_EXISTS
Definition: ScriptEngine.h:166
RoR::ScriptEngine::m_terrain_script_unit
ScriptUnitID_t m_terrain_script_unit
Definition: ScriptEngine.h:371
RoR::ScriptEngine::getScriptUnit
ScriptUnit & getScriptUnit(ScriptUnitID_t unique_id)
Definition: ScriptEngine.cpp:1069
RoR::ScriptUnit::uniqueId
ScriptUnitID_t uniqueId
Definition: ScriptEngine.h:74
RoR::ScriptUnit::eventCallbackExFunctionPtr
AngelScript::asIScriptFunction * eventCallbackExFunctionPtr
script function pointer to the event callback function
Definition: ScriptEngine.h:80
RoR::ScriptEngine::validateScriptModule
ScriptRetCode_t validateScriptModule(const ScriptUnitID_t nid, AngelScript::asIScriptModule *&out_mod)
Helper for all manipulations with functions/variables; ensures the script unit exists and is fully se...
Definition: ScriptEngine.cpp:385
RoR::ScriptEngine::context
AngelScript::asIScriptContext * context
context in which all scripting happens
Definition: ScriptEngine.h:367
ScriptEvents.h
RoR::ScriptEngine::m_script_units
ScriptUnitMap m_script_units
Definition: ScriptEngine.h:370
RoR::SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED
@ SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED
Definition: ScriptEngine.h:147
InterThreadStoreVector.h
RoR::SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE
@ SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE
Definition: ScriptEngine.h:144
RoR::ScriptCategory::ACTOR
@ ACTOR
Defined in truck file under 'scripts', contains global variable BeamClass@ thisActor.
RoR::ScriptEngine::functionExists
ScriptRetCode_t functionExists(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Checks if a global function exists.
Definition: ScriptEngine.cpp:568
RoR::SCRIPTRETCODE_AS_INVALID_TYPE
@ SCRIPTRETCODE_AS_INVALID_TYPE
Definition: ScriptEngine.h:133
RoR::ScriptEngine::m_game_script
GameScript m_game_script
Definition: ScriptEngine.h:369
RoR::ScriptEngine::stringExecutionQueue
InterThreadStoreVector< Ogre::String > stringExecutionQueue
The string execution queue.
Definition: ScriptEngine.h:376
BitMask_t
uint32_t BitMask_t
Definition: BitFlags.h:7
RoR::ScriptUnitID_t
int ScriptUnitID_t
Unique sequentially generated ID of a loaded and running scriptin session. Use ScriptEngine::getScrip...
Definition: ForwardDeclarations.h:41
RoR::ScriptCategory
ScriptCategory
Note: Either of these can be loaded from script using game.pushMessage(MSG_APP_LOAD_SCRIPT_REQUESTED....
Definition: ScriptEngine.h:58
RoR::SCRIPTRETCODE_CONTEXT_NOT_CREATED
@ SCRIPTRETCODE_CONTEXT_NOT_CREATED
Definition: ScriptEngine.h:163
RoR::SCRIPTRETCODE_AS_OUT_OF_MEMORY
@ SCRIPTRETCODE_AS_OUT_OF_MEMORY
Definition: ScriptEngine.h:148
RoR::ScriptCallbackArgs::node
NodeNum_t node
Definition: ScriptEngine.h:103
RoR::ScriptCallbackArgs::ScriptCallbackArgs
ScriptCallbackArgs(eventsource_t *evs, NodeNum_t nd)
Definition: ScriptEngine.h:100
RoR::ScriptEngine::executeString
ScriptRetCode_t executeString(Ogre::String command)
executes a string (useful for the console)
Definition: ScriptEngine.cpp:502
RoR::SCRIPTRETCODE_AS_BUILD_IN_PROGRESS
@ SCRIPTRETCODE_AS_BUILD_IN_PROGRESS
Definition: ScriptEngine.h:146
RoR::ScriptUnit::scriptBuffer
Ogre::String scriptBuffer
Definition: ScriptEngine.h:85
RoR::ScriptUnit::scriptModule
AngelScript::asIScriptModule * scriptModule
Definition: ScriptEngine.h:77
RoR::SCRIPTRETCODE_AS_NAME_TAKEN
@ SCRIPTRETCODE_AS_NAME_TAKEN
Definition: ScriptEngine.h:130
RoR::scriptEvents
scriptEvents
This enum describes what events are existing. The script can register to receive events.
Definition: ScriptEvents.h:30
RoR::SCRIPTRETCODE_AS_NO_GLOBAL_VAR
@ SCRIPTRETCODE_AS_NO_GLOBAL_VAR
Definition: ScriptEngine.h:137
RoR::SCRIPTRETCODE_SUCCESS
@ SCRIPTRETCODE_SUCCESS
Definition: ScriptEngine.h:119
RoR
Definition: AppContext.h:36
RoR::ScriptEngine::deleteFunction
ScriptRetCode_t deleteFunction(const Ogre::String &arg, const ScriptUnitID_t nid=SCRIPTUNITID_DEFAULT)
Deletes a global function from the script.
Definition: ScriptEngine.cpp:581
RoR::ScriptEngine::ScriptEngine
ScriptEngine()
Definition: ScriptEngine.cpp:97
RoR::ScriptCategory::CUSTOM
@ CUSTOM
Loaded by user via either: A) ingame console 'loadscript'; B) RoR.cfg 'app_custom_scripts'; C) comman...
RoR::SCRIPTRETCODE_AS_CONFIG_GROUP_IS_IN_USE
@ SCRIPTRETCODE_AS_CONFIG_GROUP_IS_IN_USE
Definition: ScriptEngine.h:143
Log
quaternion Log() const
RoR::SCRIPTRETCODE_AS_NO_FUNCTION
@ SCRIPTRETCODE_AS_NO_FUNCTION
Definition: ScriptEngine.h:127
RoR::SCRIPTRETCODE_AS_INVALID_DECLARATION
@ SCRIPTRETCODE_AS_INVALID_DECLARATION
Definition: ScriptEngine.h:131
RoR::SCRIPTRETCODE_AS_INVALID_NAME
@ SCRIPTRETCODE_AS_INVALID_NAME
Definition: ScriptEngine.h:129
RoR::MSG_SIM_SCRIPT_EVENT_TRIGGERED
@ MSG_SIM_SCRIPT_EVENT_TRIGGERED
Payload = RoR::ScriptEventArgs* (owner)
Definition: Application.h:130
RoR::GETFUNCFLAG_SILENT
const GetFuncFlags_t GETFUNCFLAG_SILENT
Never logs.
Definition: ScriptEngine.h:109
RoR::ScriptEngine::messageLogged
void messageLogged(const Ogre::String &message, Ogre::LogMessageLevel lml, bool maskDebug, const Ogre::String &logName, bool &skipThisMessage)
Definition: ScriptEngine.cpp:113