public override bool Decide(vIFSMBehaviourController fsmBehaviour) { if (fsmBehaviour.aiController is vIControlAIShooter) { vIControlAIShooter shooter = (fsmBehaviour.aiController as vIControlAIShooter); return(shooter.shooterManager ? shooter.shooterManager.isShooting || shooter.isAttacking : false); } return(true); }
protected virtual void ControlAttack(vIFSMBehaviourController fsmBehaviour, vIControlAIShooter combat, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate) { switch (executionType) { case vFSMComponentExecutionType.OnStateEnter: InitAttack(combat); break; case vFSMComponentExecutionType.OnStateUpdate: HandleAttack(fsmBehaviour, combat); break; case vFSMComponentExecutionType.OnStateExit: FinishAttack(combat); break; } }
protected virtual void HandleAttack(vIFSMBehaviourController fsmBehaviour, vIControlAIShooter combat) { combat.AimToTarget(); if (!combat.isAiming) { return; } if (useRandomAttackType) { if (InRandomTimer(fsmBehaviour, minMaxTimeToTryStrongAttack.x, minMaxTimeToTryStrongAttack.y)) { DoAttack(combat, Random.Range(0f, 100f) <= chanceToStrongAttack, overrideAttackID ? attackID : -1, forceCanAttack); } else { DoAttack(combat, false, overrideAttackID ? attackID : -1, forceCanAttack); } } else { DoAttack(combat, useStrongAttack, overrideAttackID ? attackID : -1, forceCanAttack); } }
protected virtual void FinishAttack(vIControlAIShooter combat) { combat.isInCombat = false; combat.ResetAttackTime(); }
protected virtual void DoAttack(vIControlAIShooter combat, bool isStrongAttack = false, int attackId = -1, bool forceCanAttack = false) { combat.Attack(isStrongAttack, attackId, forceCanAttack); }
protected virtual void InitAttack(vIControlAIShooter combat) { combat.isInCombat = true; combat.InitAttackTime(); }