Do not bundle multiple buffs in UI

This commit is contained in:
henriquenakashima 2020-10-12 23:55:51 -04:00
parent 034e6beca6
commit 58da527ad5
3 changed files with 32 additions and 16 deletions

View file

@ -14,14 +14,14 @@ public class StatusUI : MonoBehaviour
private Dictionary<BattleStatus, StatusIconUI> statusIcons;
private Dictionary<BuffType, StatusIconUI> buffIcons;
private Dictionary<Buff, StatusIconUI> buffIcons;
public void Init(BattleParticipant battleParticipant, BattleState battleState) {
this.battleParticipant = battleParticipant;
this.battleState = battleState;
this.statusIcons = new Dictionary<BattleStatus, StatusIconUI>();
this.buffIcons = new Dictionary<BuffType, StatusIconUI>();
this.buffIcons = new Dictionary<Buff, StatusIconUI>();
this.battleParticipant.OnStatusChanged += this.NotifyBattleStatusOrBuffsChanged;
this.battleParticipant.OnBuffsChanged += this.NotifyBattleStatusOrBuffsChanged;
}
@ -54,7 +54,8 @@ public class StatusUI : MonoBehaviour
iconUI.InitStatus(status);
this.statusIcons[status] = iconUI;
}
iconUI.SetAmount(this.battleParticipant.GetStatusAmount(status), index++);
iconUI.UpdateStatusAmount(this.battleParticipant.GetStatusAmount(status));
iconUI.SetPosition(index++);
} else {
if (iconUI != null) {
Destroy(iconUI.gameObject);
@ -63,28 +64,28 @@ public class StatusUI : MonoBehaviour
}
}
Dictionary<BuffType, StatusIconUI> previousBuffIcons = new Dictionary<BuffType, StatusIconUI>(this.buffIcons);
Dictionary<Buff, StatusIconUI> previousBuffIcons = new Dictionary<Buff, StatusIconUI>(this.buffIcons);
List<Buff> currentBuffs = this.battleState.BuffManager.GetAllBuffsFor(this.battleParticipant);
foreach (Buff buff in currentBuffs) {
StatusIconUI iconUI = null;
previousBuffIcons.TryGetValue(buff.Type, out iconUI);
previousBuffIcons.TryGetValue(buff, out iconUI);
if (iconUI == null) {
iconUI = Instantiate(this.iconPrefab.gameObject, this.transform).GetComponent<StatusIconUI>();
iconUI.InitBuff(buff.Type);
this.buffIcons[buff.Type] = iconUI;
iconUI.InitBuff(buff);
this.buffIcons[buff] = iconUI;
} else {
previousBuffIcons.Remove(buff.Type);
previousBuffIcons.Remove(buff);
}
iconUI.SetAmount(buff.Amount, index++);
iconUI.SetPosition(index++);
}
// If a buff is left in previousBuffIcons, it has been removed.
foreach (KeyValuePair<BuffType, StatusIconUI> p in previousBuffIcons) {
BuffType buffType = p.Key;
foreach (KeyValuePair<Buff, StatusIconUI> p in previousBuffIcons) {
Buff buff = p.Key;
StatusIconUI iconUI = p.Value;
Destroy(iconUI.gameObject);
this.buffIcons.Remove(buffType);
this.buffIcons.Remove(buff);
}
}
}