2
0
Эх сурвалжийг харах

ScriptSystem integrated in Device

mikymod 12 жил өмнө
parent
commit
0585c33a7e

+ 1 - 0
src/CMakeLists.txt

@@ -234,6 +234,7 @@ set (NETWORK_HEADERS
 
 
 set (SCRIPT_SRC
 set (SCRIPT_SRC
 	script/ScriptSystem.cpp
 	script/ScriptSystem.cpp
+	script/binds/ApplicationBinds.cpp
 	script/binds/MathBinds.cpp
 	script/binds/MathBinds.cpp
 	script/binds/Vec2Binds.cpp
 	script/binds/Vec2Binds.cpp
 	script/binds/Vec3Binds.cpp
 	script/binds/Vec3Binds.cpp

+ 20 - 0
src/Device.cpp

@@ -44,6 +44,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Mouse.h"
 #include "Mouse.h"
 #include "Touch.h"
 #include "Touch.h"
 #include "Accelerometer.h"
 #include "Accelerometer.h"
+#include "ScriptSystem.h"
 
 
 #ifdef CROWN_BUILD_OPENGL
 #ifdef CROWN_BUILD_OPENGL
 	#include "renderers/gl/GLRenderer.h"
 	#include "renderers/gl/GLRenderer.h"
@@ -81,6 +82,7 @@ Device::Device() :
 	m_input_manager(NULL),
 	m_input_manager(NULL),
 	m_renderer(NULL),
 	m_renderer(NULL),
 	m_debug_renderer(NULL),
 	m_debug_renderer(NULL),
+	m_script_system(NULL),
 
 
 	m_resource_manager(NULL),
 	m_resource_manager(NULL),
 	m_resource_archive(NULL),
 	m_resource_archive(NULL),
@@ -133,6 +135,10 @@ bool Device::init(int argc, char** argv)
 
 
 	Log::d("Debug renderer created.");
 	Log::d("Debug renderer created.");
 
 
+	create_script_system();
+
+	Log::d("Script system created.");
+
 	Log::i("Crown Engine initialized.");
 	Log::i("Crown Engine initialized.");
 
 
 	Log::i("Initializing Game...");
 	Log::i("Initializing Game...");
@@ -264,6 +270,12 @@ DebugRenderer* Device::debug_renderer()
 	return m_debug_renderer;
 	return m_debug_renderer;
 }
 }
 
 
+//-----------------------------------------------------------------------------
+ScriptSystem* Device::script_system()
+{
+	return m_script_system;
+}
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 Keyboard* Device::keyboard()
 Keyboard* Device::keyboard()
 {
 {
@@ -342,6 +354,8 @@ void Device::frame()
 	m_resource_manager->check_load_queue();
 	m_resource_manager->check_load_queue();
 	m_resource_manager->bring_loaded_online();
 	m_resource_manager->bring_loaded_online();
 
 
+	m_script_system->execute();
+
 	m_input_manager->event_loop();
 	m_input_manager->event_loop();
 
 
 	m_renderer->begin_frame();
 	m_renderer->begin_frame();
@@ -463,6 +477,12 @@ void Device::create_debug_renderer()
 	m_debug_renderer = new DebugRenderer(*m_renderer);
 	m_debug_renderer = new DebugRenderer(*m_renderer);
 }
 }
 
 
+//-----------------------------------------------------------------------------
+void Device::create_script_system()
+{
+	m_script_system = scripter();
+}
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 bool Device::parse_command_line(int argc, char** argv)
 bool Device::parse_command_line(int argc, char** argv)
 {
 {

+ 4 - 0
src/Device.h

@@ -39,6 +39,7 @@ class ResourceManager;
 class ResourceArchive;
 class ResourceArchive;
 class Renderer;
 class Renderer;
 class DebugRenderer;
 class DebugRenderer;
+class ScriptSystem;
 class InputManager;
 class InputManager;
 class Keyboard;
 class Keyboard;
 class Mouse;
 class Mouse;
@@ -100,6 +101,7 @@ public:
 	InputManager*			input_manager();
 	InputManager*			input_manager();
 	Renderer*				renderer();
 	Renderer*				renderer();
 	DebugRenderer*			debug_renderer();
 	DebugRenderer*			debug_renderer();
+	ScriptSystem*			script_system();
 
 
 	Keyboard*				keyboard();
 	Keyboard*				keyboard();
 	Mouse*					mouse();
 	Mouse*					mouse();
@@ -113,6 +115,7 @@ private:
 	void					create_input_manager();
 	void					create_input_manager();
 	void					create_renderer();
 	void					create_renderer();
 	void					create_debug_renderer();
 	void					create_debug_renderer();
+	void					create_script_system();
 
 
 	bool					parse_command_line(int argc, char** argv);
 	bool					parse_command_line(int argc, char** argv);
 	void					print_help_message();
 	void					print_help_message();
@@ -143,6 +146,7 @@ private:
 	InputManager*			m_input_manager;
 	InputManager*			m_input_manager;
 	Renderer*				m_renderer;
 	Renderer*				m_renderer;
 	DebugRenderer*			m_debug_renderer;
 	DebugRenderer*			m_debug_renderer;
+	ScriptSystem*			m_script_system;
 
 
 	// Private subsystems
 	// Private subsystems
 	ResourceManager*		m_resource_manager;
 	ResourceManager*		m_resource_manager;

+ 62 - 46
src/script/ScriptSystem.cpp

@@ -3,47 +3,8 @@
 
 
 namespace crown
 namespace crown
 {
 {
-//-----------------------------------------------------------
-// Lua State
-//-----------------------------------------------------------
-
-//-----------------------------------------------------------
-LuaState::LuaState()
-{
-	m_state = luaL_newstate();
-
-    luaL_openlibs(m_state);
-}
-
-//-----------------------------------------------------------
-LuaState::~LuaState()
-{
-	lua_close(m_state);
-}
-
-//-----------------------------------------------------------
-int32_t LuaState::load_buffer(const char* buf, size_t len)
-{
-	int32_t s = luaL_loadbuffer(m_state, buf, len, "");
-
-	return s;
-}
-
-//-----------------------------------------------------------
-int32_t LuaState::load_string(const char* str)
-{
-	int32_t s = luaL_loadstring(m_state, str);
 
 
-	return s;
-}
-
-//-----------------------------------------------------------
-int32_t LuaState::execute()
-{
-    int32_t s = lua_pcall(m_state, 0, LUA_MULTRET, 0);
-
-    return s;
-}
+const char* BOOT_SCRIPT = "lua/init.lua";
 
 
 //-----------------------------------------------------------
 //-----------------------------------------------------------
 // ScriptSystem
 // ScriptSystem
@@ -52,6 +13,7 @@ int32_t LuaState::execute()
 //-----------------------------------------------------------
 //-----------------------------------------------------------
 ScriptSystem::ScriptSystem() :
 ScriptSystem::ScriptSystem() :
 m_state(),
 m_state(),
+m_scripts_count(0),
 m_vec2_count(0),
 m_vec2_count(0),
 m_vec3_count(0),
 m_vec3_count(0),
 m_mat4_count(0),
 m_mat4_count(0),
@@ -62,13 +24,23 @@ m_quat_count(0)
 //-----------------------------------------------------------
 //-----------------------------------------------------------
 void ScriptSystem::load(ScriptResource* script)
 void ScriptSystem::load(ScriptResource* script)
 {
 {
-	assert(m_state.load_buffer((char*)script->data(), script->length()) == 0);
+	m_scripts[m_scripts_count] = script;
+
+	m_scripts_count++;
 }
 }
 
 
 //-----------------------------------------------------------
 //-----------------------------------------------------------
 void ScriptSystem::execute()
 void ScriptSystem::execute()
 {
 {
-	assert(m_state.execute() == 0);	
+	if (m_scripts_count != 0)
+	{
+		for (int i = 0; i < m_scripts_count; i++)
+		{
+			assert(m_state.load_buffer((char*)m_scripts[i]->data(), m_scripts[i]->length()) == 0);
+		}
+
+		assert(m_state.execute() == 0);	
+	}
 }
 }
 
 
 //-----------------------------------------------------------
 //-----------------------------------------------------------
@@ -177,29 +149,73 @@ ScriptSystem* scripter()
 }
 }
 
 
 //-----------------------------------------------------------
 //-----------------------------------------------------------
-extern "C"
+// Lua State
+//-----------------------------------------------------------
+
+//-----------------------------------------------------------
+LuaState::LuaState()
+{
+	m_state = luaL_newstate();
+
+    luaL_openlibs(m_state);
+}
+
+//-----------------------------------------------------------
+LuaState::~LuaState()
+{
+	lua_close(m_state);
+}
+
+//-----------------------------------------------------------
+int32_t LuaState::load_buffer(const char* buf, size_t len)
+{
+	int32_t s = luaL_loadbuffer(m_state, buf, len, "");
+
+	return s;
+}
+
+//-----------------------------------------------------------
+int32_t LuaState::load_string(const char* str)
 {
 {
+	int32_t s = luaL_loadstring(m_state, str);
+
+	return s;
+}
+
+//-----------------------------------------------------------
+int32_t LuaState::execute()
+{
+    int32_t s = lua_pcall(m_state, 0, LUA_MULTRET, 0);
+
+    return s;
+}
+
+//-----------------------------------------------------------
+// Extern C
+//-----------------------------------------------------------
+
+//-----------------------------------------------------------
 uint32_t script_system_vec2_used()
 uint32_t script_system_vec2_used()
 {
 {
 	return scripter()->vec2_used();
 	return scripter()->vec2_used();
 }
 }
 
 
+//-----------------------------------------------------------
 uint32_t script_system_vec3_used()
 uint32_t script_system_vec3_used()
 {
 {
 	return scripter()->vec3_used();
 	return scripter()->vec3_used();
 }
 }
 
 
+//-----------------------------------------------------------
 uint32_t script_system_mat4_used()
 uint32_t script_system_mat4_used()
 {
 {
 	return scripter()->mat4_used();
 	return scripter()->mat4_used();
 }
 }
 
 
+//-----------------------------------------------------------
 uint32_t script_system_quat_used()
 uint32_t script_system_quat_used()
 {
 {
 	return scripter()->quat_used();
 	return scripter()->quat_used();
 }
 }
 
 
-} // extern "C"
-
-
 } // namespace crown
 } // namespace crown

+ 14 - 2
src/script/ScriptSystem.h

@@ -69,8 +69,12 @@ public:
 								/// Returns the number of quat used in lua environment
 								/// Returns the number of quat used in lua environment
 	uint32_t 					quat_used();
 	uint32_t 					quat_used();
 
 
+								/// First file loaded by ScriptSystem
+	static const char*			BOOT_SCRIPT;
+								/// Number of Scripts which can be loaded by ScriptSystem
+	static const uint32_t		MAX_SCRIPTS 		= 256;
 								/// Max number of temporary objects allowed
 								/// Max number of temporary objects allowed
-	static const uint32_t		MAX_TEMP_OBJECTS = 1024;
+	static const uint32_t		MAX_TEMP_OBJECTS 	= 1024;
 
 
 
 
 private:
 private:
@@ -78,7 +82,11 @@ private:
 								ScriptSystem(const ScriptSystem&);
 								ScriptSystem(const ScriptSystem&);
 								ScriptSystem& operator=(const ScriptSystem&);
 								ScriptSystem& operator=(const ScriptSystem&);
 
 
-	LuaState 					m_state;
+	LuaState 					m_state;							
+								/// Scripts loaded in ScriptSystem
+	ScriptResource*				m_scripts[MAX_SCRIPTS];
+								/// number of scripts loaded
+	uint32_t					m_scripts_count;
 								/// Vec2 used by lua environment
 								/// Vec2 used by lua environment
 	Vec2 						m_vec2_list[MAX_TEMP_OBJECTS];
 	Vec2 						m_vec2_list[MAX_TEMP_OBJECTS];
 								/// Counter which points to the next free Vec2
 								/// Counter which points to the next free Vec2
@@ -97,11 +105,15 @@ private:
 	uint32_t					m_quat_count;
 	uint32_t					m_quat_count;
 };
 };
 
 
+
+
 ScriptSystem* scripter();
 ScriptSystem* scripter();
 
 
 // This block provides fews utilities for lua environment
 // This block provides fews utilities for lua environment
 extern "C"
 extern "C"
 {
 {
+	uint32_t script_system_vec2_used();
+
 	uint32_t script_system_vec3_used();
 	uint32_t script_system_vec3_used();
 
 
 	uint32_t script_system_mat4_used();
 	uint32_t script_system_mat4_used();