From 2b9621a46288532b352b7838f96aca80f971e3d1 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 5 Nov 2021 14:25:39 +0800 Subject: *misc --- Runtime/Lua/LuaHelper.cpp | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'Runtime/Lua/LuaHelper.cpp') diff --git a/Runtime/Lua/LuaHelper.cpp b/Runtime/Lua/LuaHelper.cpp index 951f2fe..f1dc349 100644 --- a/Runtime/Lua/LuaHelper.cpp +++ b/Runtime/Lua/LuaHelper.cpp @@ -2,6 +2,7 @@ #include "Runtime/Math/Math.h" #include "Runtime/GUI/Font.h" +#include "Runtime/Graphics/Color.h" using namespace LuaBind; @@ -16,7 +17,7 @@ Rect State::GetValue < Rect >(int idx, const Rect value) rect.width = GetField(idx, "z", 0); rect.height = GetField(idx, "w", 0); } - else + else if (LuaHelper::IsType(*this, "table", idx)) { rect.x = GetField(idx, 1, 0); rect.y = GetField(idx, 2, 0); @@ -35,7 +36,7 @@ Vector2 State::GetValue < Vector2 >(int idx, const Vector2 value) v2.x = GetField(idx, "x", 0); v2.y = GetField(idx, "y", 0); } - else + else if (LuaHelper::IsType(*this, "table", idx)) { v2.x = GetField(idx, 1, 0); v2.y = GetField(idx, 2, 0); @@ -53,7 +54,7 @@ Vector3 State::GetValue < Vector3 >(int idx, const Vector3 value) v3.y = GetField(idx, "y", 0); v3.z = GetField(idx, "z", 0); } - else + else if (LuaHelper::IsType(*this, "table", idx)) { v3.x = GetField(idx, 1, 0); v3.y = GetField(idx, 2, 0); @@ -73,7 +74,7 @@ Vector4 State::GetValue < Vector4 >(int idx, const Vector4 value) v4.z = GetField(idx, "z", 0); v4.w = GetField(idx, "w", 0); } - else + else if (LuaHelper::IsType(*this, "table", idx)) { v4.x = GetField(idx, 1, 0); v4.y = GetField(idx, 2, 0); @@ -83,6 +84,34 @@ Vector4 State::GetValue < Vector4 >(int idx, const Vector4 value) return v4; } +template <> +Color32 State::GetValue < Color32 >(int idx, const Color32 value) +{ + Color32 col = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Rendering.Color", idx)) + { + col.r = GetField(idx, "r", 0) * 255.f; + col.g = GetField(idx, "g", 0) * 255.f; + col.b = GetField(idx, "b", 0) * 255.f; + col.a = GetField(idx, "a", 0) * 255.f; + } + else if (LuaHelper::IsType(*this, "GameLab.Engine.Rendering.Color32", idx)) + { + col.r = GetField(idx, "r", 0); + col.g = GetField(idx, "g", 0); + col.b = GetField(idx, "b", 0); + col.a = GetField(idx, "a", 0); + } + else if(LuaHelper::IsType(*this, "table", idx)) + { + col.r = GetField(idx, 1, 0); + col.g = GetField(idx, 2, 0); + col.b = GetField(idx, 3, 0); + col.a = GetField(idx, 4, 0); + } + return col; +} + template <> Matrix44 State::GetValue < Matrix44 >(int idx, const Matrix44 value) { @@ -109,7 +138,7 @@ Matrix44 State::GetValue < Matrix44 >(int idx, const Matrix44 value) m4.m[3][2] = GetField(idx, "m32", 0); m4.m[3][3] = GetField(idx, "m33", 0); } - else + else if (LuaHelper::IsType(*this, "table", idx)) { m4.m[0][0] = GetField(idx, 1, 0); m4.m[0][1] = GetField(idx, 2, 0); @@ -159,6 +188,8 @@ bool LuaHelper::IsType(LuaBind::State& state, const char* typeName, int idx) { int top = state.GetTop(); cc8* type = luaL_typename(state, idx); + if (strcmp(type, "nil") == 0 || strcmp(type, "no value") == 0) + return false; if (strcmp(type, typeName) == 0) return true; state.GetField(idx, "_type"); -- cgit v1.1-26-g67d0