Пример #1
0
    public static void SetUniquePowerModifierID(UniquePowerModifierID uniquePowerModifierID)
    {
        switch (activeGameContextID)
        {
        case GameContextID.None:
            Debug.LogWarning("None: Return");
            return;

        case GameContextID.Map:
            Debug.LogWarning("Map: Return");
            return;

        case GameContextID.Battle:
            Debug.Log("Set UniquePowerModifierID for Battle context");
            BattleContext.UniquePowerModifierID = uniquePowerModifierID;
            return;

        case GameContextID.EditPartyScreen:
            Debug.Log("Set UniquePowerModifierID for EditPartyScreen context");
            EditPartyScreenContext.UniquePowerModifierID = uniquePowerModifierID;
            return;

        case GameContextID.EquipmentScreen:
            Debug.LogWarning("EquipmentScreen: Return");
            return;

        default:
            Debug.LogError("Unknown game context");
            return;
        }
    }
 public override void Apply(System.Object context)
 {
     // verify if context doesn't match requirements of this UPM
     if (!DoesContextMatch(context))
     {
         // context is not in scope of this UPM
         // skip all actions
         return;
     }
     if (context is BattleContext)
     {
         // verify if source context is PartyUnit
         if (BattleContext.ActivePartyUnitUI != null)
         {
             // verify if item has been dragged (if we are here, then it means that Item has been dropped onto the unit slot)
             if (BattleContext.ItemBeingUsed != null)
             {
                 // apply item UPM from Battle Context
                 InventoryItem             srcInventoryItem          = BattleContext.ItemBeingUsed;
                 PartyUnit                 dstPartyUnit              = BattleContext.DestinationUnitSlot.GetComponentInChildren <PartyUnitUI>().LPartyUnit;
                 UniquePowerModifierConfig uniquePowerModifierConfig = srcInventoryItem.InventoryItemConfig.UniquePowerModifierConfigsSortedByExecutionOrder[BattleContext.ActivatedUPMConfigIndex];
                 UniquePowerModifierID     uniquePowerModifierID     = BattleContext.UniquePowerModifierID;
                 Apply(srcInventoryItem, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID);
             }
             else
             {
                 // apply unit ability UPM
                 PartyUnit srcPartyUnit = BattleContext.ActivePartyUnitUI.LPartyUnit;
                 PartyUnit dstPartyUnit = BattleContext.DestinationUnitSlot.GetComponentInChildren <PartyUnitUI>().LPartyUnit;
                 UniquePowerModifierConfig uniquePowerModifierConfig = srcPartyUnit.UnitAbilityConfig.UniquePowerModifierConfigsSortedByExecutionOrder[BattleContext.ActivatedUPMConfigIndex];
                 UniquePowerModifierID     uniquePowerModifierID     = BattleContext.UniquePowerModifierID;
                 Apply(srcPartyUnit, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID);
             }
         }
         else
         {
             Debug.LogError("Unknown source context");
         }
     }
     if (context is EditPartyScreenContext)
     {
         // apply item UPM from edit party screen context
         InventoryItem             srcInventoryItem          = EditPartyScreenContext.ItemBeingUsed;
         PartyUnit                 dstPartyUnit              = EditPartyScreenContext.DestinationUnitSlot.GetComponentInChildren <PartyUnitUI>().LPartyUnit;
         UniquePowerModifierConfig uniquePowerModifierConfig = srcInventoryItem.InventoryItemConfig.UniquePowerModifierConfigsSortedByExecutionOrder[EditPartyScreenContext.ActivatedUPMConfigIndex];
         UniquePowerModifierID     uniquePowerModifierID     = EditPartyScreenContext.UniquePowerModifierID;
         Apply(srcInventoryItem, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID);
     }
 }
 public override void Apply(System.Object context)
 {
     // verify if context doesn't match requirements of this UPM
     if (!DoesContextMatch(context))
     {
         // context is not in scope of this UPM
         // skip all actions
         return;
     }
     if (context is BattleContext)
     {
         PartyUnit srcPartyUnit = BattleContext.ActivePartyUnitUI.LPartyUnit;
         PartyUnit dstPartyUnit = BattleContext.DestinationUnitSlot.GetComponentInChildren <PartyUnitUI>().LPartyUnit;
         UniquePowerModifierConfig uniquePowerModifierConfig = srcPartyUnit.UnitAbilityConfig.UniquePowerModifierConfigsSortedByExecutionOrder[BattleContext.ActivatedUPMConfigIndex];
         UniquePowerModifierID     uniquePowerModifierID     = BattleContext.UniquePowerModifierID;
         Apply(srcPartyUnit, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID);
     }
 }
