94 lines
2.2 KiB
Lua
94 lines
2.2 KiB
Lua
---@class vanillaElement
|
|
local vanillaElement = {}
|
|
vanillaElement.all = {}
|
|
|
|
---*CONSTRUCTOR
|
|
---@param element ModelPart The elements model path
|
|
---@param strength? number How much the element rotates relative to
|
|
function vanillaElement:new(element, strength, keepPosition)
|
|
---@class SquAPI.vanillaElement
|
|
local self = {}
|
|
|
|
self.keepPosition = keepPosition
|
|
if keepPosition == nil then self.keepPosition = true end
|
|
assert(element, "§4The first vanilla Element's model path is incorrect.§c")
|
|
self.element = element
|
|
self.element:setParentType("NONE")
|
|
self.strength = strength or 1
|
|
|
|
self.rot = vec(0,0,0)
|
|
self.pos = vec(0,0,0)
|
|
self.frozen = false
|
|
|
|
self.enabled = true
|
|
|
|
self = setmetatable(self, {__index = vanillaElement})
|
|
--table.insert(vanillaElement.all, self)
|
|
|
|
return self
|
|
end
|
|
|
|
--*CONTROL FUNCTIONS
|
|
|
|
---vanillaElement enable handling
|
|
function vanillaElement:disable() self.enabled = false return self end
|
|
function vanillaElement:enable() self.enabled = true return self end
|
|
function vanillaElement:toggle() self.enabled = not self.enabled return self end
|
|
|
|
---@param bool boolean
|
|
function vanillaElement:setEnabled(bool)
|
|
self.enabled = bool or false
|
|
return self
|
|
end
|
|
|
|
--freezes the element where it is
|
|
function vanillaElement:freeze()
|
|
self.frozen = true
|
|
end
|
|
function vanillaElement:unfreeze()
|
|
self.frozen = false
|
|
end
|
|
|
|
--returns it to normal attributes
|
|
function vanillaElement:zero()
|
|
self.element:setOffsetRot(0, 0, 0)
|
|
self.element:setPos(0, 0, 0)
|
|
end
|
|
|
|
--get the current rot/pos
|
|
function vanillaElement:getPos()
|
|
return self.pos
|
|
end
|
|
function vanillaElement:getRot()
|
|
return self.rot
|
|
end
|
|
|
|
|
|
--*UPDATE FUNCTIONS
|
|
|
|
function vanillaElement:render(dt, _)
|
|
|
|
if not self.frozen then
|
|
if self.enabled then
|
|
local rot, pos = self:getVanilla()
|
|
self.element:setOffsetRot(rot*self.strength)
|
|
if self.keepPosition then
|
|
self.element:setPos(pos)
|
|
end
|
|
else
|
|
self.element:setOffsetRot(math.lerp(
|
|
self.element:getOffsetRot(), 0, dt
|
|
))
|
|
self.rot = math.lerp(self.rot, 0, dt)
|
|
self.pos = math.lerp(self.pos, 0, dt)
|
|
end
|
|
end
|
|
end
|
|
|
|
function vanillaElement:getVanilla()
|
|
error("§4vanillaElement has been instatiated even though it is abstract, please use sublclass§c")
|
|
end
|
|
|
|
return vanillaElement
|
|
|
|
|