diff options
author | Fernando Carmona Varo <ferkiwi@gmail.com> | 2015-10-24 01:19:24 +0200 |
---|---|---|
committer | Fernando Carmona Varo <ferkiwi@gmail.com> | 2015-10-24 01:19:24 +0200 |
commit | 6a55251a4526095fb691f5fca0a9d51c0d1cf7c0 (patch) | |
tree | 5c43ed7b9c281d59ef8321f858177962150269bb /ghost.lua | |
parent | 6b949da2c7610c55f2bb83c693520b9e77a9aebc (diff) |
Moved and renamed to pacmine
Diffstat (limited to 'ghost.lua')
-rw-r--r-- | ghost.lua | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/ghost.lua b/ghost.lua deleted file mode 100644 index 1c9e47e..0000000 --- a/ghost.lua +++ /dev/null @@ -1,147 +0,0 @@ - -local ghosts_death_delay = 5 - - -local ghosts = { - {"pinky","Pinky"}, - {"inky","Inky"}, - {"blinky","Blinky"}, - {"clyde","Clyde"}, - } -for i in ipairs(ghosts) do - local itm = ghosts[i][1] - local desc = ghosts[i][2] - - minetest.register_entity("mypacman:"..itm, { - hp_max = 1, - physical = true, - collide_with_objects = true, - visual = "cube", - visual_size = {x = 0.6, y = 1}, - textures = { - "mypacman_"..itm.."s.png", - "mypacman_"..itm.."s.png", - "mypacman_"..itm.."s.png", - "mypacman_"..itm.."s.png", - "mypacman_"..itm.."f.png", - "mypacman_"..itm.."s.png", - }, - velocity = {x=math.random(-1,1), y=0, z=math.random(-1,1)}, - collisionbox = {-0.25, -1.0, -0.25, 0.25, 0.48, 0.25}, - is_visible = true, - automatic_rotate = true, - automatic_face_movement_dir = -90, -- set yaw direction in degrees, false to disable - makes_footstep_sound = false, - - set_velocity = function(self, v) - if not v then v = 0 end - local yaw = self.object:getyaw() - self.object:setvelocity({x=math.sin(yaw) * -v, y=self.object:getvelocity().y, z=math.cos(yaw) * v}) - end, - - on_step = function(self, dtime) - -- every 1 second - self.timer = (self.timer or 0) + dtime - if self.timer < 1 then return end - self.timer = 0 - - -- Do we have game state? if not just die - local gamestate = mypacman.games[self.gameid] - if not gamestate then - minetest.log("action", "Removing pacman ghost without game assigned") - self.object:remove() - return - end - -- Make sure we are in the right state by keeping track of the reset time - -- if the reset time changed it's likely the game got resetted while the entity wasn't loaded - if self.last_reset then - if self.last_reset ~= gamestate.last_reset then - minetest.log("action", "Removing pacman ghost remaining after reset ") - self.object:remove() - end - else - self.last_reset = gamestate.last_reset - end - - -- Make sure we have a targetted player - if not self.target then - self.target = minetest.get_player_by_name(gamestate.player_name) - end - local player = self.target - - -- If there's no player just stop - if not player then - self.set_velocity(self, 0) - return - end - - local s = self.object:getpos() -- ghost - local p = player:getpos() -- player - - -- find distance from ghost to player - local distance = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - if distance < 1.5 then - -- player touches ghost!! - - if gamestate.power_pellet then - -- Player eats ghost! move it to spawn - local ghost_spawn = vector.add(gamestate.pos, {x=13,y=0.5,z=19}) - self.object:setpos(ghost_spawn) - -- set the timer negative so it'll have to wait extra time - self.timer = -ghosts_death_delay - -- play sound and reward player - minetest.sound_play("mypacman_eatghost", {pos = boardcenter,max_hear_distance = 6, object=player, loop=false}) - player:get_inventory():add_item('main', 'mypacman:cherrys') - else - -- Ghost catches the player! - gamestate.lives = gamestate.lives - 1 - if gamestate.lives < 1 then - minetest.chat_send_player(gamestate.player_name,"Game Over") - player:moveto(vector.add(gamestate.pos,{x=0.5,y=0.5,z=-1.5})) - mypacman.game_end(self.gameid) - minetest.sound_play("mypacman_death", {pos = boardcenter,max_hear_distance = 20, object=player, loop=false}) - - elseif gamestate.lives == 1 then - minetest.chat_send_player(gamestate.player_name,"This is your last life") - mypacman.game_reset(self.gameid, player) - else - minetest.chat_send_player(gamestate.player_name,"You have ".. gamestate.lives .." lives left") - mypacman.game_reset(self.gameid, player) - end - end - mypacman.update_hud(self.gameid, player) - - else - local vec = {x=p.x-s.x, y=p.y-s.y, z=p.z-s.z} - local yaw = (math.atan(vec.z/vec.x)+math.pi/2) - if p.x > s.x then - yaw = yaw + math.pi - end - -- face player and move backwards/forwards - self.object:setyaw(yaw) - if gamestate.power_pellet then - self.set_velocity(self, -gamestate.speed) --negative velocity - else - self.set_velocity(self, gamestate.speed) - end - end - end, - - -- This function should return the saved state of the entity in a string - get_staticdata = function(self) - return (self.gameid or "") .. ";" .. (self.last_reset or "") - end, - - -- This function should load the saved state of the entity from a string - on_activate = function(self, staticdata) - self.object:set_armor_groups({immortal=1}) - if staticdata and staticdata ~= "" then - local data = string.split(staticdata, ";") - if #data == 2 then - self.gameid = data[1] - self.last_reset = tonumber(data[2]) - end - end - end - }) -end |