Advertisement
Juaxix

Asteroides - Codea game - 3/10 - Cosmos.lua

Nov 7th, 2011
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.94 KB | None | 0 0
  1. Cosmos = class()
  2. -- wrote by juaxix
  3. -- videojuegos.ser3d.es
  4. function Cosmos:init()
  5.     self.asteroids = {}
  6.     self.loots     = {}
  7.     self.aliens    = {}
  8.     self.ship      = Ship()
  9.     self.stars     = Stars()
  10.     self.explosions= {}
  11.     self.ship.position = vec2(WIDTH/2,HEIGHT/2)
  12.     self.maxAsteroids = 6
  13.     self.nasteroids   = 0
  14.     self.AspawnSpeed  = 1/11
  15.     self.timeNextAst  = 0
  16.     self.maxAliens    = 3
  17.     self.naliens      = 0
  18.     self.alSpawnSpeed = 1/60
  19.     self.timeNextAlien= 3
  20.     self.maxLoots     = 3
  21.     self.timeNextLoot = 0
  22.     self.nloots       = 0
  23.     self.loSpawnSpeed = 1/66
  24. end
  25.  
  26. function Cosmos:generateNextLoot()
  27.     self.timeNextLoot = self.timeNextLoot - self.loSpawnSpeed
  28.     if self.timeNextLoot<= 0 then
  29.         self.timeNextLoot = 9
  30.         if self.nloots < self.maxLoots then
  31.             table.insert(self.loots,Loot(self.ship.position.y))
  32.             self.nloots = self.nloots + 1
  33.         end
  34.     end
  35. end
  36.  
  37. function Cosmos:generateNextAlien()
  38.     self.timeNextAlien = self.timeNextAlien - self.alSpawnSpeed
  39.     if self.timeNextAlien<= 0 then
  40.         self.timeNextAlien = 11
  41.         if self.naliens < self.maxAliens then
  42.             table.insert(self.aliens,Alien(self.ship.position.y))
  43.             self.naliens = self.naliens + 1
  44.         end
  45.     end
  46. end
  47.  
  48. function Cosmos:generateNextAsteroid()
  49.     self.timeNextAst = self.timeNextAst - self.AspawnSpeed
  50.     if self.timeNextAst<= 0 then
  51.         self.timeNextAst = 6
  52.         if self.nasteroids < self.maxAsteroids then
  53.             table.insert(self.asteroids,Asteroid(self.ship.position))
  54.             self.nasteroids = self.nasteroids + 1
  55.         end
  56.     end
  57. end
  58.  
  59. function Cosmos:draw()
  60.     self:generateNextAsteroid()
  61.     self:generateNextAlien()
  62.     self:generateNextLoot()
  63.     self.stars:draw()
  64.     for i,a in ipairs(self.asteroids) do
  65.         a:draw()
  66.     end
  67.     if self.ship:isDead() then
  68.         self.ship:drawDead()
  69.         drawText("Game over! ",2,1,50,HEIGHT/2)
  70.         drawText("Hit restart! ",1,1,55,(HEIGHT/2)-33)
  71.     else
  72.         self.ship:draw()
  73.     end
  74.     for i,a in ipairs(self.aliens) do
  75.         if a.position.x> WIDTH then
  76.             table.remove(self.aliens, i)
  77.             self.naliens = self.naliens - 1
  78.         else
  79.             a:draw()
  80.         end
  81.     end
  82.     for i,l in ipairs(self.loots) do
  83.         l:draw()
  84.     end
  85.     for i,e in ipairs(self.explosions) do
  86.         if e:isDone() then
  87.             table.remove(self.explosions, i)
  88.         else
  89.             e:draw()
  90.         end
  91.     end
  92. end
  93.  
  94. function Cosmos:isCollidingWithAliens(o,min,attack)
  95.     for i,a in ipairs(self.aliens) do
  96.         if a.position:dist(o.position)<min then
  97.             if attack then
  98.                 table.insert(self.explosions,Explosion(a.position,o.acolor,a.points))
  99.                 table.remove(self.aliens, i)
  100.                 self.naliens = self.naliens - 1
  101.                 score = score + a.points
  102.             end
  103.             return true
  104.         end
  105.     end
  106.     return false
  107. end
  108. -- O(n)
  109. function Cosmos:isCollidingWithAsteroids(o,min,attack)
  110.     -- asteroid
  111.     for i,a in ipairs(self.asteroids) do
  112.         if (a.position:dist(o.position))<min then
  113.             if attack then
  114.                 table.insert(self.explosions,Explosion(a.position,o.acolor,a.points))
  115.                 table.remove(self.asteroids, i)
  116.                 self.nasteroids = self.nasteroids - 1
  117.                 score = score + a.points
  118.             end
  119.             return true
  120.         end
  121.     end
  122. end
  123.  
  124. function Cosmos:touched(touch)
  125.     self.ship:touched(touch)
  126. end
  127.  
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement