# HG changeset patch # User zzzzrrr # Date 1237809743 14400 # Node ID e1004697cae173a50a9df7cb2ba711a18f841026 # Parent 2ecd168409009a6accaa9c11d61158d1daae4b8d tracking diff -r 2ecd16840900 -r e1004697cae1 ai.d --- a/ai.d Sun Mar 22 12:10:16 2009 -0400 +++ b/ai.d Mon Mar 23 08:02:23 2009 -0400 @@ -31,7 +31,7 @@ module openmelee.ai; import tango.io.Stdout : Stdout; -import tango.math.Math : atan2; +import tango.math.Math : atan2, abs, PI; import blaze.common.bzMath: bzVec2; import openmelee.steer : Steer; @@ -54,15 +54,38 @@ steer.update(); bzVec2 st; st = steer.steerForPursuit(enemy.state, maxPredictionTime); - //ship.thrust(); + ship.state.target = st; float angle = atan2(st.x, st.y); + + Stdout("Target angle: ")(angle).newline; + + float x = ship.state.forward.x; + float y = ship.state.forward.y; + float angle2 = atan2(x,y); + - if(angle < 0) { - ship.turnLeft(); - } else { - ship.turnRight(); - } + float rel = angle2 - angle; + + if(abs(rel) > PI/8) { + if(angle < angle2) { + ship.turnLeft(); + ship.state.turn = true; + } else { + ship.state.turn = true; + ship.turnRight(); + } + } else { + ship.rBody.angularVelocity = 0.0f; + ship.state.turn = false; + } + + ship.state.enemyAngle = rel; + + float range = (ship.state.position - enemy.state.position).length; + if(range > 20 && !ship.state.turn) { + //ship.thrust(); + } } } diff -r 2ecd16840900 -r e1004697cae1 main.d --- a/main.d Sun Mar 22 12:10:16 2009 -0400 +++ b/main.d Mon Mar 23 08:02:23 2009 -0400 @@ -94,7 +94,6 @@ }); jobHub.addPostFrameJob( { - whut.ship2.rBody.angularVelocity = 0.0f; gui.begin(cfg); gui.push(`main`); if (gui().getProperty!(bool)("frame.closeClicked")) { diff -r 2ecd16840900 -r e1004697cae1 melee.d --- a/melee.d Sun Mar 22 12:10:16 2009 -0400 +++ b/melee.d Mon Mar 23 08:02:23 2009 -0400 @@ -165,8 +165,8 @@ world.boundaryListener = m_boundaryListener; world.contactListener = m_contactListener; viewCenter = vec2(10, 10); - ship1 = new Orz(world); - ship2 = new UrQuan(world); + ship1 = new UrQuan(world); + ship2 = new Orz(world); auto planet = new Planet(world); } diff -r 2ecd16840900 -r e1004697cae1 openmelee.geany --- a/openmelee.geany Sun Mar 22 12:10:16 2009 -0400 +++ b/openmelee.geany Mon Mar 23 08:02:23 2009 -0400 @@ -10,18 +10,18 @@ name=openmelee base_path=C:\\workspace\\openmelee make_in_base_path=false +description= +run_cmd= [files] -current_page=2 -FILE_NAME_0=1708;D;0;16;0;1;1;C:\\workspace\\openmelee\\boundaryListener.d;0 -FILE_NAME_1=1707;D;0;16;0;1;1;C:\\workspace\\openmelee\\contactListener.d;0 -FILE_NAME_2=1759;D;0;16;0;1;1;C:\\workspace\\openmelee\\main.d;0 -FILE_NAME_3=4517;D;0;16;0;1;1;C:\\workspace\\openmelee\\melee.d;0 -FILE_NAME_4=0;D;0;16;0;1;1;C:\\workspace\\openmelee\\models.d;0 -FILE_NAME_5=1870;D;0;16;0;1;1;C:\\workspace\\openmelee\\orz.d;0 -FILE_NAME_6=19493;D;0;16;0;1;1;C:\\workspace\\openmelee\\render.d;0 -FILE_NAME_7=1615;D;0;16;0;1;1;C:\\workspace\\openmelee\\ship.d;0 -FILE_NAME_8=1945;D;0;16;0;1;1;C:\\workspace\\openmelee\\steer.d;0 -FILE_NAME_9=1842;D;0;16;0;1;1;C:\\workspace\\openmelee\\urQuan.d;0 -FILE_NAME_10=147;None;0;16;0;1;1;C:\\workspace\\openmelee\\build-dmd-win.bat;0 -FILE_NAME_11=21370;D;0;16;0;1;1;C:\\workspace\\blaze\\blaze\\common\\bzMath.d;0 +current_page=5 +FILE_NAME_0=3145;D;0;16;0;1;1;C:\\workspace\\openmelee\\main.d;0 +FILE_NAME_1=1648;D;0;16;0;1;1;C:\\workspace\\openmelee\\melee.d;0 +FILE_NAME_2=1648;D;0;16;0;1;1;C:\\workspace\\openmelee\\orz.d;0 +FILE_NAME_3=10638;D;0;16;0;1;1;C:\\workspace\\openmelee\\render.d;0 +FILE_NAME_4=1648;D;0;16;0;1;1;C:\\workspace\\openmelee\\ship.d;0 +FILE_NAME_5=2349;D;0;16;0;1;1;C:\\workspace\\openmelee\\steer.d;0 +FILE_NAME_6=1648;D;0;16;0;1;1;C:\\workspace\\openmelee\\urQuan.d;0 +FILE_NAME_7=147;None;0;16;0;1;1;C:\\workspace\\openmelee\\build-dmd-win.bat;0 +FILE_NAME_8=304;Conf;0;16;0;1;0;C:\\workspace\\openmelee\\gui.cfg;0 +FILE_NAME_9=1648;D;0;16;0;1;0;C:\\workspace\\openmelee\\planet.d;0 diff -r 2ecd16840900 -r e1004697cae1 ship.d --- a/ship.d Sun Mar 22 12:10:16 2009 -0400 +++ b/ship.d Mon Mar 23 08:02:23 2009 -0400 @@ -51,6 +51,9 @@ bzVec2 target; float speed = 0; float maxForce = 0; + bool turn; + + float enemyAngle; bzVec2 predictFuturePosition(float dt) { return (position + velocity * dt); diff -r 2ecd16840900 -r e1004697cae1 urQuan.d --- a/urQuan.d Sun Mar 22 12:10:16 2009 -0400 +++ b/urQuan.d Mon Mar 23 08:02:23 2009 -0400 @@ -48,7 +48,7 @@ super(world); engineForce = bzVec2(500, 0); - turnForce = bzVec2(0, 5000); + turnForce = bzVec2(0, 9000); rightTurnPoint = bzVec2(-0.5, 0); leftTurnPoint = bzVec2(0.5, 0);