Index: ps/trunk/binaries/data/mods/public/globalscripts/Templates.js =================================================================== --- ps/trunk/binaries/data/mods/public/globalscripts/Templates.js +++ ps/trunk/binaries/data/mods/public/globalscripts/Templates.js @@ -437,10 +437,12 @@ if (template.UnitMotion) { + const walkSpeed = getEntityValue("UnitMotion/WalkSpeed"); ret.speed = { - "walk": getEntityValue("UnitMotion/WalkSpeed"), + "walk": walkSpeed, + "run": walkSpeed, + "acceleration": getEntityValue("UnitMotion/Acceleration") }; - ret.speed.run = getEntityValue("UnitMotion/WalkSpeed"); if (template.UnitMotion.RunMultiplier) ret.speed.run *= getEntityValue("UnitMotion/RunMultiplier"); } Index: ps/trunk/binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/common/tooltips.js +++ ps/trunk/binaries/data/mods/public/gui/common/tooltips.js @@ -1005,12 +1005,13 @@ if (!template.speed) return ""; - let walk = template.speed.walk.toFixed(1); - let run = template.speed.run.toFixed(1); + const walk = template.speed.walk.toFixed(1); + const run = template.speed.run.toFixed(1); if (walk == 0 && run == 0) return ""; + const acceleration = template.speed.acceleration.toFixed(1); return sprintf(translate("%(label)s %(speeds)s"), { "label": headerFont(translate("Speed:")), "speeds": @@ -1022,6 +1023,11 @@ sprintf(translate("%(speed)s %(movementType)s"), { "speed": run, "movementType": unitFont(translate("Run")) + }) + + commaFont(translate(", ")) + + sprintf(translate("%(speed)s %(movementType)s"), { + "speed": acceleration, + "movementType": unitFont(translate("Acceleration")) }) }); } Index: ps/trunk/binaries/data/mods/public/simulation/components/Formation.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/Formation.js +++ ps/trunk/binaries/data/mods/public/simulation/components/Formation.js @@ -895,17 +895,22 @@ { let maxRadius = 0; let minSpeed = Infinity; + let minAcceleration = Infinity; for (let ent of this.members) { let cmpUnitMotion = Engine.QueryInterface(ent, IID_UnitMotion); if (cmpUnitMotion) + { minSpeed = Math.min(minSpeed, cmpUnitMotion.GetWalkSpeed()); + minAcceleration = Math.min(minAcceleration, cmpUnitMotion.GetAcceleration()); + } } minSpeed *= this.GetSpeedMultiplier(); let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); cmpUnitMotion.SetSpeedMultiplier(minSpeed / cmpUnitMotion.GetWalkSpeed()); + cmpUnitMotion.SetAcceleration(minAcceleration); }; Formation.prototype.ShapeUpdate = function() Index: ps/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js +++ ps/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -585,7 +585,8 @@ if (cmpUnitMotion) ret.speed = { "walk": cmpUnitMotion.GetWalkSpeed(), - "run": cmpUnitMotion.GetWalkSpeed() * cmpUnitMotion.GetRunMultiplier() + "run": cmpUnitMotion.GetWalkSpeed() * cmpUnitMotion.GetRunMultiplier(), + "acceleration": cmpUnitMotion.GetAcceleration() }; let cmpUpkeep = Engine.QueryInterface(ent, IID_Upkeep); Index: ps/trunk/binaries/data/mods/public/simulation/components/UnitMotionFlying.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/UnitMotionFlying.js +++ ps/trunk/binaries/data/mods/public/simulation/components/UnitMotionFlying.js @@ -345,6 +345,16 @@ return this.speed / +this.template.MaxSpeed; }; +UnitMotionFlying.prototype.GetAcceleration = function() +{ + return +this.template.AccelRate; +}; + +UnitMotionFlying.prototype.SetAcceleration = function() +{ + // Acceleration is set by the template. Ignore. +}; + UnitMotionFlying.prototype.GetPassabilityClassName = function() { return this.template.PassabilityClass; Index: ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js +++ ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js @@ -94,6 +94,7 @@ "MoveToTargetRange": () => true, "GetRunMultiplier": () => 1, "SetSpeedMultiplier": () => {}, + "GetAcceleration": () => 1, "StopMoving": () => {} }); @@ -168,6 +169,7 @@ AddMock(unit, IID_UnitMotion, { "GetWalkSpeed": () => 1, + "GetAcceleration": () => 1, "MoveToFormationOffset": (target, x, z) => {}, "MoveToTargetRange": (target, min, max) => true, "SetMemberOfFormation": () => {}, @@ -243,6 +245,7 @@ "GetWalkSpeed": () => 1, "StopMoving": () => {}, "SetSpeedMultiplier": () => {}, + "SetAcceleration": (accel) => {}, "MoveToPointRange": () => true, "SetFacePointAfterMove": () => {}, "GetFacePointAfterMove": () => true, @@ -348,6 +351,7 @@ AddMock(unit + i, IID_UnitMotion, { "GetWalkSpeed": () => 1, + "GetAcceleration": () => 1, "MoveToFormationOffset": (target, x, z) => {}, "MoveToTargetRange": (target, min, max) => true, "SetMemberOfFormation": () => {}, @@ -414,6 +418,7 @@ AddMock(controller, IID_UnitMotion, { "GetWalkSpeed": () => 1, "SetSpeedMultiplier": (speed) => {}, + "SetAcceleration": (accel) => {}, "MoveToPointRange": (x, z, minRange, maxRange) => {}, "StopMoving": () => {}, "SetFacePointAfterMove": () => {}, Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml @@ -27,6 +27,7 @@ 0.45 + 0.45 fauna/camel.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml @@ -42,6 +42,7 @@ 0.15 + 0.15 fauna/chicken.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile_nile.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile_nile.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile_nile.xml @@ -47,6 +47,7 @@ 0.3 + 0.3 fauna/crocodile.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml @@ -28,6 +28,7 @@ 0.8 + 0.8 fauna/donkey.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml @@ -20,6 +20,7 @@ 0.6 + 0.6 fauna/giraffe_adult.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml @@ -20,6 +20,7 @@ 0.6 + 0.6 fauna/giraffe_baby.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml @@ -35,6 +35,7 @@ 0.45 + 0.45 fauna/goat.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml @@ -28,6 +28,7 @@ 0.8 + 0.8 fauna/horse.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml @@ -36,6 +36,7 @@ 0.45 + 0.45 fauna/lion.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml @@ -40,6 +40,7 @@ 0.3 + 0.3 fauna/peacock.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml @@ -35,6 +35,7 @@ 0.45 + 0.45 fauna/pig1.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_flaming.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_flaming.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_flaming.xml @@ -29,6 +29,7 @@ 3.5 + 3.5 Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml @@ -19,6 +19,7 @@ 0.25 + 0.25 fauna/piglet.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml @@ -45,6 +45,7 @@ ship-small 0.6 + 0.6 false Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml @@ -35,6 +35,7 @@ 0.45 + 0.45 fauna/sheep3.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml @@ -20,6 +20,7 @@ 0.9 + 0.9 fauna/wildebeest.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml @@ -20,6 +20,7 @@ 0.9 + 0.9 fauna/zebra.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_formation.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_formation.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_formation.xml @@ -69,8 +69,10 @@ true - 1.0 - 100.0 + 1 + 100 + 0.1 + 100 large Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit.xml @@ -123,8 +123,10 @@ false default - 9.0 + 9 1.67 + 1.5 + 18 false Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_catafalque.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_catafalque.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_catafalque.xml @@ -52,6 +52,7 @@ large 0.55 + 0.275 units/global/catafalque.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml @@ -36,5 +36,6 @@ 0.85 + 0.85 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml @@ -41,5 +41,6 @@ 0.8 + 0.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml @@ -36,5 +36,6 @@ 0.9 + 0.9 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml @@ -42,5 +42,6 @@ 0.85 + 0.85 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml @@ -42,5 +42,6 @@ 0.8 + 0.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml @@ -42,5 +42,6 @@ 0.9 + 0.9 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml @@ -55,6 +55,7 @@ large + 0.5 100 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml @@ -46,5 +46,6 @@ 1.2 + 2.4 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml @@ -46,5 +46,6 @@ 0.6 + 1.2 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml @@ -46,5 +46,6 @@ 1.2 + 1.2 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml @@ -46,5 +46,6 @@ 0.9 + 0.9 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_dog.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_dog.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_dog.xml @@ -67,6 +67,7 @@ 1.5 2 + 1.5 30 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant.xml @@ -54,6 +54,7 @@ large + 0.5 100 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -46,6 +46,7 @@ 0.7 + 0.7 true Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml @@ -11,5 +11,6 @@ 0.4 1.4 + 0.4 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_bull.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_bull.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_bull.xml @@ -16,5 +16,6 @@ large 0.4 2.0 + 0.4 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml @@ -21,5 +21,6 @@ large 0.5 + 0.25 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml @@ -55,5 +55,6 @@ ship-small 1.8 1 + 1.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive_dog.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive_dog.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive_dog.xml @@ -14,5 +14,6 @@ 1.6 + 1.6 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml @@ -42,5 +42,6 @@ 0.85 + 0.85 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml @@ -42,5 +42,6 @@ 0.8 + 0.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml @@ -42,5 +42,6 @@ 0.9 + 0.9 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml @@ -73,5 +73,6 @@ large + 0.5 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml @@ -50,5 +50,6 @@ 0.9 + 0.9 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml @@ -48,5 +48,6 @@ 1.2 + 2.4 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml @@ -49,5 +49,6 @@ 0.6 + 1.2 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml @@ -47,5 +47,6 @@ 2.4 + 4.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml @@ -49,5 +49,6 @@ 1.2 + 1.2 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship.xml @@ -73,5 +73,7 @@ ship + 0.5 + 0.25 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml @@ -59,6 +59,7 @@ 1.55 + 1.55 90 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml @@ -47,6 +47,7 @@ ship-small 1.6 + 1.6 60 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml @@ -71,6 +71,7 @@ ship-small 1.1 + 1.1 30 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml @@ -39,6 +39,7 @@ ship-small 1.35 + 1.6 50 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml @@ -67,6 +67,7 @@ 1.8 + 1.8 110 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml @@ -62,6 +62,7 @@ 1.8 + 1.8 90 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege.xml @@ -60,5 +60,7 @@ large 1 + 0.75 + 0.25 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml @@ -71,6 +71,7 @@ 0.9 + 0.9 100 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_ram.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_ram.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_ram.xml @@ -59,6 +59,7 @@ 0.8 + 0.8 80 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml @@ -64,6 +64,7 @@ 0.8 + 0.8 100 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml @@ -95,6 +95,7 @@ 0.7 + 0.7 80 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_elephant.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_elephant.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_elephant.xml @@ -70,6 +70,7 @@ large 0.6 + 0.3 50 Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/brit/ship_trireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/brit/ship_trireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/brit/ship_trireme.xml @@ -23,6 +23,7 @@ 0.9 + 0.9 structures/celts/warship.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml @@ -17,6 +17,7 @@ 1.4 + 1.4 units/gauls/infantry_spearman_c.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/ship_trireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/ship_trireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/gaul/ship_trireme.xml @@ -23,6 +23,7 @@ 0.9 + 0.9 structures/celts/warship.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/iber/ship_trireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/iber/ship_trireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/iber/ship_trireme.xml @@ -24,6 +24,7 @@ 0.9 + 0.9 structures/iberians/warship.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/maur/ship_trireme.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/maur/ship_trireme.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/maur/ship_trireme.xml @@ -23,6 +23,7 @@ 0.9 + 0.9 structures/mauryas/trireme.xml Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml @@ -36,6 +36,7 @@ 1.5 + 1.5 0.5 Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml @@ -37,6 +37,7 @@ 1.4 + 1.4 0.5 Index: ps/trunk/source/simulation2/components/CCmpUnitMotion.h =================================================================== --- ps/trunk/source/simulation2/components/CCmpUnitMotion.h +++ ps/trunk/source/simulation2/components/CCmpUnitMotion.h @@ -153,7 +153,7 @@ bool m_IsFormationController; - fixed m_TemplateWalkSpeed, m_TemplateRunMultiplier; + fixed m_TemplateWalkSpeed, m_TemplateRunMultiplier, m_TemplateAcceleration; pass_class_t m_PassClass; std::string m_PassClassName; @@ -225,8 +225,12 @@ // This caches the resulting speed from m_WalkSpeed * m_SpeedMultiplier for convenience. fixed m_Speed; - // Current mean speed (over the last turn). - fixed m_CurSpeed; + // The speed achieved at the end of the current turn. + fixed m_CurrentSpeed; + + fixed m_InstantTurnAngle; + + fixed m_Acceleration; // Currently active paths (storing waypoints in reverse order). // The last item in each path is the point we're currently heading towards. @@ -244,15 +248,21 @@ "" "" "" - "" + "" "" "" "" - "" + "" "" "" "" - "" + "" + "" + "" + "" + "" + "" + "" "" "" "" @@ -270,12 +280,16 @@ m_WalkSpeed = m_TemplateWalkSpeed = m_Speed = paramNode.GetChild("WalkSpeed").ToFixed(); m_SpeedMultiplier = fixed::FromInt(1); - m_CurSpeed = fixed::Zero(); + m_CurrentSpeed = fixed::Zero(); m_RunMultiplier = m_TemplateRunMultiplier = fixed::FromInt(1); if (paramNode.GetChild("RunMultiplier").IsOk()) m_RunMultiplier = m_TemplateRunMultiplier = paramNode.GetChild("RunMultiplier").ToFixed(); + m_InstantTurnAngle = paramNode.GetChild("InstantTurnAngle").ToFixed(); + + m_Acceleration = m_TemplateAcceleration = paramNode.GetChild("Acceleration").ToFixed(); + CmpPtr cmpPathfinder(GetSystemEntity()); if (cmpPathfinder) { @@ -322,7 +336,11 @@ serialize.NumberFixed_Unbounded("speed multiplier", m_SpeedMultiplier); - serialize.NumberFixed_Unbounded("current speed", m_CurSpeed); + serialize.NumberFixed_Unbounded("current speed", m_CurrentSpeed); + + serialize.NumberFixed_Unbounded("instant turn angle", m_InstantTurnAngle); + + serialize.NumberFixed_Unbounded("acceleration", m_Acceleration); serialize.Bool("facePointAfterMove", m_FacePointAfterMove); serialize.Bool("pushing", m_Pushing); @@ -456,15 +474,25 @@ CFixedVector2D pos = cmpPosition->GetPosition2D(); entity_angle_t angle = cmpPosition->GetRotation().Y; - + fixed speed = m_CurrentSpeed; // Copy the path so we don't change it. WaypointPath shortPath = m_ShortPath; WaypointPath longPath = m_LongPath; - PerformMove(dt, cmpPosition->GetTurnRate(), shortPath, longPath, pos, angle); + PerformMove(dt, cmpPosition->GetTurnRate(), shortPath, longPath, pos, speed, angle); return pos; } + virtual fixed GetAcceleration() const + { + return m_Acceleration; + } + + virtual void SetAcceleration(fixed acceleration) + { + m_Acceleration = acceleration; + } + virtual pass_class_t GetPassabilityClass() const { return m_PassClass; @@ -485,7 +513,7 @@ virtual fixed GetCurrentSpeed() const { - return m_CurSpeed; + return m_CurrentSpeed; } virtual void SetFacePointAfterMove(bool facePointAfterMove) @@ -721,13 +749,13 @@ * This does not send actually change the position. * @returns true if the move was obstructed. */ - bool PerformMove(fixed dt, const fixed& turnRate, WaypointPath& shortPath, WaypointPath& longPath, CFixedVector2D& pos, entity_angle_t& angle) const; + bool PerformMove(fixed dt, const fixed& turnRate, WaypointPath& shortPath, WaypointPath& longPath, CFixedVector2D& pos, fixed& speed, entity_angle_t& angle) const; /** * Update other components on our speed. * (For performance, this should try to avoid sending messages). */ - void UpdateMovementState(entity_pos_t speed); + void UpdateMovementState(entity_pos_t speed, entity_pos_t meanSpeed); /** * React if our move was obstructed. @@ -993,7 +1021,7 @@ // If we were idle and will still be, no need for an update. state.needUpdate = state.cmpPosition->IsInWorld() && - (m_CurSpeed != fixed::Zero() || m_MoveRequest.m_Type != MoveRequest::NONE); + (m_CurrentSpeed != fixed::Zero() || m_MoveRequest.m_Type != MoveRequest::NONE); if (!m_BlockMovement) return; @@ -1017,7 +1045,7 @@ // to it, then throw away our current path and go straight to it. state.wentStraight = TryGoingStraightToTarget(state.initialPos, true); - state.wasObstructed = PerformMove(dt, state.cmpPosition->GetTurnRate(), m_ShortPath, m_LongPath, state.pos, state.angle); + state.wasObstructed = PerformMove(dt, state.cmpPosition->GetTurnRate(), m_ShortPath, m_LongPath, state.pos, state.speed, state.angle); } void CCmpUnitMotion::PostMove(CCmpUnitMotionManager::MotionState& state, fixed dt) @@ -1027,7 +1055,7 @@ { if (state.angle != state.initialAngle) state.cmpPosition->TurnTo(state.angle); - UpdateMovementState(fixed::Zero()); + UpdateMovementState(fixed::Zero(), fixed::Zero()); } else { @@ -1041,7 +1069,7 @@ state.cmpPosition->MoveAndTurnTo(state.pos.X, state.pos.Y, state.angle); // Calculate the mean speed over this past turn. - UpdateMovementState(offset.Length() / dt); + UpdateMovementState(state.speed, offset.Length() / dt); } if (state.wasObstructed && HandleObstructedMove(state.pos != state.initialPos)) @@ -1094,7 +1122,7 @@ return false; } -bool CCmpUnitMotion::PerformMove(fixed dt, const fixed& turnRate, WaypointPath& shortPath, WaypointPath& longPath, CFixedVector2D& pos, entity_angle_t& angle) const +bool CCmpUnitMotion::PerformMove(fixed dt, const fixed& turnRate, WaypointPath& shortPath, WaypointPath& longPath, CFixedVector2D& pos, fixed& speed, entity_angle_t& angle) const { // If there are no waypoint, behave as though we were obstructed and let HandleObstructedMove handle it. if (shortPath.m_Waypoints.empty() && longPath.m_Waypoints.empty()) @@ -1151,21 +1179,26 @@ target = CFixedVector2D(shortPath.m_Waypoints.back().x, shortPath.m_Waypoints.back().z); CFixedVector2D offset = target - pos; - if (turnRate > zero && !offset.IsZero()) - { - fixed maxRotation = turnRate.Multiply(timeLeft); - fixed angleDiff = angle - atan2_approx(offset.X, offset.Y); - if (angleDiff != zero) + + fixed angleDiff = angle - atan2_approx(offset.X, offset.Y); + fixed absoluteAngleDiff = angleDiff.Absolute(); + if (absoluteAngleDiff > entity_angle_t::Pi()) + absoluteAngleDiff = entity_angle_t::Pi() * 2 - absoluteAngleDiff; + + // We only rotate to the instantTurnAngle angle. The rest we rotate during movement. + if (absoluteAngleDiff > m_InstantTurnAngle) + { + // Stop moving when rotating this far. + speed = zero; + if (turnRate > zero && !offset.IsZero()) { - fixed absoluteAngleDiff = angleDiff.Absolute(); - if (absoluteAngleDiff > entity_angle_t::Pi()) - absoluteAngleDiff = entity_angle_t::Pi() * 2 - absoluteAngleDiff; + fixed maxRotation = turnRate.Multiply(timeLeft); // Figure out whether rotating will increase or decrease the angle, and how far we need to rotate in that direction. int direction = (entity_angle_t::Zero() < angleDiff && angleDiff <= entity_angle_t::Pi()) || angleDiff < -entity_angle_t::Pi() ? -1 : 1; // Can't rotate far enough, just rotate in the correct direction. - if (absoluteAngleDiff > maxRotation) + if (absoluteAngleDiff - m_InstantTurnAngle > maxRotation) { angle += maxRotation * direction; if (angle * direction > entity_angle_t::Pi()) @@ -1174,13 +1207,21 @@ } // Rotate towards the next waypoint and continue moving. angle = atan2_approx(offset.X, offset.Y); - // Give some 'free' rotation for angles below 0.5 radians. - timeLeft = (std::min(maxRotation, maxRotation - absoluteAngleDiff + fixed::FromInt(1)/2)) / turnRate; + timeLeft = std::min(maxRotation, maxRotation - absoluteAngleDiff + m_InstantTurnAngle) / turnRate; } } + else + { + // Modify the speed depending on the angle difference. + fixed sin, cos; + sincos_approx(angleDiff, sin, cos); + speed = speed.Multiply(cos); + } // Work out how far we can travel in timeLeft. - fixed maxdist = maxSpeed.Multiply(timeLeft); + fixed accelTime = std::min(timeLeft, (maxSpeed - speed) / m_Acceleration); + fixed accelDist = speed.Multiply(accelTime) + accelTime.Square().Multiply(m_Acceleration) / 2; + fixed maxdist = accelDist + maxSpeed.Multiply(timeLeft - accelTime); // If the target is close, we can move there directly. fixed offsetLength = offset.Length(); @@ -1191,7 +1232,20 @@ pos = target; // Spend the rest of the time heading towards the next waypoint. - timeLeft = (maxdist - offsetLength) / maxSpeed; + // Either we still need to accelerate after, or we have reached maxSpeed. + // The former is much less likely than the latter: usually we can reach + // maxSpeed within one waypoint. So the Sqrt is not too bad. + if (offsetLength <= accelDist) + { + fixed requiredTime = (-speed + (speed.Square() + offsetLength.Multiply(m_Acceleration).Multiply(fixed::FromInt(2))).Sqrt()) / m_Acceleration; + timeLeft -= requiredTime; + speed += m_Acceleration.Multiply(requiredTime); + } + else + { + timeLeft -= accelTime + (offsetLength - accelDist) / maxSpeed; + speed = maxSpeed; + } if (shortPath.m_Waypoints.empty()) longPath.m_Waypoints.pop_back(); @@ -1212,6 +1266,8 @@ offset.Normalize(maxdist); target = pos + offset; + speed = std::min(maxSpeed, speed + m_Acceleration.Multiply(timeLeft)); + if (cmpPathfinder->CheckMovement(GetObstructionFilter(specificIgnore), pos.X, pos.Y, target.X, target.Y, m_Clearance, m_PassClass)) pos = target; else @@ -1223,18 +1279,18 @@ return false; } -void CCmpUnitMotion::UpdateMovementState(entity_pos_t speed) +void CCmpUnitMotion::UpdateMovementState(entity_pos_t speed, entity_pos_t meanSpeed) { CmpPtr cmpVisual(GetEntityHandle()); if (cmpVisual) { - if (speed == fixed::Zero()) + if (meanSpeed == fixed::Zero()) cmpVisual->SelectMovementAnimation("idle", fixed::FromInt(1)); else - cmpVisual->SelectMovementAnimation(speed > (m_WalkSpeed / 2).Multiply(m_RunMultiplier + fixed::FromInt(1)) ? "run" : "walk", speed); + cmpVisual->SelectMovementAnimation(meanSpeed > (m_WalkSpeed / 2).Multiply(m_RunMultiplier + fixed::FromInt(1)) ? "run" : "walk", meanSpeed); } - m_CurSpeed = speed; + m_CurrentSpeed = speed; } bool CCmpUnitMotion::HandleObstructedMove(bool moved) Index: ps/trunk/source/simulation2/components/CCmpUnitMotionManager.h =================================================================== --- ps/trunk/source/simulation2/components/CCmpUnitMotionManager.h +++ ps/trunk/source/simulation2/components/CCmpUnitMotionManager.h @@ -60,6 +60,8 @@ // Accumulated "pushing" from nearby units. CFixedVector2D push; + fixed speed; + fixed initialAngle; fixed angle; Index: ps/trunk/source/simulation2/components/CCmpUnitMotion_System.cpp =================================================================== --- ps/trunk/source/simulation2/components/CCmpUnitMotion_System.cpp +++ ps/trunk/source/simulation2/components/CCmpUnitMotion_System.cpp @@ -167,6 +167,7 @@ it->second.initialPos = it->second.cmpPosition->GetPosition2D(); it->second.initialAngle = it->second.cmpPosition->GetRotation().Y; it->second.pos = it->second.initialPos; + it->second.speed = it->second.cmpUnitMotion->GetCurrentSpeed(); it->second.angle = it->second.initialAngle; ENSURE(it->second.pos.X.ToInt_RoundToZero() / PUSHING_GRID_SIZE < m_MovingUnits.width() && it->second.pos.Y.ToInt_RoundToZero() / PUSHING_GRID_SIZE < m_MovingUnits.height()); Index: ps/trunk/source/simulation2/components/ICmpUnitMotion.h =================================================================== --- ps/trunk/source/simulation2/components/ICmpUnitMotion.h +++ ps/trunk/source/simulation2/components/ICmpUnitMotion.h @@ -87,7 +87,7 @@ virtual void StopMoving() = 0; /** - * Get the distance travelled over the last turn. + * Get the speed at the end of the current turn. */ virtual fixed GetCurrentSpeed() const = 0; @@ -130,6 +130,17 @@ virtual CFixedVector2D EstimateFuturePosition(const fixed dt) const = 0; /** + * Get the current acceleration. + */ + virtual fixed GetAcceleration() const = 0; + + /** + * Set the current acceleration. + * @param acceleration The acceleration. + */ + virtual void SetAcceleration(fixed acceleration) = 0; + + /** * Set whether the unit will turn to face the target point after finishing moving. */ virtual void SetFacePointAfterMove(bool facePointAfterMove) = 0; Index: ps/trunk/source/simulation2/components/ICmpUnitMotion.cpp =================================================================== --- ps/trunk/source/simulation2/components/ICmpUnitMotion.cpp +++ ps/trunk/source/simulation2/components/ICmpUnitMotion.cpp @@ -37,6 +37,8 @@ DEFINE_INTERFACE_METHOD("GetRunMultiplier", ICmpUnitMotion, GetRunMultiplier) DEFINE_INTERFACE_METHOD("EstimateFuturePosition", ICmpUnitMotion, EstimateFuturePosition) DEFINE_INTERFACE_METHOD("SetSpeedMultiplier", ICmpUnitMotion, SetSpeedMultiplier) +DEFINE_INTERFACE_METHOD("GetAcceleration", ICmpUnitMotion, GetAcceleration) +DEFINE_INTERFACE_METHOD("SetAcceleration", ICmpUnitMotion, SetAcceleration) DEFINE_INTERFACE_METHOD("GetPassabilityClassName", ICmpUnitMotion, GetPassabilityClassName) DEFINE_INTERFACE_METHOD("GetUnitClearance", ICmpUnitMotion, GetUnitClearance) DEFINE_INTERFACE_METHOD("SetFacePointAfterMove", ICmpUnitMotion, SetFacePointAfterMove) @@ -124,6 +126,16 @@ return m_Script.Call("EstimateFuturePosition", dt); } + virtual fixed GetAcceleration() const + { + return m_Script.Call("GetAcceleration"); + } + + virtual void SetAcceleration(fixed acceleration) + { + m_Script.CallVoid("SetAcceleration", acceleration); + } + virtual void SetFacePointAfterMove(bool facePointAfterMove) { m_Script.CallVoid("SetFacePointAfterMove", facePointAfterMove);