summaryrefslogtreecommitdiff
path: root/ghost.lua
diff options
context:
space:
mode:
authorFernando Carmona Varo <ferkiwi@gmail.com>2015-10-24 01:19:24 +0200
committerFernando Carmona Varo <ferkiwi@gmail.com>2015-10-24 01:19:24 +0200
commit6a55251a4526095fb691f5fca0a9d51c0d1cf7c0 (patch)
tree5c43ed7b9c281d59ef8321f858177962150269bb /ghost.lua
parent6b949da2c7610c55f2bb83c693520b9e77a9aebc (diff)
Moved and renamed to pacmine
Diffstat (limited to 'ghost.lua')
-rw-r--r--ghost.lua147
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