Skip to content

Instantly share code, notes, and snippets.

@snekse
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snekse/40876802c29965f5b049 to your computer and use it in GitHub Desktop.
Save snekse/40876802c29965f5b049 to your computer and use it in GitHub Desktop.
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