30 lines
817 B
Plaintext
30 lines
817 B
Plaintext
Slave = class('Slave')
|
|
|
|
function Slave:initialize(options)
|
|
options = options or {}
|
|
|
|
self.entity = options.Entity
|
|
self.base = options.Base
|
|
|
|
self.camber = options.Camber
|
|
self.caster = options.Caster
|
|
self.ackermann = options.Ackermann
|
|
self.isLeft = options.IsLeft
|
|
self.offset = options.Offset
|
|
end
|
|
|
|
function Slave:rotate(ang)
|
|
if self.entity:isFrozen() == false then
|
|
self.entity:setFrozen(1)
|
|
end
|
|
|
|
local ackermann = math.sin(math.rad(ang)) ^ 2 * self.ackermann * (self.isLeft and -1 or 1)
|
|
local yaw = self.offset + ang + ackermann
|
|
local roll = (self.isLeft and 1 or -1) * self.camber - ang / 270 * self.caster
|
|
|
|
local angle = Angle(0, yaw, roll)
|
|
local transformedAngle = self.base:localToWorldAngles(angle)
|
|
|
|
self.entity:setAngles(transformedAngle)
|
|
end
|