示例#1
0
void ImagerTesterBase::AssertPowered()
{
	if (!isPowered())
	{
		puts("ERROR: Imager is not PowerUp. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
	}
}
示例#2
0
void
Turret::onPowerStateChange(GameBase* generator)
{
   if (isGhost() == false && isPowered() == false && m_fireState == Firing) {
      unshoot();
   }

   Parent::onPowerStateChange(generator);
}
void GeneticOperators::Initializer(GAGenome& g)//todo: better initializer
{
	std::cout<<"calling Initializer\n";
	GAListGenome<Gene>& genome = (GAListGenome<Gene>&)g;


	if(_seedOriginalPosition){
	    while(genome.head()) genome.destroy(); // destroy any pre-existing list
	    for(std::vector<SparCraft::Unit>::const_iterator it=_buildings.begin();
	                   it!=_buildings.end();it++){
	        Gene gene(it->type(),BWAPI::TilePosition((it->pos().x()-it->type().dimensionLeft())/TILE_SIZE,(it->pos().y()-it->type().dimensionUp())/TILE_SIZE));
	        genome.insert(gene,GAListBASE::TAIL);
	    }
	    if(!isLegal(genome)||!isPowered(genome)){
	        std::cout<<"Repairing setup from file"<<std::endl;
	        if(!GeneticOperators::repair(genome)){
	            System::FatalError("Couldn't repair at initializer");
	        }
	    }
	    _seedOriginalPosition=false;
	}else{
	    do{
	        while(genome.head()) genome.destroy(); // destroy any pre-existing list
	        bool needsRepair=false;
	        for(std::vector<SparCraft::Unit>::const_iterator it=_buildings.begin();
	                it!=_buildings.end();it++){


	            BWAPI::TilePosition pos(_defendPlayer->getGoal().x()/TILE_SIZE,_defendPlayer->getGoal().y()/TILE_SIZE);
	            Gene gene(it->type(),pos);
	            //	        BWAPI::TilePosition offset(0,0);
	            int n=placementRetries;
	            do{
	                do{
	                    //	                gene.undo(offset);
	                    //	                offset=BWAPI::TilePosition(GARandomInt(-mutDistance,mutDistance),GARandomInt(-mutDistance,mutDistance));
	                    //	                gene.move(offset);
	                    gene.setPosition(BWAPI::TilePosition(
	                            GARandomInt(_baseLeft,_baseRight),
	                            GARandomInt(_baseTop,_baseBottom)));

	                }while(!_map->canBuildHere(gene.getType(),gene.getCenterPos()));

	                if(isLegal(genome,gene)){
	                    if(!gene.getType().requiresPsi()||isPowered(genome,gene)){
	                        genome.insert(gene,GAListBASE::TAIL);
	                        break;
	                    }
	                }
	                n--;
	            }while(n>0);
	            if(n==0){//if we reached the max amount of tries, add it anyway and try to repair later
	                genome.insert(gene,GAListBASE::TAIL);
	                needsRepair=true;
	                std::cout<<"Max amount of retries for initial location failed, will try to repair\n";
	            }

	            //		std::cout<<"building added"<<std::endl;
	        }
	        if(needsRepair||!isLegal(genome)){
	            if(!GeneticOperators::repair(genome)){
	                System::FatalError("Couldn't repair at initializer");
	            }
	        }
	    }while(!isLegal(genome));
	}
	//	Mutator(genome,0.5,20);
}
示例#4
0
    void
    BasicDeviceDriver::updateStateMachine(void)
    {
      switch (dequeueState())
      {
        // Wait for activation.
        case SM_IDLE:
          break;

          // Begin activation sequence.
        case SM_ACT_BEGIN:
          setEntityState(IMC::EntityState::ESTA_NORMAL, Status::CODE_ACTIVATING);
          m_wdog.setTop(getActivationTime());
          queueState(SM_ACT_POWER_ON);
          break;

          // Turn power on.
        case SM_ACT_POWER_ON:
          turnPowerOn();
          queueState(SM_ACT_POWER_WAIT);
          break;

          // Wait for power to be on.
        case SM_ACT_POWER_WAIT:
          if (isPowered())
          {
            m_power_on_timer.setTop(m_post_power_on_delay);
            queueState(SM_ACT_DEV_WAIT);
          }

          if (m_wdog.overflow())
          {
            failActivation(DTR("failed to turn power on"));
            queueState(SM_IDLE);
          }
          break;

          // Connect to device.
        case SM_ACT_DEV_WAIT:
          if (m_wdog.overflow())
          {
            failActivation(DTR("failed to connect to device"));
            queueState(SM_IDLE);
          }
          else if (m_power_on_timer.overflow())
          {
            if (connect())
              queueState(SM_ACT_DEV_SYNC);
          }

          break;

          // Synchronize with device.
        case SM_ACT_DEV_SYNC:
          if (m_wdog.overflow())
          {
            failActivation(DTR("failed to synchronize with device"));
            queueState(SM_IDLE);
          }
          else
          {
            if (synchronize())
              queueState(SM_ACT_LOG_REQUEST);
          }
          break;

          // Request log name.
        case SM_ACT_LOG_REQUEST:
          if (m_wdog.overflow())
          {
            failActivation(DTR("failed to request current log name"));
            queueState(SM_IDLE);
          }
          else
          {
            closeLog();
            requestLogName();
            queueState(SM_ACT_LOG_WAIT);
          }
          break;

          // Wait for log name.
        case SM_ACT_LOG_WAIT:
          if (m_wdog.overflow())
          {
            failActivation(DTR("failed to retrieve current log name"));
            queueState(SM_IDLE);
          }
          else
          {
            if (m_log_opened)
              queueState(SM_ACT_DONE);
          }
          break;

          // Activation procedure is complete.
        case SM_ACT_DONE:
          activate();
          queueState(SM_ACT_SAMPLE);
          break;

          // Read samples.
        case SM_ACT_SAMPLE:
          readSample();
          break;

          // Start deactivation procedure.
        case SM_DEACT_BEGIN:
          setEntityState(IMC::EntityState::ESTA_NORMAL, Status::CODE_DEACTIVATING);
          m_wdog.setTop(getDeactivationTime());
          queueState(SM_DEACT_DISCONNECT);
          break;

          // Gracefully disconnect from device.
        case SM_DEACT_DISCONNECT:
          disconnect();
          closeLog();

          m_power_off_timer.setTop(m_power_off_delay);

          queueState(SM_DEACT_POWER_OFF);
          break;

          // Turn power off.
        case SM_DEACT_POWER_OFF:
          if (m_power_off_timer.overflow() || m_wdog.overflow())
          {
            turnPowerOff();
            queueState(SM_DEACT_POWER_WAIT);
          }
          break;

          // Wait for power to be turned off.
        case SM_DEACT_POWER_WAIT:
          if (!isPowered())
            queueState(SM_DEACT_DONE);
          break;

          // Deactivation is complete.
        case SM_DEACT_DONE:
          deactivate();
          queueState(SM_IDLE);
          break;
      }
    }