void Update() { Player player = Player.localPlayer; if (player) { panel.SetActive(true); // instantiate/destroy enough slots UIUtils.BalancePrefabs(slotPrefab.gameObject, player.skills.buffs.Count, panel.transform); // refresh all for (int i = 0; i < player.skills.buffs.Count; ++i) { Buff buff = player.skills.buffs[i]; UIBuffSlot slot = panel.transform.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = buff.image; // only build tooltip while it's actually shown. this // avoids MASSIVE amounts of StringBuilder allocations. if (slot.tooltip.IsVisible()) { slot.tooltip.text = buff.ToolTip(); } slot.slider.maxValue = buff.buffTime; slot.slider.value = buff.BuffTimeRemaining(); } } else { panel.SetActive(false); } }
void Update() { GameObject player = Player.player; if (!player) { return; } PlayerSkills skills = player.GetComponent <PlayerSkills>(); // instantiate/destroy enough slots UIUtils.BalancePrefabs(slotPrefab.gameObject, skills.buffs.Count, transform); // refresh all for (int i = 0; i < skills.buffs.Count; ++i) { UIBuffSlot slot = transform.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = skills.buffs[i].image; slot.tooltip.text = skills.buffs[i].ToolTip(); slot.slider.maxValue = skills.buffs[i].buffTime; slot.slider.value = skills.buffs[i].BuffTimeRemaining(); } }
void Update() { Player player = Utils.ClientLocalPlayer(); if (!player) { return; } // instantiate/destroy enough slots UIUtils.BalancePrefabs(slotPrefab.gameObject, player.buffs.Count, transform); // refresh all for (int i = 0; i < player.buffs.Count; ++i) { UIBuffSlot slot = transform.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = player.buffs[i].image; slot.tooltip.text = player.buffs[i].ToolTip(); slot.slider.maxValue = player.buffs[i].buffTime; slot.slider.value = player.buffs[i].BuffTimeRemaining(); } // addon system hooks Utils.InvokeMany(typeof(UIBuffs), this, "Update_"); }
void Update() { Player player = Player.localPlayer; if (player) { panel.SetActive(true); // instantiate/destroy enough slots UIUtils.BalancePrefabs(slotPrefab.gameObject, player.buffs.Count, panel.transform); // refresh all for (int i = 0; i < player.buffs.Count; ++i) { UIBuffSlot slot = panel.transform.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = player.buffs[i].image; slot.tooltip.text = player.buffs[i].ToolTip(); slot.slider.maxValue = player.buffs[i].buffTime; slot.slider.value = player.buffs[i].BuffTimeRemaining(); } } else { panel.SetActive(false); } }
// Controls all functionality for buffs on target. private void BuffControl(Entity target) { // target buffs UIUtils.BalancePrefabs(buffSlotPrefab.gameObject, target.buffs.Count, buffsPanel); for (int i = 0; i < target.buffs.Count; ++i) { UIBuffSlot slot = buffsPanel.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = target.buffs[i].image; slot.tooltip.text = target.buffs[i].ToolTip(); slot.slider.maxValue = target.buffs[i].buffTime; slot.slider.value = target.buffs[i].BuffTimeRemaining(); } }
void Update() { Player player = Player.localPlayer; if (player != null) { // show nextTarget > target // => feels best in situations where we select another target while // casting a skill on the existing target. // => '.target' doesn't change while casting, but the UI gives the // illusion that we already targeted something else // => this is also great for skills that change the target while casting, // e.g. a buff that is cast on 'self' even though we target an 'npc. // this way the player doesn't see the target switching. // => this is how most MMORPGs do it too. Entity target = player.nextTarget ?? player.target; if (target != null && target != player) { float distance = Utils.ClosestDistance(player.collider, target.collider); // name and health panel.SetActive(true); healthSlider.value = target.HealthPercent(); nameText.text = target.name; // target buffs UIUtils.BalancePrefabs(buffSlotPrefab.gameObject, target.buffs.Count, buffsPanel); for (int i = 0; i < target.buffs.Count; ++i) { UIBuffSlot slot = buffsPanel.GetChild(i).GetComponent <UIBuffSlot>(); // refresh slot.image.color = Color.white; slot.image.sprite = target.buffs[i].image; slot.tooltip.text = target.buffs[i].ToolTip(); slot.slider.maxValue = target.buffs[i].buffTime; slot.slider.value = target.buffs[i].BuffTimeRemaining(); } // trade button if (target is Player) { tradeButton.gameObject.SetActive(true); tradeButton.interactable = player.CanStartTradeWith(target); tradeButton.onClick.SetListener(() => { player.CmdTradeRequestSend(); }); } else { tradeButton.gameObject.SetActive(false); } // guild invite button if (target is Player && player.InGuild()) { guildInviteButton.gameObject.SetActive(true); guildInviteButton.interactable = !((Player)target).InGuild() && player.guild.CanInvite(player.name, target.name) && NetworkTime.time >= player.nextRiskyActionTime && distance <= player.interactionRange; guildInviteButton.onClick.SetListener(() => { player.CmdGuildInviteTarget(); }); } else { guildInviteButton.gameObject.SetActive(false); } // party invite button if (target is Player) { partyInviteButton.gameObject.SetActive(true); partyInviteButton.interactable = (!player.InParty() || !player.party.IsFull()) && !((Player)target).InParty() && NetworkTime.time >= player.nextRiskyActionTime && distance <= player.interactionRange; partyInviteButton.onClick.SetListener(() => { player.CmdPartyInvite(target.name); }); } else { partyInviteButton.gameObject.SetActive(false); } } else { panel.SetActive(false); } } else { panel.SetActive(false); } }