@@ -94,4 +94,8 @@ function staticanimator() | |||||
love.graphics.setColor(40/255,40/255,40/255,1) | love.graphics.setColor(40/255,40/255,40/255,1) | ||||
love.graphics.circle("fill", player2.x, player2.y , diseffectRange[1]*100, 100) | love.graphics.circle("fill", player2.x, player2.y , diseffectRange[1]*100, 100) | ||||
end | end | ||||
end | |||||
end | |||||
function animateExplosion(x, y, v, color) | |||||
love.graphics.setColor(color) | |||||
love.graphics.circle("fill", x, y, explosionRange * v, 100) | |||||
end |
@@ -0,0 +1,27 @@ | |||||
explosion = Class{} | |||||
function explosion:init(x, y, v, color) | |||||
self.color = color | |||||
self.x = x | |||||
self.y = y | |||||
self.v = v | |||||
self.range = 0 | |||||
self.killed = false | |||||
print(self.i) | |||||
end | |||||
function explosion:update(dt) | |||||
self.range = self.range + dt * 24 | |||||
if self.range * self.v > VIRTUAL_WIDTH * 2 then | |||||
print("killing myself with range" .. self.range) | |||||
self.killed = true | |||||
end | |||||
end | |||||
function explosion:render() | |||||
print("rendering myself" .. self.x .. " " .. self.y .. " " .. self.range .. " " .. self.v) | |||||
love.graphics.setColor(color) | |||||
love.graphics.circle("fill", self.x, self.y, self.range * self.v, 100) | |||||
end |
@@ -15,7 +15,7 @@ doubleclick1 = false | |||||
doubleclick2 = false | doubleclick2 = false | ||||
hold1 = false | hold1 = false | ||||
hold2 = false | hold2 = false | ||||
debug = false | |||||
debug = true | |||||
paused = false | paused = false | ||||
androidButtons = {} | androidButtons = {} | ||||
pauseButtons = {} | pauseButtons = {} | ||||
@@ -170,6 +170,8 @@ function controlChanger() | |||||
end | end | ||||
function love.load() | function love.load() | ||||
love.keyboard.setKeyRepeat(true) | love.keyboard.setKeyRepeat(true) | ||||
tick.framerate = 60 | |||||
simpleScale.setWindow(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT) | simpleScale.setWindow(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT) | ||||
configfile = io.open("config.lua", "r") | configfile = io.open("config.lua", "r") | ||||
configsave = io.open("config.lua", "w") | configsave = io.open("config.lua", "w") | ||||
@@ -871,6 +873,7 @@ function love.load() | |||||
player3 = paddle(5000, 5000, 10, 100) | player3 = paddle(5000, 5000, 10, 100) | ||||
player4 = paddle(5000, 5000, 10, 100) | player4 = paddle(5000, 5000, 10, 100) | ||||
ball = {} | ball = {} | ||||
explosions = {} | |||||
ball[1] = eball(VIRTUAL_WIDTH / 2, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ball[1] = eball(VIRTUAL_WIDTH / 2, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ||||
ball[2] = eball(VIRTUAL_WIDTH / 1.9, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ball[2] = eball(VIRTUAL_WIDTH / 1.9, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ||||
ball[3] = eball(VIRTUAL_WIDTH / 1.8, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ball[3] = eball(VIRTUAL_WIDTH / 1.8, VIRTUAL_HEIGHT / 2 - 2, 16, 16) | ||||
@@ -900,7 +903,7 @@ function startShake(duration, magnitude) | |||||
t, shakeDuration, shakeMagnitude = 0, duration or 1, magnitude or 5 | t, shakeDuration, shakeMagnitude = 0, duration or 1, magnitude or 5 | ||||
end | end | ||||
function displayFPS() | function displayFPS() | ||||
--love.window.setTitle(love.timer.getFPS()) | |||||
love.window.setTitle(love.timer.getFPS()) | |||||
--love.window.setTitle(globalState .. " " .. gameState .. " " .. paddle_SPEED .. " " .. p1bonus .. " " .. player1.dy) | --love.window.setTitle(globalState .. " " .. gameState .. " " .. paddle_SPEED .. " " .. p1bonus .. " " .. player1.dy) | ||||
if love.keyboard.isDown("space") then | if love.keyboard.isDown("space") then | ||||
player1nukescore = 200 | player1nukescore = 200 | ||||
@@ -918,7 +921,9 @@ end | |||||
function love.update(dt) | function love.update(dt) | ||||
--print("IMPORTANT!!!!!" .. globalState .. gameState) | --print("IMPORTANT!!!!!" .. globalState .. gameState) | ||||
for i, explosion in ipairs(explosions) do | |||||
explosion:update(dt) | |||||
end | |||||
staticanimatorcounter(dt) | staticanimatorcounter(dt) | ||||
player1.goal = -1 | player1.goal = -1 | ||||
player2.goal = -1 | player2.goal = -1 | ||||
@@ -1,5 +1,4 @@ | |||||
function AI(target, ballCnt, diff) | function AI(target, ballCnt, diff) | ||||
print("AI RUNNING") | |||||
currentTarget = evaluateClosestBall(target); | currentTarget = evaluateClosestBall(target); | ||||
--print("CLOSEST TARGET IS " .. currentTarget) | --print("CLOSEST TARGET IS " .. currentTarget) | ||||
if diff < 1200 then | if diff < 1200 then | ||||
@@ -11,7 +11,7 @@ function basegame(dt) | |||||
end | end | ||||
speedControl() | speedControl() | ||||
balancer() | balancer() | ||||
effectControl() | |||||
if t < shakeDuration then | if t < shakeDuration then | ||||
t = t + dt | t = t + dt | ||||
end | end | ||||
@@ -40,7 +40,7 @@ function basegame(dt) | |||||
--print(areanuclear .. striken .. player1score .. player2score) | --print(areanuclear .. striken .. player1score .. player2score) | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
if rules("p1hit", i) then | if rules("p1hit", i) then | ||||
print("inserted") | |||||
if (areanuclear == 0 and striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)) then | if (areanuclear == 0 and striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)) then | ||||
--print("Calling animation") | --print("Calling animation") | ||||
--print("AREA NUCLEAR?" .. areanuclear) | --print("AREA NUCLEAR?" .. areanuclear) | ||||
@@ -370,7 +370,7 @@ end | |||||
function goalManager() | function goalManager() | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
if (rules("p1miss", i)) then | |||||
if (rules("p1miss", i)) then | |||||
ball[i].disabled = true | ball[i].disabled = true | ||||
ball[i].x = 2000 | ball[i].x = 2000 | ||||
@@ -587,6 +587,8 @@ function nuclearDraw() | |||||
nuclearanimation / 3, | nuclearanimation / 3, | ||||
nuclearanimation / 3, | nuclearanimation / 3, | ||||
nuclearanimation / 3 | nuclearanimation / 3 | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
love.graphics.setColor(nuclearanimation / 3, nuclearanimation / 3, nuclearanimation / 3, 1) | love.graphics.setColor(nuclearanimation / 3, nuclearanimation / 3, nuclearanimation / 3, 1) | ||||
ball[i]:render("controlled") | ball[i]:render("controlled") | ||||
@@ -630,6 +632,10 @@ function normalDraw() | |||||
else | else | ||||
love.graphics.clear(40 / 255, 40 / 255, 40 / 255, 1) | love.graphics.clear(40 / 255, 40 / 255, 40 / 255, 1) | ||||
end | end | ||||
for i, explosion in ipairs(explosions) do | |||||
explosion:render() | |||||
print("exploding") | |||||
end | |||||
staticanimator() | staticanimator() | ||||
if MAP_TYPE == 1 then | if MAP_TYPE == 1 then | ||||
@@ -747,7 +753,6 @@ function menuDraw() | |||||
) | ) | ||||
) | ) | ||||
end | end | ||||
if not isAndroid then | |||||
table.insert( | table.insert( | ||||
IPselect, | IPselect, | ||||
newButton( | newButton( | ||||
@@ -761,7 +766,6 @@ function menuDraw() | |||||
end | end | ||||
) | ) | ||||
) | ) | ||||
end | |||||
table.insert( | table.insert( | ||||
IPselect, | IPselect, | ||||
newButton( | newButton( | ||||
@@ -848,6 +852,7 @@ function menuDraw() | |||||
end | end | ||||
function baseDraw() | function baseDraw() | ||||
love.graphics.clear(40 / 255, 40 / 255, 40 / 255, 1) | love.graphics.clear(40 / 255, 40 / 255, 40 / 255, 1) | ||||
if shakeDuration > t then | if shakeDuration > t then | ||||
local dx = love.math.random(-shakeMagnitude, shakeMagnitude) | local dx = love.math.random(-shakeMagnitude, shakeMagnitude) | ||||
@@ -867,6 +872,7 @@ function baseDraw() | |||||
menuDraw() | menuDraw() | ||||
end | end | ||||
end | end | ||||
if globalState == 'base' or globalState == 'reverse' or globalState == 'nettest' or globalState == 'clienttest' then | if globalState == 'base' or globalState == 'reverse' or globalState == 'nettest' or globalState == 'clienttest' then | ||||
love.graphics.setFont(smallfont) | love.graphics.setFont(smallfont) | ||||
@@ -892,6 +898,7 @@ function baseDraw() | |||||
mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, doneButtons, sounds, "middle") | mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, doneButtons, sounds, "middle") | ||||
love.keyboard.mouseisReleased = false | love.keyboard.mouseisReleased = false | ||||
end | end | ||||
end | end | ||||
function androidDraw() | function androidDraw() | ||||
--HOME BUTTON HERE | --HOME BUTTON HERE | ||||
@@ -1107,6 +1114,7 @@ function rules(query, i) | |||||
end | end | ||||
if query == "p1miss" then | if query == "p1miss" then | ||||
if gameMode == "reversegame" then | if gameMode == "reversegame" then | ||||
return ball[i]:collides(player1) | return ball[i]:collides(player1) | ||||
elseif gameMode == "normal" then | elseif gameMode == "normal" then | ||||
return ball[i].x < -10 and ball[i].disabled == false | return ball[i].x < -10 and ball[i].disabled == false | ||||
@@ -1132,7 +1140,7 @@ function clientsBaseGame(dt) | |||||
end | end | ||||
speedControl() | speedControl() | ||||
balancer() | balancer() | ||||
effectControl() | |||||
if t < shakeDuration then | if t < shakeDuration then | ||||
t = t + dt | t = t + dt | ||||
end | end | ||||
@@ -1163,7 +1171,7 @@ function clientsBaseGame(dt) | |||||
--print(areanuclear .. striken .. player1score .. player2score) | --print(areanuclear .. striken .. player1score .. player2score) | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
if rules("p1hit", i) then | if rules("p1hit", i) then | ||||
if (areanuclear == 0 and striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)) then | if (areanuclear == 0 and striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)) then | ||||
--print("Calling animation") | --print("Calling animation") | ||||
superanimator("tensehit", 1) | superanimator("tensehit", 1) | ||||
@@ -1471,7 +1479,7 @@ function menuDemo(dt) | |||||
AI(player1, maxBalls, 1300) | AI(player1, maxBalls, 1300) | ||||
player2.goal = 360 | player2.goal = 360 | ||||
end | end | ||||
print(neededTarget, neededTarget1) | |||||
--print(neededTarget, neededTarget1) | |||||
--print("menu demo active") | --print("menu demo active") | ||||
ball[1]:update(dt) | ball[1]:update(dt) | ||||
player1:update(dt) | player1:update(dt) | ||||
@@ -1568,4 +1576,19 @@ function menuDemo(dt) | |||||
ball[1].dy = -ball[1].dy | ball[1].dy = -ball[1].dy | ||||
end | end | ||||
end | |||||
function effectControl() | |||||
if player1score > 0.8 * ptw or player2score > 0.8 * ptw then | |||||
for i = 1, maxBalls do | |||||
if math.abs(ball[i].x - VIRTUAL_WIDTH/2) < 10 and #explosions < 1 then | |||||
table.insert(explosions, explosion(love.math.random(100, VIRTUAL_WIDTH-100), love.math.random(player1.y, player2.y), 100, {player1.y/2.81/255,player2.y/2.81/255,ball[1].y/2.81/255,0.4})) | |||||
end | |||||
end | |||||
end | |||||
for i, explosion in ipairs(explosions) do | |||||
if explosion.killed then | |||||
table.remove(explosions, i) | |||||
print("buried the body") | |||||
end | |||||
end | |||||
end | end |
@@ -13,5 +13,7 @@ require 'src/constantvars' | |||||
require 'src/menus' | require 'src/menus' | ||||
require 'src/AI' | require 'src/AI' | ||||
require 'src/reverseGame' | require 'src/reverseGame' | ||||
require 'explosion' | |||||
tick = require 'tick' | |||||
utf8 = require("utf8") | utf8 = require("utf8") | ||||
serialize = require 'ser' | serialize = require 'ser' |
@@ -0,0 +1,70 @@ | |||||
-- tick | |||||
-- https://github.com/bjornbytes/tick | |||||
-- MIT License | |||||
local tick = { | |||||
framerate = nil, | |||||
rate = .03, | |||||
timescale = 1, | |||||
sleep = .001, | |||||
dt = 0, | |||||
accum = 0, | |||||
tick = 1, | |||||
frame = 1 | |||||
} | |||||
local timer = love.timer | |||||
local graphics = love.graphics | |||||
love.run = function() | |||||
if not timer then | |||||
error('love.timer is required for tick') | |||||
end | |||||
if love.load then love.load(love.arg.parseGameArguments(arg), arg) end | |||||
timer.step() | |||||
local lastframe = 0 | |||||
love.update(0) | |||||
return function() | |||||
tick.dt = timer.step() * tick.timescale | |||||
tick.accum = tick.accum + tick.dt | |||||
while tick.accum >= tick.rate do | |||||
tick.accum = tick.accum - tick.rate | |||||
if love.event then | |||||
love.event.pump() | |||||
for name, a, b, c, d, e, f in love.event.poll() do | |||||
if name == 'quit' then | |||||
if not love.quit or not love.quit() then | |||||
return a or 0 | |||||
end | |||||
end | |||||
love.handlers[name](a, b, c, d, e, f) | |||||
end | |||||
end | |||||
tick.tick = tick.tick + 1 | |||||
if love.update then love.update(tick.rate) end | |||||
end | |||||
while tick.framerate and timer.getTime() - lastframe < 1 / tick.framerate do | |||||
timer.sleep(.0005) | |||||
end | |||||
lastframe = timer.getTime() | |||||
if graphics and graphics.isActive() then | |||||
graphics.origin() | |||||
graphics.clear(graphics.getBackgroundColor()) | |||||
tick.frame = tick.frame + 1 | |||||
if love.draw then love.draw() end | |||||
graphics.present() | |||||
end | |||||
timer.sleep(tick.sleep) | |||||
end | |||||
end | |||||
return tick |