[Jais-checkins] jaisteam/src/jais/player KI.java,1.77,1.78 ActionManager.java,1.59,1.60
Status: Beta
Brought to you by:
maestrodd
|
From: <mae...@us...> - 2002-07-14 14:01:26
|
Update of /cvsroot/jais/jaisteam/src/jais/player
In directory usw-pr-cvs1:/tmp/cvs-serv4108/player
Modified Files:
KI.java ActionManager.java
Log Message:
change viewModes not ready yet, but massively improved
added a new thread, an actionPerformer .... this is needed as
of timing issues
Index: KI.java
===================================================================
RCS file: /cvsroot/jais/jaisteam/src/jais/player/KI.java,v
retrieving revision 1.77
retrieving revision 1.78
diff -C2 -d -r1.77 -r1.78
*** KI.java 13 Jul 2002 20:29:24 -0000 1.77
--- KI.java 14 Jul 2002 14:01:23 -0000 1.78
***************
*** 31,42 ****
! private final Coordinate[][] HOMEPOS = {{new Coordinate(0,0), new Coordinate(-50,0),
! /*defense */ new Coordinate(-35,20), new Coordinate(-40,7), new Coordinate(-40,-7),new Coordinate(-35,-20),
! /*midfield*/ new Coordinate(-20,10), new Coordinate(-20,0), new Coordinate(-20,-10),
! /*attackers*/ new Coordinate(-5,15), new Coordinate(-10,0), new Coordinate(-5,-15)},
! /*goalie*/ {new Coordinate(0,0), new Coordinate(-50,0),
! /*defense*/ new Coordinate(-25,20), new Coordinate(-30,7), new Coordinate(-30,-7),new Coordinate(-25,-20),
! /*midfield*/ new Coordinate(0,10), new Coordinate(0,0), new Coordinate(0,-10),
! /*attackers*/ new Coordinate(20,20), new Coordinate(30,0), new Coordinate(20,-20)}};
private final Coordinate GOALIE_HOME_POS = new Coordinate(-50, 0);
--- 31,39 ----
! private final Coordinate[] HOMEPOS = {
! /*goalie*/ new Coordinate(0,0), new Coordinate(-50,0),
! /*defense*/ new Coordinate(-25,20), new Coordinate(-30,7), new Coordinate(-30,-7),new Coordinate(-25,-20),
! /*midfield*/ new Coordinate(0,10), new Coordinate(0,0), new Coordinate(0,-10),
! /*attackers*/ new Coordinate(30,15), new Coordinate(25,0), new Coordinate(30,-15)};
private final Coordinate GOALIE_HOME_POS = new Coordinate(-50, 0);
***************
*** 76,80 ****
this.setName("KI"+f_playerNumber);
m_myWorld = f_world;
! m_actions = new ActionManager(m_myWorld, f_myCom);
m_myState = new StateManager();
}
--- 73,77 ----
this.setName("KI"+f_playerNumber);
m_myWorld = f_world;
! m_actions = new ActionManager(m_myWorld, f_myCom, f_playerNumber);
m_myState = new StateManager();
}
***************
*** 91,111 ****
while(l_thisThread==m_KIThread)
{
! if (m_actions.listEmpty()) //If action list isn't empty, we don't have to look for a new decision
{
! try
! {
! m_actions.InformVisualUpdateHappened();
! m_enemyTeam=m_myWorld.getEnemyPlayers();
! m_ownTeam=m_myWorld.getFriendlyPlayers();
! root(); //Start our tree in the root
! }
! catch (Exception ex)
! {
! logger.debug("Caught Execption from root in KI"+ex.getMessage());
! ex.printStackTrace();
! logger.debug("Report this to jai...@li.... KI is still Working!");
! }
}
-
m_threadSuspended=true; //we want to suspend ourself after one run
try
--- 88,106 ----
while(l_thisThread==m_KIThread)
{
! //ok, we were waked up, so theres new information avaiable. discard last actions and decide new
! m_actions.flush();
! try
{
! m_actions.InformVisualUpdateHappened();
! m_enemyTeam=m_myWorld.getEnemyPlayers();
! m_ownTeam=m_myWorld.getFriendlyPlayers();
! root(); //Start our tree in the root
! }
! catch (Exception ex)
! {
! logger.debug("Caught Execption from root in KI"+ex.getMessage());
! ex.printStackTrace();
! logger.debug("Report this to jai...@li.... KI is still Working!");
}
m_threadSuspended=true; //we want to suspend ourself after one run
try
***************
*** 134,138 ****
public void onSenseBody()
{
! m_actions.performAction(); //perform the next skill in our "Aktion-List"
}
--- 129,133 ----
public void onSenseBody()
{
! m_actions.activatePerformCounter(); //perform the next skill in our "Aktion-List"
}
***************
*** 214,230 ****
if ((m_myWorld.isPlayingLeft()&& f_forLeftSide) || (!m_myWorld.isPlayingLeft()&& !f_forLeftSide )){
! if ( HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getX() < 0)
! l_tempCoord.setX(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getX());
else l_tempCoord.setX(-5);
! l_tempCoord.setY(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getY());
}
else{
! if ( HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getX() < 0)
! l_tempCoord.setX(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getX());
! else if ( Math.abs(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getY()) < 11)
l_tempCoord.setX(-10);
else
l_tempCoord.setX(-5);
! l_tempCoord.setY(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getY());
}
--- 209,225 ----
if ((m_myWorld.isPlayingLeft()&& f_forLeftSide) || (!m_myWorld.isPlayingLeft()&& !f_forLeftSide )){
! if ( HOMEPOS[m_myWorld.getMyself().getBackNumber()].getX() < 0)
! l_tempCoord.setX(HOMEPOS[m_myWorld.getMyself().getBackNumber()].getX());
else l_tempCoord.setX(-5);
! l_tempCoord.setY(HOMEPOS[m_myWorld.getMyself().getBackNumber()].getY());
}
else{
! if ( HOMEPOS[m_myWorld.getMyself().getBackNumber()].getX() < 0)
! l_tempCoord.setX(HOMEPOS[m_myWorld.getMyself().getBackNumber()].getX());
! else if ( Math.abs(HOMEPOS[m_myWorld.getMyself().getBackNumber()].getY()) < 11)
l_tempCoord.setX(-10);
else
l_tempCoord.setX(-5);
! l_tempCoord.setY(HOMEPOS[m_myWorld.getMyself().getBackNumber()].getY());
}
***************
*** 254,260 ****
else if (nearestToTheBall()){
if(m_myWorld.getBall().isBallKickableBy(m_myWorld.getMyself()))
! m_actions.kickTo(MAXPOWER,ENEMY_GOAL_POS,2); // schön ausrichten und voll draufhauen
else
! m_actions.runTo(NORMPOWER,m_myWorld.getBall());
}
}
--- 249,255 ----
else if (nearestToTheBall()){
if(m_myWorld.getBall().isBallKickableBy(m_myWorld.getMyself()))
! m_actions.kickTo(MAXPOWER,ENEMY_GOAL_POS,0); // schön ausrichten und voll draufhauen
else
! m_actions.runTo(NORMPOWER,m_myWorld.getBall(), m_myState.m_currentViewMode);
}
}
***************
*** 297,307 ****
l_tempPlayer =checkForPassPartner(10);
if (l_tempPlayer != null)
! passTo(l_tempPlayer,2);
else
! kickTo(ENEMY_GOAL_POS,2);
}
else
{
! m_actions.runTo(MINPOWER, m_myWorld.getBall());
}
}
--- 292,302 ----
l_tempPlayer =checkForPassPartner(10);
if (l_tempPlayer != null)
! passTo(l_tempPlayer,0);
else
! kickTo(ENEMY_GOAL_POS,0);
}
else
{
! m_actions.runTo(MINPOWER, m_myWorld.getBall(), m_myState.m_currentViewMode);
}
}
***************
*** 336,346 ****
l_tempPlayer =checkForPassPartner(10);
if (l_tempPlayer != null)
! passTo(l_tempPlayer,2);
else
! kickTo(ENEMY_GOAL_POS,2);
}
else
{
! m_actions.runTo(MAXPOWER, m_myWorld.getBall() );
}
--- 331,341 ----
l_tempPlayer =checkForPassPartner(10);
if (l_tempPlayer != null)
! passTo(l_tempPlayer,0);
else
! kickTo(ENEMY_GOAL_POS,0);
}
else
{
! m_actions.runTo(MAXPOWER, m_myWorld.getBall(), m_myState.m_currentViewMode);
}
***************
*** 393,405 ****
private void watchBall()
{
! m_actions.turn(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
! /* if (Math.abs (m_myWorld.getSenseBodyInfo().getNeckDirection()) < 35 )
! m_actions.turnNeck(m_myWorld.getBall().getDirection());
! else
! {
! m_actions.turn(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
! m_actions.turnNeck(-m_myWorld.getSenseBodyInfo().getNeckDirection());
! }
! */
}
--- 388,393 ----
private void watchBall()
{
! if (Math.abs(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()))>0.2)
! m_actions.turn(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
}
***************
*** 424,428 ****
while (l_zaehler < MAX_LOOKING_FORWARD_TIME )
{
! l_zaehler+=3;
l_nextDistance = m_myWorld.getMyself().getDistanceTo(getBallPosInRound(l_zaehler));
if (l_nextDistance < l_smallestDistance)
--- 412,416 ----
while (l_zaehler < MAX_LOOKING_FORWARD_TIME )
{
! l_zaehler+=m_myState.m_currentViewMode+1;
l_nextDistance = m_myWorld.getMyself().getDistanceTo(getBallPosInRound(l_zaehler));
if (l_nextDistance < l_smallestDistance)
***************
*** 442,446 ****
{
l_myTempPos=l_myTempPos.add(l_diffPos.scaleWith(3));
! l_zaehler+=3;
l_nextDistance = l_myTempPos.getDistanceTo(getBallPosInRound(l_zaehler));
if (l_nextDistance < l_smallestDistance)
--- 430,434 ----
{
l_myTempPos=l_myTempPos.add(l_diffPos.scaleWith(3));
! l_zaehler+=m_myState.m_currentViewMode+1;
l_nextDistance = l_myTempPos.getDistanceTo(getBallPosInRound(l_zaehler));
if (l_nextDistance < l_smallestDistance)
***************
*** 451,460 ****
}
}
! m_actions.runTo(MAXPOWER,getBallPosInRound(l_estimatedCyclesToReachTheBall));
}
// else if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null)
// m_actions.runTo(MAXPOWER,m_myWorld.getBall().getAbsPositionOfNextRound());
else //ball doesnt move so simply go to its position
! m_actions.runTo(MAXPOWER,m_myWorld.getBall());
}
--- 439,448 ----
}
}
! m_actions.runTo(MAXPOWER,getBallPosInRound(l_estimatedCyclesToReachTheBall), m_myState.m_currentViewMode);
}
// else if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null)
// m_actions.runTo(MAXPOWER,m_myWorld.getBall().getAbsPositionOfNextRound());
else //ball doesnt move so simply go to its position
! m_actions.runTo(MAXPOWER,m_myWorld.getBall(), m_myState.m_currentViewMode);
}
***************
*** 497,500 ****
--- 485,489 ----
int l_cycle=isBallKickableByMe();
if (l_cycle >= 0) //hab den ball
+ // if(m_myWorld.getBall().isVisible() && m_myWorld.getBall().isBallKickableBy(m_myWorld.getMyself()))
{
l_tempCoord = checkGoalKick();
***************
*** 574,578 ****
if(m_myWorld.getMyself().getAbsPosition().getX()>l_offsideBarrier-3)
{
! m_actions.runTo(NORMPOWER + 10, new Coordinate( l_offsideBarrier-8, HOMEPOS[1][m_myWorld.getMyself().getBackNumber()].getY()));
}
else if(atHomepos())
--- 563,567 ----
if(m_myWorld.getMyself().getAbsPosition().getX()>l_offsideBarrier-3)
{
! m_actions.runTo(NORMPOWER + 10, new Coordinate( l_offsideBarrier-8, HOMEPOS[m_myWorld.getMyself().getBackNumber()].getY()), m_myState.m_currentViewMode);
}
else if(atHomepos())
***************
*** 582,586 ****
if (m_myWorld.getSenseBodyInfo().m_stamina > 1000)
//m_actions.runTo (NORMPOWER + 10, HOMEPOS[m_myState.getState()][m_myWorld.getMyself().getBackNumber()]);
! m_actions.runTo (NORMPOWER + 10, HOMEPOS[1][m_myWorld.getMyself().getBackNumber()]);
}
}
--- 571,575 ----
if (m_myWorld.getSenseBodyInfo().m_stamina > 1000)
//m_actions.runTo (NORMPOWER + 10, HOMEPOS[m_myState.getState()][m_myWorld.getMyself().getBackNumber()]);
! m_actions.runTo(NORMPOWER + 10, HOMEPOS[m_myWorld.getMyself().getBackNumber()], m_myState.m_currentViewMode);
}
}
***************
*** 602,606 ****
l_runToPos.setY(MY_GOAL_POS.getY() + (-Math.sin(l_angleOfBall) * f_radius));
if (Math.abs(m_myWorld.getMyself().getDistanceTo(l_runToPos)) > 0.8)
! m_actions.runTo(MAXPOWER, l_runToPos);
else
watchBall();
--- 591,595 ----
l_runToPos.setY(MY_GOAL_POS.getY() + (-Math.sin(l_angleOfBall) * f_radius));
if (Math.abs(m_myWorld.getMyself().getDistanceTo(l_runToPos)) > 0.8)
! m_actions.runTo(MAXPOWER, l_runToPos, m_myState.m_currentViewMode);
else
watchBall();
***************
*** 613,617 ****
private void gotoEnemy(PlayerInfo f_player)
{
! m_actions.runTo(MAXPOWER, f_player.getAbsPosition());
}
--- 602,606 ----
private void gotoEnemy(PlayerInfo f_player)
{
! m_actions.runTo(MAXPOWER, f_player.getAbsPosition(), m_myState.m_currentViewMode);
}
***************
*** 963,967 ****
//if (m_myWorld.getMyself().getDistanceTo(HOMEPOS[m_myState.getState()][m_myWorld.getMyself().getBackNumber()]) > HOMERANGE_R)
! if (m_myWorld.getMyself().getDistanceTo(HOMEPOS[1][m_myWorld.getMyself().getBackNumber()]) > HOMERANGE_R)
return false;
else return true; //at homepos
--- 952,956 ----
//if (m_myWorld.getMyself().getDistanceTo(HOMEPOS[m_myState.getState()][m_myWorld.getMyself().getBackNumber()]) > HOMERANGE_R)
! if (m_myWorld.getMyself().getDistanceTo(HOMEPOS[m_myWorld.getMyself().getBackNumber()]) > HOMERANGE_R)
return false;
else return true; //at homepos
***************
*** 1065,1068 ****
--- 1054,1058 ----
m_KIThread=this;
m_KIThread.start();
+ m_actions.startActionPerformer();
}
***************
*** 1074,1077 ****
--- 1064,1068 ----
{
m_KIThread = null; //get a clean outcome
+ m_actions.stopActionPerformer();
notify();
}
***************
*** 1106,1146 ****
return 1;
}
- else if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null && m_myWorld.getMyself().getDistanceTo( getBallPosInRound(2)) < ServerConf.KICKABLE_MARGIN + (ServerConf.PLAYER_SIZE / 2 ) + (ServerConf.BALL_SIZE / 2))
- {
- // logger.debug("Pos in next: (2)" + m_myWorld.getBall().getAbsPositionOfNextRound());
- // logger.debug("dist to ball in next round"+m_myWorld.getMyself().getDistanceTo( getBallPosInRound(2)));
- return 2;
- }
- else
- {
- return -1;
- }
}
return -1;
}
private void manageViewMode()
{
if(!m_myWorld.getBall().isVisible())
{
! m_actions.changeView(SenseBodyInfo.WIDE,true);
! m_myState.m_currentViewMode=SenseBodyInfo.WIDE;
}
! else if (m_myWorld.getMyDistanceTo(m_myWorld.getBall())< 5)
{
! m_actions.changeView(SenseBodyInfo.NARROW,true);
m_myState.m_currentViewMode=SenseBodyInfo.NARROW;
}
! else if (m_myWorld.getMyDistanceTo(m_myWorld.getBall())< 20)
{
! m_actions.changeView(SenseBodyInfo.NORMAL,true);
m_myState.m_currentViewMode=SenseBodyInfo.NORMAL;
}
else
{
! m_actions.changeView(SenseBodyInfo.WIDE,true);
m_myState.m_currentViewMode=SenseBodyInfo.WIDE;
}
}
}
-
--- 1097,1144 ----
return 1;
}
}
return -1;
}
+ /**
+ * This method manages the viewMode of our Players.
+ * If the ball IS NOT visible it turns to normal mode, if it is not visible for a longer time, it turns to WIDE mode
+ * If the ball IS visible and distance is < 40 it turns to WIDE, else NORMAL , else to NARROW
+ */
private void manageViewMode()
{
if(!m_myWorld.getBall().isVisible())
{
! if (m_myWorld.sorry_whatTimeDoWeHave()-m_myWorld.getBall().getTime()>6)
! {
! if (m_myState.m_currentViewMode!=SenseBodyInfo.WIDE)
! m_actions.changeView(SenseBodyInfo.WIDE,true);
! m_myState.m_currentViewMode=SenseBodyInfo.WIDE;
! }
! else
! {
! if (m_myState.m_currentViewMode!=SenseBodyInfo.NORMAL)
! m_actions.changeView(SenseBodyInfo.NORMAL,true);
! m_myState.m_currentViewMode=SenseBodyInfo.NORMAL;
! }
}
! else if (m_myWorld.getMyDistanceTo(m_myWorld.getBall())< 2)
{
! if (m_myState.m_currentViewMode!=SenseBodyInfo.NARROW)
! m_actions.changeView(SenseBodyInfo.NARROW,true);
m_myState.m_currentViewMode=SenseBodyInfo.NARROW;
}
! else if (m_myWorld.getMyDistanceTo(m_myWorld.getBall())< 40)
{
! if (m_myState.m_currentViewMode!=SenseBodyInfo.NORMAL)
! m_actions.changeView(SenseBodyInfo.NORMAL,true);
m_myState.m_currentViewMode=SenseBodyInfo.NORMAL;
}
else
{
! if (m_myState.m_currentViewMode!=SenseBodyInfo.WIDE)
! m_actions.changeView(SenseBodyInfo.WIDE,true);
m_myState.m_currentViewMode=SenseBodyInfo.WIDE;
}
}
}
Index: ActionManager.java
===================================================================
RCS file: /cvsroot/jais/jaisteam/src/jais/player/ActionManager.java,v
retrieving revision 1.59
retrieving revision 1.60
diff -C2 -d -r1.59 -r1.60
*** ActionManager.java 13 Jul 2002 20:29:24 -0000 1.59
--- ActionManager.java 14 Jul 2002 14:01:23 -0000 1.60
***************
*** 17,21 ****
*/
! public class ActionManager
{
--- 17,21 ----
*/
! public class ActionManager extends Thread
{
***************
*** 23,29 ****
// Params for the RunTo-Method
! private final double SLOWDOWN =0.3;
! private final double TOLERANCEANGLE=4;
! private final double BREAKDISTANCE = 2;
// Params for the kickTo-Method
private final double MINDISTTOBALL=0.5;
--- 23,27 ----
// Params for the RunTo-Method
! private final double TOLERANCEANGLE=15;
// Params for the kickTo-Method
private final double MINDISTTOBALL=0.5;
***************
*** 49,53 ****
private static Logger logger=Logger.getLogger("jais.player");
!
/**
* Creates a new <code>ActionManager</code> instance.
--- 47,52 ----
private static Logger logger=Logger.getLogger("jais.player");
! private Thread m_performerThread;
! private boolean m_threadSuspended;
/**
* Creates a new <code>ActionManager</code> instance.
***************
*** 57,62 ****
* @roseuid 3CEB6AAA0062
*/
! public ActionManager(WorldModel f_myWorld, Communication f_myCom)
{
m_myWorld = f_myWorld;
m_myCom = f_myCom;
--- 56,62 ----
* @roseuid 3CEB6AAA0062
*/
! public ActionManager(WorldModel f_myWorld, Communication f_myCom, int f_playerNumber)
{
+ this.setName("ActionPerformer"+f_playerNumber);
m_myWorld = f_myWorld;
m_myCom = f_myCom;
***************
*** 77,95 ****
case 0:
// Ball ist nah genug zu kicken
! m_actionList.addLast(new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
! m_actionList.addLast(new Action(TURN, m_myWorld.getBodyDirectionTo(f_position) , 0));
! m_actionList.addLast(new Action(DASH, f_power , 0));
break;
case 1:
nop();
! m_actionList.addLast(new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
! m_actionList.addLast(new Action(TURN, m_myWorld.getBodyDirectionTo(f_position) , 0));
break;
case 2:
nop();
nop();
! m_actionList.addLast(new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
break;
--- 77,95 ----
case 0:
// Ball ist nah genug zu kicken
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
! m_actionList.add(m_actionList.size(),new Action(TURN, m_myWorld.getBodyDirectionTo(f_position) , 0));
! m_actionList.add(m_actionList.size(),new Action(DASH, f_power , 0));
break;
case 1:
nop();
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
! m_actionList.add(m_actionList.size(),new Action(TURN, m_myWorld.getBodyDirectionTo(f_position) , 0));
break;
case 2:
nop();
nop();
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power * DRIBBELKICKPOWER ,
m_myWorld.getBodyDirectionTo(f_position)));
break;
***************
*** 121,142 ****
double l_kickDir;
// logger.debug("cycle " + f_cycle);
! switch(f_cycle){
case 0:
l_kickDir=m_myWorld.getBodyDirectionTo(f_position);
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
! // nop();
! // nop();
break;
case 1:
// Is Ball moving?
! System.out.println("wanted to kick in 1 cycle");
if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null)
{
// Position of the ball when finally kicking
l_posDiff=m_myWorld.getBall().getAbsPositionOfNextRound().sub(m_myWorld.getBall().getAbsPosition());
! l_posOfBallOverNextRound=m_myWorld.getBall().getAbsPositionOfNextRound().add(l_posDiff.scaleWith(ServerConf.BALL_DECAY));
! l_dashPwr= edp2pwr(m_myWorld.getMyself().getDistanceTo(l_posOfBallOverNextRound)-MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! *ServerConf.PLAYER_DECAY *ServerConf.PLAYER_DECAY ));
}
else
--- 121,139 ----
double l_kickDir;
// logger.debug("cycle " + f_cycle);
! switch(f_cycle)
! {
case 0:
l_kickDir=m_myWorld.getBodyDirectionTo(f_position);
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power, l_kickDir ));
break;
case 1:
// Is Ball moving?
! System.out.println("wanted to kick in 1 cycle");
if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null)
{
// Position of the ball when finally kicking
l_posDiff=m_myWorld.getBall().getAbsPositionOfNextRound().sub(m_myWorld.getBall().getAbsPosition());
! l_dashPwr= edp2pwr(m_myWorld.getMyself().getDistanceTo(m_myWorld.getBall().getAbsPositionOfNextRound())-MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed ));
}
else
***************
*** 145,158 ****
l_dashPwr= edp2pwr( m_myWorld.getMyself().getDistanceTo( m_myWorld.getBall().getAbsPosition()) -MINDISTTOBALL
-(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! *ServerConf.PLAYER_DECAY *ServerConf.PLAYER_DECAY ));
}
l_kickDir=m_myWorld.getBodyDirectionTo(f_position)- l_turnedDirection ;
! m_actionList.addLast(new Action(DASH,l_dashPwr , 0));
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
// nop();
break;
! case 2:
! System.out.println("wanted to kick in 2 cycle");
// Is Ball moving?
if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null) {
--- 142,155 ----
l_dashPwr= edp2pwr( m_myWorld.getMyself().getDistanceTo( m_myWorld.getBall().getAbsPosition()) -MINDISTTOBALL
-(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! ));
}
l_kickDir=m_myWorld.getBodyDirectionTo(f_position)- l_turnedDirection ;
! m_actionList.add(m_actionList.size(),new Action(DASH,l_dashPwr , 0));
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power, l_kickDir ));
// nop();
break;
! /* case 2:
! System.out.println("wanted to kick in 2 cycle");
// Is Ball moving?
if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null) {
***************
*** 182,188 ****
//l_dashPwr=Math.max(0,l_dashPwr);
l_dashPwr=Math.min(100,l_dashPwr);
! m_actionList.addLast(new Action(TURN, l_moment, 0));
! m_actionList.addLast(new Action(DASH, l_dashPwr,0));
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
// logger.debug("Turn: " + l_moment + " DashPwr: " + l_dashPwr + " KickDir: " + l_kickDir );
--- 179,185 ----
//l_dashPwr=Math.max(0,l_dashPwr);
l_dashPwr=Math.min(100,l_dashPwr);
! m_actionList.add(m_actionList.size(),new Action(TURN, l_moment, 0));
! m_actionList.add(m_actionList.size(),new Action(DASH, l_dashPwr,0));
! m_actionList.add(m_actionList.size(),new Action(KICK, f_power, l_kickDir ));
// logger.debug("Turn: " + l_moment + " DashPwr: " + l_dashPwr + " KickDir: " + l_kickDir );
***************
*** 192,195 ****
--- 189,193 ----
default:
logger.debug("Hier hat jemand den falschen Cycle errechnet");
+ */
}
}
***************
*** 205,288 ****
public void kickTo(double f_power, ObjectInfo f_Object, int f_cycle)
{
! double l_turnedDirection=m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
! double l_moment= l_turnedDirection * moment();
! Coordinate l_posOfBallInNextRound=null;
! Coordinate l_posOfBallOverNextRound=null;
! Coordinate l_posOfBallOverOverNextRound=null;
! Coordinate l_posDiff=null;
! double l_dashPwr;
! double l_kickDir;
! // logger.debug("cycle " + f_cycle);
! switch(f_cycle){
! case 0:
! l_kickDir=m_myWorld.getBodyDirectionTo(f_Object );
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
! // nop();
! // nop();
! break;
! case 1:
! // Is Ball moving?
! System.out.println("wanted to kick in 1 cycle");
! if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null)
! {
! // Position of the ball when finally kicking
! l_posDiff=m_myWorld.getBall().getAbsPositionOfNextRound().sub(m_myWorld.getBall().getAbsPosition());
! l_posOfBallOverNextRound=m_myWorld.getBall().getAbsPositionOfNextRound().add(l_posDiff.scaleWith(ServerConf.BALL_DECAY));
! l_dashPwr= edp2pwr(m_myWorld.getMyself().getDistanceTo(l_posOfBallOverNextRound)-MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! *ServerConf.PLAYER_DECAY *ServerConf.PLAYER_DECAY ));
! }
! else
! {
! //Ball is not moving, but maybe myself
! l_dashPwr= edp2pwr( m_myWorld.getMyself().getDistanceTo( m_myWorld.getBall().getAbsPosition()) -MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! *ServerConf.PLAYER_DECAY *ServerConf.PLAYER_DECAY ));
! }
! l_kickDir=m_myWorld.getBodyDirectionTo(f_Object )- l_turnedDirection ;
! m_actionList.addLast(new Action(DASH,l_dashPwr , 0));
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
! // nop();
! break;
! case 2:
! // Is Ball moving?
! System.out.println("wanted to kick in 2 cycle");
! if (m_myWorld.getBall().getAbsPositionOfNextRound()!=null) {
! // Position of the ball when finally kicking
! l_posDiff=m_myWorld.getBall().getAbsPositionOfNextRound().sub(m_myWorld.getBall().getAbsPosition());
! l_posOfBallOverOverNextRound=m_myWorld.getBall().getAbsPositionOfNextRound().
! add(l_posDiff.scaleWith(ServerConf.BALL_DECAY)).
! add(l_posDiff.scaleWith(ServerConf.BALL_DECAY*ServerConf.BALL_DECAY));
!
! // Direction of the ball when finally kicking
! l_turnedDirection=m_myWorld.getBodyDirectionTo(l_posOfBallOverOverNextRound);
! // Moment of the ball when finally kicking
! l_moment= l_turnedDirection * moment();
! l_dashPwr= edp2pwr(m_myWorld.getMyself().getDistanceTo(l_posOfBallOverOverNextRound)-MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed
! *Math.pow(ServerConf.PLAYER_DECAY,3)));
! }
! else{
! //Ball is not moving, but maybe myself
! l_turnedDirection=m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
! l_moment= l_turnedDirection * moment();
! l_dashPwr= edp2pwr(m_myWorld.getBall().getDistance()-MINDISTTOBALL
! -(m_myWorld.getSenseBodyInfo().m_amountOfSpeed* Math.pow(ServerConf.PLAYER_DECAY,3)));
! }
!
! l_kickDir=m_myWorld.getBodyDirectionTo(f_Object )- l_turnedDirection ;
! //l_dashPwr=Math.max(0,l_dashPwr);
! l_dashPwr=Math.min(100,l_dashPwr);
! m_actionList.addLast(new Action(TURN, l_moment, 0));
! m_actionList.addLast(new Action(DASH, l_dashPwr,0));
! m_actionList.addLast(new Action(KICK, f_power, l_kickDir ));
!
! // logger.debug("Turn: " + l_moment + " DashPwr: " + l_dashPwr + " KickDir: " + l_kickDir );
! // logger.debug("distance: " + m_myWorld.getBall().getDistance()+ " dashpower: " + l_dashPwr);
! // logger.debug("speed: " + m_myWorld.getSenseBodyInfo().m_amountOfSpeed );
! break;
! default:
! logger.debug("Hier hat jemand den falschen Cycle errechnet");
! }
}
--- 203,207 ----
public void kickTo(double f_power, ObjectInfo f_Object, int f_cycle)
{
! kickTo(f_power,f_Object.getAbsPosition(),f_cycle);
}
***************
*** 304,309 ****
{
m_myCom.kick(( (Action) m_actionList.getFirst() ).getActionValue1(), ( (Action) m_actionList.getFirst() ).getActionValue2());
! // logger.warn(" --- KICK send to Server ---") ;
! //turn our head to where we kicked the ball
l_actionAngle=((Action)m_actionList.getFirst()).getActionValue2()/moment();
}
--- 223,227 ----
{
m_myCom.kick(( (Action) m_actionList.getFirst() ).getActionValue1(), ( (Action) m_actionList.getFirst() ).getActionValue2());
! //turn our head to where we kicked the ball to
l_actionAngle=((Action)m_actionList.getFirst()).getActionValue2()/moment();
}
***************
*** 313,317 ****
}
! m_myWorld.informKick(( (Action) m_actionList.getFirst() ).getActionValue1(), l_actionAngle );
break;
--- 231,235 ----
}
! // m_myWorld.informKick(( (Action) m_actionList.getFirst() ).getActionValue1(), l_actionAngle );
break;
***************
*** 321,330 ****
m_myCom.turn(((Action)m_actionList.getFirst()).getActionValue1());
l_actionAngle=(((Action)m_actionList.getFirst()).getActionValue1() / moment());
! /*
! if (m_actionList.size() < 3 && ((Action)m_actionList.getFirst()).getActionValue2() > -50) // correct view angle
! m_myCom.turnNeck(-((Action)m_actionList.getFirst()).getActionValue1());
! */
! // logger.warn(" --- TURN send to Server ---");
!
}
catch (xCommunication xCom)
--- 239,243 ----
m_myCom.turn(((Action)m_actionList.getFirst()).getActionValue1());
l_actionAngle=(((Action)m_actionList.getFirst()).getActionValue1() / moment());
! // nop();
}
catch (xCommunication xCom)
***************
*** 332,336 ****
logger.debug("Could not send turn action!"+xCom.getMessage());
}
! m_myWorld.informTurn(l_actionAngle );
break;
--- 245,249 ----
logger.debug("Could not send turn action!"+xCom.getMessage());
}
! // m_myWorld.informTurn(l_actionAngle );
break;
***************
*** 339,348 ****
{
m_myCom.dash(((Action)m_actionList.getFirst()).getActionValue1());
! if(!m_visualUpdateHappened)
{
! if (m_myWorld.getBall().isVisible())
! {
! /** @todo turn neck here, so we dont loose ball when dashing */
! }
}
}
--- 252,259 ----
{
m_myCom.dash(((Action)m_actionList.getFirst()).getActionValue1());
! // m_myWorld.informDash(((Action)m_actionList.getFirst()).getActionValue1());
! if (m_myWorld.getBall().isVisible())
{
! /** @todo turn neck here, so we dont loose ball when dashing */
}
}
***************
*** 351,355 ****
logger.debug("Could not send dash action!"+xCom.getMessage());
}
! m_myWorld.informDash(((Action)m_actionList.getFirst()).getActionValue1());
// logger.warn(" --- DASH send to Server ---") ;
break;
--- 262,266 ----
logger.debug("Could not send dash action!"+xCom.getMessage());
}
!
// logger.warn(" --- DASH send to Server ---") ;
break;
***************
*** 365,369 ****
}
! m_myWorld.informMove(((Action)m_actionList.getFirst()).getActionValue1(), ( (Action) m_actionList.getFirst() ).getActionValue2());
// logger.warn(" --- MOVE send to Server ---") ;
break;
--- 276,280 ----
}
! // m_myWorld.informMove(((Action)m_actionList.getFirst()).getActionValue1(), ( (Action) m_actionList.getFirst() ).getActionValue2());
// logger.warn(" --- MOVE send to Server ---") ;
break;
***************
*** 379,383 ****
}
! m_myWorld.informCatchBall(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
break;
case SAY:
--- 290,294 ----
}
! // m_myWorld.informCatchBall(m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
break;
case SAY:
***************
*** 407,411 ****
double l_angleToBall=m_myWorld.getBall().getDirection();
m_myCom.turnNeck(l_angleToBall-l_actionAngle);
! m_myWorld.informTurnNeck(l_angleToBall-l_actionAngle);
m_visualUpdateHappened=false;
}
--- 318,322 ----
double l_angleToBall=m_myWorld.getBall().getDirection();
m_myCom.turnNeck(l_angleToBall-l_actionAngle);
! // m_myWorld.informTurnNeck(l_angleToBall-l_actionAngle);
m_visualUpdateHappened=false;
}
***************
*** 413,422 ****
{
m_myCom.turnNeck(l_actionAngle);
! m_myWorld.informTurnNeck(l_actionAngle);
}
else
{
m_myCom.turnNeck(-m_myWorld.getNeckDirection());
! m_myWorld.informTurnNeck(-m_myWorld.getNeckDirection());
}
}
--- 324,333 ----
{
m_myCom.turnNeck(l_actionAngle);
! // m_myWorld.informTurnNeck(l_actionAngle);
}
else
{
m_myCom.turnNeck(-m_myWorld.getNeckDirection());
! // m_myWorld.informTurnNeck(-m_myWorld.getNeckDirection());
}
}
***************
*** 426,430 ****
}
}
! m_actionList.removeFirst();
}
else //action list is empty
--- 337,341 ----
}
}
! m_actionList.remove(0);
}
else //action list is empty
***************
*** 441,445 ****
public void run(int f_power)
{
! m_actionList.addLast(new Action(DASH, f_power, 0));
// nop();
// nop();
--- 352,356 ----
public void run(int f_power)
{
! m_actionList.add(m_actionList.size(),new Action(DASH, f_power, 0));
// nop();
// nop();
***************
*** 453,461 ****
* @roseuid 3CE8EFE00170
*/
! public void runTo(double f_power,Coordinate f_position)
{
double l_power;
double l_deltaAngle=m_myWorld.getBodyDirectionTo(f_position);
double l_moment= l_deltaAngle * moment();
// Rückwarts rennen
// if (runAback(f_position)) {
--- 364,374 ----
* @roseuid 3CE8EFE00170
*/
! public void runTo(double f_power,Coordinate f_position, int f_cycles)
{
double l_power;
double l_deltaAngle=m_myWorld.getBodyDirectionTo(f_position);
double l_moment= l_deltaAngle * moment();
+ double l_percentageOfPower=f_power/100;
+ boolean l_turnHappened=false;
// Rückwarts rennen
// if (runAback(f_position)) {
***************
*** 468,502 ****
// }
-
// Muss ich mich zum Ball drehen?
// JA
! if (Math.abs(l_deltaAngle) > TOLERANCEANGLE){
! //Power auf zwei DASH aufteilen
! // Voller Power
! if (m_myWorld.getMyself().getDistanceTo(f_position) > getDistanceFromAccel2(pwr2edp(f_power )))
! l_power=f_power;
! // Power der Gesch. und Dist. anpassen
! else
! l_power=edp2pwr(getAccelFromDistance2(m_myWorld.getMyself().getDistanceTo(f_position)-MINDISTTOBALL));
!
! m_actionList.addLast(new Action(TURN, l_moment, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! // logger.debug("-----Drehmoment: " + l_moment + " gewünschter Winkel: " + l_deltaAngle );
! // logger.debug("----- Power(Pos-Turn) : "+ l_Power + " D: " + m_myWorld.getMyself().getDistanceTo(f_position) );
}
! // NEIN
! else {
! //Power auf drei DASH aufteilen
! // Voller Power
! if (m_myWorld.getMyself().getDistanceTo(f_position) > getDistanceFromAccel3(pwr2edp( f_power )))
! l_power=f_power;
! // Power der Gesch. und Dist. anpassen
! else
! l_power=edp2pwr(getAccelFromDistance3(m_myWorld.getMyself().getDistanceTo(f_position)-MINDISTTOBALL));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! // logger.debug("----- Power(Pos-No-Turn): "+ l_Power +" D: "+m_myWorld.getMyself().getDistanceTo(f_position) );
}
}
--- 381,426 ----
// }
// Muss ich mich zum Ball drehen?
// JA
! if(Math.abs(l_deltaAngle)>TOLERANCEANGLE)
! {
! m_actionList.add(new Action(TURN,l_moment,0));
! l_turnHappened=true;
}
! // logger.fatal("running to ball (turned)?" + l_turnHappened +" cycles "+ f_cycles +" moment "+ l_moment + " l_deltaAngle " +l_deltaAngle );
! // logger.fatal("absbodydirtoball"+m_myWorld.getBodyDirectionTo(m_myWorld.getBall()));
! switch(f_cycles)
! {
! case SenseBodyInfo.NARROW:
! if (!l_turnHappened)
! {
! l_power=edp2pwr((m_myWorld.getMyDistanceTo(f_position)-ServerConf.BALL_SIZE/2-ServerConf.PLAYER_SIZE/2-m_myWorld.getSenseBodyInfo().m_amountOfSpeed));
! m_actionList.add(new Action(DASH,Math.min(100,l_power),0));
! }
! break;
! case SenseBodyInfo.NORMAL:
! if(l_turnHappened)
! m_actionList.add(new Action(DASH,f_power,0));
! else
! {
! m_actionList.add(new Action(DASH,f_power,0));
! m_actionList.add(new Action(DASH,f_power,0));
! }
! break;
! case SenseBodyInfo.WIDE:
! if(!l_turnHappened)
! {
! m_actionList.add(new Action(DASH,f_power,0));
! m_actionList.add(new Action(DASH,f_power,0));
! m_actionList.add(new Action(DASH,f_power,0));
! }
! else
! {
! m_actionList.add(new Action(DASH,f_power,0));
! m_actionList.add(new Action(DASH,f_power,0));
! }
! break;
! default:
! return;
}
}
***************
*** 505,562 ****
/**
! * Run to an <code>ObjectInfo</code> with a given power
*
* @param f_power a <code>double</code> value
* @param f_Object an <code>ObjectInfo</code> value
*/
! public void runTo(double f_power,ObjectInfo f_Object)
{
! double l_power;
! double l_deltaAngle=m_myWorld.getBodyDirectionTo( f_Object );
! double l_moment=l_deltaAngle * moment();
!
!
!
! // if (runAback(f_Object.getAbsPosition())) {
! // f_power = -f_power;
! // l_correctedPower = -l_correctedPower;
! // if (l_deltaAngle > 0)
! // l_deltaAngle -= 180;
! // else
! // l_deltaAngle += 180;
! // }
!
! // Muss ich mich zum Ball drehen?
! // JA
! if (Math.abs(l_deltaAngle) > TOLERANCEANGLE){
! //Power auf zwei DASH aufteilen
! // Voller Power
! if ( m_myWorld.getMyDistanceTo(f_Object) > getDistanceFromAccel2(pwr2edp(f_power )))
! l_power=f_power;
! // Power der Gesch. und Dist. anpassen
! else
! l_power=edp2pwr(getAccelFromDistance2( m_myWorld.getMyDistanceTo(f_Object)-MINDISTTOBALL));
! m_actionList.addLast(new Action(TURN, l_moment, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! // logger.debug("-----Drehmoment: " + l_moment + " gewünschter Winkel: " + l_deltaAngle );
!
! // logger.debug("----- Power(Obj-Turn): "+ l_Power+ " D: " + m_myWorld.getMyDistanceTo(f_Object) );
! }
! // NEIN
! else{
! //Power auf drei DASH aufteilen
! // Voller Power
! if ( m_myWorld.getMyDistanceTo(f_Object) > getDistanceFromAccel3(pwr2edp(f_power )))
! l_power=f_power;
! // Power der Gesch. und Dist. anpassen
! else
! l_power=edp2pwr(getAccelFromDistance3( m_myWorld.getMyDistanceTo(f_Object)-MINDISTTOBALL));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
! m_actionList.addLast(new Action(DASH, l_power, 0));
!
! // logger.debug("----- Power(Obj-No-Turn): "+ l_Power + " D: " + m_myWorld.getMyDistanceTo(f_Object) );
! }
}
--- 429,440 ----
/**
! * Wrapper for runTo with an ObjectInfo
*
* @param f_power a <code>double</code> value
* @param f_Object an <code>ObjectInfo</code> value
*/
! public void runTo(double f_power,ObjectInfo f_Object, int f_cycles)
{
! runTo(f_power,f_Object.getAbsPosition(), f_cycles);
}
***************
*** 570,574 ****
public void turn(double f_angle)
{
! m_actionList.addLast(new Action(TURN, f_angle*moment(), -100));
// nop();
// nop();
--- 448,452 ----
public void turn(double f_angle)
{
! m_actionList.add(m_actionList.size(),new Action(TURN, f_angle*moment(), -100));
// nop();
// nop();
***************
*** 587,609 ****
case 0:
l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
! m_actionList.addLast(new Action(CATCHBALL, l_deltaAngle, 0));
// nop();
// nop();
break;
case 1:
! l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
nop();
! m_actionList.addLast(new Action(CATCHBALL, l_deltaAngle, 0));
// nop();
break;
case 2:
! l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
nop();
nop();
! m_actionList.addLast(new Action(CATCHBALL, l_deltaAngle, 0));
break;
}
-
- //m_myState.IncActionCounter();
}
--- 465,486 ----
case 0:
l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall());
! m_actionList.add(m_actionList.size(),new Action(CATCHBALL, l_deltaAngle, 0));
// nop();
// nop();
break;
case 1:
! l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall().getAbsPositionOfNextRound());
nop();
! m_actionList.add(m_actionList.size(),new Action(CATCHBALL, l_deltaAngle, 0));
// nop();
break;
case 2:
! Coordinate l_coord = m_myWorld.getBall().getAbsPositionOfNextRound().sub(m_myWorld.getBall().getAbsPosition());
! l_deltaAngle= m_myWorld.getBodyDirectionTo(m_myWorld.getBall().getAbsPositionOfNextRound().add(l_coord.scaleWith(ServerConf.BALL_DECAY)));
nop();
nop();
! m_actionList.add(m_actionList.size(),new Action(CATCHBALL, l_deltaAngle, 0));
break;
}
}
***************
*** 617,624 ****
public void moveTo(Coordinate f_coord)
{
! m_actionList.addLast(new Action(MOVE, f_coord.getX(), f_coord.getY()));
! // nop();
! // nop();
! //m_myState.IncActionCounter();
}
--- 494,498 ----
public void moveTo(Coordinate f_coord)
{
! m_actionList.add(m_actionList.size(),new Action(MOVE, f_coord.getX(), f_coord.getY()));
}
***************
*** 629,634 ****
public void nop()
{
! m_actionList.addLast(new Action(NOP, 0,0));
! //m_myState.IncActionCounter();
}
--- 503,507 ----
public void nop()
{
! m_actionList.add(m_actionList.size(),new Action(NOP, 0,0));
}
***************
*** 660,667 ****
public boolean listEmpty()
{
! boolean l_bool = false;
! if (m_actionList.isEmpty())
! l_bool = true;
! return l_bool;
}
--- 533,537 ----
public boolean listEmpty()
{
! return (m_actionList.isEmpty());
}
***************
*** 781,783 ****
--- 651,721 ----
}
}
+
+ public void run()
+ {
+ Thread l_thisThread = currentThread();
+ while(l_thisThread==m_performerThread)
+ {
+ try
+ {
+ sleep(80);
+ performAction();
+ // logger.fatal("action performed"+System.currentTimeMillis());
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ logger.fatal("running on....");
+ }
+ m_threadSuspended=true; //we want to suspend ourself after one run
+ try
+ {
+ synchronized(this)
+ {
+ while (m_threadSuspended && l_thisThread==m_performerThread) //check again if we should sleep,
+ {
+ //logger.info("\t" + getName() + ": Going to wait now for something new");
+ wait(); // this command lets our thread sleep until we wake him up
+ }
+ }
+ }
+ catch(java.lang.Exception ex)
+ {
+ //logger.info("\t" + getName() + ": ARGG! Got an exception while sleeping ... "+ ex.getMessage());
+ }
+ }//of while()
+ //logger.info("\t" + getName() + ": i've left my while-loop. run() will stop immediatly
+ }
+
+ /**
+ * With this method the KI is started at the beginning
+ *
+ */
+ public void startActionPerformer()
+ {
+ m_performerThread=this;
+ m_performerThread.start();
+ }
+
+
+ /**
+ * this method stops our Thread
+ */
+ public synchronized void stopActionPerformer()
+ {
+ m_performerThread = null; //get a clean outcome
+ notify();
+ }
+
+
+ /**
+ * this method says our thread that there's something to do
+ */
+ public synchronized void activatePerformCounter()
+ {
+ m_threadSuspended=false; // ok, he can run again if he wants to
+ notify();
+ }
+
+
}
|