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); } }
//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); }
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); }
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); } }