pull out calc_velocity
also prepare constraints to change color based on whether it changed the requested thrust
This commit is contained in:
parent
aa25f87c46
commit
d0a17488d0
@ -128,15 +128,20 @@ function ship:draw()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function calc_velocity(v0, t, vmax, drag)
|
||||||
|
local v1 = v0 + t
|
||||||
|
local sg = sgn(v1)
|
||||||
|
v1 -= sg*drag
|
||||||
|
if (sgn(v1) != sg) return 0
|
||||||
|
if (abs(v1) > vmax) return sg*vmax
|
||||||
|
return v1
|
||||||
|
end
|
||||||
|
|
||||||
function ship:update()
|
function ship:update()
|
||||||
local t = btn(0) and -1 or btn(1) and 1 or 0
|
local t = btn(0) and -1 or btn(1) and 1 or 0
|
||||||
t *= self.thrust
|
t *= self.thrust
|
||||||
t = constraints:constrain(self, t)
|
t = constraints:constrain(self, t)
|
||||||
local s,lim=self.dx+t,self.maxspd
|
local s = calc_velocity(self.dx, t, self.maxspd, self.drag)
|
||||||
local sg = sgn(s)
|
|
||||||
s -= sg*self.drag
|
|
||||||
if (sgn(s) != sg) s=0
|
|
||||||
if (abs(s)>lim) s=sg*lim
|
|
||||||
|
|
||||||
self.x += s
|
self.x += s
|
||||||
self.dx = s
|
self.dx = s
|
||||||
@ -153,9 +158,11 @@ end
|
|||||||
constraints = {
|
constraints = {
|
||||||
ymin=20,
|
ymin=20,
|
||||||
ymax=52,
|
ymax=52,
|
||||||
|
color=10
|
||||||
}
|
}
|
||||||
|
|
||||||
function constraints:constrain(s, want)
|
function constraints:constrain(s, want)
|
||||||
|
self.color=10
|
||||||
return want
|
return want
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -185,7 +192,7 @@ end
|
|||||||
|
|
||||||
function constraints:draw()
|
function constraints:draw()
|
||||||
if (not self.xmin) return
|
if (not self.xmin) return
|
||||||
rect(self.xmin, self.ymin, self.xmax, self.ymax, 10)
|
rect(self.xmin, self.ymin, self.xmax, self.ymax, self.color)
|
||||||
end
|
end
|
||||||
|
|
||||||
-->8
|
-->8
|
||||||
|
Loading…
Reference in New Issue
Block a user