// Token: 0x06000500 RID: 1280 RVA: 0x00029D94 File Offset: 0x00027F94 private void UpdateCrosshair(Player player, float bowDrawPercentage) { GameObject hoverObject = player.GetHoverObject(); Hoverable hoverable = hoverObject ? hoverObject.GetComponentInParent <Hoverable>() : null; if (hoverable != null && !TextViewer.instance.IsVisible()) { this.m_hoverName.text = hoverable.GetHoverText(); this.m_crosshair.color = ((this.m_hoverName.text.Length > 0) ? Color.yellow : new Color(1f, 1f, 1f, 0.5f)); } else { this.m_crosshair.color = new Color(1f, 1f, 1f, 0.5f); this.m_hoverName.text = ""; } Piece hoveringPiece = player.GetHoveringPiece(); if (hoveringPiece) { WearNTear component = hoveringPiece.GetComponent <WearNTear>(); if (component) { this.m_pieceHealthRoot.gameObject.SetActive(true); this.m_pieceHealthBar.SetValue(component.GetHealthPercentage()); } else { this.m_pieceHealthRoot.gameObject.SetActive(false); } } else { this.m_pieceHealthRoot.gameObject.SetActive(false); } if (bowDrawPercentage > 0f) { float num = Mathf.Lerp(1f, 0.15f, bowDrawPercentage); this.m_crosshairBow.gameObject.SetActive(true); this.m_crosshairBow.transform.localScale = new Vector3(num, num, num); this.m_crosshairBow.color = Color.Lerp(new Color(1f, 1f, 1f, 0f), Color.yellow, bowDrawPercentage); return; } this.m_crosshairBow.gameObject.SetActive(false); }
private static bool ShouldHighlight(WearNTear wearNTear, Vector3 playerPos) { Vector3 wearNTearPos = WearsDataCache[wearNTear].pos; float distance = Vector3.Distance(wearNTearPos, playerPos); float healthPercentage = wearNTear.GetHealthPercentage(); float maxDistance = MaxDistance.Value; float healthDiffMinimum = 5f; if (HighlightedWears.Contains(wearNTear)) { if (distance > maxDistance) { HighlightedWears.Remove(wearNTear); wearNTear.ResetHighlight(); return(false); } float healthDif = Mathf.Abs(WearsDataCache[wearNTear].healthPercentage - healthPercentage); if (healthDif > healthDiffMinimum) { return(true); } else { return(false); } } if (distance <= maxDistance) { return(true); } else { return(false); } }
private static void UpdateDataCache(WearNTear wearNTear) { if (!WearsDataCache.ContainsKey(wearNTear)) { WearsData wd = new WearsData(); wd.pos = wearNTear.gameObject.transform.position; wd.healthPercentage = wearNTear.GetHealthPercentage(); if (WearsDataCache.Count == 0) { firstElementCache = wearNTear; } WearsDataCache.Add(wearNTear, wd); if (lastAddedToCache != null) { lastAddedToCache.nextData = wearNTear; } lastAddedToCache = wd; CheckShouldDisposeData(); } }
static void Postfix(Hud __instance, Player player) { if (!modEnabled.Value) { return; } Piece hoveringPiece = player.GetHoveringPiece(); if (hoveringPiece) { WearNTear wnt = hoveringPiece.GetComponent <WearNTear>(); ZNetView znv = hoveringPiece.GetComponent <ZNetView>(); if (wnt && znv?.IsValid() == true) { __instance.m_pieceHealthBar.transform.parent.Find("bkg").gameObject.SetActive(showHealthBar.Value); __instance.m_pieceHealthBar.transform.parent.Find("darken").gameObject.SetActive(showHealthBar.Value); __instance.m_pieceHealthBar.gameObject.SetActive(showHealthBar.Value); float healthPercent = wnt.GetHealthPercentage(); if (customHealthColors.Value) { __instance.m_pieceHealthBar.SetValue(wnt.GetHealthPercentage()); if (healthPercent < 0.5) { __instance.m_pieceHealthBar.SetColor(Color.Lerp(lowColor.Value, midColor.Value, healthPercent * 2)); } else { __instance.m_pieceHealthBar.SetColor(Color.Lerp(midColor.Value, highColor.Value, (healthPercent - 0.5f) * 2)); } } if (showHealthText.Value) { Transform t = __instance.m_pieceHealthRoot.Find("_HealthText"); if (t == null) { t = Instantiate(__instance.m_healthText, __instance.m_pieceHealthRoot.transform).transform; t.GetComponent <RectTransform>().localEulerAngles = new Vector3(0, 0, -90); } t.name = "_HealthText"; t.GetComponent <Text>().text = string.Format(healthText.Value, Mathf.RoundToInt(znv.GetZDO().GetFloat("health", wnt.m_health)), Mathf.RoundToInt(wnt.m_health), Mathf.RoundToInt(healthPercent * 100)); t.GetComponent <Text>().fontSize = healthTextSize.Value; t.GetComponent <Text>().resizeTextMaxSize = t.GetComponent <Text>().text.Length; t.GetComponent <RectTransform>().anchoredPosition = new Vector2(healthTextPosition.Value.y, healthTextPosition.Value.x); } float support = Traverse.Create(wnt).Method("GetSupport").GetValue <float>(); float maxSupport = Traverse.Create(wnt).Method("GetMaxSupport").GetValue <float>(); if (showIntegrityText.Value && maxSupport >= support) { Transform t = __instance.m_pieceHealthRoot.Find("_IntegrityText"); if (t == null) { t = Instantiate(__instance.m_healthText, __instance.m_pieceHealthRoot.transform).transform; t.GetComponent <RectTransform>().localEulerAngles = new Vector3(0, 0, -90); } t.name = "_IntegrityText"; t.GetComponent <Text>().text = string.Format(integrityText.Value, Mathf.RoundToInt(support), Mathf.RoundToInt(maxSupport), Mathf.RoundToInt(support / maxSupport * 100)); t.GetComponent <Text>().fontSize = integrityTextSize.Value; t.GetComponent <Text>().resizeTextMaxSize = t.GetComponent <Text>().text.Length; t.GetComponent <RectTransform>().anchoredPosition = new Vector2(integrityTextPosition.Value.y, integrityTextPosition.Value.x); } } } }
public static bool WearNTear_UpdateWear(ref WearNTear __instance) { if (OverrideWearNTear(ref __instance)) { ZNetView m_nview = (ZNetView)AccessTools.Field(typeof(WearNTear), "m_nview").GetValue(__instance); if (m_nview == null || !m_nview.IsValid()) { return(false); } bool shouldUpdate = (bool)AccessTools.Method(typeof(WearNTear), "ShouldUpdate").Invoke(__instance, new object[] { }); if (m_nview.IsOwner() && shouldUpdate) { if (ZNetScene.instance.OutsideActiveArea(__instance.transform.position)) { float maxSupport = (float)AccessTools.Method(typeof(WearNTear), "GetMaxSupport").Invoke(__instance, new object[] { }); AccessTools.Field(typeof(WearNTear), "m_support").SetValue(__instance, maxSupport); m_nview.GetZDO().Set("support", maxSupport); return(false); } float num = 0.0f; bool haveRoof = (bool)AccessTools.Method(typeof(WearNTear), "HaveRoof").Invoke(__instance, new object[] { }); bool shouldDamage = EnvMan.instance.IsWet() && !haveRoof; if ((bool)(UnityEngine.Object)__instance.m_wet) { __instance.m_wet.SetActive(shouldDamage); } if (__instance.m_noRoofWear && (double)__instance.GetHealthPercentage() > minHealthPercentage) { bool isUnderWater = (bool)AccessTools.Method(typeof(WearNTear), "IsUnderWater").Invoke(__instance, new object[] { }); float rainTimer = (float)AccessTools.Field(typeof(WearNTear), "m_rainTimer").GetValue(__instance); float health = m_nview.GetZDO().GetFloat("health", __instance.m_health); if (shouldDamage || isUnderWater) { if ((double)rainTimer == 0.0) { rainTimer = Time.time; } else if ((double)Time.time - (double)rainTimer > 60.0) { rainTimer = Time.time; num += damagePerMinute.Value; if (IsTooMuchDamage(ref __instance, health, num)) { float reduceBy = HowMuchIsTooMuch(ref __instance, health, num); num -= reduceBy; } } } else { rainTimer = 0.0f; } AccessTools.Field(typeof(WearNTear), "m_rainTimer").SetValue(__instance, rainTimer); } if (__instance.m_noSupportWear) { AccessTools.Method(typeof(WearNTear), "UpdateSupport").Invoke(__instance, new object[] { }); bool haveSupport = (bool)AccessTools.Method(typeof(WearNTear), "HaveSupport").Invoke(__instance, new object[] { }); if (!haveSupport) { num = 100f; } } bool canBeRemoved = (bool)AccessTools.Method(typeof(WearNTear), "CanBeRemoved").Invoke(__instance, new object[] { }); if ((double)num > 0.0 && !canBeRemoved) { num = 0.0f; } if ((double)num > 0.0) { __instance.ApplyDamage(num / 100f * __instance.m_health); } } AccessTools.Method(typeof(WearNTear), "UpdateVisual").Invoke(__instance, new object[] { true }); return(false); } else { return(true); } }
private static void HighlightPiece(WearNTear wearNTear) => HighlightPiece(wearNTear, wearNTear.GetHealthPercentage());