From 823a97260969af681ad0f2f45b6da60b1d045380 Mon Sep 17 00:00:00 2001 From: andrewsumner Date: Thu, 9 Jul 2009 05:07:38 +0000 Subject: [PATCH] hymie_36GP - crash fixes git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@1081 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: e3a5771fae4012dc86f3aeaf51ac14f0cc334cf2 Former-commit-id: af1b8387ff268df70fcc806358c4d8ddb81974c2 --- src/drivers/hymie_36GP/LearnedGraph.cpp | 5 +++-- src/drivers/hymie_36GP/MyRobot.cpp | 5 ++++- src/drivers/hymie_36GP/hymie_36GP.cpp | 19 +++++++++++-------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/drivers/hymie_36GP/LearnedGraph.cpp b/src/drivers/hymie_36GP/LearnedGraph.cpp index 7b4b082d0..7a49bdb37 100644 --- a/src/drivers/hymie_36GP/LearnedGraph.cpp +++ b/src/drivers/hymie_36GP/LearnedGraph.cpp @@ -79,6 +79,7 @@ LearnedGraph::LearnedGraph( double minX, double maxX, int xSteps, double initial LearnedGraph::~LearnedGraph() { delete [] m_pData; + delete [] m_pAxis; } int LearnedGraph::GetNAxes() const @@ -166,7 +167,7 @@ void LearnedGraph::SetBeta( double beta ) double LearnedGraph::CalcValue( int dim, int offs, const Idx* idx ) const { - if( dim < m_nAxes ) + if( dim < m_nAxes && dim >= 0 ) { int offs_i = offs + m_pAxis[dim].m_itemSize * idx[dim].i; int offs_j = offs + m_pAxis[dim].m_itemSize * idx[dim].j; @@ -182,7 +183,7 @@ double LearnedGraph::CalcValue( int dim, int offs, const Idx* idx ) const void LearnedGraph::LearnValue( int dim, int offs, const Idx* idx, double delta ) { - if( dim < m_nAxes ) + if( dim < m_nAxes && dim >= 0 ) { int offs_i = offs + m_pAxis[dim].m_itemSize * idx[dim].i; int offs_j = offs + m_pAxis[dim].m_itemSize * idx[dim].j; diff --git a/src/drivers/hymie_36GP/MyRobot.cpp b/src/drivers/hymie_36GP/MyRobot.cpp index 23cf89bd8..64c6cdb40 100644 --- a/src/drivers/hymie_36GP/MyRobot.cpp +++ b/src/drivers/hymie_36GP/MyRobot.cpp @@ -2132,6 +2132,7 @@ void MyRobot::Drive( int index, tCarElt* car, tSituation* s ) // acc = MN(acc, 0.2); } +#if 0 if( car->ctrl.accelCmd == 1 && car->ctrl.brakeCmd == 0 ) { m_maxAccel.Learn( car->_speed_x, car->_accel_x ); @@ -2140,6 +2141,7 @@ void MyRobot::Drive( int index, tCarElt* car, tSituation* s ) // GfOut( " %4.1f", m_maxAccel.GetY(i) ); // GfOut( "\n" ); } +#endif if( fabs(pi.k * spd0 - car->_yaw_rate) < 0.02 ) { @@ -2309,7 +2311,8 @@ void MyRobot::AvoidOtherCars( {for( int i = 0; i < m_nCars; i++ ) { m_opp[i].ProcessMyCar( s, &m_pShared->m_teamInfo, car, mySit, *this, - m_maxAccel.CalcY(car->_speed_x), m_aggression, i ); + car->_speed_x, m_aggression, i ); + //m_maxAccel.CalcY(car->_speed_x), m_aggression, i ); }} #if defined(USE_NEW_AVOIDANCE) diff --git a/src/drivers/hymie_36GP/hymie_36GP.cpp b/src/drivers/hymie_36GP/hymie_36GP.cpp index 4699540da..7d79e377e 100644 --- a/src/drivers/hymie_36GP/hymie_36GP.cpp +++ b/src/drivers/hymie_36GP/hymie_36GP.cpp @@ -38,7 +38,7 @@ static const int NBOTS = 20;//2; static int NBBOTS = 0; -static MyRobot s_robot[NBOTS]; +static MyRobot *s_robot[NBOTS]; static Shared s_shared; static const int BUFSIZE = 256; static const int MAXNBBOTS = 20; @@ -199,6 +199,8 @@ static int InitFuncPt( int index, void* pt ) tRobotItf* itf = (tRobotItf*)pt; + s_robot[index - indexOffset] = new MyRobot(); + // Create robot instance for index. itf->rbNewTrack = initTrack; // Give the robot the track view called. itf->rbNewRace = newRace; // Start a new race. @@ -224,41 +226,42 @@ static int InitFuncPt( int index, void* pt ) static void initTrack( int index, tTrack* track, void* carHandle, void** carParmHandle, tSituation* s ) { - s_robot[index].SetShared( &s_shared ); - s_robot[index].InitTrack(index, track, carHandle, carParmHandle, s); + s_robot[index - indexOffset]->SetShared( &s_shared ); + s_robot[index - indexOffset]->InitTrack(index - indexOffset, track, carHandle, carParmHandle, s); } // Start a new race. static void newRace( int index, tCarElt* car, tSituation* s ) { - s_robot[index].NewRace( index, car, s ); + s_robot[index - indexOffset]->NewRace( index - indexOffset, car, s ); } // Drive during race. static void drive( int index, tCarElt* car, tSituation* s ) { - s_robot[index].Drive( index, car, s ); + s_robot[index - indexOffset]->Drive( index - indexOffset, car, s ); } // Pitstop callback. static int pitcmd( int index, tCarElt* car, tSituation* s ) { - return s_robot[index].PitCmd(index, car, s); + return s_robot[index - indexOffset]->PitCmd(index - indexOffset, car, s); } // End of the current race. static void endRace( int index, tCarElt* car, tSituation* s ) { - s_robot[index].EndRace( index, car, s ); + s_robot[index - indexOffset]->EndRace( index - indexOffset, car, s ); } // Called before the module is unloaded. static void shutdown( int index ) { - s_robot[index].Shutdown( index ); + s_robot[index]->Shutdown( index - indexOffset ); + delete s_robot[index - indexOffset]; }