1-- Trigger functions for the different weapons. 2local weapons = { 3 knife = function(self) 4 local level = self:getLevel() 5 local entity = jvgslua.Entity("resources/knife/knife.xml", level) 6 7 local velocity = jvgslua.Vector2D_fromPolar(entity:getSpeed(), math.random() * 20 - 10) 8 9 if not self:isFacingRight() then 10 velocity:setX(-velocity:getX()) 11 end 12 13 entity:setPosition(self:getPosition()) 14 entity:setVelocity(velocity) 15 level:addEntity(entity) 16 self:setTimer(2000) 17 18 local am = jvgslua.AudioManager_getInstance() 19 am:playSound("resources/knife/throw.ogg") 20 end, 21 22 clock = function(self) 23 local em = jvgslua.EffectManager_getInstance() 24 local te = jvgslua.TimeEffect(0.2, 3000) 25 em:addEffect(te) 26 self:setTimer(3000) 27 end, 28 29 hat = function(self) 30 local velocity = jvgslua.Vector2D(0.0, -1.0) * self:getSpeed() * 2 31 self:setVelocity(velocity) 32 self:setTimer(500) 33 local pos = jvgslua.Vector2D(self:getPosition():getX(), 34 self:getPosition():getY() + self:getRadius():getY()) 35 effects.stars(pos, 0.5, {"star"}) 36 end, 37 38 grenade = function(self) 39 local level = self:getLevel() 40 local entity = jvgslua.Entity("resources/grenade/grenade.xml", level) 41 42 local velocity = jvgslua.Vector2D_fromPolar(entity:getSpeed(), -math.random() * 45) 43 44 if not self:isFacingRight() then 45 velocity:setX(-velocity:getX()) 46 end 47 48 entity:setPosition(self:getPosition()) 49 entity:setVelocity(velocity) 50 level:addEntity(entity) 51 self:setTimer(4000) 52 end 53} 54 55events.trigger{ 56 spawn = function(self, event) 57 self:setBool("ready", true) 58 end, 59 60 die = function(self, event) 61 common.gameOver() 62 end, 63 64 action = function(self, event) 65 print(string.format("<point x=\"%.0f\" y=\"%.0f\" \/>", 66 self:getPosition():getX(), self:getPosition():getY())) 67 68 if self:isSet("weapon") and self:getBool("ready") then 69 local weapon = self:get("weapon") 70 if weapons[weapon] then weapons[weapon](self) end 71 self:setBool("ready", false) 72 local sprite = jvgslua.Sprite("resources/player/regular-sprite.xml") 73 self:setSprite(sprite) 74 end 75 end, 76 77 timer = function(self, event) 78 if common.isDead(self) then 79 -- Falling sequence limit reached. 80 common.gameOver() 81 else 82 if self:isSet("weapon") then 83 local sprite = jvgslua.Sprite("resources/player/" .. 84 self:get("weapon") .. "-sprite.xml") 85 self:setSprite(sprite) 86 end 87 88 self:setBool("ready", true) 89 end 90 end, 91 92 property = function(self, event) 93 if event:getKey() == "health" and common.isDead(self) then 94 effects.commonDie(self) 95 local em = jvgslua.EffectManager_getInstance() 96 local effect = jvgslua.InvertEffect() 97 em:addEffect(effect) 98 local lm = jvgslua.LevelManager_getInstance() 99 lm:setTimeFactor(0.2) 100 -- Limit falling sequence. 101 self:setTimer(1000) 102 end 103 end 104} 105