diff --git a/Makefile b/Makefile
index 3bcb527dd..d3b6cd62e 100644
--- a/Makefile
+++ b/Makefile
@@ -634,13 +634,21 @@ SRCS = \
src/tdme/tools/installer/Installer.cpp \
src/tdme/utilities/Base64.cpp \
src/tdme/utilities/Console.cpp \
+ src/tdme/utilities/EngineMiniScript.cpp \
src/tdme/utilities/ExceptionBase.cpp \
src/tdme/utilities/Float.cpp \
src/tdme/utilities/Hex.cpp \
src/tdme/utilities/Integer.cpp \
src/tdme/utilities/MiniScript.cpp \
src/tdme/utilities/MiniScriptMath.cpp \
+ src/tdme/utilities/MiniScriptTransform.cpp \
src/tdme/utilities/MiniScriptTranspiler.cpp \
+ src/tdme/utilities/MiniScriptMatrix3x3.cpp \
+ src/tdme/utilities/MiniScriptMatrix4x4.cpp \
+ src/tdme/utilities/MiniScriptQuaternion.cpp \
+ src/tdme/utilities/MiniScriptVector2.cpp \
+ src/tdme/utilities/MiniScriptVector3.cpp \
+ src/tdme/utilities/MiniScriptVector4.cpp \
src/tdme/utilities/ModelTools.cpp \
src/tdme/utilities/PathFinding.cpp \
src/tdme/utilities/Primitives.cpp \
diff --git a/Makefile.nmake b/Makefile.nmake
index 754d7547b..59d4d6607 100644
--- a/Makefile.nmake
+++ b/Makefile.nmake
@@ -495,13 +495,21 @@ SRCS = \
src/tdme/tools/installer/Installer.cpp \
src/tdme/utilities/Base64.cpp \
src/tdme/utilities/Console.cpp \
+ src/tdme/utilities/EngineMiniScript.cpp \
src/tdme/utilities/ExceptionBase.cpp \
src/tdme/utilities/Float.cpp \
src/tdme/utilities/Hex.cpp \
src/tdme/utilities/Integer.cpp \
src/tdme/utilities/MiniScript.cpp \
src/tdme/utilities/MiniScriptMath.cpp \
+ src/tdme/utilities/MiniScriptTransform.cpp \
src/tdme/utilities/MiniScriptTranspiler.cpp \
+ src/tdme/utilities/MiniScriptMatrix3x3.cpp \
+ src/tdme/utilities/MiniScriptMatrix4x4.cpp \
+ src/tdme/utilities/MiniScriptQuaternion.cpp \
+ src/tdme/utilities/MiniScriptVector2.cpp \
+ src/tdme/utilities/MiniScriptVector3.cpp \
+ src/tdme/utilities/MiniScriptVector4.cpp \
src/tdme/utilities/ModelTools.cpp \
src/tdme/utilities/PathFinding.cpp \
src/tdme/utilities/Primitives.cpp \
diff --git a/README-MiniScript.md b/README-MiniScript.md
index 4a6456315..0b77a5aba 100644
--- a/README-MiniScript.md
+++ b/README-MiniScript.md
@@ -7,16 +7,16 @@ This is the documentation of MiniScript language. This document is WIP.
Introduction to MiniScript language features:
- very small implementation of a scripting language
- runs on every CPU, OS, ... due to its simplicity, so its highly portable just like TDME2 is
-- can be easily extended by writing state machine machine states and script methods in C++
-- works with the following data types: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
+- can be easily extended by writing state machine machine states and script methods in C++ as well as custom data types
+- built-in data types: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
- when calling script C++ methods or script functions with arguments it does optionally use references or value by copy
- supports user script functions and recursion
- supports operators by operator to method mapping by a preprocessor run
- supports loops and conditions
- supports programming with classes style programming
- - for string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set data types
- - via script classes
- - custom data types are planned
+ - for built-in datatypes: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
+ - for script classes/objects
+ - for custom data types
- supports event like programming
- can be transpiled to C++
@@ -116,11 +116,13 @@ end
...
```
-If a argument variable is prefixed with a = operator in function declaration, this variable will be assigned back after the function returns. See =$b and =$c.
+If a argument(variable) is prefixed with a & operator in the function declaration, the variable will not be copied into the function arguments,
+but a reference will be created, means if this variable changes within the function it will also change in the parent variable scope.
+See &$b and &$c.
```
...
# user script function to test assign back in user functions
-function: assignTest($a, =$b, =$c)
+function: assignTest($a, &$b, &$c)
$a = "a"
$b = "b"
$c = "c"
@@ -614,7 +616,7 @@ Please see a example below.
" horses in it"
)
},
- getProperties: (=$wheelCount, =$color, =$horsePower) ->
+ getProperties: (&$wheelCount, &$color, &$horsePower) ->
{
$wheelCount = $this.wheelCount
$color = $this.color
@@ -651,7 +653,7 @@ If you want to assign a class member function later, see this example. Note that
```
...
-function: setConvertible(=$this, $convertible)
+function: setConvertible(&$this, $convertible)
$this.convertible = $convertible
end
@@ -906,7 +908,7 @@ end
| Create transform from 4x4 matrix |
| static transform.fromMatrix($transformMatrix: Matrix4x4): Transform |
| Interpolate rotation |
-| static transform.interpolateRotation($currentAngle: Float, $targetAngle: Float, $timePassedSeconds: Float, $degreesPerSeconds: Float, =$interpolatedAngle: Float): Boolean|
+| static transform.interpolateRotation($currentAngle: Float, $targetAngle: Float, $timePassedSeconds: Float, $degreesPerSeconds: Float, &$interpolatedAngle: Float): Boolean|
| |
| NON STATIC METHODS |
| Apply a rotation to transform |
@@ -1068,9 +1070,9 @@ end
| Logical or |
| or($a: Boolean, $b: Boolean): Boolean |
| Prefix decrement |
-| prefixDecrement(=$variable: Integer): Integer |
+| prefixDecrement(&$variable: Integer): Integer |
| Prefix increment |
-| prefixIncrement(=$variable: Integer): Integer |
+| prefixIncrement(&$variable: Integer): Integer |
| Return from function with optional return value |
| return([$value: Mixed]): Null |
| Subtract |
@@ -1245,7 +1247,7 @@ The boilerplate template code for a MiniScript logic looks like: [logic_script_t
| Get engine height - available in initializeEngine(), updateEngine() |
| engine.getHeight(): Integer |
| Compute engine screen coordinate by world coordinate - available in initializeEngine(), updateEngine()|
-| engine.computeScreenCoordinateByWorldCoordinate($worldCoodinate: Vector3, =$screenCoordinate: Vector2): Boolean|
+| engine.computeScreenCoordinateByWorldCoordinate($worldCoodinate: Vector3, &$screenCoordinate: Vector2): Boolean|
| Get engine width - available in initializeEngine(), updateEngine() |
| engine.getWidth(): Integer |
| Compute engine world coordinate by mouse position - available in initializeEngine(), updateEngine()|
@@ -1499,7 +1501,7 @@ The boilerplate template code for a MiniScript logic looks like: [logic_script_t
| Pathfinding try/lock failed integer code - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
| pathfinding.STATE_TRYLOCK_FAILED(): Integer |
| Issue pathfinding - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
-| pathfinding.findPath($logicId: String, $startPosition: Vector3, $endPosition: Vector3, =$path: Array): Integer|
+| pathfinding.findPath($logicId: String, $startPosition: Vector3, $endPosition: Vector3, &$path: Array): Integer|
## 8.12 Scene methods
@@ -1526,11 +1528,11 @@ The boilerplate template code for a MiniScript logic looks like: [logic_script_t
| Table of methods |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Determine height at specific position in physics world - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
-| world.determineHeight($collisionTypeIds: Integer, $stepUpMax: Float, $point: Vector3, =$heightPoint: Vector3[, =$bodyId: String[, $minHeight: Float[, $maxHeight: Float]]]): Boolean|
+| world.determineHeight($collisionTypeIds: Integer, $stepUpMax: Float, $point: Vector3, &$heightPoint: Vector3[, &$bodyId: String[, $minHeight: Float[, $maxHeight: Float]]]): Boolean|
| Determine collision of two specific bodies in physics world - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
| world.doCollide($bodyId1: String, $bodyId2: String): Boolean |
| Compute ray casting in physics world - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
-| world.doRayCasting($collisionTypeIds: Integer, $start: Vector3, $end: Vector3, =$hitPoint: Vector3[, =$bodyId: String[, $actorId: String]]): Boolean|
+| world.doRayCasting($collisionTypeIds: Integer, $start: Vector3, $end: Vector3, &$hitPoint: Vector3[, &$bodyId: String[, $actorId: String]]): Boolean|
| Determine collision of specific body in physics world - available in initializeLogic(), updateLogic(), onLogicAdded(), onLogicsProcessed()|
| world.doesCollideWith($collisionTypeIds: Integer, $bodyId: String): Array |
@@ -1851,9 +1853,9 @@ The boilerplate template code for a MiniScript GUI logic looks like: [gui_script
| && | and($a: Boolean, $b: Boolean): Boolean |
| * | mul($a: Mixed, $b: Mixed): Mixed |
| + | add($a: Mixed, $b: Mixed): Mixed |
-| ++ | prefixIncrement(=$variable: Integer): Integer |
+| ++ | prefixIncrement(&$variable: Integer): Integer |
| - | sub($a: Mixed, $b: Mixed): Mixed |
-| -- | prefixDecrement(=$variable: Integer): Integer |
+| -- | prefixDecrement(&$variable: Integer): Integer |
| / | div($a: Mixed, $b: Mixed): Mixed |
| < | lesser($a: Mixed, $b: Mixed): Boolean |
| <= | lesserEquals($a: Mixed, $b: Mixed): Boolean |
diff --git a/README.md b/README.md
index ea667b3ea..56d826907 100644
--- a/README.md
+++ b/README.md
@@ -212,16 +212,16 @@
- MiniScript
- very small implementation of a scripting language
- runs on every CPU, OS, ... due to its simplicity, so its highly portable just like TDME2 is
- - can be easily extended by writing state machine machine states and script methods in C++
- - works with the following data types: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
+ - can be easily extended by writing state machine machine states and script methods in C++ as well as custom data types
+ - built-in data types: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
- when calling script C++ methods or script functions with arguments it does optionally use references or value by copy
- supports user script functions and recursion
- supports operators by operator to method mapping by a preprocessor run
- supports loops and conditions
- supports programming with classes style programming
- - for string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set data types
- - via script classes
- - custom data types are planned
+ - for built-in datatypes: null, boolean, integer, float, string, vector2, vector3, vector4, quaternion, matrix3x3, matrix4x4, transform, array, map and set
+ - for script classes/objects
+ - for custom data types
- supports event like programming
- can be transpiled to C++
- how to use:
diff --git a/resources/tests/scripts/class-test.tscript b/resources/tests/scripts/class-test.tscript
index f4cc17fd2..eb4033098 100644
--- a/resources/tests/scripts/class-test.tscript
+++ b/resources/tests/scripts/class-test.tscript
@@ -43,7 +43,7 @@ on: nothing
" horses in it"
)
},
- getProperties: (=$wheelCount, =$color, =$horsePower) ->
+ getProperties: (&$wheelCount, &$color, &$horsePower) ->
{
$wheelCount = $this.wheelCount
$color = $this.color
diff --git a/resources/tests/scripts/functions-test.tscript b/resources/tests/scripts/functions-test.tscript
index 0f13876cd..b5a7a208b 100644
--- a/resources/tests/scripts/functions-test.tscript
+++ b/resources/tests/scripts/functions-test.tscript
@@ -20,7 +20,7 @@ function: helloWorldFunction()
end
# user script function to test assign back in user functions
-function: assignTest($a, =$b, =$c)
+function: assignTest($a, &$b, &$c)
$a = "a"
$b = "b"
$c = "c"
diff --git a/src/tdme/engine/logics/Logic.h b/src/tdme/engine/logics/Logic.h
index 72efcddc3..2f6ae5a27 100644
--- a/src/tdme/engine/logics/Logic.h
+++ b/src/tdme/engine/logics/Logic.h
@@ -8,7 +8,7 @@
#include
#include
#include
-#include
+#include
#include
using std::vector;
@@ -18,7 +18,7 @@ using tdme::engine::physics::World;
using tdme::engine::Engine;
using tdme::gui::events::GUIKeyboardEvent;
using tdme::gui::events::GUIMouseEvent;
-using tdme::utilities::MiniScript;
+using tdme::utilities::EngineMiniScript;
using tdme::utilities::Time;
/**
@@ -60,10 +60,10 @@ class tdme::engine::logics::Logic {
struct SignalStruct {
SignalStruct(
const string& signal,
- const vector& arguments
+ const vector& arguments
): signal(signal), arguments(arguments) {}
string signal;
- vector arguments;
+ vector arguments;
};
vector signals;
@@ -211,7 +211,7 @@ class tdme::engine::logics::Logic {
* @param signal signal
* @param arguments arguments
*/
- inline void addSignal(const string& signal, const vector& arguments) {
+ inline void addSignal(const string& signal, const vector& arguments) {
signals.emplace_back(
signal,
arguments
@@ -240,9 +240,9 @@ class tdme::engine::logics::Logic {
* Get signal argument
* @return signal argument at given index
*/
- inline MiniScript::ScriptVariable getSignalArgument(int idx) {
- if (signals.empty() == true) return MiniScript::ScriptVariable();
- if (idx >= signals[0].arguments.size()) return MiniScript::ScriptVariable();
+ inline EngineMiniScript::ScriptVariable getSignalArgument(int idx) {
+ if (signals.empty() == true) return EngineMiniScript::ScriptVariable();
+ if (idx >= signals[0].arguments.size()) return EngineMiniScript::ScriptVariable();
return signals[0].arguments[idx];
}
diff --git a/src/tdme/engine/logics/LogicMiniScript.cpp b/src/tdme/engine/logics/LogicMiniScript.cpp
index 5ee7343a0..571e39966 100644
--- a/src/tdme/engine/logics/LogicMiniScript.cpp
+++ b/src/tdme/engine/logics/LogicMiniScript.cpp
@@ -37,7 +37,7 @@
#include
#include
#include
-#include
+#include
#include
using std::move;
@@ -79,10 +79,10 @@ using tdme::tools::editor::Editor;
using tdme::utilities::Character;
using tdme::utilities::Console;
using tdme::utilities::Exception;
-using tdme::utilities::MiniScript;
+using tdme::utilities::EngineMiniScript;
using tdme::utilities::UTF8CharacterIterator;
-LogicMiniScript::LogicMiniScript(): MiniScript(), prototypesToAddMutex("prototypetoadd-mutex") {
+LogicMiniScript::LogicMiniScript(): EngineMiniScript(), prototypesToAddMutex("prototypetoadd-mutex") {
}
LogicMiniScript::~LogicMiniScript() {
@@ -93,7 +93,7 @@ const string LogicMiniScript::getBaseClass() {
}
const vector LogicMiniScript::getTranspilationUnits() {
- auto transpilationUnits = MiniScript::getTranspilationUnits();
+ auto transpilationUnits = EngineMiniScript::getTranspilationUnits();
transpilationUnits.push_back("src/tdme/engine/logics/LogicMiniScript.cpp");
return transpilationUnits;
}
@@ -115,11 +115,11 @@ inline Entity* LogicMiniScript::getEntity(const string& entityId, const string&
}
void LogicMiniScript::registerStateMachineStates() {
- MiniScript::registerStateMachineStates();
+ EngineMiniScript::registerStateMachineStates();
}
void LogicMiniScript::registerMethods() {
- MiniScript::registerMethods();
+ EngineMiniScript::registerMethods();
{
//
class ScriptMethodApplicationRunsInEditor: public ScriptMethod {
@@ -133,7 +133,7 @@ void LogicMiniScript::registerMethods() {
return "application.runsInEditor";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->isRunningInEditor());
+ miniScript->setValue(returnValue, miniScript->logic->isRunningInEditor());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ALL;
@@ -154,7 +154,7 @@ void LogicMiniScript::registerMethods() {
return "application.isFullScreen";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(Editor::getInstance() != nullptr?Editor::getInstance()->isFullScreen():false);
+ miniScript->setValue(returnValue, Editor::getInstance() != nullptr?Editor::getInstance()->isFullScreen():false);
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ALL;
@@ -175,7 +175,7 @@ void LogicMiniScript::registerMethods() {
return "logic.getId";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getId());
+ miniScript->setValue(returnValue, miniScript->logic->getId());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINELOGIC;
@@ -196,7 +196,7 @@ void LogicMiniScript::registerMethods() {
return "logic.getHierarchyId";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getHierarchyId());
+ miniScript->setValue(returnValue, miniScript->logic->getHierarchyId());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINELOGIC;
@@ -217,7 +217,7 @@ void LogicMiniScript::registerMethods() {
return "logic.getHierarchyParentId";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getHierarchyParentId());
+ miniScript->setValue(returnValue, miniScript->logic->getHierarchyParentId());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINELOGIC;
@@ -239,9 +239,9 @@ void LogicMiniScript::registerMethods() {
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
const auto& contextLogics = miniScript->logic->getContext()->getLogics();
- returnValue.setType(MiniScript::TYPE_ARRAY);
+ returnValue.setType(EngineMiniScript::TYPE_ARRAY);
for (auto contextLogic: contextLogics) {
- returnValue.pushArrayEntry(MiniScript::ScriptVariable(contextLogic->getId()));
+ returnValue.pushArrayEntry(EngineMiniScript::ScriptVariable(contextLogic->getId()));
}
}
const vector& getContextFunctions() {
@@ -259,14 +259,14 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioGetListenerPosition(LogicMiniScript* miniScript):
ScriptMethod(
{},
- ScriptVariableType::TYPE_VECTOR3
+ TYPE_VECTOR3
),
miniScript(miniScript) {}
const string getMethodName() override {
return "audio.getListenerPosition";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getContext()->getAudio()->getListenerPosition());
+ miniScript->setValue(returnValue, miniScript->logic->getContext()->getAudio()->getListenerPosition());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -283,7 +283,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioSetListenerPosition(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "position", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "position", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -315,14 +315,14 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioGetListenerOrientationUp(LogicMiniScript* miniScript):
ScriptMethod(
{},
- ScriptVariableType::TYPE_VECTOR3
+ TYPE_VECTOR3
),
miniScript(miniScript) {}
const string getMethodName() override {
return "audio.getListenerOrientationUp";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getContext()->getAudio()->getListenerOrientationUp());
+ miniScript->setValue(returnValue, miniScript->logic->getContext()->getAudio()->getListenerOrientationUp());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -339,7 +339,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioSetListenerOrientationUp(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "orientation", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "orientation", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -371,14 +371,14 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioGetListenerOrientationAt(LogicMiniScript* miniScript):
ScriptMethod(
{},
- ScriptVariableType::TYPE_VECTOR3
+ TYPE_VECTOR3
),
miniScript(miniScript) {}
const string getMethodName() override {
return "audio.getListenerOrientationAt";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getContext()->getAudio()->getListenerOrientationAt());
+ miniScript->setValue(returnValue, miniScript->logic->getContext()->getAudio()->getListenerOrientationAt());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -395,7 +395,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodAudioSetListenerOrientationAt(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "orientation", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "orientation", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -472,7 +472,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethod(
{
{ .type = ScriptVariableType::TYPE_STRING, .name = "id", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "position", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_VECTOR3, .name = "position", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_INTEGER, .name = "delay", .optional = true, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_INTEGER, .name = "gain", .optional = true, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_INTEGER, .name = "pitch", .optional = true, .reference = false, .nullable = false },
@@ -573,21 +573,21 @@ void LogicMiniScript::registerMethods() {
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
string logicId;
string callable;
- if (MiniScript::getStringValue(argumentValues, 0, logicId) == false ||
- MiniScript::getStringValue(argumentValues, 1, callable) == false) {
+ if (EngineMiniScript::getStringValue(argumentValues, 0, logicId) == false ||
+ EngineMiniScript::getStringValue(argumentValues, 1, callable) == false) {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
miniScript->startErrorScript();
} else {
auto logic = dynamic_cast(miniScript->context->getLogic(logicId));
if (logic == nullptr || logic->getMiniScript() == nullptr) {
- returnValue.setValue(false);
+ miniScript->setValue(returnValue, false);
} else {
auto logicMiniScript = logic->getMiniScript();
auto scriptIdx = logicMiniScript->getFunctionScriptIdx(callable);
if (scriptIdx == SCRIPTIDX_NONE || logicMiniScript->getScripts()[scriptIdx].callable == false) {
- returnValue.setValue(false);
+ miniScript->setValue(returnValue, false);
} else {
- returnValue.setValue(true);
+ miniScript->setValue(returnValue, true);
}
}
}
@@ -616,8 +616,8 @@ void LogicMiniScript::registerMethods() {
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
string logicId;
string callable;
- if (MiniScript::getStringValue(argumentValues, 0, logicId) == false ||
- MiniScript::getStringValue(argumentValues, 1, callable) == false) {
+ if (EngineMiniScript::getStringValue(argumentValues, 0, logicId) == false ||
+ EngineMiniScript::getStringValue(argumentValues, 1, callable) == false) {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
miniScript->startErrorScript();
} else {
@@ -668,7 +668,7 @@ void LogicMiniScript::registerMethods() {
return "logic.signal.has";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->hasSignal());
+ miniScript->setValue(returnValue, miniScript->logic->hasSignal());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ALL;
@@ -689,7 +689,7 @@ void LogicMiniScript::registerMethods() {
return "logic.signal.getName";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(miniScript->logic->getSignalName());
+ miniScript->setValue(returnValue, miniScript->logic->getSignalName());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ALL;
@@ -1780,13 +1780,13 @@ void LogicMiniScript::registerMethods() {
LogicMiniScript* miniScript { nullptr };
public:
ScriptMethodCameraGetLookFrom(LogicMiniScript* miniScript):
- ScriptMethod({}, ScriptVariableType::TYPE_VECTOR3),
+ ScriptMethod({}, TYPE_VECTOR3),
miniScript(miniScript) {}
const string getMethodName() override {
return "engine.camera.getLookFrom";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue = miniScript->context->getEngine()->getCamera()->getLookFrom();
+ miniScript->setValue(returnValue, miniScript->context->getEngine()->getCamera()->getLookFrom());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -1803,7 +1803,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodCameraSetLookFrom(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "lookFrom", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "lookFrom", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -1833,13 +1833,13 @@ void LogicMiniScript::registerMethods() {
LogicMiniScript* miniScript { nullptr };
public:
ScriptMethodCameraGetLookAt(LogicMiniScript* miniScript):
- ScriptMethod({}, ScriptVariableType::TYPE_VECTOR3),
+ ScriptMethod({}, TYPE_VECTOR3),
miniScript(miniScript) {}
const string getMethodName() override {
return "engine.camera.getLookAt";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue = miniScript->context->getEngine()->getCamera()->getLookAt();
+ miniScript->setValue(returnValue, miniScript->context->getEngine()->getCamera()->getLookAt());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -1856,7 +1856,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodCameraSetLookAt(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "lookAt", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "lookAt", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -1886,13 +1886,13 @@ void LogicMiniScript::registerMethods() {
LogicMiniScript* miniScript { nullptr };
public:
ScriptMethodCameraGetUpVector(LogicMiniScript* miniScript):
- ScriptMethod({}, ScriptVariableType::TYPE_VECTOR3),
+ ScriptMethod({}, TYPE_VECTOR3),
miniScript(miniScript) {}
const string getMethodName() override {
return "engine.camera.getUpVector";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue = miniScript->context->getEngine()->getCamera()->getUpVector();
+ miniScript->setValue(returnValue, miniScript->context->getEngine()->getCamera()->getUpVector());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -1909,7 +1909,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethodCameraSetUpVector(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "upVector", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "upVector", .optional = false, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
),
@@ -1941,10 +1941,10 @@ void LogicMiniScript::registerMethods() {
ScriptMethodCameraComputeUpVector(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "lookFrom", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "lookAt", .optional = false, .reference = false, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "lookFrom", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_VECTOR3, .name = "lookAt", .optional = false, .reference = false, .nullable = false }
},
- ScriptVariableType::TYPE_VECTOR3
+ TYPE_VECTOR3
),
miniScript(miniScript) {}
const string getMethodName() override {
@@ -1955,7 +1955,7 @@ void LogicMiniScript::registerMethods() {
Vector3 lookAt;
if (miniScript->getVector3Value(argumentValues, 0, lookFrom) == true &&
miniScript->getVector3Value(argumentValues, 1, lookAt) == true) {
- returnValue = Camera::computeUpVector(lookFrom, lookAt);
+ miniScript->setValue(returnValue, Camera::computeUpVector(lookFrom, lookAt));
} else {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
miniScript->startErrorScript();
@@ -2098,7 +2098,7 @@ void LogicMiniScript::registerMethods() {
return "engine.getAnimationComputationReduction1Distance";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(Engine::getAnimationComputationReduction1Distance());
+ miniScript->setValue(returnValue, Engine::getAnimationComputationReduction1Distance());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -2152,7 +2152,7 @@ void LogicMiniScript::registerMethods() {
return "engine.getAnimationComputationReduction2Distance";
}
void executeMethod(span& argumentValues, ScriptVariable& returnValue, const ScriptStatement& statement) override {
- returnValue.setValue(Engine::getAnimationComputationReduction2Distance());
+ miniScript->setValue(returnValue, Engine::getAnimationComputationReduction2Distance());
}
const vector& getContextFunctions() {
return CONTEXTFUNCTIONS_ENGINE;
@@ -2325,7 +2325,7 @@ void LogicMiniScript::registerMethods() {
{ .type = ScriptVariableType::TYPE_INTEGER, .name = "mouseX", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_INTEGER, .name = "mouseY", .optional = false, .reference = false, .nullable = false }
},
- ScriptVariableType::TYPE_VECTOR3
+ TYPE_VECTOR3
),
miniScript(miniScript) {}
const string getMethodName() override {
@@ -2336,7 +2336,7 @@ void LogicMiniScript::registerMethods() {
int64_t mouseY;
if (miniScript->getIntegerValue(argumentValues, 0, mouseX) == true &&
miniScript->getIntegerValue(argumentValues, 1, mouseY) == true) {
- returnValue = miniScript->context->getEngine()->computeWorldCoordinateByMousePosition(mouseX, mouseY);
+ miniScript->setValue(returnValue, miniScript->context->getEngine()->computeWorldCoordinateByMousePosition(mouseX, mouseY));
} else {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
miniScript->startErrorScript();
@@ -2357,8 +2357,8 @@ void LogicMiniScript::registerMethods() {
ScriptMethodEngineComputeScreenCoordinateByWorldCoordinate(LogicMiniScript* miniScript):
ScriptMethod(
{
- { .type = ScriptVariableType::TYPE_VECTOR3, .name = "worldCoodinate", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_VECTOR2, .name = "screenCoordinate", .optional = false, .reference = true, .nullable = false }
+ { .type = TYPE_VECTOR3, .name = "worldCoodinate", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_VECTOR2, .name = "screenCoordinate", .optional = false, .reference = true, .nullable = false }
},
ScriptVariableType::TYPE_BOOLEAN
),
@@ -2372,7 +2372,7 @@ void LogicMiniScript::registerMethods() {
miniScript->getVector3Value(argumentValues, 0, worldCoodinate) == true) {
Vector2 screenCoordinate;
if (miniScript->context->getEngine()->computeScreenCoordinateByWorldCoordinate(worldCoodinate, screenCoordinate) == true) {
- argumentValues[1].setValue(screenCoordinate);
+ miniScript->setValue(argumentValues[1], screenCoordinate);
returnValue = true;
} else {
returnValue = false;
@@ -2400,7 +2400,7 @@ void LogicMiniScript::registerMethods() {
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
- ScriptVariableType::TYPE_TRANSFORM
+ TYPE_TRANSFORM
),
miniScript(miniScript) {}
const string getMethodName() override {
@@ -2413,7 +2413,7 @@ void LogicMiniScript::registerMethods() {
miniScript->getStringValue(argumentValues, 1, childEntityId, true) == true) {
auto entity = miniScript->getEntity(entityId, childEntityId);
if (entity != nullptr) {
- returnValue = entity->getTransform();
+ miniScript->setValue(returnValue, entity->getTransform());
} else {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": entity not found: " + (childEntityId.empty() == true?entityId:childEntityId + "@" + entityId));
}
@@ -2438,7 +2438,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethod(
{
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_TRANSFORM, .name = "transform", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_TRANSFORM, .name = "transform", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
@@ -2649,7 +2649,7 @@ void LogicMiniScript::registerMethods() {
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
- ScriptVariableType::TYPE_VECTOR4
+ TYPE_VECTOR4
),
miniScript(miniScript) {}
const string getMethodName() override {
@@ -2663,7 +2663,7 @@ void LogicMiniScript::registerMethods() {
auto entity = miniScript->getEntity(entityId, childEntityId);
if (entity != nullptr) {
auto effectColorMul = entity->getEffectColorMul();
- returnValue.setValue(Vector4(effectColorMul.getRed(), effectColorMul.getGreen(), effectColorMul.getBlue(), effectColorMul.getAlpha()));
+ miniScript->setValue(returnValue, Vector4(effectColorMul.getRed(), effectColorMul.getGreen(), effectColorMul.getBlue(), effectColorMul.getAlpha()));
} else {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": entity not found: " + (childEntityId.empty() == true?entityId:childEntityId + "@" + entityId));
}
@@ -2688,7 +2688,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethod(
{
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_VECTOR4, .name = "effectColorMul", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_VECTOR4, .name = "effectColorMul", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
@@ -2733,7 +2733,7 @@ void LogicMiniScript::registerMethods() {
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
- ScriptVariableType::TYPE_VECTOR4
+ TYPE_VECTOR4
),
miniScript(miniScript) {}
const string getMethodName() override {
@@ -2747,7 +2747,7 @@ void LogicMiniScript::registerMethods() {
auto entity = miniScript->getEntity(entityId, childEntityId);
if (entity != nullptr) {
auto effectColorAdd = entity->getEffectColorAdd();
- returnValue.setValue(Vector4(effectColorAdd.getRed(), effectColorAdd.getGreen(), effectColorAdd.getBlue(), effectColorAdd.getAlpha()));
+ miniScript->setValue(returnValue, Vector4(effectColorAdd.getRed(), effectColorAdd.getGreen(), effectColorAdd.getBlue(), effectColorAdd.getAlpha()));
} else {
Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": entity not found: " + (childEntityId.empty() == true?entityId:childEntityId + "@" + entityId));
}
@@ -2772,7 +2772,7 @@ void LogicMiniScript::registerMethods() {
ScriptMethod(
{
{ .type = ScriptVariableType::TYPE_STRING, .name = "entityId", .optional = false, .reference = false, .nullable = false },
- { .type = ScriptVariableType::TYPE_VECTOR4, .name = "effectColorAdd", .optional = false, .reference = false, .nullable = false },
+ { .type = TYPE_VECTOR4, .name = "effectColorAdd", .optional = false, .reference = false, .nullable = false },
{ .type = ScriptVariableType::TYPE_STRING, .name = "childEntityId", .optional = true, .reference = false, .nullable = false }
},
ScriptVariableType::TYPE_NULL
@@ -2830,7 +2830,7 @@ void LogicMiniScript::registerMethods() {
miniScript->getStringValue(argumentValues, 1, childEntityId, true) == true) {
auto object = dynamic_cast