Skip to content

Instantly share code, notes, and snippets.

@dimmduh
Created June 12, 2012 12:00
Show Gist options
  • Save dimmduh/2917121 to your computer and use it in GitHub Desktop.
Save dimmduh/2917121 to your computer and use it in GitHub Desktop.
--генератор врагов в точке респауна
--создает экземпляры объектов в необходимое время
EnemyGenerator = {}
function EnemyGenerator:new(params)
local generator = {}
--координаты появления
generator.x = params.x
generator.y = params.y
--время начала работы генератора
--от этого времени отсчитывается
generator.timeStart = system.getTimer();
--таблица со временем появления и типом врага
generator.enemies = {
{ t = 1000, enemyType = 'worm' },
{ t = 3000, enemyType = 'worm' },
{ t = 6000, enemyType = 'worm' },
{ t = 10000, enemyType = 'worm' },
{ t = 10000, enemyType = 'worm' },
{ t = 12000, enemyType = 'worm' },
}
--создание объекта
function generator:createEnemy( enemyType )
if ( enemyType == "worm" ) then
table.insert( enemies, Worm:new( {x = self.x, y = self.y} ) );
end
end
function generator:enterFrame(e)
--объект время создания которого пришло
local elaspedItem = self:getElaspedItem();
if (elaspedItem) then
--p( elaspedItem.t .. ' != ' .. elaspedItem.enemyType );
self:createEnemy( elaspedItem.enemyType )
table.remove( self.enemies, 1 )
end
end
--возвращает врага, время которого пришло и он еще не был создан
function generator:getElaspedItem()
if ( #self.enemies > 0 ) then
if ( self.enemies[1].t < self:getElaspedTime() ) then
return self.enemies[1];
end
end
return nil
end
--возвращает прошедшее время в миллисекундах с начала работы генератора
function generator:getElaspedTime()
return os.difftime( system.getTimer(), self.timeStart );
end
Runtime:addEventListener('enterFrame', generator)
return generator
end
return EnemyGenerator
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment