Exemplo n.º 1
0
 BasicRaycast::BasicRaycast(const OgreNewt::World* world, const Ogre::Vector3& startpt, const Ogre::Vector3& endpt, bool sorted)
     : Raycast()
 {
     go( world, startpt, endpt, sorted );
 }
Exemplo n.º 2
0
static void
handle(int sig)
{
	go();
	exit(0);
}
Exemplo n.º 3
0
int main() {
    int val;

    /* Receiver waits for sender. */
    chan ch1 = chmake(int, 0);
    go(sender(chdup(ch1), 1, 333));
    val = chr(ch1, int);
    assert(val == 333);
    chclose(ch1);

    /* Sender waits for receiver. */
    chan ch2 = chmake(int, 0);
    go(sender(chdup(ch2), 0, 444));
    val = chr(ch2, int);
    assert(val == 444);
    chclose(ch2);

    /* Test two simultaneous senders. */
    chan ch3 = chmake(int, 0);
    go(sender(chdup(ch3), 0, 888));
    go(sender(chdup(ch3), 0, 999));
    val = chr(ch3, int);
    assert(val == 888);
    yield();
    val = chr(ch3, int);
    assert(val == 999);
    chclose(ch3);

    /* Test two simultaneous receivers. */
    chan ch4 = chmake(int, 0);
    go(receiver(chdup(ch4), 333));
    go(receiver(chdup(ch4), 444));
    chs(ch4, int, 333);
    chs(ch4, int, 444);
    chclose(ch4);

    /* Test typed channels. */
    chan ch5 = chmake(char, 0);
    go(charsender(chdup(ch5), 111));
    char charval = chr(ch5, char);
    assert(charval == 111);
    chclose(ch5);
    chan ch6 = chmake(struct foo, 0);
    struct foo foo1 = {555, 222};
    go(structsender(chdup(ch6), foo1));
    struct foo foo2 = chr(ch6, struct foo);
    assert(foo2.first == 555 && foo2.second == 222);
    chclose(ch6);

    /* Test message buffering. */
    chan ch7 = chmake(int, 2);
    chs(ch7, int, 222);
    chs(ch7, int, 333);
    val = chr(ch7, int);
    assert(val == 222);
    val = chr(ch7, int);
    assert(val == 333);
    chs(ch7, int, 444);
    val = chr(ch7, int);
    assert(val == 444);
    chs(ch7, int, 555);
    chs(ch7, int, 666);
    val = chr(ch7, int);
    assert(val == 555);
    val = chr(ch7, int);
    assert(val == 666);
    chclose(ch7);

    /* Test simple chdone() scenarios. */
    chan ch8 = chmake(int, 0);
    chdone(ch8, int, 777);
    val = chr(ch8, int);
    assert(val == 777);
    val = chr(ch8, int);
    assert(val == 777);
    val = chr(ch8, int);
    assert(val == 777);
    chclose(ch8);
    chan ch9 = chmake(int, 10);
    chdone(ch9, int, 888);
    val = chr(ch9, int);
    assert(val == 888);
    val = chr(ch9, int);
    assert(val == 888);
    chclose(ch9);
    chan ch10 = chmake(int, 10);
    chs(ch10, int, 999);
    chdone(ch10, int, 111);
    val = chr(ch10, int);
    assert(val == 999);
    val = chr(ch10, int);
    assert(val == 111);
    val = chr(ch10, int);
    assert(val == 111);
    chclose(ch10);
    chan ch11 = chmake(int, 1);
    chs(ch11, int, 222);
    chdone(ch11, int, 333);
    val = chr(ch11, int);
    assert(val == 222);
    val = chr(ch11, int);
    assert(val == 333);
    chclose(ch11);

    /* Test whether chdone() unblocks all receivers. */
    chan ch12 = chmake(int, 0);
    chan ch13 = chmake(int, 0);
    go(receiver2(chdup(ch12), 444, chdup(ch13)));
    go(receiver2(chdup(ch12), 444, chdup(ch13)));
    chdone(ch12, int, 444);
    val = chr(ch13, int);
    assert(val == 0);
    val = chr(ch13, int);
    assert(val == 0);
    chclose(ch13);
    chclose(ch12);

    /* Test a combination of blocked sender and an item in the channel. */
    chan ch14 = chmake(int, 1);
    chs(ch14, int, 1);
    go(sender(chdup(ch14), 0, 2));
    val = chr(ch14, int);
    assert(val == 1);
    val = chr(ch14, int);
    assert(val == 2);
    chclose(ch14);

    pid_t pid;

    /* Test panic when chs will deadlock. */
    pid = fork();
    assert(pid >= 0);
    if (pid == 0) {
        alarm(1);
        chan ch = chmake(int, 0);
        signal(SIGABRT, expected_abort);
        chs(ch, int, 42);
        fail();
    }
Exemplo n.º 4
0
vertex* get_link(vertex *v) {
  if (!v->link)
    v->link = v->p->p ? go(get_link(v->p), v->pch) : v->p;
  return v->link;
}
Exemplo n.º 5
0
int main(int argc, char**){
  srand(time(NULL));
#ifdef VDEBUG
  if(argc>1) vdebug=true;
#endif
  
  timeval startTime, endTime;
  std::cout.sync_with_stdio(0);
  std::unordered_map<std::string, int> gameParams;
  std::istringstream istream;
  std::string oneLine, tmpString;
  
  while(std::getline(std::cin, oneLine)){
    int paramValue;
    istream.clear();
    istream.str(oneLine);
    istream >> tmpString >> paramValue;
    if(tmpString=="ready") break;
    gameParams[tmpString] = paramValue;
  }
  _gameData gameData(gameParams["rows"],
                     gameParams["cols"],
                     gameParams["viewradius2"],
                     gameParams["attackradius2"]);
  go();
  
  while(std::getline(std::cin, oneLine)){
    gettimeofday(&startTime, NULL);
    istream.clear();
    istream.str(oneLine);
    istream >> tmpString;
    LOG("turn: " << gameData.turn);
    if(tmpString=="end"){break;};
    gameData.perTurnReset();
    while(getline(std::cin, oneLine)){
      istream.clear();
      istream.str(oneLine);
      pos f1f2;
      int f3=-1;
      istream >> tmpString >> f1f2.row >> f1f2.col >> f3;
      if(tmpString=="go") break;
      if(tmpString=="a"){gameData.receiveAnt(f1f2, f3); continue;};
      if(tmpString=="w"){gameData.receiveWater(f1f2); continue;};
      if(tmpString=="f"){gameData.receiveFood(f1f2); continue;};
      if(tmpString=="h"){gameData.receiveHill(f1f2, f3); continue;};
    }
    
    gameData.processAnts();
    gameData.processFood();
    gameData.processHills();
    

    
    gameData.assocFoodWithAnt();
    
    if(gameData.ant_count_water_mark>15){
      gameData.captureEnemyHills();
    }
    
    
    gameData.clusterAnts();
    gameData.computeClusterPrioritiesAndDispatch();    
    
    
    
    gameData.computeThreat();
    
    gameData.reachEnemy();
    
    

    
    
    gameData.wanderAntsAroundCompositeMod();
    
    

    if(vdebug){
      gameData.debugDraw();
      gameData.toPPM();
    }
    
    gameData.keepHillInSightOverride();
    
    gameData.outputCoordinates();
    gettimeofday(&endTime, NULL);
    LOG("turn took " << elapsedTime(startTime, endTime) << "ms");
    go();
  }
  return 0;
}
Exemplo n.º 6
0
/*
 * main.c
 * Author: Ian R Goodbody
 * Function: Implements maze navigation
 */
void main(void)
{
    WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer

    initRangeFinders();
    initMotors();
    stop();

    P1DIR |= LEFT_LED|RIGHT_LED;
    P1OUT &= ~(LEFT_LED|RIGHT_LED);


    int fBuffer[BUFFER_LN]; // Code probably unnecessary but it cannot hurt
    int lBuffer[BUFFER_LN];
    int rBuffer[BUFFER_LN];

    int fMedian;
    int lMedian;
    int rMedian;

    unsigned int lWheelSpeed = 4040;
    unsigned int rWheelSpeed = 4000;
    unsigned int runTime = 350;

    int i;

    fillBuffers(fBuffer, lBuffer, rBuffer);

    while(1)
    {

        P1OUT &= ~(LEFT_LED|RIGHT_LED); // turn off LEDs
    	stop();

    	for (i = BUFFER_LN; i > 0; i--)
    	{
    		readFront(fBuffer);
    		waitMiliseconds(1);
    		readLeft(lBuffer);
    		waitMiliseconds(1);
    		readRight(rBuffer);
    		waitMiliseconds(1);
    	}
    	fMedian = median(fBuffer);
    	lMedian = median(lBuffer);
    	rMedian = median(rBuffer);

    	if(fMedian < 0x01F0) // Crash into wall test; ~2.5 inch threshold
    	{
    		if(lMedian < 0x01FF) // There is no wall remotely close to the left side, 
    		{                    // Initiate sweeping turn
    			lWheelSpeed = 2600;
    			rWheelSpeed = 5000;
    		}
    		else if(lMedian < 0x0266) // Getting too far from the wall start turning in
    		{
    			P1OUT |= LEFT_LED; // Red LED on, green off
    			P1OUT &= ~RIGHT_LED;
    			rWheelSpeed = 4270;
    			lWheelSpeed = 4040;
    		}
    		else if(lMedian > 0x02E4) // Getting too close to the wall start turning out
    		{
    			P1OUT |= RIGHT_LED; // Green LED on, red off
    			P1OUT &= ~LEFT_LED;
    			rWheelSpeed = 3900;
    			lWheelSpeed = 4040;
    		}
    		else // Acceptable distance from wall, cruise forward normally
    		{
    			//P1OUT |= RIGHT_LED;
    			P1OUT &= ~(RIGHT_LED|LEFT_LED);
    			rWheelSpeed = 4000;
    			lWheelSpeed = 4040;
    		}
    		setLeftWheel(lWheelSpeed, FORWARD);
    		setRightWheel(rWheelSpeed, FORWARD);
    		runTime = 350;
    	}
    	else
    	{
    		// About to run into a wall, initiate hard right turn
    		P1OUT |= RIGHT_LED|LEFT_LED;
    		setLeftWheel(5080,FORWARD);
    		setRightWheel(5260, BACKWARD);
    		runTime = 450;
    	}
    	go();
    	waitMiliseconds(runTime);
    }
}