public bool Comparison(EffectSortData other) { bool equal = (name == other.name && score == other.score && color == other.color && damagePerSecond == other.damagePerSecond && initalDuration == other.initalDuration)?true:false; return(equal); }
void DisplayPersistentDamages() { needToUpdate = false; DamageEffectData data = playerHealth.GetPersistantEffects(); EffectSortData[] ordered = new EffectSortData[4] { new EffectSortData("fire", data.fire.initalScore, Color.red, data.fire.damagePerSecond, data.fire.damageDuration, data.fire.initalDuration), new EffectSortData("freeze", data.freeze.initalScore, Color.cyan, data.freeze.damagePerSecond, data.freeze.damageDuration, data.freeze.initalDuration), new EffectSortData("shock", data.shock.initalScore, Color.yellow, data.shock.damagePerSecond, data.shock.damageDuration, data.shock.initalDuration), new EffectSortData("acid", data.acid.initalScore, Color.green, data.acid.damagePerSecond, data.acid.damageDuration, data.acid.initalDuration) }; ordered = ArrageByHighestScore(ordered); int length = ordered.Length; for (int i = 0; i < length; i++) { if (!lastOrder[i].Comparison(ordered[i])) { lastOrder[i] = ordered[i]; needToUpdate = true; } } StoredComponents effect; for (int i = 0; i < length; i++) { if (ordered[i].score > 0) //needs to be added or checked that there is no change { if (effectsFromString.ContainsKey(ordered[i].name)) { if (needToUpdate) { UpdateGraphicData(effectsFromString[ordered[i].name], ordered[i], i); } UpdateTimer(effectsFromString[ordered[i].name].effectRadialSlider, ordered[i], needToUpdate); //look to see if there is an inactive one. if no, then create a new one } else { if (needToUpdate) { if (deadIcons.Count > 0) { effect = deadIcons[0]; effectList.Add(effect); effectsFromString.Add(ordered[i].name, effect); effect.effect.SetActive(true); deadIcons.Remove(effect); UpdateGraphicData(effectsFromString[ordered[i].name], ordered[i], i); } else { effect = new StoredComponents(); effect.effect = Instantiate(effectBasePrefab, gameObject.transform, false); effect.effectImage = effect.effect.GetComponent <Image>(); effect.effectRect = effect.effect.GetComponent <RectTransform>(); effect.effectText = effect.effect.GetComponentInChildren <Text>(); effect.effectRadialSlider = effect.effect.GetComponentInChildren <Slider>(); effectsFromString.Add(ordered[i].name, effect); effectList.Add(effect); UpdateGraphicData(effectsFromString[ordered[i].name], ordered[i], i); } Vector2 pos = effect.effectRect.rect.size / 2; pos.x += (xSpacing * i); effect.effectRect.localPosition = pos; } } } else //needs to be removed or checked that there is no change { if (needToUpdate) { if (effectsFromString.ContainsKey(ordered[i].name)) { effect = effectsFromString[ordered[i].name]; effectsFromString.Remove(ordered[i].name); effect.effectImage.color = Color.clear; effect.effect.SetActive(false); effectList.Remove(effect); deadIcons.Add(effect); } } } } void UpdateGraphicData(StoredComponents effectData, EffectSortData orderedData, int i) { effectData.effectImage.color = orderedData.color; effectData.effectText.text = (orderedData.damagePerSecond < 10) ? (Mathf.Round(orderedData.damagePerSecond * 10) / 10).ToString() : Mathf.Round(orderedData.damagePerSecond).ToString(); Vector2 pos = effectData.effectRect.rect.size / 2; pos.x += (xSpacing * i); effectData.effectRect.localPosition = pos; UpdateTimer(effectData.effectRadialSlider, orderedData, true); } void UpdateTimer(Slider radialSlider, EffectSortData effectData, bool getRealValue) { radialSlider.value = (getRealValue) ?effectData.currentDuration / effectData.initalDuration:(effectData.currentDuration - ((Health.tickRate - playerHealth.nextTick))) / effectData.initalDuration; } }