Properly handle wonder victory messages after a player has won.

Patch by Sandarac, reviewed by elexis, fixes #4010

This was SVN commit r18514.
This commit is contained in:
Itms 2016-07-13 06:51:59 +00:00
parent d29806ff2d
commit ced8ceed47
2 changed files with 31 additions and 0 deletions

View file

@ -28,8 +28,13 @@ Trigger.prototype.CheckWonderVictory = function(data)
// Add -1 to notify observers too
let players = [-1];
for (let i = 1; i < numPlayers; ++i)
{
let cmpPlayer = QueryPlayerIDInterface(i);
if (cmpPlayer.GetState() == "won")
return;
if (i != data.to)
players.push(i);
}
let cmpPlayer = QueryOwnerInterface(ent, IID_Player);
let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
@ -58,7 +63,21 @@ Trigger.prototype.CheckWonderVictory = function(data)
this.wonderVictoryMessages[ent] = messages;
};
Trigger.prototype.DeleteMessages = function(ent)
{
let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
for (let ent in this.wonderVictoryMessages)
{
cmpGuiInterface.DeleteTimeNotification(this.wonderVictoryMessages[ent].ownMessage);
cmpGuiInterface.DeleteTimeNotification(this.wonderVictoryMessages[ent].otherMessage);
cmpTimer.CancelTimer(this.wonderVictoryTimers[ent]);
}
};
var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true });
cmpTrigger.RegisterTrigger("OnPlayerWon", "DeleteMessages", { "enabled": true });
cmpTrigger.wonderVictoryTimers = {};
cmpTrigger.wonderVictoryMessages = {};

View file

@ -14,6 +14,8 @@ Trigger.prototype.eventNames =
"Interval",
"OwnershipChanged",
"PlayerCommand",
"PlayerDefeated",
"PlayerWon",
"Range",
"ResearchFinished",
"ResearchQueued",
@ -253,6 +255,16 @@ Trigger.prototype.OnGlobalOwnershipChanged = function(msg)
// data is {"entity": ent, "from": playerId, "to": playerId}
};
Trigger.prototype.OnGlobalPlayerDefeated = function(msg)
{
this.CallEvent("PlayerDefeated", msg);
};
Trigger.prototype.OnGlobalPlayerWon = function(msg)
{
this.CallEvent("PlayerWon", msg);
};
/**
* Execute a function after a certain delay.
*