Differential D3243 Diff 16556 ps/trunk/binaries/data/mods/public/gui/gamesetup/Controls/PlayerAssignmentsControl.js
Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/gui/gamesetup/Controls/PlayerAssignmentsControl.js
Show All 19 Lines | if (!g_IsNetworked) | ||||
g_PlayerAssignments = { | g_PlayerAssignments = { | ||||
"local": { | "local": { | ||||
"name": name, | "name": name, | ||||
"player": -1 | "player": -1 | ||||
} | } | ||||
}; | }; | ||||
} | } | ||||
g_GameSettings.playerCount.watch(() => this.unassignInvalidPlayers(), ["nbPlayers"]); | |||||
setupWindow.registerLoadHandler(this.onLoad.bind(this)); | setupWindow.registerLoadHandler(this.onLoad.bind(this)); | ||||
setupWindow.registerGetHotloadDataHandler(this.onGetHotloadData.bind(this)); | setupWindow.registerGetHotloadDataHandler(this.onGetHotloadData.bind(this)); | ||||
netMessages.registerNetMessageHandler("players", this.onPlayerAssignmentMessage.bind(this)); | netMessages.registerNetMessageHandler("players", this.onPlayerAssignmentMessage.bind(this)); | ||||
} | } | ||||
registerPlayerAssignmentsChangeHandler(handler) | registerPlayerAssignmentsChangeHandler(handler) | ||||
{ | { | ||||
this.playerAssignmentsChangeHandlers.add(handler); | this.playerAssignmentsChangeHandlers.add(handler); | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | onPlayerAssignmentMessage(message) | ||||
for (let guid in g_PlayerAssignments) | for (let guid in g_PlayerAssignments) | ||||
if (!newAssignments[guid]) | if (!newAssignments[guid]) | ||||
for (let handler of this.clientLeaveHandlers) | for (let handler of this.clientLeaveHandlers) | ||||
handler(guid); | handler(guid); | ||||
g_PlayerAssignments = newAssignments; | g_PlayerAssignments = newAssignments; | ||||
this.updatePlayerAssignments(); | this.updatePlayerAssignments(); | ||||
// Send at most one gameRegisterStanza after all handlers run in case a | // Send at most one gameRegisterStanza after all handlers run in case a | ||||
// joining observer has been assigned to a playerslot. | // joining observer has been assigned to a playerslot. | ||||
this.gameRegisterStanza.sendImmediately?.(); | this.gameRegisterStanza.sendImmediately?.(); | ||||
} | } | ||||
assignClient(guid, playerIndex) | assignClient(guid, playerIndex) | ||||
{ | { | ||||
g_GameSettings.playerAI.setAI(playerIndex - 1, undefined); | |||||
if (g_IsNetworked) | if (g_IsNetworked) | ||||
Engine.AssignNetworkPlayer(playerIndex, guid); | Engine.AssignNetworkPlayer(playerIndex, guid); | ||||
else | if (g_PlayerAssignments[guid]) | ||||
{ | |||||
g_PlayerAssignments[guid].player = playerIndex; | g_PlayerAssignments[guid].player = playerIndex; | ||||
this.updatePlayerAssignments(); | this.updatePlayerAssignments(); | ||||
} | } | ||||
} | |||||
/** | /** | ||||
* If both clients are assigned players, this will swap their assignments. | * If both clients are assigned players, this will swap their assignments. | ||||
*/ | */ | ||||
assignPlayer(guidToAssign, playerIndex) | assignPlayer(guidToAssign, playerIndex) | ||||
{ | { | ||||
if (g_PlayerAssignments[guidToAssign].player != -1) | if (g_PlayerAssignments[guidToAssign].player != -1) | ||||
{ | |||||
for (let guid in g_PlayerAssignments) | for (let guid in g_PlayerAssignments) | ||||
if (g_PlayerAssignments[guid].player == playerIndex + 1) | if (g_PlayerAssignments[guid].player == playerIndex + 1) | ||||
{ | { | ||||
this.assignClient(guid, g_PlayerAssignments[guidToAssign].player); | this.assignClient(guid, g_PlayerAssignments[guidToAssign].player); | ||||
break; | break; | ||||
} | } | ||||
} | |||||
this.assignClient(guidToAssign, playerIndex + 1); | this.assignClient(guidToAssign, playerIndex + 1); | ||||
if (!g_IsNetworked) | |||||
this.updatePlayerAssignments(); | |||||
} | } | ||||
unassignClient(playerID) | unassignClient(playerID) | ||||
{ | { | ||||
if (g_IsNetworked) | if (g_IsNetworked) | ||||
Engine.AssignNetworkPlayer(playerID, ""); | Engine.AssignNetworkPlayer(playerID, ""); | ||||
else if (g_PlayerAssignments.local.player == playerID) | else if (g_PlayerAssignments.local.player == playerID) | ||||
{ | { | ||||
g_PlayerAssignments.local.player = -1; | g_PlayerAssignments.local.player = -1; | ||||
this.updatePlayerAssignments(); | this.updatePlayerAssignments(); | ||||
} | } | ||||
} | } | ||||
unassignInvalidPlayers() | unassignInvalidPlayers() | ||||
{ | { | ||||
if (g_IsNetworked) | if (g_IsNetworked) | ||||
for (let playerID = g_GameAttributes.settings.PlayerData.length + 1; playerID <= g_MaxPlayers; ++playerID) | for (let playerID = g_GameSettings.playerCount.nbPlayers + 1; playerID <= g_MaxPlayers; ++playerID) | ||||
// Remove obsolete playerIDs from the servers playerassignments copy | // Remove obsolete playerIDs from the servers playerassignments copy | ||||
Engine.AssignNetworkPlayer(playerID, ""); | Engine.AssignNetworkPlayer(playerID, ""); | ||||
else if (g_PlayerAssignments.local.player > g_GameSettings.playerCount.nbPlayers) | |||||
else if (g_PlayerAssignments.local.player > g_GameAttributes.settings.PlayerData.length) | |||||
{ | { | ||||
g_PlayerAssignments.local.player = -1; | g_PlayerAssignments.local.player = -1; | ||||
this.updatePlayerAssignments(); | this.updatePlayerAssignments(); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
PlayerAssignmentsControl.prototype.ConfigNameSingleplayer = | PlayerAssignmentsControl.prototype.ConfigNameSingleplayer = | ||||
"playername.singleplayer"; | "playername.singleplayer"; |
Wildfire Games · Phabricator