Exemple #1
0
    // 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();
            }
        }
Exemple #4
0
            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);
                        }
                    }
                }
            }
Exemple #5
0
 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());