Last active
August 29, 2015 14:26
-
-
Save snekse/40876802c29965f5b049 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dragSpeed = 12 //9 | |
team = '' | |
me = '' | |
myCircle = '' | |
ball = initBall().hide() | |
stampSize = 100 | |
ballSpeed = 1000 | |
playerSpeed = 1000 | |
meter = 100 | |
fill('soccer field') | |
bigDroid = stamp('droid',141,504,200).show() | |
bigApple = stamp('apple',610,504,200) | |
chooseASide = text('Choose a side',166,760,70,'white') | |
bigDroid.tap = sidePicked | |
bigApple.tap = sidePicked | |
//Hide big stamps, put player on a side | |
function sidePicked(){ | |
var x, y | |
//Moved to joinGame | |
//ball = stamp('soccerball',55) | |
bigDroid.hide() | |
bigApple.hide() | |
chooseASide.hide() | |
team = this.name | |
x= random(36,724) | |
if (team == 'droid'){ | |
y = random(100,450) | |
} else { | |
y = random(550,900) | |
} | |
me = stamp(team,x,y,stampSize) | |
initMe(team) | |
} | |
/* | |
Daddy's Code | |
*/ | |
t = text('', 680, 26, 35,'seagreen') | |
droidScore = 0 | |
appleScore = 0 | |
droidScoreDisplay = text(droidScore, 384, 60, 'yellow') | |
appleScoreDisplay = text(appleScore, 384, 985, 'yellow') | |
function initMe(team) { | |
me.uuid = guid() | |
me.life = meter | |
me.team = team | |
me.opponent = (team == 'droid') ? 'apple' : 'droid' | |
setHitboxes(me) | |
myCircle = stamp('joystick', me.x, me.y, 150) | |
joinGame(me) | |
frontLocal() | |
} | |
function initBall(x,y) { | |
if (x && y) | |
ball = stamp('soccerball',x, y,55) | |
else | |
ball = stamp('soccerball',55) | |
ball.wrap() | |
return ball | |
} | |
function touching() { | |
if (me == '') | |
return | |
aimAndMove(x,y) | |
//moveTowardsXY(x,y) | |
checkCollisions(me) | |
t.change(/*'Life: ' + */ me.life) | |
if(me.life<0) { | |
allGone() | |
touching = null | |
return | |
} | |
if (ball.hits(me)) { | |
kick(x,y) | |
} | |
frontLocal() | |
send({movePlayer:{uuid:me.uuid,x:me.x,y:me.y}}) | |
} | |
function aimAndMove(x,y) { | |
me.aim(x,y) | |
//me.rotate(180) | |
myCircle.aim(x,y) | |
speed = dragSpeed | |
me.move(UP,speed) | |
myCircle.move(UP,speed) | |
} | |
function kick(x,y) { | |
var kickSpeed = calcBallSpeed(x,y) | |
moveBall(x,y,kickSpeed) | |
send({ball:{x:x,y:y,speed:kickSpeed,kicker:me.uuid}}) | |
} | |
function calcBallSpeed(x,y) { | |
var kickSpeed = distance(ball,{x:x,y:y}) | |
if (kickSpeed < 100) | |
kickSpeed *=3 | |
else if (kickSpeed < 425) | |
kickSpeed *= 2 | |
else if (kickSpeed < 750) | |
kickSpeed *= 1.75 | |
else | |
kickSpeed *= 1.5 | |
return kickSpeed | |
} | |
function moveBall(x,y,kickSpeed) { | |
kickSpeed = kickSpeed || ballSpeed | |
ball.move(x,y,kickSpeed) | |
} | |
function allGone() { | |
send({gone:{uuid:me.uuid, team:me.name}}) | |
updateScore(me.name, 2) | |
myCircle.hide() | |
removeStamp(me) | |
myCircle = null | |
me = null | |
} | |
function removeStamp(s) { | |
s.explode() | |
} | |
function setHitboxes(s) { | |
s.hitWidth_ = 50 | |
s.hitHeight_ = 50 | |
} | |
function frontLocal() { | |
myCircle.front() | |
me.front() | |
ball.front() | |
} | |
function checkCollisions(s) { | |
collisions = s.hits(s.opponent) | |
if (collisions) { | |
s.life-- | |
} | |
} | |
function updateScore(sadTeam, pts) { | |
pts = pts || 1 | |
if (sadTeam == 'apple') | |
droidScore = droidScore + pts | |
else | |
appleScore = appleScore + pts | |
droidScoreDisplay.change(droidScore) | |
appleScoreDisplay.change(appleScore) | |
} | |
function guid() { | |
function s4() { | |
return Math.floor((1 + Math.random()) * 0x10000) | |
.toString(16) | |
.substring(1); | |
} | |
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + | |
s4() + '-' + s4() + s4() + s4(); | |
} | |
function PlayerManager() { | |
this.playerMap = {} | |
this.addPlayer = function(p) { | |
this.playerMap[p.uuid] = this.dispPlayer(p) | |
} | |
this.dispPlayer = function(p) { | |
var s = stamp(p.team, p.x, p.y, stampSize) | |
s.uuid = p.uuid | |
setHitboxes(s) | |
return s | |
} | |
this.getPlayer = function(uuid) { | |
return this.playerMap[uuid] | |
} | |
this.movePlayer = function(uuid, x, y) { | |
//movePlayerStamp(this.getPlayer(uuid),x,y) | |
this.getPlayer(uuid).move(x,y,dragSpeed) | |
} | |
this.removePlayer = function(uuid) { | |
removeStamp(this.playerMap[uuid]) | |
this.playerMap[uuid] = null | |
} | |
} | |
playerManager = new PlayerManager() | |
/* | |
* NETWORKING CODE | |
*/ | |
function stampLite(s) { | |
return {uuid:s.uuid, team:s.name, x:s.x, y:s.y} | |
} | |
function joinGame(p) { | |
//Get game already in progress | |
send({func:'getGameState'}) | |
setTimeout(function(){},1000) | |
//Add yourself to the map so you can answer which players in game | |
playerManager.playerMap[me.uuid] = me | |
var objToSend = stampLite(me) | |
//{uuid:me.uuid, team: me.team, x:me.x, y:me.y} | |
send({newPlayer:objToSend}) | |
if (ball == '') | |
initBall() | |
ball.show() | |
} | |
function onGetGameState() { | |
var playerList = [] | |
for (var key in playerManager.playerMap) { | |
if (playerManager.playerMap.hasOwnProperty(key)) { | |
playerList.push(stampLite(p[key])) | |
} | |
} | |
if (playerList.length) { | |
//Someone asked for game state and you have an answer | |
send({playerList:playerList, | |
ballLocation:{x:ball.x,y:ball.y}}) | |
} | |
} | |
function get(obj) { | |
console.log('Recv get message') | |
if (obj.func) { | |
switch(obj.func) { | |
case 'getGameState': | |
onGetGameState() | |
break; | |
default: | |
console.log('WARNING: Unhandled func of '+obj.method) | |
} | |
} else if (obj.playerList) { | |
obj.playerList.forEach(playerManager.addPlayer) | |
initBall(ballLocation.x, ballLocation.y) | |
} else if (obj.newPlayer) { | |
playerManager.addPlayer(obj.newPlayer) | |
} else if (obj.ball && obj.ball.kicker != me.uuid) { | |
moveBall(obj.ball.x, obj.ball.y, obj.ball.speed) | |
} else if (obj.movePlayer) { | |
var mp = obj.movePlayer | |
playerManager.movePlayer(mp.uuid, mp.x, mp.y) | |
} else if (obj.gone) { | |
playerManager.removePlayer(obj.gone.uuid) | |
updateScore(obj.gone.team) | |
} | |
} | |
droidNet = stamp('soccernet', 385,-5,175) | |
setHitboxes(droidNet) | |
appleNet = stamp('soccernet', 385,1030,175) | |
setHitboxes(appleNet) | |
appleNet.rotate(SOUTH) | |
function loop() { | |
ball.front() | |
var scored = false | |
if (ball.hits(droidNet)) { | |
updateScore('droid') | |
scored = true | |
} else if (ball.hits(appleNet)) { | |
updateScore('apple') | |
scored = true | |
} | |
if (scored) | |
ball.move(384,512) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment