예제 #1
0
/*
Keep running until time is up (may want to use some
distance measure instead)
*/
eState StrategyGoStraight::apply()
{
    eState nNewState = knGoStraight;    // assume we will keep running
    if (TargetInSight() && ((int)m_nCallCount/50.0>GO_STRAIGHT_NO_TRACK_TIME))
    {
    	// Target spotted, switch to Track state
    	nNewState = knTrack;
        m_nCallCount = 0;   // reset call count in case we ever re-enter
    }
    else if (getKeepMoving())
    {
        m_nCallCount++; // track the number of times we have been called
    	float xval = m_gyroDriveCtrl->calcPID(m_gyro->GetAngle());
    	m_robotDrive->ArcadeDrive(-1.0, xval, false);
    	//m_pickup->Drive(-0.4,true);
    }
    else
    {
        // time is up, switch to Spin state
        nNewState = knSpin;
        m_nCallCount = 0;   // reset call count in case we ever re-enter
    }

    return nNewState;
}
예제 #2
0
void CCharacter::Update( float dTime )
{
	NNObject::Update(dTime);

	clock_t currentTime = clock();


	ShowHitEffect(dTime);
	UpdateHPBar();	
	UpdateZindex();
	UpdateAttackTarget();

	//현재 얼어있는 상태라면 이동/공격이 불가
	if(m_Freeze) {
		CheckMeltingTime(currentTime);
	} else {
		//AttackTarget을 설정하고 Attack이 가능하면(사정거리 체크)
		//공격하고 그렇지 않으면 이동, 시야에 없으면 앞으로 전진
		if(TargetInRange()) {
			if( CheckAttackTiming(currentTime) ) { 
				AttackEnemy(currentTime);				
			}
		} else if (TargetInSight() ) {			
			GoToAttackTarget(dTime);
		} else {
			GoForward(dTime);
		}
	}
}
예제 #3
0
/*
Keep running until time is up (may want to use some
distance measure instead)
*/
eState StrategyCurveLeft::apply()
{
    eState nNewState = knCurveLeft;    // assume we will keep running
    if (TargetInSight()&&((int)m_nCallCount/50.0>CURVE_LEFT_NO_TRACK_TIME))
    {
    	// Target spotted, switch to Track state
    	nNewState = knTrack;
        m_nCallCount = 0;   // reset call count in case we ever re-enter
    }
    else if (getKeepMoving())
    {
        m_nCallCount++; // track the number of times we have been called
    	m_gyroDriveCtrl->setDesiredValue(45.0f/50.0/3.0*(int)m_nCallCount);//take 5s to curve 45deg
    	float xval = m_gyroDriveCtrl->calcPID(m_gyro->GetAngle());
    	m_robotDrive->ArcadeDrive(-0.5-((int)m_nCallCount)/50.0/2.0/5.0, xval, false);//take 5s to get up to full speed
        //m_robotDrive->ArcadeDrive(-1.0, -0.9, false);
    	//m_pickup->Drive(-0.4,true);
  }
    else
    {
        // time is up, switch to Spin state
        nNewState = knSpin;
        m_nCallCount = 0;   // reset call count in case we ever re-enter
    }

    return nNewState;
}
예제 #4
0
/*
Spin on the spot
*/
eState StrategySpin::apply()
{
    eState nNewState = knSpin;    // assume we will keep running

    // Keep turning until we find a target
    if (TargetInSight())
    {
        // start tracking the target
        nNewState = knTrack;
    }
    else
    {
    	if (m_kbot->getAutoDirection())
    	{
    		m_robotDrive->ArcadeDrive(-0.8, -0.9, false);
    	}
    	else
    	{
    		m_robotDrive->ArcadeDrive(-0.8, 0.9, false);
    	}
    }

    return nNewState;
}