public AbilityActionStatus Perform(CharacterProperty target) { mTarget = target; mOwner.ReduceMP(mCost); if (CoodDownLeft <= 0) { mLastTime = Time.time; for (int i = 0; i < mActions.Count; i++) { mActions [i].Init(); } currentIndex = 0; for (currentIndex = 0; currentIndex < mActions.Count; currentIndex++) { AbilityAction action = mActions [currentIndex]; action.SetTarget(mTarget); action.Execute(); AbilityActionStatus status = action.status; if (status != AbilityActionStatus.Success) { return(status); } } } return(AbilityActionStatus.Success); }
// Use this for initialization void Start() { mAnimator = GetComponent <Animator> (); mCharacterProperty = GetComponent <CharacterProperty> (); mTargetingController = GetComponent <TargetingController>(); mSkills = new Dictionary <int, Ability> (); mActivatedSkills = new Queue <Ability> (); InitSkills(); mAttackColliderDisposable = new SingleAssignmentDisposable(); mActionController = GetComponent <AnimatorController>(); mActionController.OnHitStartAsObservable.Subscribe(info => { if (info.ability == -1 || mCastingAbility == null) { return; } AbilityActionStatus status = mCastingAbility.Perform(mTarget); if (status == AbilityActionStatus.Running) { mActivatedSkills.Enqueue(mCastingAbility); } }); mActionController.OnHitEndAsObservable.Subscribe(info => { mCastingAbility = null; mTarget = null; }); }
protected void EndAction(AbilityActionStatus value) { status = value; if (status == AbilityActionStatus.Success) { mActionSubject.OnNext(mAbilityId); mActionSubject.OnCompleted(); } }
// Update is called once per frame void Update() { if (mActivatedSkills.Count > 0) { Ability skill = mActivatedSkills.Peek(); AbilityActionStatus status = skill.Update(); if (status == AbilityActionStatus.Running) { return; } else if (status == AbilityActionStatus.Success) { mActivatedSkills.Dequeue(); } else { mActivatedSkills.Clear(); } } }
public AbilityActionStatus Update() { if (currentIndex < mActions.Count) { for (; currentIndex < mActions.Count; currentIndex++) { AbilityAction action = mActions [currentIndex]; action.SetTarget(mTarget); action.Execute(); AbilityActionStatus status = action.status; if (status != AbilityActionStatus.Success) { return(status); } } } if (onExit != null) { onExit.OnNext(this); } return(AbilityActionStatus.Success); }
protected virtual void Update() { status = AbilityActionStatus.Success; }
protected virtual void Start() { status = AbilityActionStatus.Success; }
public void Init() { status = AbilityActionStatus.Resting; }