diff Engine/LuaVM.cpp @ 2499:68cdef6879a0

engine folder
author Ritor1
date Fri, 19 Sep 2014 02:57:42 +0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/LuaVM.cpp	Fri Sep 19 02:57:42 2014 +0600
@@ -0,0 +1,59 @@
+#define _CRTDBG_MAP_ALLOC
+#include <stdlib.h>
+#include <crtdbg.h>
+
+#define _CRT_SECURE_NO_WARNINGS
+#include "LuaVM.h"
+#include "lib/lua/lua.h"
+#include "Log.h"
+#include "OSAPI.h"
+
+extern "C" int luaopen_UIControl(lua_State *L); // declare the wrapped module
+extern "C" int luaopen_Player(lua_State *L); // declare the wrapped module
+
+LuaVM *lua = nullptr;
+
+void LuaVM::Initialize()
+{
+  if (L)
+    Log::Warning(L"Overwriting previous Lua state");
+
+  L = luaL_newstate();
+  if (!L)
+    Log::Warning(L"Error creating Lua context.\n");
+
+  // open default lua libs
+  luaL_openlibs(L);
+
+  // open each cxx module
+  luaopen_UIControl(L);
+
+  //if ( luaL_dofile(L,GetScriptFileLocation("script.lua")))
+  //    Log::Warning(L"Error opening script.lua\n");
+}
+
+bool LuaVM::DoFile(const char *filename)
+{
+  if (luaL_dofile(L, GetScriptFileLocation(filename)))
+  {
+    Log::Warning(L"Error opening script %s", filename);
+    return false;
+  }
+  return true;
+}
+
+const char *LuaVM::GetScriptFileLocation(const char *script_name)
+{
+  static DWORD tls_index = TlsAlloc();
+
+  auto buf = (char *)TlsGetValue(tls_index);
+  if (!buf)
+  {
+    buf = new char[1024];
+    TlsSetValue(tls_index, buf);
+  }
+
+  strcpy(buf, "data/scripts/lua/core/");
+  strcat(buf, script_name);
+  return buf;
+}
\ No newline at end of file