I’m making a component system using classes and type-checking. Each component will be it’s own class and it will export it’s own type. I’d want to be able to use the food type without having to require the food component module, only the main component module.
Components.lua
local FoodComponent = require(script.Parent.FoodComponent)
export type Component = {
Food: FoodComponent.Food?,
}
return {
["FoodComponent"] = FoodComponent
}
FoodComponent.lua
-- Authorized Use By Dissonant Realms and Galicate
-- Programmer : Galicate @ 7/16/2024 4:37 PM
local FoodComponent = {}
export type Food = {
Nutrition: number,
Saturation: number,
CanAlwaysEat: boolean?,
ConsumeTime: number?,
Effects: {}?
}
function FoodComponent.new(nutrition: number?, saturation: number, canAlwaysEat: boolean?, consumeTime: number?, effects: {}?)
local self = setmetatable({}, FoodComponent)
self.Nutrition = nutrition
self.Saturation = saturation
self.CanAlwaysEat = canAlwaysEat or false
self.ConsumeTime = consumeTime or 1.6
self.Effects = {}
return self
end
function FoodComponent:GetNutrition(): number
return self.Nutrition
end
function FoodComponent:GetSaturation(): number
return self.Saturation
end
function FoodComponent:IsAlwaysEdible(): number
return self.CanAlwaysEat
end
function FoodComponent:GetConsumeTime(): number
return self.ConsumeTime
end
function FoodComponent:GetStatusEffects()
return self.Effects
end
FoodComponent.__index = FoodComponent
return FoodComponent