//-------------------------------------------------------------- // Name: setupStatePause() // Class: StationaryFireCombat // // Description: Sets up our Pause State // // Parameters: None // // Returns: None //-------------------------------------------------------------- void StationaryFireCombat::setupStateAim() { faceEnemy(); _endAimTime = level.time + G_Random(_aimTimeMax - _aimTimeMin ) + _aimTimeMin; _self->SetAnim( _aimAnim , NULL , torso ); _self->SetAnim( _stance , NULL , legs ); }
//-------------------------------------------------------------- // Name: StationaryFireCombat() // Class: setupStateAttack // // Description: Sets up our Attack State // // Parameters: None // // Returns: None //-------------------------------------------------------------- void StationaryFireCombat::setupStateAttack() { faceEnemy(); _endFireTime = level.time + G_Random(_fireTimeMax - _fireTimeMin) + _fireTimeMin; if ( _self->combatSubsystem->CanAttackEnemy() ) { _fireWeapon.SetAnim( _fireAnim ); _fireWeapon.Begin( *_self ); } }
//-------------------------------------------------------------- // Name: Evaluate() // Class: GeneralCombatWithMeleeWeapon // // Description: Returns True Or False, and is run every frame // that the behavior // // Parameters: Actor &self // // Returns: True or False //-------------------------------------------------------------- BehaviorReturnCode_t GeneralCombatWithMeleeWeapon::Evaluate ( Actor &self ) { Entity *currentEnemy; // Make sure our rotate and headwatch targets are up to date if ( _state != GENERAL_COMBAT_MELEE_ATTACK && _state != GENERAL_COMBAT_MELEE_CHANGE_POSTURE ) setUpRotate( self ); faceEnemy( self ); setHeadWatchTarget( self ); currentEnemy = self.enemyManager->GetCurrentEnemy(); if (currentEnemy && _maxDistanceToEngage && !self.WithinDistance( currentEnemy, _maxDistanceToEngage)) { self.enemyManager->ClearCurrentEnemy(); SetFailureReason( "My Current Enemy is farther away than my _maxDistanceToEngage\n" ); return BEHAVIOR_FAILED; // I may have an enemy, but he's too far away. Ignore him. } if ( _state == GENERAL_COMBAT_MELEE_FAILED ) return BEHAVIOR_FAILED; if ( currentEnemy && !self.WithinDistance( currentEnemy , _meleeDistance ) && level.time > _nextRushAttemptTime ) { setupRushEnemy( self ); _state = GENERAL_COMBAT_MELEE_RUSH_ENEMY; } switch ( _state ) { case GENERAL_COMBAT_MELEE_SELECT_STATE: //setTorsoAnim( self ); // Breaks the initial attack anim selectState( self ); break; case GENERAL_COMBAT_MELEE_RUSH_ENEMY: rushEnemy( self ); break; case GENERAL_COMBAT_MELEE_STRAFE: setTorsoAnim( self ); strafe(self); setTorsoAnim( self ); break; case GENERAL_COMBAT_MELEE_ATTACK: attack( self ); break; case GENERAL_COMBAT_MELEE_BLOCK: block( self ); break; case GENERAL_COMBAT_MELEE_CHANGE_POSTURE: changePosture(self); break; case GENERAL_COMBAT_MELEE_HOLD: setTorsoAnim( self ); hold( self ); break; case GENERAL_COMBAT_MELEE_FAILED: return BEHAVIOR_FAILED; } return BEHAVIOR_EVALUATING; }