Fixed target values bug
This commit is contained in:
91
koptilnya/grip_steering/main.txt
Normal file
91
koptilnya/grip_steering/main.txt
Normal file
@@ -0,0 +1,91 @@
|
||||
-- @name Grip Steering
|
||||
-- @author DarkSupah
|
||||
-- @server
|
||||
-- @include ./slave.txt
|
||||
Steering = class('Steering')
|
||||
|
||||
require('./slave.txt')
|
||||
|
||||
local options = {
|
||||
Camber = 0,
|
||||
Caster = 85,
|
||||
Ackermann = 10,
|
||||
Lock = 50
|
||||
}
|
||||
|
||||
function Steering:_adjustPorts()
|
||||
local inputs = {
|
||||
Axles = 'table',
|
||||
Base = 'entity',
|
||||
LeftSlave = 'entity',
|
||||
RightSlave = 'entity'
|
||||
}
|
||||
|
||||
local outputs = {
|
||||
SteerAngle = 'number',
|
||||
TargetAngle = 'number'
|
||||
}
|
||||
|
||||
wire.adjustPorts(inputs, outputs)
|
||||
end
|
||||
|
||||
function Steering:_createSlaves()
|
||||
local entities = {wire.ports.LeftSlave, wire.ports.RightSlave}
|
||||
local slaves = {}
|
||||
|
||||
for k, v in pairs(entities) do
|
||||
local slave = Slave:new({
|
||||
Entity = v,
|
||||
IsLeft = k % 2 == 1,
|
||||
Base = wire.ports.Base,
|
||||
Camber = self.slavesConfig.Camber,
|
||||
Caster = self.slavesConfig.Caster,
|
||||
Ackermann = self.slavesConfig.Ackermann
|
||||
})
|
||||
|
||||
table.insert(self.slaves, slave)
|
||||
end
|
||||
end
|
||||
|
||||
function Steering:_updateOutputs()
|
||||
wire.ports.TargetAngle = self.targetAngle
|
||||
end
|
||||
|
||||
function Steering:initialize(options)
|
||||
options = options or {}
|
||||
|
||||
self.slavesConfig = {
|
||||
Camber = options.Camber,
|
||||
Caster = options.Caster,
|
||||
Ackermann = options.Ackermann
|
||||
}
|
||||
|
||||
self.lock = 50
|
||||
|
||||
self.targetAngle = 0
|
||||
self.angle = 0
|
||||
|
||||
self.slaves = {}
|
||||
|
||||
self:_adjustPorts()
|
||||
self:_createSlaves()
|
||||
end
|
||||
|
||||
function Steering:update()
|
||||
local horizontal = wire.ports.Axles.Horizontal.Value
|
||||
|
||||
self.targetAngle = horizontal * self.lock
|
||||
self.angle = -horizontal * self.lock
|
||||
|
||||
for k, v in pairs(self.slaves) do
|
||||
v:rotate(self.angle)
|
||||
end
|
||||
|
||||
self:_updateOutputs()
|
||||
end
|
||||
|
||||
local steering = Steering:new(options)
|
||||
|
||||
hook.add('think', 'SteeringUpdate', function()
|
||||
steering:update()
|
||||
end)
|
||||
25
koptilnya/grip_steering/slave.txt
Normal file
25
koptilnya/grip_steering/slave.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
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
|
||||
end
|
||||
|
||||
function Slave:rotate(ang)
|
||||
if self.entity:isFrozen() == false then
|
||||
self.entity:setFrozen(1)
|
||||
end
|
||||
|
||||
local angle = Angle(0, ang, 0)
|
||||
local transformedAngle = self.base:localToWorldAngles(angle)
|
||||
|
||||
self.entity:setAngles(transformedAngle)
|
||||
-- rotate slave here
|
||||
end
|
||||
Reference in New Issue
Block a user