Here is the full Brick.lua code as requested in order to help me solve this error.
Code: Select all
Brick = Class{}
-- some of the colors in our palette (to be used with particle systems)
paletteColors = {
-- blue
[1] = {
['r'] = 99,
['g'] = 155,
['b'] = 255
},
-- green
[2] = {
['r'] = 106,
['g'] = 190,
['b'] = 47
},
-- red
[3] = {
['r'] = 217,
['g'] = 87,
['b'] = 99
},
-- purple
[4] = {
['r'] = 215,
['g'] = 123,
['b'] = 186
},
-- gold
[5] = {
['r'] = 251,
['g'] = 242,
['b'] = 54
},
-- black
[6] = {
['r'] = 255,
['g'] = 255,
['b'] = 255
}
}
function Brick:init(x, y)
-- used for coloring and score calculation
self.tier = 0
self.color = 1
self.x = x
self.y = y
self.width = 32
self.height = 16
-- used to determine whether this brick should be rendered
self.inPlay = true
-- particle system belonging to the brick, emitted on hit
self.psystem = love.graphics.newParticleSystem(gTextures['particle'], 64)
-- various behavior-determining functions for the particle system
-- https://love2d.org/wiki/ParticleSystem
-- lasts between 0.5-1 seconds seconds
self.psystem:setParticleLifetime(0.5, 1)
-- give it an acceleration of anywhere between X1,Y1 and X2,Y2 (0, 0) and (80, 80) here
-- gives generally downward
self.psystem:setLinearAcceleration(-15, 0, 15, 80)
-- spread of particles; normal looks more natural than uniform
self.psystem:setAreaSpread('normal', 10, 10)
-- CS50: used to determine if brick should spawn or not a powerup when destroyed
self.isSpawner = false;
end
--[[
Triggers a hit on the brick, taking it out of play if at 0 health or
changing its color otherwise.
]]
function Brick:hit(game)
-- set the particle system to interpolate between two colors; in this case, we give
-- it our self.color but with varying alpha; brighter for higher tiers, fading to 0
-- over the particle's lifetime (the second color)
self.psystem:setColors(
paletteColors[self.color].r,
paletteColors[self.color].g,
paletteColors[self.color].b,
55 * (self.tier + 1),
paletteColors[self.color].r,
paletteColors[self.color].g,
paletteColors[self.color].b,
0
)
self.psystem:emit(64)
-- sound on hit
gSounds['brick-hit-2']:stop()
gSounds['brick-hit-2']:play()
-- if we're at a higher tier than the base, we need to go down a tier
-- if we're already at the lowest color, else just go down a color
if self.color == 6 then
if(self.tier == 1) then
self.inPlay = false
end
elseif self.tier > 0 then
if self.color == 1 then
self.tier = self.tier - 1
self.color = 5
else
self.color = self.color - 1
end
else
-- if we're in the first tier and the base color, remove brick from play
if self.color == 1 then
self.inPlay = false
else
self.color = self.color - 1
end
end
-- play a second layer sound if the brick is destroyed
if not self.inPlay then
gSounds['brick-hit-1']:stop()
gSounds['brick-hit-1']:play()
-- CS50: When a brick is destroyed, roll a dice to check if a powerup is spawned or not
if(rnd() <= POWERUP_SPAWNING_ODDS) then
self.isSpawner = true;
else
self.isSpawner = false;
end
end
end
function Brick:update(dt, game)
self.psystem:update(dt)
if (self.color == 6 and self.inPlay) then
if(game.lockedBrick == false) then
self.tier = 1
else
self.tier = 0
end
end
end
function Brick:render()
if self.inPlay then
love.graphics.draw(gTextures['main'],
-- multiply color by 4 (-1) to get our color offset, then add tier to that
-- to draw the correct tier and color brick onto the screen
gFrames['bricks'][1 + ((self.color - 1) * 4) + self.tier],
self.x, self.y)
end
end
--[[
Need a separate render function for our particles so it can be called after all bricks are drawn;
otherwise, some bricks would render over other bricks' particle systems.
]]
function Brick:renderParticles()
love.graphics.draw(self.psystem, self.x + 16, self.y + 8)
end
One thing I notice about the error is that it occurs on when specific bricks are used in the game other than blue ones (bricks that disappear in one hit) so it may involve the different types of bricks?