Пример #4
0
    //public void SetUnitDebuffActive(UniquePowerModifierConfig uniquePowerModifier, bool doActivate)
    //{
    //    // get unit debuffs panel
    //    Transform debuffsPanel = GetUnitDebuffsPanel();
    //    if (doActivate)
    //    {
    //        // verify if unit already has this debuf
    //        if (uniquePowerModifier.upmAppliedDebuff == LPartyUnit.UnitDebuffs[(int)uniquePowerModifier.upmAppliedDebuff])
    //        {
    //            // the same debuff is already applied
    //            // reset its counter to max
    //            // .. fix, verify if it is there
    //            if (debuffsPanel.Find(uniquePowerModifier.upmAppliedDebuff.ToString()))
    //            {
    //                UnitDebuffIndicator unitDebuffIndicator = debuffsPanel.Find(uniquePowerModifier.upmAppliedDebuff.ToString()).GetComponent<UnitDebuffIndicator>();
    //                if (unitDebuffIndicator)
    //                {
    //                    unitDebuffIndicator.CurrentDuration = unitDebuffIndicator.TotalDuration;
    //                }
    //                else
    //                {
    //                    Debug.LogError("No unitDebuffIndicator");
    //                }
    //            }
    //        }
    //        else
    //        {
    //            // debuff is not applied yet
    //            // add debuff to unit
    //            //Debug.Log(((int)UnitBuff.DefenseStance).ToString());
    //            //Debug.Log(partyUnit.GetUnitBuffs().Length.ToString());
    //            LPartyUnit.UnitDebuffs[(int)uniquePowerModifier.upmAppliedDebuff] = uniquePowerModifier.upmAppliedDebuff;
    //            // create debuff by duplicating from template
    //            // Note: debuff name in template should be the same as in AppliedDebuff
    //            Transform debuffTemplate = transform.root.Find("Templates/UI/Debuffs/" + uniquePowerModifier.upmAppliedDebuff.ToString());
    //            Debug.Log("Applying " + uniquePowerModifier.upmAppliedDebuff.ToString() + " debuff");
    //            Transform newDebuff = Instantiate(debuffTemplate, debuffsPanel);
    //            // activate buff
    //            newDebuff.GetComponent<UnitDebuffIndicator>().SetActiveAdvance(true, uniquePowerModifier, LPartyUnit);
    //            // rename it so it can be later found by name
    //            newDebuff.name = uniquePowerModifier.upmAppliedDebuff.ToString();
    //        }
    //    }
    //    else
    //    {
    //        // remove buff
    //        LPartyUnit.UnitDebuffs[(int)uniquePowerModifier.upmAppliedDebuff] = UnitDebuff.None;
    //        Destroy(debuffsPanel.Find(uniquePowerModifier.upmAppliedDebuff.ToString()).gameObject);
    //    }
    //}
    public void SetDefenseBuffActive()
    {
        // set unique power modifier ID
        UniquePowerModifierID uniquePowerModifierID = new UniquePowerModifierID()
        {
            unitAbilityID = UnitAbilityID.DefensiveStance,
            uniquePowerModifierConfigIndex = 0,
            modifierOrigin          = ModifierOrigin.Ability,
            destinationGameObjectID = gameObject.GetInstanceID()
        };

        // get defensive stance UPM configuration form manager and apply it to self
        // ConfigManager.Instance[uniquePowerModifierID.unitAbilityID].postActionUniquePowerModifierConfigs[uniquePowerModifierID.uniquePowerModifierConfigIndex].Apply(LPartyUnit, LPartyUnit, uniquePowerModifierID);
        //ConfigManager.Instance[uniquePowerModifierID.unitAbilityID].uniquePowerModifierConfigs[uniquePowerModifierID.uniquePowerModifierConfigIndex].Apply(LPartyUnit, LPartyUnit, uniquePowerModifierID);
        Debug.LogWarning(".. Validate");
        // Set context
        GameContext.SetDestinationUnitSlot(GetComponentInParent <UnitSlot>());
        GameContext.SetUniquePowerModifierID(uniquePowerModifierID);
        // Apply UPM
        ConfigManager.Instance[uniquePowerModifierID.unitAbilityID].uniquePowerModifierConfigs[uniquePowerModifierID.uniquePowerModifierConfigIndex].Apply(GameContext.Context);
    }
    //// event for UI when UPM data is added
    //[SerializeField]
    //GameEvent uniquePowerModifierDataHasBeenAddedEvent;
    //// event for UI when UPM duration has been reset to max
    //[SerializeField]
    //GameEvent uniquePowerModifierDurationHasBeenResetToMaxEvent;
    //// event for UI when UPM duration has been changed
    //[SerializeField]
    //GameEvent uniquePowerModifierDurationHasChangedEvent;
    //// event for UI when UPM power has been changed
    //[SerializeField]
    //GameEvent uniquePowerModifierPowerHasBeenChangedEvent;
    //// event for UI when UPM has been triggered
    //[SerializeField]
    //GameEvent uniquePowerModifierHasBeenTriggeredEvent;

    void Apply(PartyUnit srcPartyUnit, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID)
    {
        Debug.Log("Applying " + uniquePowerModifierConfig.DisplayName + " DoT " + " from " + srcPartyUnit.UnitName + " to " + dstPartyUnit.UnitName + ", origin is " + uniquePowerModifierID.modifierOrigin);
        // init upm data variable (this is required for game save / restore)
        UniquePowerModifierData upmData = new UniquePowerModifierData
        {
            // set UPM ID
            UniquePowerModifierID = uniquePowerModifierID,
            // rest upm duration left to max duration
            DurationLeft = uniquePowerModifierConfig.UpmDurationMax,
            // set upm current power based on source unit stats upgrades count and other Updaters
            //CurrentPower = uniquePowerModifierConfig.GetUpmCurrentPower(srcPartyUnit.StatsUpgradesCount)
            CurrentPower = uniquePowerModifierConfig.GetUpmEffectivePower(srcPartyUnit)
        };
        // find upm with the same modifier in the list of upms on destination party unit
        UniquePowerModifierData sameUPM = dstPartyUnit.AppliedUniquePowerModifiersData.Find(e => (e.UniquePowerModifierID == uniquePowerModifierID));

        // verify if the same UPM has already been found or applied (not null)
        if (sameUPM != null)
        {
            // verify if duration is not max already
            if (sameUPM.DurationLeft != uniquePowerModifierConfig.UpmDurationMax)
            {
                // reset existing UPM duration to max
                sameUPM.DurationLeft = uniquePowerModifierConfig.UpmDurationMax;
                // raise an event
                //uniquePowerModifierDurationHasBeenResetToMaxEvent.Raise(sameUPM);
                Events.DurationHasBeenResetToMaxEvent.Raise(sameUPM);
            }
            // verify if power is different
            if (sameUPM.CurrentPower != upmData.CurrentPower)
            {
                // reset its power to current power (in case power of source party unit has changed over time)
                sameUPM.CurrentPower = upmData.CurrentPower;
                // raise an event
                //uniquePowerModifierPowerHasBeenChangedEvent.Raise(sameUPM);
                Events.PowerHasBeenChangedEvent.Raise(sameUPM);
            }
        }
        else
        {
            // add new upm data to the list of upms on the destination unit
            dstPartyUnit.AppliedUniquePowerModifiersData.Add(upmData);
            // raise an event
            //uniquePowerModifierDataHasBeenAddedEvent.Raise(dstPartyUnit.gameObject);
            Events.DataHasBeenAddedEvent.Raise(dstPartyUnit.gameObject);
        }
    }
    void Apply(PartyUnit srcPartyUnit, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID)
    {
        Debug.LogWarning("Applying " + uniquePowerModifierConfig.DisplayName + " from " + srcPartyUnit.UnitName + " to " + dstPartyUnit.UnitName + ", origin is " + uniquePowerModifierID.modifierOrigin);
        // init upm data variable (this is required for Trigger)
        UniquePowerModifierData uniquePowerModifierData = new UniquePowerModifierData
        {
            // set UPM ID
            UniquePowerModifierID = uniquePowerModifierID,
            // rest upm duration left to max duration
            DurationLeft = uniquePowerModifierConfig.UpmDurationMax,
            // set upm current power based on source unit stats upgrades count
            //CurrentPower = uniquePowerModifierConfig.GetUpmCurrentPower(srcPartyUnit.StatsUpgradesCount)
            CurrentPower = uniquePowerModifierConfig.GetUpmEffectivePower(srcPartyUnit)
        };

        // validate if it is really instant UPM (max duration) is 0
        // .. idea: do it in editor with warning highlight
        if (uniquePowerModifierConfig.UpmDurationMax != 0)
        {
            Debug.LogWarning("UpmDurationMax should be 0");
        }
        // instantly trigger UPM
        Trigger(dstPartyUnit, uniquePowerModifierData);
    }
