mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
Fixed a few issues with real-time multiplayer flags.
This commit is contained in:
parent
b698200cf0
commit
d3eb7a7438
6 changed files with 22 additions and 12 deletions
|
@ -334,7 +334,7 @@ module.exports = class SpriteBoss extends CocoClass
|
|||
|
||||
onFlagUpdated: (e) ->
|
||||
return unless e.active
|
||||
pendingFlag = new FlagSprite @thangTypeFor('Flag'), @createSpriteOptions(thangID: 'Pending Flag ' + Math.random(), color: e.color, team: me.team, isCursor: false, pos: e.pos)
|
||||
pendingFlag = new FlagSprite @thangTypeFor('Flag'), @createSpriteOptions(thangID: 'Pending Flag ' + Math.random(), color: e.color, team: e.team, isCursor: false, pos: e.pos)
|
||||
@addSprite pendingFlag, pendingFlag.thang.id, @spriteLayers['Floating']
|
||||
@pendingFlags.push pendingFlag
|
||||
|
||||
|
|
|
@ -5,10 +5,10 @@ module.exports =
|
|||
session: {type: 'object'}
|
||||
|
||||
'real-time-multiplayer:left-game': c.object {title: 'Multiplayer left game'}
|
||||
|
||||
|
||||
'real-time-multiplayer:manual-cast': c.object {title: 'Multiplayer manual cast'}
|
||||
|
||||
|
||||
'real-time-multiplayer:new-opponent-code': c.object {title: 'Multiplayer new opponent code', required: ['code', 'codeLanguage']},
|
||||
code: {type: 'object'}
|
||||
codeLanguage: {type: 'string'}
|
||||
|
||||
team: {type: 'string'}
|
||||
|
|
|
@ -180,5 +180,5 @@ module.exports = # /app/lib/surface
|
|||
|
||||
'surface:remove-selected-flag': c.object {}
|
||||
|
||||
'surface:remove-flag': c.object {required: 'color'},
|
||||
'surface:remove-flag': c.object {required: ['color']},
|
||||
color: {type: 'string'}
|
||||
|
|
|
@ -3,6 +3,8 @@ template = require 'templates/play/level/level-flags-view'
|
|||
{me} = require 'lib/auth'
|
||||
RealTimeCollection = require 'collections/RealTimeCollection'
|
||||
|
||||
multiplayerFlagDelay = 0.5 # Long, static second delay for now; should be more than enough.
|
||||
|
||||
module.exports = class LevelFlagsView extends CocoView
|
||||
id: 'level-flags-view'
|
||||
template: template
|
||||
|
@ -54,7 +56,9 @@ module.exports = class LevelFlagsView extends CocoView
|
|||
onStageMouseDown: (e) ->
|
||||
return unless @flagColor and @realTime
|
||||
pos = x: e.worldPos.x, y: e.worldPos.y
|
||||
flag = player: me.id, team: me.team, color: @flagColor, pos: pos, time: @world.dt * @world.frames.length, active: true
|
||||
delay = if @realTimeFlags then multiplayerFlagDelay else 0
|
||||
now = @world.dt * @world.frames.length
|
||||
flag = player: me.id, team: me.team, color: @flagColor, pos: pos, time: now + delay, active: true
|
||||
@flags[@flagColor] = flag
|
||||
@flagHistory.push flag
|
||||
@realTimeFlags?.create flag
|
||||
|
@ -67,7 +71,9 @@ module.exports = class LevelFlagsView extends CocoView
|
|||
|
||||
onRemoveFlag: (e) ->
|
||||
delete @flags[e.color]
|
||||
flag = player: me.id, team: me.team, color: e.color, time: @world.dt * @world.frames.length, active: false
|
||||
delay = if @realTimeFlags then multiplayerFlagDelay else 0
|
||||
now = @world.dt * @world.frames.length
|
||||
flag = player: me.id, team: me.team, color: e.color, time: now + delay, active: false
|
||||
@flagHistory.push flag
|
||||
Backbone.Mediator.publish 'level:flag-updated', flag
|
||||
#console.log e.color, 'deleted at time', flag.time
|
||||
|
@ -79,6 +85,7 @@ module.exports = class LevelFlagsView extends CocoView
|
|||
onJoinedMultiplayerGame: (e) ->
|
||||
@realTimeFlags = new RealTimeCollection('multiplayer_level_sessions/' + e.session.id + '/flagHistory')
|
||||
@realTimeFlags.on 'add', @onRealTimeMultiplayerFlagAdded
|
||||
@realTimeFlags.on 'remove', @onRealTimeMultiplayerFlagRemoved
|
||||
|
||||
onLeftMultiplayerGame: (e) ->
|
||||
if @realTimeFlags
|
||||
|
@ -98,3 +105,5 @@ module.exports = class LevelFlagsView extends CocoView
|
|||
active: e.get('active')
|
||||
@flagHistory.push flag
|
||||
Backbone.Mediator.publish 'level:flag-updated', flag
|
||||
|
||||
onRealTimeMultiplayerFlagRemoved: (e) =>
|
||||
|
|
|
@ -619,6 +619,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
myPlayer.set 'code', @session.get('code')
|
||||
myPlayer.set 'codeLanguage', @session.get('codeLanguage')
|
||||
myPlayer.set 'state', 'submitted'
|
||||
myPlayer.set 'team', me.team
|
||||
else
|
||||
console.error 'Did not find my player in onRealTimeMultiplayerCast'
|
||||
if opponentPlayer
|
||||
|
@ -636,7 +637,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
|
||||
onOpponentSubmitted: (opponentPlayer, myPlayer) =>
|
||||
# Save opponent's code
|
||||
Backbone.Mediator.publish 'real-time-multiplayer:new-opponent-code', {codeLanguage: opponentPlayer.get('codeLanguage'), code: opponentPlayer.get('code')}
|
||||
Backbone.Mediator.publish 'real-time-multiplayer:new-opponent-code', {codeLanguage: opponentPlayer.get('codeLanguage'), code: opponentPlayer.get('code'), team: opponentPlayer.get('team')}
|
||||
# I'm ready to rumble
|
||||
myPlayer.set 'state', 'ready'
|
||||
if opponentPlayer.get('state') is 'ready'
|
||||
|
|
|
@ -164,11 +164,11 @@ module.exports = class Spell
|
|||
false
|
||||
|
||||
onNewOpponentCode: (e) =>
|
||||
return unless @spellKey
|
||||
return unless @spellKey and @canWrite e.team
|
||||
if e.codeLanguage and e.code
|
||||
spellkeyComponents = @spellKey.split '/'
|
||||
if e.code[spellkeyComponents[0]]?[spellkeyComponents[1]]
|
||||
@source = e.code[spellkeyComponents[0]][spellkeyComponents[1]]
|
||||
[thangSlug, methodSlug] = @spellKey.split '/'
|
||||
if opponentCode = e.code[thangSlug]?[methodSlug]
|
||||
@source = opponentCode
|
||||
@updateLanguageAether e.codeLanguage
|
||||
else
|
||||
console.error 'Spell onNewOpponentCode did not receive code', e
|
||||
|
|
Loading…
Reference in a new issue