Differential D2400 Diff 10256 binaries/data/mods/public/simulation/components/tests/test_ResourceTrickle.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/tests/test_ResourceTrickle.js
- This file was added.
Resources = { | |||||
"GetCodes": () => ["food", "metal", "stone", "wood"], | |||||
"GetTradableCodes": () => ["food", "metal", "stone", "wood"], | |||||
Freagarach: You can use two or three resources for testing.
Also, are the below functions necessary? | |||||
Done Inline ActionsOnly BuildSchema is Stan: Only BuildSchema is | |||||
Done Inline Actions
Yes would also have been a valid answer ;) Freagarach: > Also, are the below functions necessary?
Yes would also have been a valid answer ;) | |||||
"GetBarterableCodes": () => ["food", "metal", "stone", "wood"], | |||||
"GetResource": () => ({}), | |||||
"BuildSchema": (type) => { | |||||
let schema = ""; | |||||
for (let res of Resources.GetCodes()) | |||||
schema += | |||||
"<optional>" + | |||||
"<element name='" + res + "'>" + | |||||
"<ref name='" + type + "'/>" + | |||||
"</element>" + | |||||
"</optional>"; | |||||
return "<interleave>" + schema + "</interleave>"; | |||||
Done Inline Actionsindent? bb: indent? | |||||
} | |||||
}; | |||||
Engine.LoadComponentScript("interfaces/ResourceTrickle.js"); | |||||
Engine.LoadComponentScript("interfaces/Timer.js"); | |||||
Engine.LoadComponentScript("interfaces/Player.js"); | |||||
Engine.LoadComponentScript("Player.js"); | |||||
Engine.LoadComponentScript("ResourceTrickle.js"); | |||||
Engine.LoadComponentScript("Timer.js"); | |||||
let ApplyValueModificationsToEntity = (valueName, currentValue, entity) => currentValue; | |||||
Engine.RegisterGlobal("ApplyValueModificationsToEntity", ApplyValueModificationsToEntity); | |||||
let wonderEnt = 1; | |||||
let turnLength = 0.2; | |||||
let cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer", {}); | |||||
let cmpResourceTrickle = ConstructComponent(wonderEnt, "ResourceTrickle", { | |||||
Done Inline ActionsComment not necessary. Freagarach: Comment not necessary. | |||||
"Interval": "200", | |||||
"Rates": { | |||||
Done Inline Actionsthe timer tests seem to miss that last argument => note to self: fix it bb: the timer tests seem to miss that last argument => note to self: fix it | |||||
"food": "0.0", | |||||
"metal": "0.0" | |||||
} | |||||
}); | |||||
let cmpPlayer = ConstructComponent(10, "Player", { | |||||
Done Inline Actionstrailing 0 bb: trailing 0 | |||||
"SpyCostMultiplier": 1, | |||||
"BarterMultiplier": { | |||||
"Buy": { | |||||
"wood": 1.0, | |||||
Done Inline ActionsplayerID? Freagarach: playerID? | |||||
"stone": 1.0, | |||||
Done Inline ActionsThese and cmpPlayer.GetResourceCounts() below can be updated. Freagarach: These and `cmpPlayer.GetResourceCounts()` below can be updated. | |||||
"metal": 1.0 | |||||
}, | |||||
"Sell": { | |||||
Done Inline Actionstrailing 0, didn't you like strings? bb: trailing 0, didn't you like strings? | |||||
"wood": 1.0, | |||||
"stone": 1.0, | |||||
"metal": 1.0 | |||||
} | |||||
}, | |||||
}); | |||||
let QueryOwnerInterface = () => cmpPlayer; | |||||
Engine.RegisterGlobal("QueryOwnerInterface", QueryOwnerInterface); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpPlayer.GetResourceCounts(), { "food": 300, "metal": 300, "stone": 300, "wood": 300 }); | |||||
TS_ASSERT_EQUALS(cmpResourceTrickle.GetTimer(), 200); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpResourceTrickle.GetRates(), {}); | |||||
TS_ASSERT_EQUALS(cmpResourceTrickle.ComputeRates(), false); | |||||
cmpTimer.OnUpdate({ "turnLength": turnLength }); | |||||
ApplyValueModificationsToEntity = (valueName, currentValue, entity) => { | |||||
Done Inline Actions\n Since there is no rate > 0, nothing should change. And one can discard L62 and L66. Freagarach: ```
\n
Since there is no rate > 0, nothing should change.
```
And one can discard L62 and L66. | |||||
if (valueName == "ResourceTrickle/Rates/food") | |||||
return currentValue + 1; | |||||
return currentValue; | |||||
}; | |||||
Engine.RegisterGlobal("ApplyValueModificationsToEntity", ApplyValueModificationsToEntity); | |||||
Done Inline Actions\n Test that only trickling food works. And one can discard L68 and L80. Freagarach: ```
\n
Test that only trickling food works.
```
And one can discard L68 and L80. | |||||
cmpResourceTrickle.OnValueModification({ "component": "ResourceTrickle" }); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpResourceTrickle.GetRates(), { "food": 1 }); | |||||
cmpTimer.OnUpdate({ "turnLength": turnLength }); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpPlayer.GetResourceCounts(), { "food": 301, "metal": 300, "stone": 300, "wood": 300 }); | |||||
TS_ASSERT_EQUALS(cmpResourceTrickle.ComputeRates(), true); | |||||
ApplyValueModificationsToEntity = (valueName, currentValue, entity) => currentValue; | |||||
Engine.RegisterGlobal("ApplyValueModificationsToEntity", ApplyValueModificationsToEntity); | |||||
cmpResourceTrickle.OnValueModification({ "component": "ResourceTrickle" }); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpResourceTrickle.GetRates(), {}); | |||||
TS_ASSERT_EQUALS(cmpResourceTrickle.ComputeRates(), false); | |||||
cmpTimer.OnUpdate({ "turnLength": turnLength }); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpPlayer.GetResourceCounts(), { "food": 301, "metal": 300, "stone": 300, "wood": 300 }); | |||||
Done Inline ActionsComment not necessary. Freagarach: Comment not necessary. | |||||
Done Inline ActionsComment not necessary. Freagarach: Comment not necessary. | |||||
Done Inline Actions+\n Freagarach: +`\n` |
Wildfire Games · Phabricator
You can use two or three resources for testing.
Also, are the below functions necessary?