Ejemplo n.º 1
0
    public AttrModifierEffect(AttrModifierTpl[] modifiers, IAttrModifierTaker taker)
    {
        for (int i = 0; i < modifiers.Length; ++i)
        {
            this.modifiers[i] = new ActualModifier(modifiers[i]);
        }

        this.taker = taker;
        this.stack = 0;
    }
Ejemplo n.º 2
0
    private void Awake()
    {
        statuses = new List <IStatus>(10);
        Updater  = NormalUpdate;

        attrModifiable = GetComponent <IAttrModifierTaker>();
        combater       = GetComponent <ICombater>();

        Reporter.ComponentMissingCheck(attrModifiable);
        Reporter.ComponentMissingCheck(combater);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Initialize a status based on StatusTpl, PeriodCombatResouceEffect and AttrModifierEffect.
    /// Then bind the status to the taker.
    /// </summary>
    /// <param name="_source"></param>
    /// <param name="stack"></param>
    /// <param name="timePercent"></param>
    /// <returns></returns>
    public static IStatus Create(SOStatusTpl template,
                                 IAttrModifierTaker attrModifierTaker,
                                 ICombater combatTaker,
                                 IAttrHolder applierAttr,
                                 int stack = 1, float timePercent = 1)
    {
        // retrieve from scriptable object
        StatusTpl _source = template.StatusTpl;

        // clear lists
        updatables.Clear();
        stackables.Clear();

        // initialize combat resource effect processor
        if (combatTaker != null && _source.CombatPeriodEffects.Length != 0)
        {
            PeriodicCombatResourceEffect _combatResourceEffect = new PeriodicCombatResourceEffect(_source.CombatPeriodEffects, combatTaker, applierAttr, CombatResourceEffectExecutor.Instance);
            updatables.Add(_combatResourceEffect);
            stackables.Add(_combatResourceEffect);
        }

        // initialize attr modifier effect processor
        if (attrModifierTaker != null && _source.AttrModifiers.Length != 0)
        {
            AttrModifierEffect _attrModifierEffect = new AttrModifierEffect(_source.AttrModifiers, attrModifierTaker);
            stackables.Add(_attrModifierEffect);
        }

        // build constructor parameters
        IStatusUpdatable[] _updatables = updatables.Count == 0 ? emptyUpdatable : updatables.ToArray();
        IStatusStackable[] _stackables = stackables.Count == 0 ? emptyStackable : stackables.ToArray();

        // build status
        Status _status = new Status(_source, template.GetInstanceID(), _updatables, _stackables, stack, Mathf.Max(0, timePercent));

        return(_status);
    }