function init(self) -- Add initialization code here -- Learn more: https://defold.com/manuals/script/ -- Remove this function if not needed end function final(self) -- Add finalization code here -- Learn more: https://defold.com/manuals/script/ -- Remove this function if not needed end function update(self, dt) -- Add update code here -- Learn more: https://defold.com/manuals/script/ -- Remove this function if not needed end function fixed_update(self, dt) -- This function is called if 'Fixed Update Frequency' is enabled in the Engine section of game.project -- Can be coupled with fixed updates of the physics simulation if 'Use Fixed Timestep' is enabled in -- Physics section of game.project -- Add update code here -- Learn more: https://defold.com/manuals/script/ -- Remove this function if not needed end function on_message(self, message_id, message, sender) -- Add message-handling code here -- Learn more: https://defold.com/manuals/message-passing/ -- Remove this function if not needed end local function screen_to_world(x, y, z, camera_id) local projection = camera.get_projection(camera_id) local view = camera.get_view(camera_id) local w, h = window.get_size() -- https://defold.com/manuals/camera/#converting-mouse-to-world-coordinates local inv = vmath.inv(projection * view) x = (2 * x / w) - 1 y = (2 * y / h) - 1 z = (2 * z) - 1 local x1 = x * inv.m00 + y * inv.m01 + z * inv.m02 + inv.m03 local y1 = x * inv.m10 + y * inv.m11 + z * inv.m12 + inv.m13 local z1 = x * inv.m20 + y * inv.m21 + z * inv.m22 + inv.m23 return x1, y1, z1 end function on_input(self, action_id, action) if action_id == hash("left-click") and action.pressed then self.next_state = "moving" local tx, ty, _ = screen_to_world(action.screen_x, action.screen_y, 0, "/CameraParent#camera") self.target_pos = vmath.vector3(tx, ty, 0) elseif action_id == hash("right-click") then end end function on_reload(self) -- Add reload-handling code here -- Learn more: https://defold.com/manuals/hot-reload/ -- Remove this function if not needed end