Compare commits
No commits in common. "891e37fa4f57fdb465a7269c3322600748dd9775" and "ad5d60bfa0562c43db8f4660280b779f4221ea82" have entirely different histories.
891e37fa4f
...
ad5d60bfa0
1 changed files with 8 additions and 100 deletions
108
bundle/main.lua
108
bundle/main.lua
|
@ -7,20 +7,15 @@ local wall_thickness = 0.01
|
||||||
|
|
||||||
local missiles = {}
|
local missiles = {}
|
||||||
local missile_radius = 0.005
|
local missile_radius = 0.005
|
||||||
local missile_trail_length = 15
|
local missile_trail_length = 7
|
||||||
|
|
||||||
local cities = {}
|
local cities = {}
|
||||||
local city_radius = 0.05
|
local city_radius = 0.05
|
||||||
|
|
||||||
local explosions = {}
|
local explosions = {}
|
||||||
local explosion_radius = 0.08
|
local explosion_radius = 0.05
|
||||||
local explosion_duration = 0.4
|
local explosion_duration = 0.4
|
||||||
|
|
||||||
local enemies = {}
|
|
||||||
local enemy_radius = 0.025
|
|
||||||
local enemy_min_shoot = 5
|
|
||||||
local enemy_max_shoot = 10
|
|
||||||
|
|
||||||
local window_width = nil
|
local window_width = nil
|
||||||
local window_height = nil
|
local window_height = nil
|
||||||
local viewport_x_offset = nil
|
local viewport_x_offset = nil
|
||||||
|
@ -60,16 +55,9 @@ function love.load()
|
||||||
setScreenDimensions(width, height)
|
setScreenDimensions(width, height)
|
||||||
movePaddle(0)
|
movePaddle(0)
|
||||||
spawnCities()
|
spawnCities()
|
||||||
spawnEnemy(0.1, 0.1, false)
|
spawnMissile(0.5, 0.1, cities[3].x, cities[3].y, 0.2)
|
||||||
spawnEnemy(0.2, 0.1, true)
|
spawnMissile(0.1, 0.3, cities[7].x, cities[7].y, 0.2)
|
||||||
spawnEnemy(0.3, 0.1, false)
|
spawnMissile(0.1, 0.3, cities[3].x, cities[3].y, 0.1)
|
||||||
spawnEnemy(0.4, 0.1, true)
|
|
||||||
spawnEnemy(0.5, 0.1, false)
|
|
||||||
spawnEnemy(0.6, 0.1, true)
|
|
||||||
spawnEnemy(0.7, 0.1, false)
|
|
||||||
spawnEnemy(0.8, 0.1, true)
|
|
||||||
spawnEnemy(0.9, 0.1, false)
|
|
||||||
spawnEnemy(0.1, 0.3, true)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function spawnCities()
|
function spawnCities()
|
||||||
|
@ -115,16 +103,6 @@ function spawnExplosion(x, y)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function spawnEnemy(x, y, active)
|
|
||||||
table.insert(enemies, {
|
|
||||||
x = x,
|
|
||||||
y = y,
|
|
||||||
active = active,
|
|
||||||
until_shoot = math.random() * (enemy_max_shoot - enemy_min_shoot),
|
|
||||||
alive = true
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
function updateMissiles(dt)
|
function updateMissiles(dt)
|
||||||
for _, missile in ipairs(missiles) do
|
for _, missile in ipairs(missiles) do
|
||||||
missile.x = missile.x + missile.dx * dt
|
missile.x = missile.x + missile.dx * dt
|
||||||
|
@ -174,20 +152,6 @@ function updateMissiles(dt)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if missile.reflected then
|
|
||||||
for _, enemy in ipairs(enemies) do
|
|
||||||
local dx = enemy.x - missile.x
|
|
||||||
local dy = enemy.y - missile.y
|
|
||||||
local distance = math.sqrt(dx * dx + dy * dy)
|
|
||||||
if distance < enemy_radius then
|
|
||||||
spawnExplosion(missile.x, missile.y)
|
|
||||||
-- Freeze the missile in-place
|
|
||||||
missile.dx = 0
|
|
||||||
missile.dy = 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if collided then
|
if collided then
|
||||||
table.insert(missile.history, 1, {
|
table.insert(missile.history, 1, {
|
||||||
x = missile.x,
|
x = missile.x,
|
||||||
|
@ -222,30 +186,20 @@ function updateExplosions(dt)
|
||||||
-- Destroy missiles within range
|
-- Destroy missiles within range
|
||||||
for _, missile in ipairs(missiles) do
|
for _, missile in ipairs(missiles) do
|
||||||
local dx = missile.x - explosion.x
|
local dx = missile.x - explosion.x
|
||||||
local dy = missile.y - explosion.y
|
local dy = missile.x - explosion.x
|
||||||
local distance = math.sqrt(dx * dx + dy * dy)
|
local distance = math.sqrt(dx * dx + dy * dy)
|
||||||
if distance < explosion.radius then
|
if distance < explosion.radius then
|
||||||
missile.alive = false
|
missile.alive = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Destroy enemies within range
|
|
||||||
for _, enemy in ipairs(enemies) do
|
|
||||||
local dx = enemy.x - explosion.x
|
|
||||||
local dy = enemy.y - explosion.y
|
|
||||||
local distance = math.sqrt(dx * dx + dy * dy)
|
|
||||||
if distance < explosion.radius + enemy_radius then
|
|
||||||
enemy.alive = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
explosion.remaining = explosion.remaining - dt
|
explosion.remaining = explosion.remaining - dt
|
||||||
|
|
||||||
if explosion.remaining < explosion_duration * 0.2 then
|
if explosion.remaining < explosion_duration * 0.2 then
|
||||||
-- Destroy cities within range
|
-- Destroy cities within range
|
||||||
for _, city in ipairs(cities) do
|
for _, city in ipairs(cities) do
|
||||||
local dx = city.x - explosion.x
|
local dx = city.x - explosion.x
|
||||||
local dy = city.y - explosion.y
|
local dy = city.x - explosion.x
|
||||||
local distance = math.sqrt(dx * dx + dy * dy)
|
local distance = math.sqrt(dx * dx + dy * dy)
|
||||||
if distance < explosion.radius + city_radius then
|
if distance < explosion.radius + city_radius then
|
||||||
city.alive = false
|
city.alive = false
|
||||||
|
@ -261,49 +215,15 @@ function updateExplosions(dt)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function updateEnemies(dt)
|
|
||||||
local i = 1
|
|
||||||
while i <= #enemies do
|
|
||||||
local enemy = enemies[i]
|
|
||||||
|
|
||||||
if enemy.active then
|
|
||||||
enemy.until_shoot = enemy.until_shoot - dt
|
|
||||||
if enemy.until_shoot < 0 then
|
|
||||||
enemy.until_shoot = enemy_min_shoot + math.random() * (enemy_max_shoot - enemy_min_shoot)
|
|
||||||
local target = cities[math.random(1, #cities)]
|
|
||||||
spawnMissile(enemy.x, enemy.y, target.x, target.y, 0.2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not enemy.alive then
|
|
||||||
table.remove(enemies, i)
|
|
||||||
else
|
|
||||||
i = i + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function love.update(dt)
|
function love.update(dt)
|
||||||
updateMissiles(dt)
|
updateMissiles(dt)
|
||||||
updateExplosions(dt)
|
updateExplosions(dt)
|
||||||
updateEnemies(dt)
|
|
||||||
|
|
||||||
if #explosions == 0 and #missiles == 0 and #enemies == 0 then
|
if #explosions == 0 and #missiles == 0 then
|
||||||
love.event.quit()
|
love.event.quit()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function explodeAllReflected()
|
|
||||||
for _, missile in ipairs(missiles) do
|
|
||||||
if missile.reflected then
|
|
||||||
spawnExplosion(missile.x, missile.y)
|
|
||||||
-- Freeze the missile
|
|
||||||
missile.dx = 0
|
|
||||||
missile.dy = 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function movePaddle(screen_x)
|
function movePaddle(screen_x)
|
||||||
paddle_x = fromScreenCoordinate(screen_x, 0)
|
paddle_x = fromScreenCoordinate(screen_x, 0)
|
||||||
paddle_x = math.max(paddle_x, paddle_width/2 + wall_thickness)
|
paddle_x = math.max(paddle_x, paddle_width/2 + wall_thickness)
|
||||||
|
@ -313,8 +233,6 @@ end
|
||||||
|
|
||||||
love.mousemoved = movePaddle
|
love.mousemoved = movePaddle
|
||||||
|
|
||||||
love.mousepressed = explodeAllReflected
|
|
||||||
|
|
||||||
love.resize = setScreenDimensions
|
love.resize = setScreenDimensions
|
||||||
|
|
||||||
function drawWalls()
|
function drawWalls()
|
||||||
|
@ -394,20 +312,10 @@ function drawExplosions()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function drawEnemies()
|
|
||||||
for _, enemy in ipairs(enemies) do
|
|
||||||
love.graphics.setColor(0.7, 0.5, 1)
|
|
||||||
local x, y = toScreenCoordinates(enemy.x, enemy.y)
|
|
||||||
local radius = toScreenSize(enemy_radius)
|
|
||||||
love.graphics.circle('fill', x, y, radius)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function love.draw()
|
function love.draw()
|
||||||
drawCities()
|
drawCities()
|
||||||
drawWalls()
|
drawWalls()
|
||||||
drawMissiles()
|
drawMissiles()
|
||||||
drawPaddle()
|
drawPaddle()
|
||||||
drawEnemies()
|
|
||||||
drawExplosions()
|
drawExplosions()
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue