From 452eceb3ba4bdbbc77786dc7f7235c03f1c62302 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 15 Nov 2021 01:19:35 +0800 Subject: *class --- Data/DefaultContent/Libraries/GameLab/Class.lua | 93 ++++++++++++++++------ .../Libraries/GameLab/Engine/Core/Camera.lua | 5 -- .../Libraries/GameLab/Engine/Core/Component.lua | 11 --- .../Libraries/GameLab/Engine/Core/Game.lua | 14 ---- .../Libraries/GameLab/Engine/Core/GameObject.lua | 7 -- .../Libraries/GameLab/Engine/Core/Sprite.lua | 21 ----- .../Libraries/GameLab/Engine/Math/Vector4.lua | 4 +- .../Libraries/GameLab/Engine/Rendering/Color.lua | 18 ++--- .../Libraries/GameLab/Engine/Rendering/Color32.lua | 18 ++--- .../Libraries/GameLab/GlobalClass.lua | 13 +-- 10 files changed, 94 insertions(+), 110 deletions(-) delete mode 100644 Data/DefaultContent/Libraries/GameLab/Engine/Core/Camera.lua delete mode 100644 Data/DefaultContent/Libraries/GameLab/Engine/Core/Component.lua delete mode 100644 Data/DefaultContent/Libraries/GameLab/Engine/Core/Game.lua delete mode 100644 Data/DefaultContent/Libraries/GameLab/Engine/Core/GameObject.lua delete mode 100644 Data/DefaultContent/Libraries/GameLab/Engine/Core/Sprite.lua (limited to 'Data/DefaultContent') diff --git a/Data/DefaultContent/Libraries/GameLab/Class.lua b/Data/DefaultContent/Libraries/GameLab/Class.lua index 62369e1..0b424a6 100644 --- a/Data/DefaultContent/Libraries/GameLab/Class.lua +++ b/Data/DefaultContent/Libraries/GameLab/Class.lua @@ -1,38 +1,79 @@ --- Declare class +-- GameLab内置class模块 +-- 保留方法名:New, Ctor, Is +-- 保留字段:_type, _base -local _class = function (className) - local class = {} - local pkgName = (type(className) == "string") and string.match(className, "^(.+)%.%w+$") or "" - local shortName = (type(className) == "string") and string.match(className, "%.*(%w+)$") or "" - class._type = { -- 类型元数据,GameLab的类型都会包含这些 +local TrackClassInstances = false + +local _class = function (name, ctor) + local c = {} + + local isstring = type(name) == "string" + local pkg = "unknown" + local short = "unknown" + if isstring then + pkg = string.match(name, "^(.+)%.%w+$") + short = string.match(name, "%.*(%w+)$") + end + + c._type = { mode = "lua", - name = shortName or "", - package = pkgName or "", - fullName = className + name = short, + package = pkg, + fullName = name } - class.__index = class - class.New = function(...) - local instance = {} - setmetatable(instance, class) - instance:Ctor(...) - return instance + + c.__index = c + + c.New = function(...) + local obj = {} + setmetatable(obj, c) + obj:Ctor(...) + return obj end - return class + + c.Is = function(self, klass) + local m = getmetatable(self) + while m do + if m == klass then + return true + end + m = m._base + end + return false + end + + if ctor and type(ctor) == "function" then + c.Ctor = ctor + end + + local mt = {} + + mt.__call = function(dummy, ...) + return c.New(...) + end + + setmetatable(c, mt) + + return c end --- 提供ClassName和PkgName作为类型的元数据,可以留空,但是最好提供,会作为类型判断的依据 -local Class = function(className) - local cls = _class(className) - cls.Extend = function(childName) +local class = function(name, ctor) + local c = _class(name, ctor) + + c.Extend = function(childName) local child = _class(childName) - if cls then - setmetatable(child, cls) - child.base = cls + if c then + setmetatable(child, c) + child._base = c end return child end - return cls + + c._base = nil + + return c end -GameLab.Class = Class -return Class \ No newline at end of file +GameLab.Class = class + +return class \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Camera.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Core/Camera.lua deleted file mode 100644 index 5fcfbe7..0000000 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Camera.lua +++ /dev/null @@ -1,5 +0,0 @@ -local Camera = {} - - - -return Camera \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Component.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Core/Component.lua deleted file mode 100644 index 00bf2ca..0000000 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Component.lua +++ /dev/null @@ -1,11 +0,0 @@ -local Component = {} - -Component.New = function() - -end - -Component.GetGameObject = function() - -end - -Jin.Component = Component \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Game.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Core/Game.lua deleted file mode 100644 index 51ce25f..0000000 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Game.lua +++ /dev/null @@ -1,14 +0,0 @@ - --- Game entry - -local Game = {} - -Game.OnEvent = function(e) - -end - -Game.MainLoop = function() - -end - -return Game \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Core/GameObject.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Core/GameObject.lua deleted file mode 100644 index ee0d143..0000000 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Core/GameObject.lua +++ /dev/null @@ -1,7 +0,0 @@ -local GameObject = {} - -GameObject.AddComponent = function(self, comp) - -end - -Jin.GameObject = GameObject diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Sprite.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Core/Sprite.lua deleted file mode 100644 index 47cb50d..0000000 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Core/Sprite.lua +++ /dev/null @@ -1,21 +0,0 @@ --- Quadķװʺ2DϷ -local Sprite = {} - -Sprite.New = function(quad) - local spr = {} - spr.quad = Jin.Quad.New(quad) - spr.pivot = Jin.Vector2.New(0.5, 0) - spr.transform = Jin.Transform.New() - spr.depth = 0 - return spr -end - -Sprite.SetDepth = function(self, depth) - spr.depth = depth -end - -Sprite.SetTexture = function(self, tex, reset_quad) - -end - -Jin.Sprite = Sprite \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Math/Vector4.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Math/Vector4.lua index 3655184..ecfc9ff 100644 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Math/Vector4.lua +++ b/Data/DefaultContent/Libraries/GameLab/Engine/Math/Vector4.lua @@ -39,7 +39,7 @@ Vector4.Scale = function(self, scale) end -Vector4.one = Vector4.New(1,1,1,1) -Vector4.zero = Vector4.New(0,0,0,0) +Vector4.one = Vector4(1,1,1,1) +Vector4.zero = Vector4(0,0,0,0) return Vector4 \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color.lua index 2785bdf..e70de4f 100644 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color.lua +++ b/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color.lua @@ -9,7 +9,7 @@ end Color.ToColor32 = function(self) local Color32 = GameLab.find("GameLab.Engine.Rendering.Color32") - local c32 = Color32.New() + local c32 = Color32() c32.r = self.r * 255 c32.g = self.g * 255 c32.b = self.b * 255 @@ -24,13 +24,13 @@ Color.Clear = function(self) self.a = 0 end -Color.red = Color.New(1,0,0,1) -Color.green = Color.New(0,1,0,1) -Color.blue = Color.New(0,0,1,1) -Color.magenta = Color.New(1,0,1,1) -Color.red = Color.New(1,0,0,1) -Color.yellow = Color.New(1,1,0,1) -Color.black = Color.New(0,0,0,1) -Color.white = Color.New(1,1,1,1) +Color.red = Color(1,0,0,1) +Color.green = Color(0,1,0,1) +Color.blue = Color(0,0,1,1) +Color.magenta = Color(1,0,1,1) +Color.red = Color(1,0,0,1) +Color.yellow = Color(1,1,0,1) +Color.black = Color(0,0,0,1) +Color.white = Color(1,1,1,1) return Color \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color32.lua b/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color32.lua index 48902b6..d1cacd7 100644 --- a/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color32.lua +++ b/Data/DefaultContent/Libraries/GameLab/Engine/Rendering/Color32.lua @@ -9,7 +9,7 @@ end Color32.ToColor = function(self) local Color = GameLab.find("GameLab.Engine.Rendering.Color") - local c = Color.New() + local c = Color() c.r = self.r / 255 c.g = self.g / 255 c.b = self.b / 255 @@ -24,13 +24,13 @@ Color32.Clear = function(self) self.a = 0 end -Color32.red = Color32.New(255,0,0,255) -Color32.green = Color32.New(0,255,0,255) -Color32.blue = Color32.New(0,0,255,255) -Color32.magenta = Color32.New(255,0,255,255) -Color32.red = Color32.New(255,0,0,255) -Color32.yellow = Color32.New(255,255,0,255) -Color32.black = Color32.New(0,0,0,255) -Color32.white = Color32.New(255,255,255,255) +Color32.red = Color32(255,0,0,255) +Color32.green = Color32(0,255,0,255) +Color32.blue = Color32(0,0,255,255) +Color32.magenta = Color32(255,0,255,255) +Color32.red = Color32(255,0,0,255) +Color32.yellow = Color32(255,255,0,255) +Color32.black = Color32(0,0,0,255) +Color32.white = Color32(255,255,255,255) return Color32 \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/GlobalClass.lua b/Data/DefaultContent/Libraries/GameLab/GlobalClass.lua index dcb5fba..7104480 100644 --- a/Data/DefaultContent/Libraries/GameLab/GlobalClass.lua +++ b/Data/DefaultContent/Libraries/GameLab/GlobalClass.lua @@ -1,18 +1,19 @@ local Class = GameLab.Class or require("GameLab.Class") -- 声明类的同时添加到G表 -local GlobalClass = function(className) - local cls = Class(className) +local GlobalClass = function(name, ctor) + local c = Class(name, ctor) - local shortName = string.match(className, "%.*(%w+)$") + local short = string.match(name, "%.*(%w+)$") + local pkgs = string.gmatch(name, "%.*(%w+)%.") local t = _G - for pkg in string.gmatch(className, "%.*(%w+)%.") do + for pkg in pkgs do t[pkg] = t[pkg] or {} t = t[pkg] end - t[shortName] = cls + t[short] = c - return cls + return c end GameLab.GlobalClass = GlobalClass -- cgit v1.1-26-g67d0