refactor class.lua (because Local is a bulli)
This commit is contained in:
parent
d1458d2ee2
commit
3ea1429eab
|
@ -1,15 +1,3 @@
|
|||
---Declare table as a base class
|
||||
---@generic T
|
||||
---@param cls T # class metatable
|
||||
---@param o? table # initial parameters
|
||||
---@return T # class instance
|
||||
function Base(cls, o)
|
||||
o = o or {}
|
||||
cls.__index = cls
|
||||
setmetatable(o, cls)
|
||||
return o
|
||||
end
|
||||
|
||||
local function search(key, bases)
|
||||
for _, base in ipairs(bases) do
|
||||
local v = base[key] -- try `i'-th superclass
|
||||
|
@ -17,26 +5,26 @@ local function search(key, bases)
|
|||
end
|
||||
end
|
||||
|
||||
---Declare table as a derived class
|
||||
---Declare table as polimorphic class
|
||||
---@generic BaseT, T
|
||||
---@param cls T # class metatable
|
||||
---@param o? table # initial parameters
|
||||
---@param ... BaseT # base class metatables
|
||||
---@return T # derived class instance
|
||||
function Inherit(cls, o, ...)
|
||||
---@param ... BaseT # base class metatables (if any)
|
||||
---@return T # class instance
|
||||
function CreateClass(cls, o, ...)
|
||||
o = o or {}
|
||||
local nargs = select("#", ...)
|
||||
local vargs = { select(1, ...) }
|
||||
cls.__index = cls
|
||||
if nargs > 1 then
|
||||
if nargs == 1 then
|
||||
local base = vargs[1]
|
||||
setmetatable(cls, {__index = base})
|
||||
o = base:new(o)
|
||||
elseif nargs > 1 then
|
||||
setmetatable(cls, {__index = function(t, k) return search(k, vargs) end})
|
||||
for _, base in ipairs(vargs) do
|
||||
o = base:new(o)
|
||||
end
|
||||
else
|
||||
local base = assert(vargs[1], "You must at least specify one class to inherit from.")
|
||||
setmetatable(cls, {__index = base})
|
||||
o = base:new(o)
|
||||
end
|
||||
setmetatable(o, cls)
|
||||
return o
|
||||
|
|
|
@ -17,7 +17,7 @@ function ContainerField:new(o)
|
|||
|
||||
o.content = o.content or {}
|
||||
|
||||
local this = Inherit(self, o, Field)
|
||||
local this = CreateClass(self, o, Field)
|
||||
|
||||
this:refreshFields()
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ function Field:new(o)
|
|||
o.aabbW = o.aabbW or 0
|
||||
o.aabbH = o.aabbH or 0
|
||||
|
||||
return Base(self, o)
|
||||
return CreateClass(self, o)
|
||||
end
|
||||
|
||||
---Get the containing top-level parent page
|
||||
|
|
|
@ -15,7 +15,7 @@ function LinkField:new(o)
|
|||
|
||||
o.link = o.link or nil
|
||||
|
||||
return Inherit(self, o, Field)
|
||||
return CreateClass(self, o, Field)
|
||||
end
|
||||
|
||||
---@param button integer # options are under the `game` table prefixed with `BUTTON`
|
||||
|
|
|
@ -19,7 +19,7 @@ function Page:new(o)
|
|||
o.content = o.content or {}
|
||||
o.viewHandler = o.viewHandler or nil
|
||||
|
||||
return Base(self, o)
|
||||
return CreateClass(self, o)
|
||||
end
|
||||
|
||||
---Add field to page
|
||||
|
|
|
@ -29,7 +29,7 @@ function PageView:new(rootPage)
|
|||
o.pageStack = {}
|
||||
pushStack(o.pageStack, rootPage)
|
||||
|
||||
return Base(self, o)
|
||||
return CreateClass(self, o)
|
||||
end
|
||||
|
||||
---Get page from pageStack
|
||||
|
|
|
@ -20,7 +20,7 @@ function CheckUpdateField:new(o)
|
|||
o._timer = o._timer or 0
|
||||
o.onUpdateAvailable = o.onUpdateAvailable or nil
|
||||
|
||||
local this = Inherit(self, o, ServiceField)
|
||||
local this = CreateClass(self, o, ServiceField)
|
||||
|
||||
this._url = nil
|
||||
this._version = nil
|
||||
|
|
|
@ -43,7 +43,7 @@ function DialogField:new(o)
|
|||
o.aabbW = o.aabbW or self.DEFAULT_WIDTH
|
||||
o.aabbH = o.aabbH or self.DEFAULT_HEIGHT
|
||||
|
||||
local this = Inherit(self, o, ContainerField)
|
||||
local this = CreateClass(self, o, ContainerField)
|
||||
|
||||
this._symbolMargin = 8
|
||||
this._symbolSize = 48
|
||||
|
|
|
@ -45,7 +45,7 @@ function SelfTestField:new(o)
|
|||
"Failed to construct SelfTestField, checkTask is mandatory when onStatusChange is defined!\n" .. debug.traceback()
|
||||
)
|
||||
|
||||
return Inherit(self, o, ServiceField)
|
||||
return CreateClass(self, o, ServiceField)
|
||||
end
|
||||
|
||||
function SelfTestField:_closeThread()
|
||||
|
|
|
@ -18,7 +18,7 @@ function ColorGradientField:new(o)
|
|||
|
||||
o.value = o.value or {0, 0, 0, 255}
|
||||
|
||||
return Inherit(self, o, ServiceField)
|
||||
return CreateClass(self, o, ServiceField)
|
||||
end
|
||||
|
||||
---@param obj? any # message object for the field
|
||||
|
|
|
@ -15,7 +15,7 @@ function InputButtonField:new(o)
|
|||
|
||||
o.button = o.button or nil
|
||||
|
||||
return Inherit(self, o, ServiceField)
|
||||
return CreateClass(self, o, ServiceField)
|
||||
end
|
||||
|
||||
---@param obj? any # message object for the field
|
||||
|
|
|
@ -23,7 +23,7 @@ function InputKnobField:new(o)
|
|||
|
||||
o.knob = o.knob or nil
|
||||
|
||||
return Inherit(self, o, ServiceField)
|
||||
return CreateClass(self, o, ServiceField)
|
||||
end
|
||||
|
||||
---@param obj? any # message object for the field
|
||||
|
|
|
@ -22,7 +22,7 @@ function ListField:new(o)
|
|||
o.selectedIndex = o.selectedIndex or 1
|
||||
o.locked = o.locked or false
|
||||
|
||||
local this = Inherit(self, o, ContainerField, ServiceField)
|
||||
local this = CreateClass(self, o, ContainerField, ServiceField)
|
||||
|
||||
local minW = this.MARGIN[1] + this.PADDING[1] + this.PADDING[3] + this.MARGIN[3]
|
||||
local minH = this.MARGIN[2] + this.PADDING[2] + this.PADDING[4] + this.MARGIN[4]
|
||||
|
|
|
@ -49,7 +49,7 @@ function ServiceField:new(o)
|
|||
|
||||
o._state = ServiceFieldState.INACTIVE
|
||||
|
||||
local this = Inherit(self, o, Field)
|
||||
local this = CreateClass(self, o, Field)
|
||||
|
||||
if this.aabbH < h then
|
||||
this.aabbH = h
|
||||
|
|
|
@ -13,7 +13,7 @@ local ServiceLinkField = {
|
|||
function ServiceLinkField:new(o)
|
||||
o = o or {}
|
||||
|
||||
return Inherit(self, o, ServiceField, LinkField)
|
||||
return CreateClass(self, o, ServiceField, LinkField)
|
||||
end
|
||||
|
||||
---@param deltaTime number # frametime in seconds
|
||||
|
|
|
@ -20,7 +20,7 @@ function UpdateField:new(o)
|
|||
|
||||
o._timer = 0
|
||||
|
||||
return Inherit(self, o, ServiceField)
|
||||
return CreateClass(self, o, ServiceField)
|
||||
end
|
||||
|
||||
---@param obj? any # message object for the field
|
||||
|
|
|
@ -19,7 +19,7 @@ local BootPage = {
|
|||
function BootPage:new(o)
|
||||
o = o or {}
|
||||
|
||||
local this = Inherit(self, o, Page)
|
||||
local this = CreateClass(self, o, Page)
|
||||
|
||||
this._networkResult = {}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ local CheckUpdatePage = {
|
|||
---@param o? table # initial parameters
|
||||
---@return CheckUpdatePage
|
||||
function CheckUpdatePage:new(o)
|
||||
local this = Inherit(self, o, Page)
|
||||
local this = CreateClass(self, o, Page)
|
||||
|
||||
local width = DialogField.DEFAULT_WIDTH
|
||||
local height = DialogField.DEFAULT_HEIGHT
|
||||
|
|
|
@ -30,7 +30,7 @@ function ColorCheckPage:new(o)
|
|||
"BACK BUTTON = EXIT"
|
||||
}
|
||||
|
||||
local this = Inherit(self, o, ServicePage)
|
||||
local this = CreateClass(self, o, ServicePage)
|
||||
|
||||
local height = self.GRADIENT_SPACING
|
||||
local list = ListField:new()
|
||||
|
|
|
@ -18,7 +18,7 @@ function InputCheckPage:new(o)
|
|||
o.title = o.title or "INPUT CHECK"
|
||||
o.footer = o.footer or "BACK BUTTON = EXIT"
|
||||
|
||||
local this = Inherit(self, o, ServicePage)
|
||||
local this = CreateClass(self, o, ServicePage)
|
||||
|
||||
local list = ListField:new()
|
||||
list:addField(InputButtonField:new{label="START BUTTON", button=game.BUTTON_STA})
|
||||
|
|
|
@ -20,7 +20,7 @@ function MainMenuPage:new(o)
|
|||
|
||||
o.title = o.title or "MAIN MENU"
|
||||
|
||||
local this = Inherit(self, o, ServicePage)
|
||||
local this = CreateClass(self, o, ServicePage)
|
||||
|
||||
local list = ListField:new()
|
||||
list:addField(ServiceLinkField:new{label = "INPUT CHECK", link = InputCheckPage:new()})
|
||||
|
|
|
@ -28,7 +28,7 @@ function ScreenCheckPage:new(o)
|
|||
"BACK BUTTON = EXIT"
|
||||
}
|
||||
|
||||
return Inherit(self, o, ServicePage)
|
||||
return CreateClass(self, o, ServicePage)
|
||||
end
|
||||
|
||||
---@param button integer # options are under the `game` table prefixed with `BUTTON`
|
||||
|
|
|
@ -43,7 +43,7 @@ function ServicePage:new(o)
|
|||
o.selectedIndex = o.selectedIndex or 1
|
||||
o.footer = o.footer or self.FOOTER
|
||||
|
||||
return Inherit(self, o, Page)
|
||||
return CreateClass(self, o, Page)
|
||||
end
|
||||
|
||||
---Refresh content values
|
||||
|
|
|
@ -30,7 +30,7 @@ function VersionInfoPage:new(o)
|
|||
}
|
||||
o.selectedIndex = o.selectedIndex or 1
|
||||
|
||||
local this = Inherit(self, o, ServicePage)
|
||||
local this = CreateClass(self, o, ServicePage)
|
||||
|
||||
local logStr = ReadGameFile("log_usc-game.exe.txt") or ReadGameFile("log_usc-game.txt")
|
||||
|
||||
|
|
Loading…
Reference in New Issue