コード例 #1
0
    public OnTakeDamageAbilityEvent(IHealthOwnerCombatUnit parentUnit, AbilityActionBase bindedAction, bool triggerOnce)
        : base(bindedAction, triggerOnce)
    {
        _parentUnit = parentUnit;

        Bind();
    }
コード例 #2
0
    public void CheckAndInvoke(AbilityActionBase parentAction, AbilityEventBase parentEvent)
    {
        ParentAction = parentAction;

        ParentEvent = parentEvent;

        SetTargetUnits();

        foreach (ICombatUnit target in TargetUnits)
        {
            bool condsSatisfied = true;

            foreach (EventConditionBase cond in Conditions)
            {
                if (!cond.IsSatisfied(target))
                {
                    condsSatisfied = false;
                    break;
                }
            }

            if (condsSatisfied)
            {
                FireOnActionStarted();
                Invoke();
            }
        }
    }
コード例 #3
0
    public OnDealtDamageAbilityEvent(IDamageDealerCombatUnit parentUnit, AbilityActionBase bindedAction)
        : base(bindedAction)
    {
        _parentUnit = parentUnit;

        Bind();
    }
コード例 #4
0
 /// <summary>
 /// Should be called when an ability is finished. Will handle destroy the action
 /// </summary>
 /// <param name="action">Action that has finished</param>
 public static void finishAbilityAction(AbilityActionBase action)
 {
     if (action)
     {
         action.finishAbilityAction();
     }
 }
コード例 #5
0
        public override void OnUpdate(float dt)
        {
            if (actions == null || actions.Count == 0)
            {
                bool condition = (bool)this.condition.GetValue();
                actions = new List <AbilityActionBase>(condition ? whenTrue : whenFalse);
            }

            int deleteIndex = -1;

            for (int i = 0; i < actions.Count; i++)
            {
                AbilityActionBase act = actions[i];
                act.OnUpdate(dt);
                if (act.IsFinished())
                {
                    deleteIndex = i;
                    break;
                }
                if (act.IsBlock())
                {
                    break;
                }
            }
            if (deleteIndex != -1)
            {
                actions.RemoveAt(deleteIndex);
            }
        }
コード例 #6
0
 public void OnUpdate(float dt)
 {
     if (runningActions != null && runningActions.Count > 0)
     {
         int deleteIndex = -1;
         for (int i = 0; i < runningActions.Count; i++)
         {
             AbilityActionBase act = runningActions[i];
             act.OnUpdate(dt);
             if (act.IsFinished())
             {
                 deleteIndex = i;
                 break;
             }
             if (act.IsBlock())
             {
                 break;
             }
         }
         if (deleteIndex != -1)
         {
             runningActions.RemoveAt(deleteIndex);
         }
     }
 }
コード例 #7
0
    public OnThinkModifierEvent(AbilityThinkerModifier parentModifier, AbilityActionBase bindedAction)
        : base(bindedAction)
    {
        _parentModifier = parentModifier;

        Bind();
    }
コード例 #8
0
    public OnCastStartedAbilityEvent(AbilityBase parentAbility, AbilityActionBase bindedAction)
        : base(bindedAction)
    {
        Parentability = parentAbility;

        Bind();
    }
コード例 #9
0
    /// <summary>
    /// Activates this ability, will immediately enter cooldown
    /// </summary>
    public void activateAbility(PlayerController controller, BoardManager board, Vector3 worldPos, Vector3Int tileIndex)
    {
        if (inCooldown)
        {
            return;
        }

        if (string.IsNullOrEmpty(m_actionPrefab))
        {
            Debug.LogWarning(string.Format("Unable to activate ability {0} as no action prefab was set", gameObject.name));
            return;
        }

        object[] spawnData = new object[2];
        spawnData[0] = controller.playerId;
        spawnData[1] = GameManager.manager.getPlayerIdFromBoard(board);

        // Project onto board
        worldPos.z = board.transform.position.z;

        GameObject newAction = PhotonNetwork.Instantiate(m_actionPrefab, worldPos, Quaternion.identity, 0, spawnData);

        if (!newAction)
        {
            return;
        }

        AbilityActionBase action = newAction.GetComponent <AbilityActionBase>();

        if (!action)
        {
            return;
        }

        action.initAbilityAction(this, controller, board, worldPos, tileIndex);
        action.startAbilityAction();

        cancelCooldown();
        m_cooldownRoutine = StartCoroutine(cooldownRoutine());
    }
コード例 #10
0
 public CasterTargetSelector(ICombatUnit caster, AbilityActionBase bindedAction)
     : base(caster, bindedAction)
 {
 }
コード例 #11
0
    public AbilityEventBase(AbilityActionBase bindedAction, bool triggerOnce = true)
    {
        _bindedAction = bindedAction;

        TriggerActionList = new List <AbilityActionBase>();
    }
コード例 #12
0
 public TargetSelectorBase(ICombatUnit caster, AbilityActionBase parentAction)
 {
     _caster       = caster;
     _parentAciton = parentAction;
 }
コード例 #13
0
 protected IEnumerable TreeView()
 {
     return(AbilityActionBase.TreeView());
 }
コード例 #14
0
 public SelectOtherTargetSelector(ICombatUnit caster, AbilityActionBase parentAction)
     : base(caster, parentAction)
 {
 }
コード例 #15
0
 private void OnActionEnded(AbilityActionBase action)
 {
     Unbind();
 }
コード例 #16
0
    public OnCollisionEnterAbilityEvent(InteractableCollider targetInteractableCollider, AbilityBase bindedAbility, AbilityActionBase bindedAction)
        : base(bindedAction)
    {
        _targetInteractableCollider = targetInteractableCollider;

        _bindedAbility = bindedAbility;

        Bind();
    }