Continuing to implement new steering, removed common.txt, inside functions have been moved to separate files

This commit is contained in:
Иван Грачёв 2021-03-26 22:42:51 +05:00
parent 2f8c949776
commit 5c854e183b
6 changed files with 91 additions and 49 deletions

View File

@ -1,26 +0,0 @@
NULL_ENTITY = entity(0)
function deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
setmetatable(copy, deepcopy(getmetatable(orig)))
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function table:merge(table1, table2)
local newTable = deepcopy(table1)
for k, v in pairs(table2) do
newTable[k] = v
end
return newTable
end

View File

@ -0,0 +1 @@
NULL_ENTITY = entity(0)

View File

@ -17,3 +17,28 @@ function table.chunk(tbl, size)
return result return result
end end
function table.deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[table.deepcopy(orig_key)] = table.deepcopy(orig_value)
end
setmetatable(copy, table.deepcopy(getmetatable(orig)))
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function table.merge(table1, table2)
local newTable = table.deepcopy(table1)
for k, v in pairs(table2) do
newTable[k] = v
end
return newTable
end

View File

@ -1,33 +1,70 @@
-- @name Grip steering -- @name Steering
-- @author DarkSupah -- @author DarkSupah
-- @server -- @server
local frontWheelsConfig = { -- @include ./steering_controller.txt
-- @include ./steer_axle.txt
-- @include ../libs/constants.txt
-- @include ../libs/table.txt
require("./steering_controller.txt")
require("./steer_axle.txt")
require("../libs/constants.txt")
require("../libs/table.txt")
local frontConfig = {
Camber = -5, Camber = -5,
Caster = 5, Caster = 5,
Ackermann = 1.1, Ackermann = 1.1,
Lock = 50 Lock = 50
} }
local rearConfig = {
local rearWheelsConfig = {
Camber = -5, Camber = -5,
Caster = -5, Caster = -5,
Ackermann = 1.2, Ackermann = 1.2,
Lock = 5 Lock = 5
} }
local NULL_ENTITY = entity(0) -- Fucking slaves, get you ass back here
local SLAVES = {
E1 = "entity",
E2 = "entity",
E3 = "entity",
E4 = "entity"
}
local AXLES = {SteerAxle:new(frontConfig, wire.ports.E1, wire.ports.E2),
SteerAxle:new(rearConfig, wire.ports.E3, wire.ports.E4)}
local INPUTS = { local INPUTS = {
Base = "entity",
Seat = "entity" Seat = "entity"
} }
local OUTPUTS = { local OUTPUTS = {
Steer = "number" SteerNormalized = "number",
Driver = "entity"
} }
wire.adjustPorts(INPUTS, OUTPUTS) local ALL_INPUTS = table.merge(INPUTS, SLAVES)
local steeringController = SteeringController:new() wire.adjustPorts(ALL_INPUTS, OUTPUTS)
hook.add("think", "steeringUpdate", function() local steeringController = SteeringController:new(wire.ports.Base)
steeringController.steeringController:update()
hook.add("PlayerEnteredVehicle", "onEnter", function(ply, veh)
if veh == steeringController.seat then
steeringController:setDriver(ply)
end
end)
hook.add("PlayerLeaveVehicle", "onLeave", function(ply, veh)
if veh == steeringController.seat then
steeringController:setDriver(NULL_ENTITY)
end
end)
hook.add("think", "update", function()
steeringController.seat = wire.ports.Seat
wire.ports.Driver = steeringController.driver
steeringController:update()
end) end)

View File

@ -1 +1,13 @@
SteerAxle = class("SteerAxle")
function SteerAxle:initialize(config, leftWheel, rightWheel)
self.steer = 0
self.config = config
self.leftWheel = leftWheel
self.rightWheel = rightWheel
end
function SteerAxle:update()
end

View File

@ -1,24 +1,17 @@
-- @include ../libs/constants.txt
require("../libs/constants.txt")
SteeringController = class("SteeringController") SteeringController = class("SteeringController")
function SteeringController:initialize() function SteeringController:initialize(base)
self.seat = NULL_ENTITY self.seat = NULL_ENTITY
self.driver = NULL_ENTITY self.driver = NULL_ENTITY
hook.add("PlayerEnteredVehicle", "", function(ply, veh) self.base = base
if veh == self.seat then
self.driver = ply
end
end)
hook.add("PlayerLeaveVehicle", "", function(ply, veh)
if veh == self.seat then
self.driver = NULL_ENTITY
end
end)
end end
function SteeringController:update() function SteeringController:update()
-- print()
end end
function SteeringController:setDriver(ply) function SteeringController:setDriver(ply)