refactored AI code to be more like the rest of the game; properly passes state through gameState.flow now; cpu Unit movement is animated
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE----- iQJDBAABCAAtFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAl1KFCMPHG5pbGl4QG5p bGZtLmNjAAoJEDt/vCIUTmOYmPAP/2gSka8ikZ5sPGks9CCtR2SxdsUHY0kPfL60 9b6FZcVDPBz+mouUFuVegy0xKdlcC8gZAoYP+uUFOTY9k5H8XUI/YjLRFJsxlkfk 4nvS9qhtB1SUaGrzDYA/ba/CzsTiTlE6xrmixvPsOtElRWvqweb3SOG/LD9YPhvT eleYwkNCESQxkB6C/rIDeQinb563VbeEDa1D8WNoiFtTQ6xyH33+KzM3R+5Ysg9A c1bqP/BfZ9i5I9a0KBf+TETIr6KtDUX+SVcIkAZanAR7mhQxqUwgdv+AoKVClwOT bOPpWWg2m3fs42SzaKoW66qJpBlIu+eIbtjJkXbW3VQBpDRF5064cADZKusZq1an UGX8LZNzZlB6QizS6X0s6RIEWbIVaqOhT+glKm9A1mc1mXvEInJFAM7D6K6rNGA8 kHOZAdHg71GMrn3Q93iLkaF4+X+LfF1LOT2YH9OY7+7PmJ1c72DQnR6Kosk8x/sV GGzvsnAjY8l5xBTs6bzRZkVmhmPO1XpX4aXJLSP1vD4DOrZlFtWvNNFgMjQfjTEC 15YtJxqALEqFR8NZr2D0VnE0IwVfS8CS5ci4kNd8RWLC2l6QYfDdAClqaPMSovmD VUTkBallcMoNWmvcGa2tH/7qHSafE25Oo/ph9lpjmM7HqiWUvn5effaVJnDEbA1E olJY54E2 =+cns -----END PGP SIGNATURE-----
3 files changed,
103 insertions(+),
10 deletions(-)
M
AI.js
→
AI.js
@@ -4,6 +4,7 @@ AI.fCounter = 0;
AI.Q = {} AI.moveOptions = new Array(4); AI.focus = {}; +AI.delay = 0; AI.rand = function(i)@@ -420,7 +421,7 @@ }
} -AI.testPath = function() +AI.walkPath = function() { var i, j, k; for (i = 0; i < teams.cpu.units.length ; i++)@@ -430,7 +431,7 @@ AI.generatePath(teams.cpu.units[i]);
while (gameState.flow != "moveFinished") { k = new Date(); - if (k - gameState.frame >= 33.34) + if (k - gameState.frame >= 200) { gameState.frame = k; movement.go();@@ -440,7 +441,7 @@ map.draw();
mapCursor.draw(); } } - gameState.flow = "cpuPhase"; + gameState.flow = "cpuActions"; } }@@ -470,8 +471,10 @@ }
} } -AI.main = function() +AI.turnStart = function() { AI.Q = AI.actions; - AI.animLoop(); -}+ AI.focus = 0; + gameState.flow = "cpuActions"; +} +
M
Engine.js
→
Engine.js
@@ -59,7 +59,7 @@ {
case "p1": tm = teams.p1; gameState.phase = "cpu"; - gameState.flow = "cpuPhase"; + gameState.flow = "cpuInit"; break; case "cpu": tm = teams.cpu;@@ -151,6 +151,76 @@ break;
} } +function cpuTurnStart() +{ + AI.focus = 0; + gameState.flow = "cpuBuildStructs"; +} + +function cpuBuildStruct() +{ + if (AI.delay == 1) + { + AI.buildStruct(); + } + AI.delay++; + camera.manage(); + camera.centerOnCursor(); + map.draw(); + mapCursor.draw(); + hud.draw(); + if (AI.delay >= 30) + { + AI.delay = 0; + gameState.flow = "cpuManageFactories"; + } +} + +function cpuGenTargets() +{ + var i; + for (i = 0; i < teams.cpu.units.length; i++) + { + AI.assignTarget(teams.cpu.units[i], map.data[16][16]); + } + gameState.flow = "cpuPathGen"; +} + +function cpuManagePath() +{ + AI.generatePath(teams.cpu.units[AI.focus]); + gameState.flow = "cpuMove"; +} + +function cpuMove() +{ + mapCursor.x = movement.chain[0].x; + mapCursor.y = movement.chain[0].y; + camera.centerOnCursor(); + movement.go(); + map.draw(); +} + +function cpuManageFactories() +{ + AI.cycleThruFactories(); + if (teams.cpu.units.length > 0) + { + gameState.flow = "cpuGenTargets"; + } + else endPhase(); +} + +function cpuMoveDone() +{ + if (AI.focus >= teams.cpu.units.length) + { + AI.focus = 0; + endPhase(); + } + else gameState.flow = "cpuPathGen"; +} + function loop() { thisFrame = new Date();@@ -190,8 +260,26 @@ break;
case "attackEnd": attackEnd(); break; - case "cpuPhase": - AI.main(); + case "cpuInit": + cpuTurnStart(); + break; + case "cpuBuildStructs": + cpuBuildStruct(); + break; + case "cpuManageFactories": + cpuManageFactories(); + break; + case "cpuGenTargets": + cpuGenTargets(); + break; + case "cpuPathGen": + cpuManagePath(); + break; + case "cpuMove": + cpuMove(); + break; + case "cpuMoveDone": + cpuMoveDone(); break; }
M
Movement.js
→
Movement.js
@@ -135,7 +135,9 @@ if (gameState.phase == "p1")
{ gameState.flow = "freeLook"; } - else { gameState.flow = "moveFinished"; } + else { + AI.focus++; + gameState.flow = "cpuMoveDone"; } return; } moveToTile(movement.unit, movement.chain[0]);