Никита Круглицкий 138d91b9f9 slomal bahui
2025-05-14 18:57:41 +06:00

105 lines
2.4 KiB
Plaintext

--@include /koptilnya/libs/constants.txt
--@include /koptilnya/libs/utils.txt
--@include ../wire_component.txt
local WireComponent = require('../wire_component.txt')
require('/koptilnya/libs/constants.txt')
require('/koptilnya/libs/utils.txt')
local PowertrainComponent = class('PowertrainComponent', WireComponent)
function PowertrainComponent:initialize(vehicle, name, config)
config = config or {}
WireComponent.initialize(self)
self.vehicle = vehicle
self.name = name or 'PowertrainComponent'
self.CONFIG = config
self.DEBUG = config.DEBUG or false
self.input = nil
self.output = nil
self.inertia = 0.02
self.angularVelocity = 0
self.torque = 0
if self.DEBUG then
if CLIENT then
self.DEBUG_DATA = {}
net.receive('DEBUG_' .. self.name, function()
self:deserializeDebugData(self.DEBUG_DATA)
end)
end
self.DEBUG_SEND_DATA_DEBOUNCED = debounce(function()
net.start("DEBUG_" .. self.name)
self:serializeDebugData()
net.send(self.vehicle.playersConnectedToHUD, true)
end, 1 / 10)
end
end
function PowertrainComponent:start()
end
function PowertrainComponent:linkComponent(component)
if not component:isInstanceOf(PowertrainComponent) then
return
end
if self.output == nil then
self.output = component
component.input = self
end
end
function PowertrainComponent:getRPM()
return self.angularVelocity * RAD_TO_RPM
end
function PowertrainComponent:queryInertia()
if self.output == nil then
return self.inertia
end
return self.inertia + self.output:queryInertia()
end
function PowertrainComponent:queryAngularVelocity(angularVelocity)
self.angularVelocity = angularVelocity
if self.output == nil then
return 0
end
return self.output:queryAngularVelocity(angularVelocity)
end
function PowertrainComponent:forwardStep(torque, inertia)
if self.output == nil then
return self.torque
end
return self.output:forwardStep(self.torque, self.inertia + inertia)
end
function PowertrainComponent:updateWireOutputs()
WireComponent.updateWireOutputs(self)
if self.DEBUG then
-- self:DEBUG_SEND_DATA_DEBOUNCED()
end
end
function PowertrainComponent:serializeDebugData()
end
function PowertrainComponent:deserializeDebugData(result)
end
return PowertrainComponent