-- Copyright 2023 -- -- 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 . local omif = select(2, ...) local types = omif.GetModule("types") -- Create any class, possibly top level local function CreateClassRaw(name, parent) local c = {} c.__typeInfo = { name = name, class = c, parent = parent } c.__index = c if parent ~= nil then setmetatable(c, parent) end return c end types.Object = CreateClassRaw("Object") -- Create a new class, eventually rooted at Object function types.CreateClass(name, parent) return CreateClassRaw(name, parent or types.Object) end -- Return true if a is derived from b or if a is b function types.IsDerivedFrom(a, b) local current = a repeat if current == b then return true end current = current.__typeInfo.parent until current == nil; return false end