function stageStart() doStageStep = true doStageDraw = true EnemyTimer = 0 EnemyPeriod = 0.8 Score = 0 ScoreShown = 0 t = 0 You = Player:New(1/2*windowWidth,4/5*windowHeight) end function stageStep() -- [PLAYER STEP] You:Input() -- [WORLD STEP] -- first, simulate basic interaction for _, obj in pairs(List.Simulate) do obj:Step() end -- develop extra interactions: -- 1. friendly bullets for _, bullet in pairs(List.FriendlyBullet) do for _, enemy in pairs(List.Enemy) do if bullet:DistanceWith(enemy, enemy.hitbox + bullet.hitbox) then if bullet.hits > 0 then enemy:Damage(bullet.damage) Score = Score +bullet.damage bullet.hits = bullet.hits - 1 if bullet.hits <= 0 then bullet:Kill() end end end end end -- 2. ememy bullets for _, bullet in pairs(List.EnemyBullet) do if bullet:DistanceWith(You, You.hitbox + bullet.hitbox) then if bullet.hits > 0 then --You:Damage(bullet.damage) bullet.hits = bullet.hits - 1 if bullet.hits <= 0 then bullet:Kill() end end else if bullet:DistanceWith(You, 200) then bullet.grazeTimer = bullet.grazeTimer + 1 if bullet.grazeTimer > 30 and bullet.Grazed ~= true then --Score = Score +3 bullet.Grazed = true end else bullet.grazeTimer = 0 end end end for _, bullet in pairs(List.EnemyBullet) do if love.keyboard.isDown("lshift") then bullet:Kill() end end -- [POST WORLD STEP] -- update shown score AddScore() -- if game is not paused t = t + current_dt EnemyTimer = EnemyTimer + current_dt if EnemyTimer >= 0 then --EnemyPeriod then --EnemyTimer = EnemyTimer - EnemyPeriod EnemyTimer = -1000000000000 for i=1, 1 do local rand = 1 --math.random(10) if rand == 1 then local rand_x = math.random(-100,100) local rand_y = math.random(-100,100) local x = Shooter:New(1/2*windowWidth,1/5*windowHeight) else local rand_x = math.random(-10,10) local rand_y = math.random(-10,10) local x = Fang:New(windowWidth/2+rand_x,windowHeight/2+rand_y) end end end end function stageDraw() --[GAME WORLD] -- draw background (unimplemented) -- draw objects for _, obj in pairs(List.Simulate) do obj:Draw() end --[HEADS UP DISPLAY (HUD)] -- show enemies healthbars for _, enemy in pairs(List.Enemy) do if enemy.show_health == true then enemy:DrawHealth() end end -- show recollection zone love.graphics.line(0,1/5*windowHeight,windowHeight,1/5*windowHeight) -- show game area love.graphics.rectangle("line",0,0,windowWidth,windowHeight) -- show score love.graphics.print(ScoreShown, 10, 60) --[DEBUGGING] love.graphics.print(#List.Simulate, windowWidth-100, windowHeight-10) end