forked from 0ad/0ad
Fix typo in CanTrade
.
Introduced in c917c39a0d
.
Reported by @gameboy at
https://wildfiregames.com/forum/topic/107586-an-error-occurred/?do=findComment&comment=553753.
Also adds a small test.
Differential revision: https://code.wildfiregames.com/D5060
Reviewed by: @wraitii
This was SVN commit r27737.
This commit is contained in:
parent
435d842bc1
commit
ce25351443
@ -167,24 +167,23 @@ Trader.prototype.HasBothMarkets = function()
|
||||
|
||||
Trader.prototype.CanTrade = function(target)
|
||||
{
|
||||
let cmpTraderIdentity = Engine.QueryInterface(this.entity, IID_Identity);
|
||||
|
||||
let cmpTargetMarket = QueryMiragedInterface(target, IID_Market);
|
||||
const cmpTargetMarket = QueryMiragedInterface(target, IID_Market);
|
||||
if (!cmpTargetMarket)
|
||||
return false;
|
||||
|
||||
let cmpTargetFoundation = Engine.QueryInterface(target, IID_Foundation);
|
||||
const cmpTargetFoundation = Engine.QueryInterface(target, IID_Foundation);
|
||||
if (cmpTargetFoundation)
|
||||
return false;
|
||||
|
||||
const cmpTraderIdentity = Engine.QueryInterface(this.entity, IID_Identity);
|
||||
if (!(cmpTraderIdentity.HasClass("Organic") && cmpTargetMarket.HasType("land")) &&
|
||||
!(cmpTraderIdentity.HasClass("Ship") && cmpTargetMarket.HasType("naval")))
|
||||
return false;
|
||||
|
||||
let cmpTraderDiplomacy = QueryOwnerInterface(this.entity, IID_Diplomacy);
|
||||
let cmpTargetPlayer = QueryOwnerInterface(target, IID_Player);
|
||||
const cmpTraderDiplomacy = QueryOwnerInterface(this.entity, IID_Diplomacy);
|
||||
const cmpTargetPlayer = QueryOwnerInterface(target, IID_Player);
|
||||
|
||||
return cmpTraderPlayer && cmpTargetPlayer && !cmpTraderDiplomacy.IsEnemy(cmpTargetPlayer.GetPlayerID());
|
||||
return cmpTraderDiplomacy && cmpTargetPlayer && !cmpTraderDiplomacy.IsEnemy(cmpTargetPlayer.GetPlayerID());
|
||||
};
|
||||
|
||||
Trader.prototype.AddResources = function(ent, gain)
|
||||
|
@ -0,0 +1,96 @@
|
||||
Engine.LoadComponentScript("interfaces/Diplomacy.js");
|
||||
Engine.LoadComponentScript("interfaces/Foundation.js");
|
||||
Engine.LoadComponentScript("interfaces/Market.js");
|
||||
Engine.LoadComponentScript("interfaces/Trader.js");
|
||||
Engine.LoadComponentScript("Trader.js");
|
||||
Engine.LoadHelperScript("Player.js");
|
||||
|
||||
const player = 1;
|
||||
const enemy = 2;
|
||||
const ally = 3;
|
||||
const trader = 5;
|
||||
const ownMarket = 6;
|
||||
const otherMarket = 7;
|
||||
|
||||
AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|
||||
"GetPlayerByID": (i) => i
|
||||
});
|
||||
|
||||
const cmpTrader = ConstructComponent(trader, "Trader", {
|
||||
"GainMultiplier": 0.8,
|
||||
"GarrisonGainMultiplier": 0.2
|
||||
});
|
||||
|
||||
AddMock(trader, IID_Identity, {
|
||||
"HasClass": (cls) => cls === "Organic",
|
||||
});
|
||||
|
||||
AddMock(ownMarket, IID_Market, {
|
||||
"HasType": (t) => t === "land"
|
||||
});
|
||||
|
||||
AddMock(trader, IID_Ownership, {
|
||||
"GetOwner": () => player
|
||||
});
|
||||
|
||||
AddMock(ownMarket, IID_Ownership, {
|
||||
"GetOwner": () => player
|
||||
});
|
||||
|
||||
AddMock(player, IID_Player, {
|
||||
"GetPlayerID": () => player,
|
||||
});
|
||||
|
||||
AddMock(player, IID_Diplomacy, {
|
||||
"IsEnemy": (id) => id === enemy,
|
||||
});
|
||||
|
||||
TS_ASSERT(cmpTrader.CanTrade(ownMarket));
|
||||
|
||||
// We can't trade with our enemy.
|
||||
AddMock(enemy, IID_Player, {
|
||||
"GetPlayerID": () => enemy,
|
||||
});
|
||||
|
||||
AddMock(otherMarket, IID_Ownership, {
|
||||
"GetOwner": () => enemy
|
||||
});
|
||||
|
||||
AddMock(otherMarket, IID_Market, {
|
||||
"HasType": (t) => t === "land"
|
||||
});
|
||||
|
||||
TS_ASSERT(!cmpTrader.CanTrade(otherMarket));
|
||||
|
||||
// But can with our ally.
|
||||
AddMock(ally, IID_Player, {
|
||||
"GetPlayerID": () => ally,
|
||||
});
|
||||
|
||||
AddMock(otherMarket, IID_Ownership, {
|
||||
"GetOwner": () => ally
|
||||
});
|
||||
|
||||
TS_ASSERT(cmpTrader.CanTrade(otherMarket));
|
||||
|
||||
// Land traders shouldn't try to trade with naval-only markets.
|
||||
AddMock(trader, IID_Identity, {
|
||||
"HasClass": (cls) => cls === "Organic",
|
||||
});
|
||||
|
||||
AddMock(ownMarket, IID_Market, {
|
||||
"HasType": (t) => t === "naval"
|
||||
});
|
||||
|
||||
TS_ASSERT(!cmpTrader.CanTrade(ownMarket));
|
||||
|
||||
// And Ships shouldn't try to trade with land markets.
|
||||
AddMock(trader, IID_Identity, {
|
||||
"HasClass": (cls) => cls === "Ship",
|
||||
});
|
||||
|
||||
AddMock(ownMarket, IID_Market, {
|
||||
"HasType": (t) => t === "land"
|
||||
});
|
||||
|
||||
TS_ASSERT(!cmpTrader.CanTrade(ownMarket));
|
Loading…
Reference in New Issue
Block a user