Resources = {
"BuildSchema": () => {
let schema = "";
for (let res of ["food", "metal"])
{
for (let subtype in ["meat", "grain"])
schema += "" + res + "." + subtype + "";
schema += " treasure." + res + "";
}
return "" + schema + "";
}
};
Engine.LoadHelperScript("Player.js");
Engine.LoadComponentScript("interfaces/StatisticsTracker.js");
Engine.LoadComponentScript("interfaces/Treasure.js");
Engine.LoadComponentScript("interfaces/Trigger.js");
Engine.LoadComponentScript("Treasure.js");
Engine.LoadComponentScript("Trigger.js");
Engine.RegisterGlobal("ApplyValueModificationsToEntity", (prop, oVal, ent) => oVal);
ConstructComponent(SYSTEM_ENTITY, "Trigger", {});
const entity = 11;
let treasurer = 12;
let treasurerOwner = 1;
let cmpTreasure = ConstructComponent(entity, "Treasure", {
"CollectTime": "1000",
"Resources": {
"Food": "10"
}
});
cmpTreasure.OnOwnershipChanged({ "to": 0 });
TS_ASSERT(!cmpTreasure.Reward(treasurer));
AddMock(treasurer, IID_Ownership, {
"GetOwner": () => treasurerOwner
});
AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
"GetPlayerByID": (id) => treasurerOwner
});
let cmpPlayer = AddMock(treasurerOwner, IID_Player, {
"AddResources": (type, amount) => {},
"GetPlayerID": () => treasurerOwner
});
let spy = new Spy(cmpPlayer, "AddResources");
TS_ASSERT(cmpTreasure.Reward(treasurer));
TS_ASSERT_EQUALS(spy._called, 1);
// Don't allow collecting twice.
TS_ASSERT(!cmpTreasure.Reward(treasurer));
TS_ASSERT_EQUALS(spy._called, 1);