Implementing starfall version of engine

This commit is contained in:
Ivan Grachyov 2021-11-09 21:09:03 +05:00
parent a5f7bedf8d
commit e2c1c4bc88
12 changed files with 200 additions and 4 deletions

5
koptilnya/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"*.txt": "lua"
}
}

View File

@ -49,7 +49,7 @@ local Materials =
local Colors =
{
Body = Color(255,255,255),
Body = Color(230,230,222),
Shadow = Color(25,25,25),
Grille = Color(130,130,130),
WindowsOutline = Color(30,30,30),

View File

@ -0,0 +1,16 @@
Clutch = class("Clutch")
function Clutch:initialize(options)
options = options or {}
self.stiffness = options.Stiffness or 0
self.capacity = options.Capacity or 0
self.damping = options.Damping or 0
self._engine = options.Engine
self._gearbox = options.Gearbox
end
function Clutch:update()
end

View File

@ -0,0 +1,55 @@
config = {
Engine = {
IdleRPM = 800,
MaxRPM = 6500,
FlywheelMass = 4.9,
FlywheelRadius = 0.378,
StartFriction = -50,
FrictionCoeff = 0.02,
LimiterDuration = 0.05,
TorqueMap = {240.29618749947, 251.33093929699, 262.3656910945, 273.40044289202, 284.43519468953,
295.46994648705, 306.50469828456, 317.53945008208, 328.57420187959, 339.60895367711,
350.64370547463, 361.67845727214, 372.71320906966, 383.74796086717, 394.78271266469,
405.8174644622, 416.85221625972, 427.88696805724, 438.92171985475, 449.95647165227, 449.9557104607,
449.95494926913, 449.95418807757, 449.953426886, 449.95266569443, 449.95190450287, 449.9511433113,
449.95038211973, 449.94962092816, 449.9488597366, 449.94809854503, 449.94733735346, 449.9465761619,
449.94581497033, 449.94505377876, 449.9442925872, 449.94353139563, 449.94277020406,
449.94200901249, 449.94124782093, 449.94048662936, 449.93972543779, 449.93896424623,
449.93820305466, 449.93744186309, 449.93668067153, 449.93591947996, 449.93515828839,
449.93439709682, 449.93363590526, 449.93287471369, 449.93211352212, 449.93135233056,
449.93059113899, 449.92982994742, 449.92906875586, 449.92830756429, 449.92754637272,
449.92678518115, 449.92602398959, 449.92526279802, 449.92450160645, 449.92374041489,
449.92297922332, 449.92221803175, 449.92145684019, 449.92069564862, 449.91993445705,
449.91917326548, 449.91841207392, 449.91765088235, 449.91688969078, 449.91612849922,
446.34504740794, 442.77396631665, 439.20288522537, 435.63180413409, 432.06072304281,
428.48964195153, 424.91856086025, 421.34747976897, 417.77639867769, 414.2053175864,
410.63423649512, 407.06315540384, 403.49207431256, 399.92099322128, 396.34991213, 392.77883103872,
389.20774994744, 385.63666885615, 382.06558776487, 378.49450667359, 374.92342558231,
371.35234449103, 367.78126339975, 364.21018230847, 360.63910121719, 357.0680201259,
353.49693903462, 349.92585794334}
},
Clutch = {
Stiffness = 22,
Capacity = 1.3,
Damping = 0.5
},
Gearbox = {
Ratios = {2.93, 1.96, 1.38, 1.03, 1.06, 0.87},
Reverse = 3.26,
FinalDrive = 4.77
},
FrontDiff = {
Power = 0.25,
Coast = 0.15,
Preload = 10,
UsePowerBias = 10,
ViscousCoeff = 0.96
},
RearDiff = {
Power = 0.25,
Coast = 0.15,
Preload = 10,
UsePowerBias = 10,
ViscousCoeff = 0.96
}
}

View File

@ -0,0 +1,18 @@
Differential = class("Differential")
function Differential:initialize(options)
options = options or {}
self.power = options.Power or 1
self.coast = options.Coast or 1
self.preload = options.Preload or 10
self.viscousCoeff = options.ViscousCoeff or 0.9
self._gearbox = options.Gearbox
self._leftWheel = options.LeftWheel
self._rightWheel = options.RightWheel
if self._gearbox then
self._gearbox:linkDiff(self)
end
end

View File

@ -0,0 +1,20 @@
Engine = class("Engine")
function Engine:initialize(options)
options = options or {}
self.idleRPM = options.IdleRPM or 800
self.maxRPM = options.MaxRPM or 8000
self.flywheelMass = options.FlywheelMass or 4
self.flywheelRadius = options.FlywheelRadius or 0.3
self.startFriction = options.StartFriction or -30
self.frictionCoeff = options.FrictionCoeff or 0.02
self.limiterDuration = options.LimiterDuration or 0.05
self.torqueMap = options.TorqueMap or {}
self.throttle = 0
end

View File

@ -0,0 +1,4 @@
-- @include ./base.txt
require("./base.txt")
AutomaticGearbox = class("AutomaticGearbox")

View File

@ -0,0 +1,28 @@
Gearbox = class("Gearbox")
function Gearbox:initialize(options)
options = options or {}
self.ratios = options.ratios
self.finalDrive = options.finalDrive
self._linkedDiffs = {}
self.gear = 0
end
function Gearbox:linkDiff(diff)
table.insert(self._linkedDiffs, diff)
end
function Gearbox:shift(dir)
end
function Gearbox:setGear(gear)
self.gear = gear
end
function Gearbox:update()
end

View File

@ -0,0 +1,4 @@
-- @include ./base.txt
require("./base.txt")
CVT = class("CVT")

View File

@ -0,0 +1,10 @@
-- @include ./base.txt
require("./base.txt")
ManualGearbox = class("ManualGearbox")
function ManualGearbox:initialize(options)
-- create base gearbox inside
end
-- proxy the methods here

View File

@ -1,3 +1,42 @@
-- @name Koptilnya Engine
-- @author Koptilnya1337
-- @shared
--
-- @include ./engine.txt
--
-- @include ./gearboxes/manual.txt
-- @include ./gearboxes/cvt.txt
-- @include ./gearboxes/auto.txt
--
-- @include ./differential.txt
--
-- @include ./configs/audi_tt.txt
require("./engine.txt")
--
require("./gearboxes/manual.txt")
require("./gearboxes/cvt.txt")
require("./gearboxes/auto.txt")
--
require("./differential.txt")
--
require("./configs/audi_tt.txt")
if SERVER then
function adjustPorts()
wire.adjustPorts({
Input = "table"
}, {
RPM = "number"
})
end
function setupHooks()
end
adjustPorts()
-- printTable(config)
else
end

View File

@ -30,9 +30,6 @@ function Input:getAxleValue(axle)
local positiveValue = axle.Positive ~= nil and input.isKeyDown(axle.Positive)
local negativeValue = axle.Negative ~= nil and input.isKeyDown(axle.Negative)
print(positiveValue)
print(negativeValue)
return (positiveValue and 1 or 0) - (negativeValue and 1 or 0) -- (input.isKeyDown(axle.Positive) and 1 or 0) - (input.isKeyDown(axle.Negative) and 1 or 0)
end