From e3e88c9caa3c4eef1a3e6c3a89499c4fb268aa9e Mon Sep 17 00:00:00 2001 From: Paul Liverman III Date: Thu, 7 Mar 2019 13:27:07 -0800 Subject: [PATCH] init --- .gitignore | 1 + Screenshot from 2019-02-22 12-50-54.png | Bin 0 -> 6344 bytes Screenshot from 2019-02-22 12-51-05.png | Bin 0 -> 7862 bytes src/main.moon | 72 ++++++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 .gitignore create mode 100644 Screenshot from 2019-02-22 12-50-54.png create mode 100644 Screenshot from 2019-02-22 12-51-05.png create mode 100644 src/main.moon diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d907c43 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.lua diff --git a/Screenshot from 2019-02-22 12-50-54.png b/Screenshot from 2019-02-22 12-50-54.png new file mode 100644 index 0000000000000000000000000000000000000000..524eab03598f9233ee386041aa3962608db37677 GIT binary patch literal 6344 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 literal 0 HcmV?d00001 diff --git a/Screenshot from 2019-02-22 12-51-05.png b/Screenshot from 2019-02-22 12-51-05.png new file mode 100644 index 0000000000000000000000000000000000000000..260a30031143919e1f8790b7279ca1d8e651b773 GIT binary patch literal 7862 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 aqZ9bouZp?R=ab-TC`obYhdH9pJpUhn^$Q08 literal 0 HcmV?d00001 diff --git a/src/main.moon b/src/main.moon new file mode 100644 index 0000000..b186196 --- /dev/null +++ b/src/main.moon @@ -0,0 +1,72 @@ +import max, min from math + +class Generator + new: => + @acceleration = 1.5 -- rate of rpm change based on rpm + @fuel = 0.0011 -- use per rpm + @fuelCurve = 1.1 + @energy = 0.038 -- produced per rpm + @energyCurve = 0.9 + @rpm = 0 -- current rpm + @throttle = 0 -- 0 to 1 throttle + @maximum_rpm = 8000 + @instability = 0.01 -- random modification in rpm + @redline = 7000 -- maximum safe rpm + @volume = { -- TEMP + pressure: -> return 1 + remove: (f) => return f + } + @battery = { add: -> } -- TEMP + + update: (dt) => + target = @throttle * @maximum_rpm + if target < @rpm + @rpm = max target, @rpm - (@rpm^0.9 + 500) * @acceleration * dt + -- @rpm = target if @rpm < target + @battery\add(@energy * @rpm^@energyCurve * dt) + else + if target > @rpm + -- @rpm = 100 if @rpm < 100 + @rpm = min target, @rpm + (@rpm^0.9 + 500) * @acceleration * dt + @rpm += @rpm * @instability * (math.random! - 0.5) + fuel = @fuel * @rpm^@fuelCurve * dt + fuel = @volume\remove(fuel) / fuel -- TEMP (needs to be both fuel types) + if fuel < 1 + @rpm = max 0, @rpm - @rpm * @acceleration * (1 - fuel) * dt + @battery\add(@energy * @rpm^@energyCurve * dt) + +gen = Generator! + +love.update = (dt) -> + if love.keyboard.isDown("up") + -- gen.throttle += dt + gen.throttle = min 1, gen.throttle + dt / 5 + elseif love.keyboard.isDown("down") + -- gen.throttle -= dt + gen.throttle = max 0, gen.throttle - dt / 5 + gen\update dt + +love.draw = -> + love.graphics.print "RPM: #{math.floor gen.rpm} Throttle: #{math.floor(gen.throttle * 100) / 100} Generating: #{math.floor(gen.energy * gen.rpm) / 10} Using: #{math.floor( gen.fuel * gen.rpm * 10) / 10} Efficiency: #{math.floor((gen.energy * gen.rpm^0.9) / (gen.fuel * gen.rpm^1.1) * 10) / 10}" + + cx, cy = 400, 300 -- TEMP + -- mod = math.pi / gen.redline + mod = math.pi / gen.maximum_rpm + angle = gen.rpm * mod + math.pi + love.graphics.line cx, cy, cx + 100 * math.cos(angle), cy + 100 * math.sin(angle) + +actions = { + "1": -> gen.throttle = 0.1 + "2": -> gen.throttle = 0.2 + "3": -> gen.throttle = 0.3 + "4": -> gen.throttle = 0.4 + "5": -> gen.throttle = 0.5 + "6": -> gen.throttle = 0.6 + "7": -> gen.throttle = 0.7 + "8": -> gen.throttle = 0.8 + "9": -> gen.throttle = 0.9 + "0": -> gen.throttle = 1 + "escape": -> love.event.quit! +} +love.keypressed = (key) -> + actions[key]() if actions[key]