Add big ball and fix bonuses
This commit is contained in:
parent
70127fbfa3
commit
fc1e4dfdd6
13 changed files with 126 additions and 20 deletions
25
bigballmode.lua
Normal file
25
bigballmode.lua
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
Class = require 'hump/class'
|
||||||
|
require 'powerupmode'
|
||||||
|
require 'settings'
|
||||||
|
|
||||||
|
BigBallMode = Class{
|
||||||
|
__include = PowerUpMode,
|
||||||
|
|
||||||
|
init = function(self)
|
||||||
|
PowerUpMode.init(self, 10)
|
||||||
|
end;
|
||||||
|
|
||||||
|
update = function(self, dt)
|
||||||
|
PowerUpMode.update(self, dt)
|
||||||
|
end;
|
||||||
|
|
||||||
|
activate = function(self, plane)
|
||||||
|
PowerUpMode.activate(self, plane)
|
||||||
|
plane.machinegun:setType("bigball")
|
||||||
|
end;
|
||||||
|
|
||||||
|
deactivate = function(self)
|
||||||
|
PowerUpMode.deactivate(self)
|
||||||
|
self.plane.machinegun:setType(PLANE_DEFAULT_GUN)
|
||||||
|
end;
|
||||||
|
}
|
|
@ -20,6 +20,6 @@ ChaingunMode = Class{
|
||||||
|
|
||||||
deactivate = function(self)
|
deactivate = function(self)
|
||||||
PowerUpMode.deactivate(self)
|
PowerUpMode.deactivate(self)
|
||||||
self.plane.machinegun:setType("vickers77")
|
self.plane.machinegun:setType(PLANE_DEFAULT_GUN)
|
||||||
end;
|
end;
|
||||||
}
|
}
|
1
conf.lua
1
conf.lua
|
@ -8,6 +8,7 @@ function love.conf(t)
|
||||||
t.window.width = 1280
|
t.window.width = 1280
|
||||||
t.window.height = 768
|
t.window.height = 768
|
||||||
t.window.resizable = false
|
t.window.resizable = false
|
||||||
|
t.window.vsync = false
|
||||||
|
|
||||||
-- LÖVE version
|
-- LÖVE version
|
||||||
t.version = "0.9.1"
|
t.version = "0.9.1"
|
||||||
|
|
43
entities/bigball.lua
Normal file
43
entities/bigball.lua
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
Class = require 'hump.class'
|
||||||
|
require 'entities/physicsentity'
|
||||||
|
require 'entities/animation'
|
||||||
|
require 'settings'
|
||||||
|
|
||||||
|
local BIGBALL_SOUND = love.audio.newSource("resources/audio/boom9.wav", "static")
|
||||||
|
|
||||||
|
BigBall = Class{
|
||||||
|
__includes = Rectangle,
|
||||||
|
|
||||||
|
MAX_LIFETIME = 60 * 10,
|
||||||
|
img = nil,
|
||||||
|
frame = 0,
|
||||||
|
|
||||||
|
init = function(self, x, y, level)
|
||||||
|
local xsize = 2.0 * PIXELS_PER_METER
|
||||||
|
local ysize = 2.0 * PIXELS_PER_METER
|
||||||
|
|
||||||
|
Rectangle.init(self, x, y, level, "dynamic", 1, xsize, ysize, 50, nil)
|
||||||
|
self.body:setBullet(true)
|
||||||
|
self.collisionCategory = 3
|
||||||
|
self.fixture:setCategory(self.collisionCategory)
|
||||||
|
|
||||||
|
BIGBALL_SOUND:rewind()
|
||||||
|
BIGBALL_SOUND:play()
|
||||||
|
end;
|
||||||
|
|
||||||
|
update = function(self, dt)
|
||||||
|
Rectangle.update(self, dt)
|
||||||
|
|
||||||
|
self.frame = self.frame + 1
|
||||||
|
|
||||||
|
if self.frame >= self.MAX_LIFETIME then
|
||||||
|
self:delete()
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
draw = function(self)
|
||||||
|
love.graphics.setColor({0, 0, 255, 255})
|
||||||
|
Rectangle.draw(self)
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
19
entities/bigballpowerup.lua
Normal file
19
entities/bigballpowerup.lua
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Class = require 'hump.class'
|
||||||
|
require 'entities/powerup'
|
||||||
|
require 'bigballmode'
|
||||||
|
|
||||||
|
local BIGBALLPOWERUP_IMG = love.graphics.newImage("resources/graphics/bigballpowerup.png")
|
||||||
|
local BIGBALLPOWERUP_QUAD = love.graphics.newQuad(0, 0, 32, 32, 32, 32)
|
||||||
|
|
||||||
|
BigBallPowerUp = Class{
|
||||||
|
__includes = PowerUp,
|
||||||
|
|
||||||
|
init = function(self, x, y, level)
|
||||||
|
PowerUp.init(self, x, y, level, 10, 16)
|
||||||
|
self.mode = BigBallMode()
|
||||||
|
end;
|
||||||
|
|
||||||
|
draw = function(self)
|
||||||
|
love.graphics.draw(BIGBALLPOWERUP_IMG, BIGBALLPOWERUP_QUAD, self.x, self.y, self.angle, 1, 1, 16, 16)
|
||||||
|
end;
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
Class = require 'hump.class'
|
Class = require 'hump.class'
|
||||||
require 'entities/powerup'
|
require 'entities/powerup'
|
||||||
|
require 'chaingunmode'
|
||||||
|
|
||||||
local CHAINGUNPOWERUP_IMG = love.graphics.newImage("resources/graphics/chaingunpowerup.png")
|
local CHAINGUNPOWERUP_IMG = love.graphics.newImage("resources/graphics/chaingunpowerup.png")
|
||||||
local CHAINGUNPOWERUP_QUAD = love.graphics.newQuad(0, 0, 32, 32, 32, 32)
|
local CHAINGUNPOWERUP_QUAD = love.graphics.newQuad(0, 0, 32, 32, 32, 32)
|
||||||
|
@ -9,6 +10,7 @@ ChaingunPowerUp = Class{
|
||||||
|
|
||||||
init = function(self, x, y, level)
|
init = function(self, x, y, level)
|
||||||
PowerUp.init(self, x, y, level, 10, 16)
|
PowerUp.init(self, x, y, level, 10, 16)
|
||||||
|
self.mode = ChaingunMode()
|
||||||
end;
|
end;
|
||||||
|
|
||||||
draw = function(self)
|
draw = function(self)
|
||||||
|
|
|
@ -19,6 +19,8 @@ PowerUp = Class{
|
||||||
|
|
||||||
-- Don't collide with ammo
|
-- Don't collide with ammo
|
||||||
self.fixture:setMask(3)
|
self.fixture:setMask(3)
|
||||||
|
|
||||||
|
self.mode = nil
|
||||||
end;
|
end;
|
||||||
|
|
||||||
draw = function(self)
|
draw = function(self)
|
||||||
|
@ -27,7 +29,7 @@ PowerUp = Class{
|
||||||
|
|
||||||
update = function(self, dt)
|
update = function(self, dt)
|
||||||
PhysicsEntity.update(self, dt)
|
PhysicsEntity.update(self, dt)
|
||||||
|
|
||||||
self.angle = self.angle + ROTATION_SPEED * dt
|
self.angle = self.angle + ROTATION_SPEED * dt
|
||||||
|
|
||||||
if self.angle > math.pi * 2 then
|
if self.angle > math.pi * 2 then
|
||||||
|
|
|
@ -2,7 +2,9 @@ Gamestate = require 'hump.gamestate'
|
||||||
require 'level'
|
require 'level'
|
||||||
require 'player'
|
require 'player'
|
||||||
require 'scoreboard'
|
require 'scoreboard'
|
||||||
|
require 'entities/powerup'
|
||||||
require 'entities/chaingunpowerup'
|
require 'entities/chaingunpowerup'
|
||||||
|
require 'entities/bigballpowerup'
|
||||||
require 'entities/plane'
|
require 'entities/plane'
|
||||||
require 'entities/debug'
|
require 'entities/debug'
|
||||||
require 'chaingunmode'
|
require 'chaingunmode'
|
||||||
|
@ -24,6 +26,11 @@ local paused = false
|
||||||
|
|
||||||
local POWERUP_POSSIBILITY = 0.001
|
local POWERUP_POSSIBILITY = 0.001
|
||||||
|
|
||||||
|
local POWERUPS = {
|
||||||
|
BigBallPowerUp,
|
||||||
|
ChaingunPowerUp
|
||||||
|
}
|
||||||
|
|
||||||
function level_state:init()
|
function level_state:init()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -50,8 +57,6 @@ function level_state:enter(previous, level_file)
|
||||||
|
|
||||||
scoreboards[i] = Scoreboard(x, 20, players[i])
|
scoreboards[i] = Scoreboard(x, 20, players[i])
|
||||||
end
|
end
|
||||||
|
|
||||||
ChaingunPowerUp(750, 750, current_level)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,7 +83,8 @@ function level_state:update(dt)
|
||||||
if r <= POWERUP_POSSIBILITY then
|
if r <= POWERUP_POSSIBILITY then
|
||||||
local x = love.math.random(love.window.getWidth())
|
local x = love.math.random(love.window.getWidth())
|
||||||
local y = love.math.random(love.window.getHeight())
|
local y = love.math.random(love.window.getHeight())
|
||||||
ChaingunPowerUp(x, y, current_level)
|
|
||||||
|
POWERUPS[love.math.random(1, #POWERUPS)](x, y, current_level)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not paused then
|
if not paused then
|
||||||
|
@ -148,13 +154,13 @@ function begin_contact(a, b, coll)
|
||||||
local bObj = b:getUserData()
|
local bObj = b:getUserData()
|
||||||
|
|
||||||
if aObj ~= nil and bObj ~= nil then
|
if aObj ~= nil and bObj ~= nil then
|
||||||
if aObj:isinstance(Plane) and bObj:isinstance(ChaingunPowerUp) then
|
if aObj:isinstance(Plane) and bObj:isinstance(PowerUp) then
|
||||||
bObj.deleteLater = true
|
bObj.deleteLater = true
|
||||||
aObj:setPowerUpMode(ChaingunMode())
|
aObj:setPowerUpMode(bObj.mode)
|
||||||
coll:setEnabled(false)
|
coll:setEnabled(false)
|
||||||
elseif bObj:isinstance(Plane) and aObj:isinstance(ChaingunPowerUp) then
|
elseif bObj:isinstance(Plane) and aObj:isinstance(PowerUp) then
|
||||||
aObj.deleteLater = true
|
aObj.deleteLater = true
|
||||||
bObj:setPowerUpMode(ChaingunMode())
|
bObj:setPowerUpMode(bObj.mode)
|
||||||
coll:setEnabled(false)
|
coll:setEnabled(false)
|
||||||
else
|
else
|
||||||
aObj:wasHit()
|
aObj:wasHit()
|
||||||
|
|
|
@ -3,6 +3,7 @@ Class = require 'hump/class'
|
||||||
|
|
||||||
require 'entities/vickers77'
|
require 'entities/vickers77'
|
||||||
require 'entities/tinyshot'
|
require 'entities/tinyshot'
|
||||||
|
require 'entities/bigball'
|
||||||
|
|
||||||
GUNS = {
|
GUNS = {
|
||||||
chaingun = {
|
chaingun = {
|
||||||
|
@ -12,6 +13,13 @@ GUNS = {
|
||||||
damage = 5
|
damage = 5
|
||||||
},
|
},
|
||||||
|
|
||||||
|
bigball = {
|
||||||
|
interval = 1,
|
||||||
|
force = 1000000,
|
||||||
|
projectile = BigBall,
|
||||||
|
damage = 0
|
||||||
|
},
|
||||||
|
|
||||||
vickers77 = {
|
vickers77 = {
|
||||||
interval = 0.1,
|
interval = 0.1,
|
||||||
force = 300000,
|
force = 300000,
|
||||||
|
@ -31,18 +39,15 @@ MachineGun = Class{
|
||||||
end;
|
end;
|
||||||
|
|
||||||
update = function(self, dt)
|
update = function(self, dt)
|
||||||
if self.shooting then
|
if self.shooting and self.since_last_shot >= self.gun['interval'] then
|
||||||
if self.since_last_shot >= self.gun['interval'] then
|
self:fire()
|
||||||
self:fire()
|
self.since_last_shot = 0
|
||||||
self.since_last_shot = 0
|
else
|
||||||
else
|
self.since_last_shot = self.since_last_shot + dt
|
||||||
self.since_last_shot = self.since_last_shot + dt
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
setType = function(self, type)
|
setType = function(self, type)
|
||||||
print(GUNS['vickers77'])
|
|
||||||
self.gun = GUNS[type]
|
self.gun = GUNS[type]
|
||||||
self.since_last_shot = 0
|
self.since_last_shot = 0
|
||||||
end;
|
end;
|
||||||
|
@ -62,7 +67,6 @@ MachineGun = Class{
|
||||||
|
|
||||||
startShooting = function(self)
|
startShooting = function(self)
|
||||||
self.shooting = true
|
self.shooting = true
|
||||||
self.since_last_shot = self.gun['interval']
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
stopShooting = function(self)
|
stopShooting = function(self)
|
||||||
|
|
|
@ -6,10 +6,13 @@ PowerUpMode = Class{
|
||||||
self.age = 0
|
self.age = 0
|
||||||
self.duration = duration
|
self.duration = duration
|
||||||
self.plane = nil
|
self.plane = nil
|
||||||
|
self.active = false
|
||||||
end;
|
end;
|
||||||
|
|
||||||
update = function(self, dt)
|
update = function(self, dt)
|
||||||
self.age = self.age + dt
|
if active then
|
||||||
|
self.age = self.age + dt
|
||||||
|
end
|
||||||
|
|
||||||
if self.age >= self.duration then
|
if self.age >= self.duration then
|
||||||
self:deactivate()
|
self:deactivate()
|
||||||
|
@ -27,6 +30,7 @@ PowerUpMode = Class{
|
||||||
activate = function(self, plane)
|
activate = function(self, plane)
|
||||||
plane.powerupmode = self
|
plane.powerupmode = self
|
||||||
self.plane = plane
|
self.plane = plane
|
||||||
|
self.active = true
|
||||||
end;
|
end;
|
||||||
|
|
||||||
deactivate = function(self)
|
deactivate = function(self)
|
||||||
|
|
BIN
resources/audio/boom9.wav
Executable file
BIN
resources/audio/boom9.wav
Executable file
Binary file not shown.
BIN
resources/graphics/bigballpowerup.png
Normal file
BIN
resources/graphics/bigballpowerup.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1 KiB |
|
@ -26,7 +26,7 @@ KEYMAP = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PLANE_HEALTH = 1000
|
PLANE_HEALTH = 500
|
||||||
PLANE_DEFAULT_GUN = "vickers77"
|
PLANE_DEFAULT_GUN = "vickers77"
|
||||||
|
|
||||||
SCOREBOARD_WIDTH = 250
|
SCOREBOARD_WIDTH = 250
|
||||||
|
|
Loading…
Reference in a new issue