2016-09-13 12:02:53 +02:00
|
|
|
------------------------------------------------------------
|
|
|
|
-- Copyright (c) 2016 tacigar. All rights reserved.
|
|
|
|
-- https://github.com/tacigar/maidroid
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
2016-09-14 01:27:13 +02:00
|
|
|
local state = {IDLE = 0, ACCOMPANY = 1}
|
2016-09-13 12:02:53 +02:00
|
|
|
|
2016-09-13 13:03:15 +02:00
|
|
|
local function on_start(self)
|
|
|
|
self.state = state.IDLE
|
|
|
|
self.object:setacceleration{x = 0, y = -10, z = 0}
|
|
|
|
self.object:setvelocity{x = 0, y = 0, z = 0}
|
2016-09-13 12:02:53 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
local function on_stop(self)
|
2016-09-13 13:03:15 +02:00
|
|
|
self.state = nil
|
2016-09-16 15:37:18 +02:00
|
|
|
self.object:setvelocity{x = 0, y = 0, z = 0}
|
2016-09-13 12:02:53 +02:00
|
|
|
end
|
|
|
|
|
2016-09-14 01:27:13 +02:00
|
|
|
local on_resume = on_start
|
|
|
|
|
|
|
|
local on_pause = on_stop
|
|
|
|
|
2016-09-13 12:02:53 +02:00
|
|
|
local function on_step(self, dtime)
|
2016-09-13 13:03:15 +02:00
|
|
|
local player = self:get_nearest_player(10)
|
|
|
|
if player == nil then
|
|
|
|
self:set_animation(maidroid.animation_frames.STAND)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local position = self.object:getpos()
|
|
|
|
local player_position = player:getpos()
|
|
|
|
local direction = vector.subtract(player_position, position)
|
|
|
|
local velocity = self.object:getvelocity()
|
|
|
|
|
2016-09-13 15:11:23 +02:00
|
|
|
if vector.length(direction) < 3 then
|
2016-09-13 13:03:15 +02:00
|
|
|
if self.state == state.ACCOMPANY then
|
|
|
|
self:set_animation(maidroid.animation_frames.STAND)
|
2016-09-13 15:11:23 +02:00
|
|
|
self.state = state.IDLE
|
2016-09-13 13:03:15 +02:00
|
|
|
self.object:setvelocity{x = 0, y = velocity.y, z = 0}
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if self.state == state.IDLE then
|
|
|
|
self:set_animation(maidroid.animation_frames.WALK)
|
|
|
|
self.state = state.ACCOMPANY
|
|
|
|
end
|
|
|
|
self.object:setvelocity{x = direction.x, y = velocity.y, z = direction.z} -- TODO
|
|
|
|
end
|
2016-09-13 12:02:53 +02:00
|
|
|
|
2016-09-13 13:03:15 +02:00
|
|
|
-- if maidroid is stoped by obstacle, the maidroid must jump.
|
2016-09-13 15:33:02 +02:00
|
|
|
if velocity.y == 0 and self.state == state.ACCOMPANY then
|
2016-09-13 13:03:15 +02:00
|
|
|
local front_node = self:get_front_node()
|
|
|
|
if front_node.name ~= "air" then
|
2016-09-13 15:33:02 +02:00
|
|
|
self.object:setvelocity{x = direction.x, y = 5, z = direction.z}
|
2016-09-13 13:03:15 +02:00
|
|
|
end
|
|
|
|
end
|
2016-09-13 12:02:53 +02:00
|
|
|
end
|
|
|
|
|
2016-09-14 01:27:13 +02:00
|
|
|
-- register a definition of a new core.
|
|
|
|
maidroid.register_core("maidroid_core:basic", {
|
|
|
|
description = "maidroid core : basic",
|
|
|
|
inventory_image = "maidroid_core_basic.png",
|
|
|
|
on_start = on_start,
|
|
|
|
on_stop = on_stop,
|
|
|
|
on_resume = on_resume,
|
|
|
|
on_pause = on_pause,
|
|
|
|
on_step = on_step,
|
2016-09-13 12:02:53 +02:00
|
|
|
})
|