Index: binaries/data/mods/public/maps/scenarios/pathfinding_integration_test.js =================================================================== --- /dev/null +++ binaries/data/mods/public/maps/scenarios/pathfinding_integration_test.js @@ -0,0 +1,144 @@ + +var QuickSpawn = function(x, z, template, owner = 1) +{ + let ent = Engine.AddEntity(template); + + let cmpEntOwnership = Engine.QueryInterface(ent, IID_Ownership); + if (cmpEntOwnership) + cmpEntOwnership.SetOwner(owner); + + let cmpEntPosition = Engine.QueryInterface(ent, IID_Position); + cmpEntPosition.JumpTo(x, z); + return ent; +}; + +var WalkTo = function(x, z, ents) +{ + ProcessCommand(1, { + "type": "walk", + "entities": Array.isArray(ents) ? ents : [ents], + "x": x, + "z": z, + "queued": false + }); +}; + +var experiments = {}; + +experiments["single_unit"] = { + "spawn": () => { + WalkTo(100, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["two_followers"] = { + "spawn": () => { + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 204, QuickSpawn(gx, 104, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["follow_faster"] = { + "spawn": () => { + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_cavalry_swordsman_a")); + WalkTo(gx, 204, QuickSpawn(gx, 104, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["group"] = { + "spawn": () => { + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx, 101, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx, 102, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+1, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+1, 101, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 102, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+3, 103, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx, 103, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+3, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+3, 101, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["single_unit_building"] = { + "spawn": () => { + QuickSpawn(gx, 140, "structures/athen_house") + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["single_unit_pass_nopass"] = { + "spawn": () => { + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + QuickSpawn(gx-10, 140, "structures/athen_house") + QuickSpawn(gx+10, 140, "structures/athen_house") + QuickSpawn(gx-8, 170, "structures/athen_house") + QuickSpawn(gx+8, 170, "structures/athen_house") + WalkTo(gx, 200, QuickSpawn(gx, 90, "units/athen_infantry_marine_archer_b")); + } +} + + +experiments["units_dense_forest"] = { + "spawn": () => { + WalkTo(gx, 200, QuickSpawn(gx, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx-2, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 102, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx-2, 100, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 102, "units/athen_infantry_marine_archer_b")); + for (let i = -16; i <= 16; i += 4) + for (let j = -16; j <= 16; j += 4) + QuickSpawn(gx+i, 150+j, "gaia/flora_tree_acacia", 0); + WalkTo(gx, 200, QuickSpawn(gx, 80, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx-2, 80, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 82, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx-2, 80, "units/athen_infantry_marine_archer_b")); + WalkTo(gx, 200, QuickSpawn(gx+2, 82, "units/athen_infantry_marine_archer_b")); + } +} + +experiments["units_sparse_forest"] = { + "spawn": () => { + gx += 10; + for (let i = -4; i <= 4; i += 2) + for (let j = -4; j <= 4; j += 2) + WalkTo(gx, 200, QuickSpawn(gx+i, 100+j, "units/athen_infantry_marine_archer_b")); + + for (let i = -16; i <= 16; i += 8) + for (let j = -16; j <= 16; j += 8) + QuickSpawn(gx+i, 150+j, "gaia/flora_tree_acacia", 0); + + for (let i = -4; i <= 4; i += 2) + for (let j = -4; j <= 4; j += 2) + WalkTo(gx, 200, QuickSpawn(gx+i, 80+j, "units/athen_infantry_marine_archer_b")); + } +} + + +experiments["units_running_into_eachoter"] = { + "spawn": () => { + for (let i = -4; i <= 4; i += 2) + for (let j = -4; j <= 4; j += 2) + WalkTo(gx, 200, QuickSpawn(gx+i, 100+j, "units/athen_infantry_marine_archer_b")); + for (let i = -4; i <= 4; i += 2) + for (let j = -4; j <= 4; j += 2) + WalkTo(gx, 100, QuickSpawn(gx+i, 200+j, "units/athen_infantry_marine_archer_b")); + } +} + +var gx = 100; + +Trigger.prototype.SetupUnits = function() +{ + for (let key in experiments) + { + experiments[key].spawn(); + gx += 40; + } +}; + + +var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); + +cmpTrigger.DoAfterDelay(3000, "SetupUnits", {}); Index: binaries/data/mods/public/maps/scenarios/pathfinding_integration_test.xml =================================================================== --- /dev/null +++ binaries/data/mods/public/maps/scenarios/pathfinding_integration_test.xml @@ -0,0 +1,63 @@ + + + + + + default + + + + + + + + ocean + + 5 + 4.0 + 0.45 + + + + + + + + + + + + + + 2 + + + +