TDME2  1.9.200
EngineMiniScript.cpp
Go to the documentation of this file.
2 
3 #include <memory>
4 #include <string>
5 #include <vector>
6 
7 #include <miniscript/miniscript/MiniScript.h>
8 
9 #include <tdme/tdme.h>
14 #include <tdme/utilities/Console.h>
25 
27 
28 using std::make_unique;
29 using std::string;
30 using std::unique_ptr;
31 using std::vector;
32 
33 using miniscript::miniscript::MiniScript;
34 
50 
51 void EngineMiniScript::registerDataTypes() {
52  //
53  registerDataType(new MiniScriptTransform());
54  registerDataType(new MiniScriptMatrix4x4());
55  registerDataType(new MiniScriptMatrix3x3());
56  registerDataType(new MiniScriptQuaternion());
57  registerDataType(new MiniScriptVector2());
58  registerDataType(new MiniScriptVector3());
59  registerDataType(new MiniScriptVector4());
60 }
61 
62 EngineMiniScript* EngineMiniScript::loadScript(const string& pathName, const string& fileName) {
63  // we need to detect MiniScript variant
64  vector<string> scriptAsStringArray;
65  try {
66  FileSystem::getInstance()->getContentAsStringArray(pathName, fileName, scriptAsStringArray);
67  } catch (Exception& exception) {
68  Console::println("MiniScript::loadScript(): An error occurred: " + string(exception.what()));
69  return nullptr;
70  }
71 
72  // detect MiniScript variant
73  auto logicMiniScript = false;
74  auto guiMiniScript = false;
75  array<string, 2> logicMiniScriptFunctions {
76  "updateEngine",
77  "updateLogic"
78  };
79  array<string, 12> guiMiniScriptFunctions {
80  "onAction",
81  "onChange",
82  "onMouseOver",
83  "onContextMenuRequest",
84  "onFocus",
85  "onUnfocus",
86  "onMove",
87  "onMoveRelease",
88  "onTooltipShowRequest",
89  "onTooltipCloseRequest",
90  "onDragRequest",
91  "onTick"
92  };
93  for (const auto& scriptLine: scriptAsStringArray) {
94  for (const auto& functionName: logicMiniScriptFunctions) {
95  if (StringTools::regexMatch(scriptLine, "^[\\s]*function:[\\s]*" + functionName + "[\\s]*\\(.*\\).*$") == true) {
96  logicMiniScript = true;
97  break;
98  }
99  }
100  if (logicMiniScript == true) break;
101  for (const auto& functionName: guiMiniScriptFunctions) {
102  if (StringTools::regexMatch(scriptLine, "^[\\s]*function:[\\s]*" + functionName + "[\\s]*\\(.*\\).*$") == true) {
103  guiMiniScript = true;
104  break;
105  }
106  }
107  if (guiMiniScript == true) break;
108  }
109 
110  // load specific MiniScript
111  unique_ptr<EngineMiniScript> scriptInstance;
112  if (logicMiniScript == true) {
113  scriptInstance = make_unique<LogicMiniScript>();
114  scriptInstance->parseScript(pathName, fileName);
115  } else
116  if (guiMiniScript == true) {
117  scriptInstance = make_unique<GUIMiniScript>(nullptr);
118  scriptInstance->parseScript(pathName, fileName);
119  } else {
120  scriptInstance = make_unique<EngineMiniScript>();
121  scriptInstance->parseScript(pathName, fileName);
122  }
123  //
124  return scriptInstance.release();
125 }
126 
128 }
129 
131  return "tdme::utilities::EngineMiniScript";
132 }
133 
135  return {
136  "src/tdme/utilities/MiniScript.cpp",
137  "src/tdme/utilities/MiniScriptArray.cpp",
138  "src/tdme/utilities/MiniScriptBase.cpp",
139  "src/tdme/utilities/MiniScriptConsole.cpp",
140  "src/tdme/utilities/MiniScriptJSON.cpp",
141  "src/tdme/utilities/MiniScriptMap.cpp",
142  "src/tdme/utilities/MiniScriptMath.cpp",
143  "src/tdme/utilities/MiniScriptScript.cpp",
144  "src/tdme/utilities/MiniScriptSet.cpp",
145  "src/tdme/utilities/MiniScriptString.cpp",
146  "src/tdme/utilities/MiniScriptTime.cpp",
147  "src/tdme/utilities/MiniScriptXML.cpp",
148  "src/tdme/utilities/MiniScriptMatrix3x3.cpp",
149  "src/tdme/utilities/MiniScriptMatrix4x4.cpp",
150  "src/tdme/utilities/MiniScriptQuaternion.cpp",
151  "src/tdme/utilities/MiniScriptTransform.cpp",
152  "src/tdme/utilities/MiniScriptTranspiler.cpp",
153  "src/tdme/utilities/MiniScriptVector2.cpp",
154  "src/tdme/utilities/MiniScriptVector3.cpp",
155  "src/tdme/utilities/MiniScriptVector4.cpp"
156  };
157 }
158 
File system singleton class.
Definition: FileSystem.h:17
Console class.
Definition: Console.h:29
static void println()
Print new line to console.
Definition: Console.cpp:92
const vector< string > getTranspilationUnits()
static EngineMiniScript * loadScript(const string &pathName, const string &fileName)
Load script.
MiniScript Matrix3x3 data type.
MiniScript Matrix4x4 data type.
MiniScript Quaternion data type.
MiniScript Transform data type.
MiniScript Vector2 data type.
MiniScript Vector3 data type.
MiniScript Vector4 data type.
String tools class.
Definition: StringTools.h:22
static bool regexMatch(const string &src, const string &pattern)
Check if pattern matches whole string.
std::exception Exception
Exception base class.
Definition: Exception.h:18