RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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  GADGET,
64  CUSTOM
65 };
66 
68 
70 struct ScriptUnit
71 {
72  ScriptUnit();
73  ~ScriptUnit();
74 
77  unsigned int eventMask = 0;
78  AngelScript::asIScriptModule* scriptModule = nullptr;
79  AngelScript::asIScriptFunction* frameStepFunctionPtr = nullptr;
80  AngelScript::asIScriptFunction* eventCallbackFunctionPtr = nullptr;
81  AngelScript::asIScriptFunction* eventCallbackExFunctionPtr = nullptr;
82  AngelScript::asIScriptFunction* defaultEventCallbackFunctionPtr = nullptr;
85  Ogre::String scriptName;
86  Ogre::String scriptHash;
87  Ogre::String scriptBuffer;
88 };
89 
90 typedef std::map<ScriptUnitID_t, ScriptUnit> ScriptUnitMap;
91 
93 {
94  std::string lsr_filename;
95  std::string lsr_buffer;
98 };
99 
101 {
103 
106 };
107 
112 
113 // Params to `RoR::ScriptEngine::getFunctionByDeclAndLogCandidates()`
114 const std::string GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT = "void {}(int, string, string, int)";
115 const std::string GETFUNC_DEFAULTEVENTCALLBACK_NAME = "defaultEventCallback";
116 
119 {
120  // Generic success - 0 by common convention.
121  SCRIPTRETCODE_SUCCESS = AngelScript::asSUCCESS, // = AngelScript::0
122 
123  // AngelScript technical codes
124  SCRIPTRETCODE_AS_ERROR = AngelScript::asERROR, // = AngelScript::-1 etc...
125  SCRIPTRETCODE_AS_CONTEXT_ACTIVE = AngelScript::asCONTEXT_ACTIVE,
126  SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED = AngelScript::asCONTEXT_NOT_FINISHED,
127  SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED = AngelScript::asCONTEXT_NOT_PREPARED,
128  SCRIPTRETCODE_AS_INVALID_ARG = AngelScript::asINVALID_ARG,
129  SCRIPTRETCODE_AS_NO_FUNCTION = AngelScript::asNO_FUNCTION,
130  SCRIPTRETCODE_AS_NOT_SUPPORTED = AngelScript::asNOT_SUPPORTED,
131  SCRIPTRETCODE_AS_INVALID_NAME = AngelScript::asINVALID_NAME,
132  SCRIPTRETCODE_AS_NAME_TAKEN = AngelScript::asNAME_TAKEN,
133  SCRIPTRETCODE_AS_INVALID_DECLARATION = AngelScript::asINVALID_DECLARATION,
134  SCRIPTRETCODE_AS_INVALID_OBJECT = AngelScript::asINVALID_OBJECT,
135  SCRIPTRETCODE_AS_INVALID_TYPE = AngelScript::asINVALID_TYPE,
136  SCRIPTRETCODE_AS_ALREADY_REGISTERED = AngelScript::asALREADY_REGISTERED,
137  SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS = AngelScript::asMULTIPLE_FUNCTIONS,
138  SCRIPTRETCODE_AS_NO_MODULE = AngelScript::asNO_MODULE,
139  SCRIPTRETCODE_AS_NO_GLOBAL_VAR = AngelScript::asNO_GLOBAL_VAR,
140  SCRIPTRETCODE_AS_INVALID_CONFIGURATION = AngelScript::asINVALID_CONFIGURATION,
141  SCRIPTRETCODE_AS_INVALID_INTERFACE = AngelScript::asINVALID_INTERFACE,
142  SCRIPTRETCODE_AS_CANT_BIND_ALL_FUNCTIONS = AngelScript::asCANT_BIND_ALL_FUNCTIONS,
143  SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED = AngelScript::asLOWER_ARRAY_DIMENSION_NOT_REGISTERED,
144  SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP = AngelScript::asWRONG_CONFIG_GROUP,
145  SCRIPTRETCODE_AS_CONFIG_GROUP_IS_IN_USE = AngelScript::asCONFIG_GROUP_IS_IN_USE,
146  SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE = AngelScript::asILLEGAL_BEHAVIOUR_FOR_TYPE,
147  SCRIPTRETCODE_AS_WRONG_CALLING_CONV = AngelScript::asWRONG_CALLING_CONV,
148  SCRIPTRETCODE_AS_BUILD_IN_PROGRESS = AngelScript::asBUILD_IN_PROGRESS,
149  SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED = AngelScript::asINIT_GLOBAL_VARS_FAILED,
150  SCRIPTRETCODE_AS_OUT_OF_MEMORY = AngelScript::asOUT_OF_MEMORY,
151  SCRIPTRETCODE_AS_MODULE_IS_IN_USE = AngelScript::asMODULE_IS_IN_USE,
152 
153  // RoR ScriptEngine return codes
154  // Following is analysis of former state (most but not all funcs returned 0 on success)
155  // ~ executeString() [script: not exported] - used to return 0 on success, 1 on internal error and negative number otherwise.
156  // ~ addFunction() [script: `game.addScriptFunction()`] - used to return 0 on success, 1 on internal error and negative number otherwise.
157  // ~ functionExists() [script: `game.scriptFunctionExists()`] - used to return function ID (always >0) on success, negative number on error.
158  // ~ deleteFunction() [script: `game.deleteScriptFunction()`] - used to return function ID (always >0) on success, negative number on error.
159  // ~ addVariable() [script: `game.addScriptVariable()` ] - used to return 0 on success, 1 on internal error and negative number otherwise.
160  // ~ variableExists() [script: `game.scriptVariableExists()`] - newly added, returns 0 on success and negative number otherwise.
161  // ~ deleteVariable() [script: `game.deleteScriptVariable()` ] - used to return 0 on success, 1 on internal error and negative number otherwise.
162  // ~ getVariable() [script: `game.getScriptVariable()` ] - recently added, returns 0 on success and negative number otherwise.
166  SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS = -1004, // The scpecified ScriptUnitID_t was invalid
169 };
170 
175 class ScriptEngine : public Ogre::LogListener
176 {
177  friend class GameScript;
178 
179 public:
180 
181  ScriptEngine();
182  ~ScriptEngine();
183 
192  ScriptUnitID_t loadScript(Ogre::String filename, ScriptCategory category = ScriptCategory::TERRAIN,
193  ActorPtr associatedActor = nullptr, std::string buffer = "");
194 
199  void unloadScript(ScriptUnitID_t unique_id);
200 
205  void framestep(Ogre::Real dt);
206 
207  void setForwardScriptLogToConsole(bool doForward);
208 
213  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="");
214 
215  void setEventsEnabled(bool val) { m_events_enabled = val; }
216 
221  ScriptRetCode_t executeString(Ogre::String command);
222 
229  void queueStringForExecution(const Ogre::String command);
230 
236  ScriptRetCode_t addFunction(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
237 
242  ScriptRetCode_t functionExists(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
243 
248  ScriptRetCode_t deleteFunction(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
249 
254  ScriptRetCode_t addVariable(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
255 
260  ScriptRetCode_t variableExists(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
261 
266  ScriptRetCode_t deleteVariable(const Ogre::String& arg, const ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
267 
271  ScriptRetCode_t getVariable(const Ogre::String& varName, void *ref, int typeID, ScriptUnitID_t nid = SCRIPTUNITID_DEFAULT);
272 
277  AngelScript::asIScriptFunction* getFunctionByDeclAndLogCandidates(ScriptUnitID_t nid, GetFuncFlags_t flags, const std::string& funcName, const std::string& fmtFuncDecl);
278 
279  int fireEvent(std::string instanceName, float intensity);
280 
281  void envokeCallback(int functionId, eventsource_t* source, NodeNum_t nodenum = NODENUM_INVALID, int type = 0);
282 
289  void forwardExceptionAsScriptEvent(const std::string& from);
290 
291  AngelScript::asIScriptEngine* getEngine() { return engine; };
292 
293  // method from Ogre::LogListener
294  void messageLogged(const Ogre::String& message, Ogre::LogMessageLevel lml, bool maskDebug, const Ogre::String& logName, bool& skipThisMessage);
295 
296  inline void SLOG(const char* msg) { this->scriptLog->logMessage(msg); }
297  inline void SLOG(std::string msg) { this->scriptLog->logMessage(msg); }
298 
299  bool scriptUnitExists(ScriptUnitID_t unique_id);
300  ScriptUnit& getScriptUnit(ScriptUnitID_t unique_id);
301  ScriptUnitID_t getTerrainScriptUnit() const { return m_terrain_script_unit; }
302  ScriptUnitID_t getCurrentlyExecutingScriptUnit() const { return m_currently_executing_script_unit; }
303  ScriptUnitMap const& getScriptUnits() const { return m_script_units; }
304 
305 protected:
306 
309 
313  void init();
314 
318  Ogre::String composeModuleName(Ogre::String const& scriptName, ScriptCategory origin, ScriptUnitID_t id);
319 
324  int setupScriptUnit(int unit_id);
325 
330  bool prepareContextAndHandleErrors(ScriptUnitID_t nid, int asFunctionID);
331 
337 
342  ScriptRetCode_t validateScriptModule(const ScriptUnitID_t nid, AngelScript::asIScriptModule*& out_mod);
343 
345 
348 
352  void msgCallback(const AngelScript::asSMessageInfo* msg);
353 
358  void lineCallback(AngelScript::asIScriptContext* ctx);
359 
364  void exceptionCallback(AngelScript::asIScriptContext* ctx);
365 
367 
368  AngelScript::asIScriptEngine* engine;
369  AngelScript::asIScriptContext* context;
376  bool m_events_enabled = true;
377 
379 };
380 
382 
383 } // namespace RoR
384 
385 #else // USE_ANGELSCRIPT
386 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 = "")
387 {
388 }
389 #endif // USE_ANGELSCRIPT
RoR::ScriptUnit
Represents a loaded script and all associated resources/handles.
Definition: ScriptEngine.h:70
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:79
RoR::SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED
@ SCRIPTRETCODE_AS_LOWER_ARRAY_DIMENSION_NOT_REGISTERED
Definition: ScriptEngine.h:143
RoR::ScriptEngine::unloadScript
void unloadScript(ScriptUnitID_t unique_id)
Unloads a script.
Definition: ScriptEngine.cpp:1066
RoR::ScriptEngine::getScriptUnits
ScriptUnitMap const & getScriptUnits() const
Definition: ScriptEngine.h:303
RoR::ScriptEngine::setEventsEnabled
void setEventsEnabled(bool val)
Definition: ScriptEngine.h:215
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:164
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:175
RoR::LoadScriptRequest::lsr_filename
std::string lsr_filename
Load from resource ('.as' file or '.gadget' file); If buffer is supplied, use this as display name on...
Definition: ScriptEngine.h:94
RoR::SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS
@ SCRIPTRETCODE_AS_MULTIPLE_FUNCTIONS
Definition: ScriptEngine.h:137
RoR::SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED
@ SCRIPTRETCODE_AS_CONTEXT_NOT_FINISHED
Definition: ScriptEngine.h:126
RoR::ScriptEngine::scriptUnitExists
bool scriptUnitExists(ScriptUnitID_t unique_id)
Definition: ScriptEngine.cpp:1096
RoR::ScriptEventArgs
Args for eventCallbackEx() queued via MSG_SIM_SCRIPT_EVENT_TRIGGERED See descriptions at enum RoR::sc...
Definition: ScriptEvents.h:117
RoR::ScriptUnit::originatingGadget
CacheEntryPtr originatingGadget
For ScriptCategory::GADGET ~ determines resource group.
Definition: ScriptEngine.h:84
RoR::SCRIPTRETCODE_AS_WRONG_CALLING_CONV
@ SCRIPTRETCODE_AS_WRONG_CALLING_CONV
Definition: ScriptEngine.h:147
RoR::SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP
@ SCRIPTRETCODE_AS_WRONG_CONFIG_GROUP
Definition: ScriptEngine.h:144
RoR::ScriptRetCode
ScriptRetCode
Common return codes for script manipulation funcs (add/get/delete | funcs/variables)
Definition: ScriptEngine.h:118
RoR::GETFUNCFLAG_OPTIONAL
const GetFuncFlags_t GETFUNCFLAG_OPTIONAL
Only logs warning if candidate is found, to help modder find a typo.
Definition: ScriptEngine.h:109
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:77
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:910
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:88
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:136
RoR::ScriptEngine::getEngine
AngelScript::asIScriptEngine * getEngine()
Definition: ScriptEngine.h:291
RoR::LoadScriptRequest::lsr_buffer
std::string lsr_buffer
Load from memory buffer.
Definition: ScriptEngine.h:95
RoR::ScriptEngine::setForwardScriptLogToConsole
void setForwardScriptLogToConsole(bool doForward)
Definition: ScriptEngine.cpp:1084
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:108
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:90
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:115
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:167
RoR::SCRIPTRETCODE_AS_INVALID_INTERFACE
@ SCRIPTRETCODE_AS_INVALID_INTERFACE
Definition: ScriptEngine.h:141
RoR::LoadScriptRequest::lsr_category
ScriptCategory lsr_category
Definition: ScriptEngine.h:96
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:140
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:138
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:142
RoR::ScriptUnit::scriptName
Ogre::String scriptName
Name of the '.as' file exclusively.
Definition: ScriptEngine.h:85
RoR::SCRIPTRETCODE_AS_INVALID_ARG
@ SCRIPTRETCODE_AS_INVALID_ARG
Definition: ScriptEngine.h:128
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:76
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:125
RoR::SCRIPTRETCODE_AS_INVALID_OBJECT
@ SCRIPTRETCODE_AS_INVALID_OBJECT
Definition: ScriptEngine.h:134
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:82
RoR::SCRIPTRETCODE_AS_MODULE_IS_IN_USE
@ SCRIPTRETCODE_AS_MODULE_IS_IN_USE
Definition: ScriptEngine.h:151
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:97
RoR::ScriptEngine::scriptLog
Ogre::Log * scriptLog
Definition: ScriptEngine.h:370
Application.h
Central state/object manager and communications hub.
RoR::SCRIPTRETCODE_AS_ERROR
@ SCRIPTRETCODE_AS_ERROR
Definition: ScriptEngine.h:124
RoR::App::GetGameContext
GameContext * GetGameContext()
Definition: Application.cpp:296
RoR::ScriptEngine::m_currently_executing_script_unit
ScriptUnitID_t m_currently_executing_script_unit
Definition: ScriptEngine.h:374
RoR::SCRIPTRETCODE_AS_NOT_SUPPORTED
@ SCRIPTRETCODE_AS_NOT_SUPPORTED
Definition: ScriptEngine.h:130
GameScript.h
RoR::ScriptCallbackArgs
Definition: ScriptEngine.h:100
RoR::SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS
@ SCRIPTRETCODE_SCRIPTUNIT_NOT_EXISTS
Definition: ScriptEngine.h:166
RoR::ScriptEngine::m_currently_executing_event_trigger
scriptEvents m_currently_executing_event_trigger
Definition: ScriptEngine.h:375
RoR::ScriptEngine::m_events_enabled
bool m_events_enabled
Hack to enable fast shutdown without cleanup.
Definition: ScriptEngine.h:376
RoR::SCRIPTRETCODE_UNSPECIFIED_ERROR
@ SCRIPTRETCODE_UNSPECIFIED_ERROR
Definition: ScriptEngine.h:163
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:92
RoR::SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED
@ SCRIPTRETCODE_AS_CONTEXT_NOT_PREPARED
Definition: ScriptEngine.h:127
RoR::ScriptEngine::engine
AngelScript::asIScriptEngine * engine
instance of the scripting engine
Definition: ScriptEngine.h:368
RoR::ScriptUnit::eventCallbackFunctionPtr
AngelScript::asIScriptFunction * eventCallbackFunctionPtr
script function pointer to the event callback function
Definition: ScriptEngine.h:80
RoR::ScriptCategory::TERRAIN
@ TERRAIN
Defined in terrn2 file under '[Scripts]', receives terrain eventbox notifications.
RoR::ScriptUnit::scriptHash
Ogre::String scriptHash
Definition: ScriptEngine.h:86
RoR::ScriptUnit::ScriptUnit
ScriptUnit()
Definition: ScriptEngine.cpp:78
RoR::GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT
const std::string GETFUNC_DEFAULTEVENTCALLBACK_SIGFMT
Definition: ScriptEngine.h:114
RoR::ScriptUnit::associatedActor
ActorPtr associatedActor
For ScriptCategory::ACTOR.
Definition: ScriptEngine.h:83
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:110
RoR::ScriptCallbackArgs::eventsource
eventsource_t * eventsource
Definition: ScriptEngine.h:104
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:168
RoR::ScriptEngine::m_terrain_script_unit
ScriptUnitID_t m_terrain_script_unit
Definition: ScriptEngine.h:373
RoR::ScriptEngine::getScriptUnit
ScriptUnit & getScriptUnit(ScriptUnitID_t unique_id)
Definition: ScriptEngine.cpp:1102
RoR::ScriptUnit::uniqueId
ScriptUnitID_t uniqueId
Definition: ScriptEngine.h:75
RoR::ScriptUnit::eventCallbackExFunctionPtr
AngelScript::asIScriptFunction * eventCallbackExFunctionPtr
script function pointer to the event callback function
Definition: ScriptEngine.h:81
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:369
ScriptEvents.h
RoR::ScriptEngine::m_script_units
ScriptUnitMap m_script_units
Definition: ScriptEngine.h:372
RoR::SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED
@ SCRIPTRETCODE_AS_INIT_GLOBAL_VARS_FAILED
Definition: ScriptEngine.h:149
InterThreadStoreVector.h
RoR::SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE
@ SCRIPTRETCODE_AS_ILLEGAL_BEHAVIOUR_FOR_TYPE
Definition: ScriptEngine.h:146
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:135
RoR::ScriptEngine::m_game_script
GameScript m_game_script
Definition: ScriptEngine.h:371
RoR::ScriptEngine::stringExecutionQueue
InterThreadStoreVector< Ogre::String > stringExecutionQueue
The string execution queue.
Definition: ScriptEngine.h:378
BitMask_t
uint32_t BitMask_t
Definition: BitFlags.h:7
RoR::ScriptEngine::loadScript
ScriptUnitID_t loadScript(Ogre::String filename, ScriptCategory category=ScriptCategory::TERRAIN, ActorPtr associatedActor=nullptr, std::string buffer="")
Loads a script.
Definition: ScriptEngine.cpp:828
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::GADGET
@ GADGET
Associated with a .gadget mod file, launched via UI or any method given below for CUSTOM scripts (use...
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:165
RoR::SCRIPTRETCODE_AS_OUT_OF_MEMORY
@ SCRIPTRETCODE_AS_OUT_OF_MEMORY
Definition: ScriptEngine.h:150
RoR::ScriptCallbackArgs::node
NodeNum_t node
Definition: ScriptEngine.h:105
RoR::ScriptCallbackArgs::ScriptCallbackArgs
ScriptCallbackArgs(eventsource_t *evs, NodeNum_t nd)
Definition: ScriptEngine.h:102
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:148
RoR::ScriptUnit::scriptBuffer
Ogre::String scriptBuffer
Definition: ScriptEngine.h:87
RoR::ScriptUnit::scriptModule
AngelScript::asIScriptModule * scriptModule
Definition: ScriptEngine.h:78
RoR::SCRIPTRETCODE_AS_NAME_TAKEN
@ SCRIPTRETCODE_AS_NAME_TAKEN
Definition: ScriptEngine.h:132
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:139
RoR::SCRIPTRETCODE_SUCCESS
@ SCRIPTRETCODE_SUCCESS
Definition: ScriptEngine.h:121
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:145
Log
quaternion Log() const
RoR::SCRIPTRETCODE_AS_NO_FUNCTION
@ SCRIPTRETCODE_AS_NO_FUNCTION
Definition: ScriptEngine.h:129
RoR::SCRIPTRETCODE_AS_INVALID_DECLARATION
@ SCRIPTRETCODE_AS_INVALID_DECLARATION
Definition: ScriptEngine.h:133
RoR::SCRIPTRETCODE_AS_INVALID_NAME
@ SCRIPTRETCODE_AS_INVALID_NAME
Definition: ScriptEngine.h:131
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:111
RoR::ScriptEngine::messageLogged
void messageLogged(const Ogre::String &message, Ogre::LogMessageLevel lml, bool maskDebug, const Ogre::String &logName, bool &skipThisMessage)
Definition: ScriptEngine.cpp:113