|
@@ -0,0 +1,64 @@
|
|
|
+go.property("acceleration", 100)
|
|
|
+go.property("deceleration", 200)
|
|
|
+go.property("max_speed", 400)
|
|
|
+go.property("rotation_speed", 180)
|
|
|
+
|
|
|
+-- unit vector pointing up
|
|
|
+local UP = vmath.vector3(0, 1, 0)
|
|
|
+
|
|
|
+function init(self)
|
|
|
+ -- make sure the script will receive user input
|
|
|
+ msg.post(".", "acquire_input_focus")
|
|
|
+
|
|
|
+ -- movement input
|
|
|
+ self.input = vmath.vector3()
|
|
|
+
|
|
|
+ -- the current speed (pixels/second)
|
|
|
+ self.speed = 0
|
|
|
+end
|
|
|
+
|
|
|
+function update(self, dt)
|
|
|
+ -- accelerating?
|
|
|
+ if self.input.y > 0 then
|
|
|
+ -- increase speed
|
|
|
+ self.speed = self.speed + self.acceleration * dt
|
|
|
+ -- cap speed
|
|
|
+ self.speed = math.min(self.speed, self.max_speed)
|
|
|
+ else
|
|
|
+ -- decrease speed when not accelerating
|
|
|
+ self.speed = self.speed - self.deceleration * dt
|
|
|
+ self.speed = math.max(self.speed, 0)
|
|
|
+ end
|
|
|
+
|
|
|
+ -- apply rotation based on self.input.x (left/right)
|
|
|
+ local rot = go.get_rotation()
|
|
|
+ -- amount to rotate (in radians)
|
|
|
+ local rot_amount = math.rad(self.rotation_speed * self.input.x * dt)
|
|
|
+ -- apply rotation as a quaternion created from a rotation of 'rot_amount' degrees around the z-axis
|
|
|
+ rot = rot * vmath.quat_rotation_z(rot_amount)
|
|
|
+ go.set_rotation(rot)
|
|
|
+
|
|
|
+ -- move the game object
|
|
|
+ local p = go.get_position()
|
|
|
+ -- amount to move (pixels)
|
|
|
+ local move_amount = UP * self.speed * dt
|
|
|
+ -- apply rotation to movement vector to move game object in the direction of rotation
|
|
|
+ p = p + vmath.rotate(rot, move_amount)
|
|
|
+ go.set_position(p)
|
|
|
+
|
|
|
+ -- reset input
|
|
|
+ self.input = vmath.vector3()
|
|
|
+end
|
|
|
+
|
|
|
+function on_input(self, action_id, action)
|
|
|
+ -- update direction of movement based on currently pressed keys
|
|
|
+ if action_id == hash("up") then
|
|
|
+ self.input.y = 1
|
|
|
+ elseif action_id == hash("down") then
|
|
|
+ self.input.y = -1
|
|
|
+ elseif action_id == hash("left") then
|
|
|
+ self.input.x = 1
|
|
|
+ elseif action_id == hash("right") then
|
|
|
+ self.input.x = -1
|
|
|
+ end
|
|
|
+end
|