86 lines
2.5 KiB
CoffeeScript
86 lines
2.5 KiB
CoffeeScript
class Teams extends Backbone.Collection
|
|
model: Team
|
|
|
|
class @Battle extends Backbone.AssociatedModel
|
|
relations: [
|
|
type: Backbone.Many
|
|
key: 'teams'
|
|
relatedModel: Team
|
|
collectionType: Teams
|
|
]
|
|
|
|
defaults:
|
|
spectating: true
|
|
finished: false
|
|
|
|
_.extend(this.prototype, PokeBattle.mixins.BattleProtocolParser)
|
|
|
|
initialize: (attributes) =>
|
|
@updateQueue = []
|
|
{@numActive, spectators} = attributes
|
|
@spectators = new UserList(spectators) unless !spectators
|
|
@set('generation', Formats[@get('format')].generation)
|
|
@set('notifications', 0)
|
|
@set('turn', 0)
|
|
@set('teams', [{hidden: true}, {hidden: true}])
|
|
@set('spectating', !@has('index'))
|
|
@set('index', Math.floor(2 * Math.random())) unless @has('index')
|
|
|
|
receiveTeams: (receivedTeams) =>
|
|
teams = @get('teams')
|
|
for receivedTeam, i in receivedTeams
|
|
receivedTeam.hidden = true
|
|
team = teams.at(i)
|
|
team.set(receivedTeam) if team.get('hidden')
|
|
|
|
receiveTeam: (team) =>
|
|
teams = @get('teams')
|
|
teams.at(@get('index')).unset('hidden', silent: true).set(team)
|
|
|
|
makeMove: (moveName, forSlot, callback) =>
|
|
pokemon = @getPokemon(@get('index'), forSlot)
|
|
options = {}
|
|
options['megaEvolve'] = pokemon.get('megaEvolve') if pokemon.get('megaEvolve')
|
|
PokeBattle.primus.send(
|
|
'sendMove', @id, moveName, forSlot,
|
|
@get('turn'), options, callback,
|
|
)
|
|
|
|
makeSwitch: (toSlot, forSlot, callback) =>
|
|
PokeBattle.primus.send(
|
|
'sendSwitch', @id, toSlot, forSlot, @get('turn'), callback
|
|
)
|
|
|
|
makeCancel: =>
|
|
PokeBattle.primus.send 'sendCancelAction', @id, @get('turn')
|
|
|
|
arrangeTeam: (arrangement) =>
|
|
PokeBattle.primus.send 'arrangeTeam', @id, arrangement
|
|
|
|
switch: (fromIndex, toIndex) =>
|
|
you = @getTeam().pokemon
|
|
[you[fromIndex], you[toIndex]] = [you[toIndex], you[fromIndex]]
|
|
|
|
getTeam: (playerIndex = @get('index')) =>
|
|
@get("teams").at(playerIndex)
|
|
|
|
getOpponentTeam: (playerIndex = @get('index')) =>
|
|
@get("teams").at(1 - playerIndex)
|
|
|
|
getPokemon: (playerIndex, slot = 0) =>
|
|
team = @getTeam(playerIndex)
|
|
team.at(slot)
|
|
|
|
isPlaying: =>
|
|
!@get('finished') && !@get('spectating')
|
|
|
|
forfeit: =>
|
|
PokeBattle.primus.send('forfeit', @id)
|
|
|
|
# TODO: Opponent switch. Use some logic to determine whether the switch is
|
|
# to a previously seen Pokemon or a new Pokemon. In the latter case, we
|
|
# should reveal a previously unknown Pokeball if it's not a Wi-Fi battle.
|
|
|
|
notify: =>
|
|
@set('notifications', @get('notifications') + 1)
|