54 lines
1.7 KiB
Lua
54 lines
1.7 KiB
Lua
-- Copyright 2023 <omicron.me@protonmail.com>
|
|
--
|
|
-- This file is part of Omicron Frames
|
|
--
|
|
-- Omicron Frames is free software: you can redistribute it and/or modify it
|
|
-- under the terms of the GNU General Public License as published by the Free
|
|
-- Software Foundation, either version 3 of the License, or (at your option)
|
|
-- any later version.
|
|
--
|
|
-- Omicron Frames is distributed in the hope that it will be useful, but
|
|
-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
-- more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License along with
|
|
-- Omicron Frames. If not, see <https://www.gnu.org/licenses/>.
|
|
local omi = select(2, ...)
|
|
local Object = omi.GetModule("types").Object
|
|
local IsDerivedFrom = omi.GetModule("types").IsDerivedFrom
|
|
|
|
-- Create a new instance of Object or (more likely) any inheriting class
|
|
function Object.new(class, ...)
|
|
local o = {}
|
|
setmetatable(o, class)
|
|
|
|
if o.Init ~= nil then
|
|
o:Init(...)
|
|
end
|
|
return o
|
|
end
|
|
|
|
-- Returns true if the Object is a class, false if it is an instance object
|
|
function Object.IsClassObject(self)
|
|
return self.__typeInfo.class == self
|
|
end
|
|
|
|
-- Returns true if the Object is an instance, false if it is a class
|
|
function Object.IsInstanceObject(self)
|
|
return self.__typeInfo.class ~= self
|
|
end
|
|
|
|
-- return true if this object is an instance of the given class
|
|
function Object:IsInstanceOf(class)
|
|
if not self:IsInstanceObject() or not class:IsClassObject() then
|
|
return false
|
|
end
|
|
return IsDerivedFrom(self:GetClass(), class)
|
|
end
|
|
|
|
-- Return the class of any object
|
|
function Object.GetClass(self)
|
|
return self.__typeInfo.class
|
|
end
|