Пример #7
0
    void Apply(InventoryItem inventoryItem, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID)
    {
        Debug.LogWarning("Applying " + uniquePowerModifierConfig.DisplayName + " from " + inventoryItem.ItemName + " to " + dstPartyUnit.UnitName + ", origin is " + uniquePowerModifierID.modifierOrigin);
        // init upm data variable (this is required for Trigger)
        UniquePowerModifierData uniquePowerModifierData = new UniquePowerModifierData
        {
            // set UPM ID
            UniquePowerModifierID = uniquePowerModifierID,
            // rest upm duration left to max duration
            DurationLeft = uniquePowerModifierConfig.UpmDurationMax,
            // set upm current power based on source unit stats upgrades count
            //CurrentPower = uniquePowerModifierConfig.GetUpmCurrentPower(srcPartyUnit.StatsUpgradesCount)
            CurrentPower = uniquePowerModifierConfig.GetUpmEffectivePower(inventoryItem)
        };

        // Apply UPM to the unit
        ApplyUPMData(uniquePowerModifierData, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID);
    }
Пример #8
0
    void ApplyUPMData(UniquePowerModifierData uniquePowerModifierData, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID)
    {
        // .. just in case
        ValidateTriggerCondition(uniquePowerModifierData);
        // find upm with the same modifier in the list of upms on destination party unit
        UniquePowerModifierData sameUPM = dstPartyUnit.AppliedUniquePowerModifiersData.Find(e => (e.UniquePowerModifierID == uniquePowerModifierID));

        // verify if the same UPM has already been found or applied (not null)
        if (sameUPM != null)
        {
            // verify if duration is not max already
            if (sameUPM.DurationLeft != uniquePowerModifierConfig.UpmDurationMax)
            {
                // reset existing UPM duration to max
                sameUPM.DurationLeft = uniquePowerModifierConfig.UpmDurationMax;
                // raise an event
                //uniquePowerModifierDurationHasBeenResetToMaxEvent.Raise(sameUPM);
                Events.DurationHasBeenResetToMaxEvent.Raise(sameUPM);
            }
            // verify if power is different
            if (sameUPM.CurrentPower != uniquePowerModifierData.CurrentPower)
            {
                // reset its power to current power (in case power of source party unit has changed over time)
                sameUPM.CurrentPower = uniquePowerModifierData.CurrentPower;
                // raise an event
                //uniquePowerModifierPowerHasBeenChangedEvent.Raise(sameUPM);
                Events.PowerHasBeenChangedEvent.Raise(sameUPM);
            }
        }
        else
        {
            // add new upm data to the list of upms on the destination unit
            dstPartyUnit.AppliedUniquePowerModifiersData.Add(uniquePowerModifierData);
            // raise an event
            //uniquePowerModifierDataHasBeenAddedEvent.Raise(dstPartyUnit.gameObject);
            Events.DataHasBeenAddedEvent.Raise(dstPartyUnit.gameObject);
        }
    }