public void SetActive(UniquePowerModifierData uniquePowerModifierData) { // save UPM data this.uniquePowerModifierData = uniquePowerModifierData; // update current duration left value UpdateDurationLeftText(); // get UPM UI config UniquePowerModifierConfig uniquePowerModifierConfig = uniquePowerModifierData.GetUniquePowerModifierConfig(); // update text button colors textButton.NormalColor = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.statusIconTextNormalColor; textButton.HighlightedColor = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.statusIconTextHighlightedColor; textButton.PressedColor = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.statusIconTextPressedColor; textButton.DisabledColor = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.statusIconTextDisabledColor; // update text current color symbolText.color = textButton.NormalColor; // update text symbol symbolText.text = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.symbol; // update background image color backgroundImage.color = uniquePowerModifierConfig.UniquePowerModifierStausIconUIConfig.statusIconBackgroundColor; // activate game object gameObject.SetActive(true); // Start animation CoroutineQueueManager.Run(FadeBackground()); }
public void OnUniquePowerModifierPowerHasBeenChanged(UniquePowerModifierData uniquePowerModifierData) { // verify if this is the same as this UPM data if (uniquePowerModifierData.UniquePowerModifierID == this.uniquePowerModifierData.UniquePowerModifierID) { Debug.Log(".. Display on UPM Power change animation"); } }
public void OnUniquePowerModifierHasBeenTriggeredEvent(UniquePowerModifierData uniquePowerModifierData) { // verify if this is the same as this UPM data if (uniquePowerModifierData.UniquePowerModifierID == this.uniquePowerModifierData.UniquePowerModifierID) { Debug.Log(".. Display on UPM has been triggered animation"); // Start animation StartCoroutine(FadeBackground()); } }
public void OnUniquePowerModifierHasBeenRemovedEvent(UniquePowerModifierData uniquePowerModifierData) { // verify if this is the same as this UPM data if (uniquePowerModifierData.UniquePowerModifierID == this.uniquePowerModifierData.UniquePowerModifierID) { // Remove this UPM status icon Debug.Log("Remove this UPM status icon"); // Do it via coroutine and global queue, to make sure that it is removed after all other animation has finished CoroutineQueueManager.Run(RemoveThisStatusIcon()); } }
//public override void Apply(InventoryItem inventoryItem, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID) //{ // throw new System.NotImplementedException(); //} void ValidateTriggerCondition(UniquePowerModifierData uniquePowerModifierData) { // get unique power modifier config UniquePowerModifierConfig uniquePowerModifierConfig = uniquePowerModifierData.GetUniquePowerModifierConfig(); // validate if condition has been configured correctly if (uniquePowerModifierConfig.TriggerCondition != TriggerCondition.NonePassive) { Debug.LogWarning("Trigger condition should be set to None Passive for this UPM"); } }
public void OnUniquePowerModifierDurationHasChanged(UniquePowerModifierData uniquePowerModifierData) { // verify if this is the same as this UPM data if (uniquePowerModifierData.UniquePowerModifierID == this.uniquePowerModifierData.UniquePowerModifierID) { Debug.Log(".. Display on UPM Duration has changed animation"); // update current duration left value UpdateDurationLeftText(); // display animation StartCoroutine(BlinkText(durationLeftText, config.blinkTextDuration, config.blinkTextTransparencyThreshold)); } }
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 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) }; // Apply UPM to the unit ApplyUPMData(uniquePowerModifierData, dstPartyUnit, uniquePowerModifierConfig, uniquePowerModifierID); //// 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); //} }
//public override void Apply(InventoryItem inventoryItem, PartyUnit dstPartyUnit, UniquePowerModifierConfig uniquePowerModifierConfig, UniquePowerModifierID uniquePowerModifierID) //{ // throw new System.NotImplementedException(); //} public override void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { Debug.Log("Trigger " + uniquePowerModifierData.GetOriginDisplayName() + " UPM"); // Apply DoT (UPM) current power as damage to destination unit dstPartyUnit.UnitHealthCurr += uniquePowerModifierData.CurrentPower; // current power is negative if it is damage dealing ability // Decrement DoT current duration uniquePowerModifierData.DurationLeft -= 1; // note: order is important. Trigger should be last, because it may also remove UPM status icon // Trigger on duration changed event //uniquePowerModifierDurationHasChangedEvent.Raise(uniquePowerModifierData); Events.DurationHasChangedEvent.Raise(uniquePowerModifierData); // Trigger on UPM has been triggered //uniquePowerModifierHasBeenTriggeredEvent.Raise(uniquePowerModifierData); Events.HasBeenTriggeredEvent.Raise(uniquePowerModifierData); }
public override void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { Debug.Log("Trigger " + uniquePowerModifierData.GetOriginDisplayName() + " UPM"); // .. just in case ValidateTriggerCondition(uniquePowerModifierData); // Decrement current duration uniquePowerModifierData.DurationLeft -= 1; // note: order is important. Trigger should be last, because it may also remove UPM status icon // Trigger on duration changed event //uniquePowerModifierDurationHasChangedEvent.Raise(uniquePowerModifierData); Events.DurationHasChangedEvent.Raise(uniquePowerModifierData); // Trigger on UPM has been triggered //uniquePowerModifierHasBeenTriggeredEvent.Raise(uniquePowerModifierData); Events.HasBeenTriggeredEvent.Raise(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); }
public void OnUniquePowerModifierDataHasBeenAdded(PartyUnit partyUnit) { // verify if this is the same party unit if (partyUnit == LPartyUnit) { Debug.Log("Add new UPM"); // get added UPM (get last UPM from the list) UniquePowerModifierData uniquePowerModifierData = partyUnit.AppliedUniquePowerModifiersData[partyUnit.AppliedUniquePowerModifiersData.Count - 1]; // verify if UPM has status icon config if (!(uniquePowerModifierData.GetUniquePowerModifierConfig().UniquePowerModifierStausIconUIConfig is UniquePowerModifierStatusIconNoneUIConfig)) { // init parent transform Transform upmStatusIconParent; // get upm alignment UniquePowerModifierAlignment uniquePowerModifierAlignment = uniquePowerModifierData.GetUniquePowerModifierConfig().UniquePowerModifierStausIconUIConfig.uniquePowerModifierAlignment; // verify if UPM is buff or debuff if (uniquePowerModifierAlignment == UniquePowerModifierAlignment.Left) { upmStatusIconParent = upmBuffsParentTranform; } else if (uniquePowerModifierAlignment == UniquePowerModifierAlignment.Right) { upmStatusIconParent = upmDebuffsParentTranform; } else if (uniquePowerModifierAlignment == UniquePowerModifierAlignment.None) { upmStatusIconParent = upmBuffsParentTranform; Debug.LogWarning("UPM Status Icon UI Config should have alignment set. Falling back to positive alignment"); } else { Debug.LogError("Unhandled condition"); // exit without creating UPM status icon return; } // create UI for added UPM based on UPM config UniquePowerModifierStatusIcon uniquePowerModifierStatusIcon = Instantiate(uniquePowerModifierStatusIconTemplate.gameObject, upmStatusIconParent).GetComponent <UniquePowerModifierStatusIcon>(); // activate new UPM uniquePowerModifierStatusIcon.SetActive(uniquePowerModifierData); } } }
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); } }
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); }
public override void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { // This type of UPM is calculated automatically based on UPMs inheritance and propagation }
// not used public override void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { throw new NotImplementedException(); }
//public void Apply(InventoryItem inventoryItem, PartyUnit dstPartyUnit, UniquePowerModifierID uniquePowerModifierID) //{ // UniquePowerModifier.Apply(inventoryItem, dstPartyUnit, this, uniquePowerModifierID); //} public void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { UniquePowerModifier.Trigger(dstPartyUnit, uniquePowerModifierData); }
public override void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData) { Debug.Log("Trigger " + uniquePowerModifierData.GetOriginDisplayName() + " UPM"); // Apply upm current power to destination unit dstPartyUnit.UnitHealthCurr += uniquePowerModifierData.CurrentPower; // current power is negative if it is damage dealing ability }
public abstract void Trigger(PartyUnit dstPartyUnit, UniquePowerModifierData uniquePowerModifierData);