private void UpdateTarget() { var target = m_LinkedCharacter.TargetingSystem.LockedCharacter; if (target.UID != m_lastTargetUID) { m_lastTargetUID = target.UID; UpdateOnTargetChange(); } if (CombatHUD.IsHudHidden(this.Split_ID)) { DisableHolders(); } else { UpdateTargetHUD(target); if ((bool)CombatHUD.config.GetValue(Settings.EnemyInfobox)) { UpdateInfobox(target); } EnableHolders(); } }
internal void Update() { if (NetworkLevelLoader.Instance.IsGameplayLoading || NetworkLevelLoader.Instance.IsGameplayPaused) { if (!wasInMenu) { for (int i = 0; i < m_labelHolders.Count; i++) { if (m_labelHolders[i].activeSelf) { m_labelHolders[i].SetActive(false); } } wasInMenu = true; } return; } wasInMenu = false; List <StatusEffectInfo> statusInfos = new List <StatusEffectInfo>(); for (int i = 0; i < SplitScreenManager.Instance.LocalPlayers.Count; i++) { var player = SplitScreenManager.Instance.LocalPlayers[i].AssignedCharacter; if (!player || CombatHUD.IsHudHidden(i)) { continue; } UpdateVitalText(player); if ((bool)CombatHUD.config.GetValue(Settings.PlayerStatusTimers)) { try { UpdatePlayerStatuses(i, ref statusInfos); } catch //(Exception e) { //Debug.LogError("Error updating statuses: " + e.Message); } } } // update text holders for (int i = 0; i < m_labelHolders.Count; i++) { if (i >= statusInfos.Count || !(bool)CombatHUD.config.GetValue(Settings.PlayerStatusTimers)) { if (m_labelHolders[i].activeSelf) { m_labelHolders[i].SetActive(false); } } else { var text = m_labelHolders[i].GetComponent <Text>(); var iconRect = statusInfos[i].LinkedIcon.RectTransform; var posOffset = new Vector3(0, CombatHUD.Rel(25f, true), 0); text.GetComponent <RectTransform>().position = iconRect.position + posOffset; TimeSpan t = TimeSpan.FromSeconds(statusInfos[i].TimeRemaining); text.text = t.Minutes + ":" + t.Seconds.ToString("00"); if (statusInfos[i].TimeRemaining < 15) { text.color = Color.red; } else { text.color = Color.white; } if (!m_labelHolders[i].activeSelf) { m_labelHolders[i].SetActive(true); } } } }
internal void Update() { //cleanup dead labels first var maxLifespan = (float)CombatHUD.config.GetValue(Settings.LabelLifespan); for (int z = 0; z < ActiveLabels.Count; z++) { if (Time.time - ActiveLabels[z].CreationTime > maxLifespan || !ActiveLabels[z].Target) { ActiveLabels.RemoveAt(z); z--; } } float ceiling = (float)CombatHUD.config.GetValue(Settings.DamageCeiling); int minsize = (int)(float)CombatHUD.config.GetValue(Settings.MinFontSize); int maxsize = (int)(float)CombatHUD.config.GetValue(Settings.MaxFontSize); if (maxsize < minsize) { maxsize = minsize; } for (int i = 0; i < SplitScreenManager.Instance.LocalPlayerCount; i++) { var player = SplitScreenManager.Instance.LocalPlayers[i]; if (!player.AssignedCharacter) { continue; } // dont show damage labels if player is in menu bool disable = false; if (CombatHUD.IsHudHidden(i) || MenuManager.Instance.IsMapDisplayed || (player.AssignedCharacter.CharacterUI.GetCurrentMenu() is MenuPanel panel && panel.IsDisplayed)) { disable = true; } var camera = player.CameraScript; int offset = i * 30; for (int j = 0 + offset; j < LabelHolders.Count; j++) { if (disable || j - offset >= ActiveLabels.Count) { if (LabelHolders[j].activeSelf) { LabelHolders[j].SetActive(false); } } else { var labelInfo = ActiveLabels[j - offset]; var labelHolder = LabelHolders[j]; var pos = (bool)CombatHUD.config.GetValue(Settings.LabelsStayAtHitPos) ? labelInfo.HitWorldPos : labelInfo.Target.CenterPosition; float damageStrength = (float)((decimal)labelInfo.Damage / (decimal)ceiling); // set damage "strength" float time = Time.time - labelInfo.CreationTime; var timeOffset = Mathf.Lerp(0.3f, 0.07f, damageStrength) * time; var screenPos = camera.WorldToViewportPoint(pos + new Vector3(0, timeOffset)); float distance = Vector3.Distance(player.AssignedCharacter.transform.position, pos); if (IsScreenPosVisible(ref screenPos, i) && distance < (float)CombatHUD.config.GetValue(Settings.MaxDistance)) { screenPos += new Vector3 ( CombatHUD.Rel(labelInfo.ranXpos), CombatHUD.Rel(labelInfo.ranYpos, true) ); labelHolder.GetComponent <RectTransform>().position = screenPos; var text = labelHolder.GetComponent <Text>(); text.text = Math.Round(labelInfo.Damage).ToString(); text.fontSize = (int)Mathf.Lerp(minsize, maxsize, damageStrength); text.color = labelInfo.TextColor; if (!LabelHolders[j].activeSelf) { LabelHolders[j].SetActive(true); } } else if (LabelHolders[j].activeSelf) { LabelHolders[j].SetActive(false); } } } } }