public virtual void ReleaseTrigger() { if (CurrentAbility) { CurrentAbility.ReleaseTrigger(); } }
public virtual void PullTrigger() { if (CurrentAbility) { CurrentAbility.PullTrigger(); } }
private void AbortAbilityInternal(Ability abs) { if (CurrentAbility != null && CurrentAbility == abs) { CurrentAbility.End(); CurrentAbility = null; } }
public Vector3 ProcessAbilities(Vector3 direction) { if (CurrentAbility) { CurrentAbility.Tick(); direction = CurrentAbility.ProcessMovement(direction); } return(direction); }
/// <summary> /// 切換能力 /// </summary> /// <param name="nextAbility">下一個能力</param> private void SwitchAbility(AbilityBase nextAbility) { CurrentAbility.Exit(); CurrentAbility = nextAbility; CurrentAbility.Enter(); if (_animatorManager != null) { _animatorManager.AnimClip = (int)nextAbility.AnimClip; } }
public void Use() { if (!CurrentAbility) { return; } if (timeSinceEnergyUse >= CurrentAbility.CooldownTime) { CurrentAbility.Use(); } }
private void EquipAbility() { var currentBehaviour = GetComponent <AbilityBehaviour>(); if (currentBehaviour != null) { Destroy((currentBehaviour as Component)); } CurrentAbility.AttachBehaviourTo(gameObject); onChangedAbility?.Invoke(CurrentAbility.Sprite); }
/// <summary> /// 自動處理能力 /// </summary> public void ProcessAbility() { EveryFrameAll(); AbilityBase nextAbility = ReTriggerAll(); // if (CurrentAbility != nextAbility) { SwitchAbility(nextAbility); } else { CurrentAbility.Stay(); } }
public override bool TryToAddTarget(object c) { if (CurrentAbility == null) { return(false); } if (CurrentAbility.TryToAddTarget(c)) { //trick to force update of current ability //should simplify currentAbilityActivation update MagicAction tmp = CurrentAbility; return(true); } return(false); }
public override void Update() { if (!IsControlled && CharacterState == CharacterState.Active) { #region AI Behavior switch (AIState) { case AIState.Attack: if (mainMan.GameMan.Players[0].CharacterState != CharacterState.Dead && PlayerInArea()) { //Move close to attack if (DistanceToPlayer(0) > AttackRange) { if (mainMan.GameMan.Players[0].Character.Type == Faction.Thief && mainMan.GameMan.Players[0].Character.CurrentAbility.InUse) { MoveToPoint((mainMan.GameMan.Players[0].Character.CurrentAbility as Decoy).Position.X, (mainMan.GameMan.Players[0].Character.CurrentAbility as Decoy).Position.Y); } else { MoveToPoint(mainMan.GameMan.Players[0].X, mainMan.GameMan.Players[0].Y); } } else { //Fight them suckers SwitchAIState(AIState.Swing); } } else { SwitchAIState(AIState.Idle); } AIStateTimer -= (float)mainMan.GameTime.ElapsedGameTime.TotalSeconds; if (AIStateTimer <= 0f) { SwitchAIState(AIState.Idle); } break; case AIState.Swing: AIStateTimer -= (float)mainMan.GameTime.ElapsedGameTime.TotalSeconds; if (AIStateTimer <= 0f) { SwitchAIState(AIState.Idle); } break; case AIState.Defend: if (mainMan.GameMan.Players[0].CharacterState != CharacterState.Dead && PlayerInArea()) { //Check if player is too close and move back if (DistanceToPlayer(0) < SightRange / 1.5) { SetDirectionToPoint(mainMan.GameMan.Players[0].X, mainMan.GameMan.Players[0].Y); MoveToPoint(X + (float)(MovementSpeed * Math.Cos((270f - Direction) * Math.PI / 180f)), Y + (float)(MovementSpeed * Math.Sin((270f - Direction) * Math.PI / 180f))); } else { SwitchAIState(AIState.Idle); } } else { SwitchAIState(AIState.Idle); } AIStateTimer -= (float)mainMan.GameTime.ElapsedGameTime.TotalSeconds; if (AIStateTimer <= 0f) { SwitchAIState(AIState.Idle); } break; case AIState.Idle: AIStateTimer -= (float)mainMan.GameTime.ElapsedGameTime.TotalSeconds; if (AIStateTimer <= 0f) { //random movement? if (!mainMan.GameMan.Players[0].NoCharacter && PlayerInArea() && mainMan.GameMan.Players[0].Character.Type != Type && mainMan.GameMan.Players[0].CharacterState == CharacterState.Active) { if (DistanceToPlayer(0) < SightRange) { //Get random SwitchAIState(GetRandomAIState(EncounterAIStates)); } } else { AIStateTimer = AITimers[AIState]; } } break; case AIState.Switch: //Move to sword MoveToPoint(mainMan.GameMan.Players[0].X, mainMan.GameMan.Players[0].Y); //Check if picked up if (HitBox.Contains(mainMan.GameMan.Players[0].Position)) { //Pick it up!!! mainMan.GameMan.Players[0].SwitchBlade(this); } break; case AIState.Ability: //Warp to player CurrentAbility.AIUse(); SwitchAIState(AIState.Idle); break; case AIState.Cower: break; case AIState.Ready: break; } #endregion } base.Update(); }
public void Ability() { CurrentAbility.TriggerAbility(transform); }