D:\ValheimDev\Dumps\Old\assembly_valheim\DamageText.cs D:\ValheimDev\Dumps\Latest\assembly_valheim\DamageText.cs
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using TMPro; using TMPro;
using UnityEngine; using UnityEngine;
   
public class DamageText : MonoBehaviour public class DamageText : MonoBehaviour
{ {
    public static DamageText instance     public static DamageText instance
    {     {
        get         get
        {         {
            return DamageText.m_instance;             return DamageText.m_instance;
        }         }
    }     }
   
    private void Awake()     private void Awake()
    {     {
        DamageText.m_instance = this;         DamageText.m_instance = this;
        ZRoutedRpc.instance.Register<ZPackage>("DamageText", new Action<long, ZPackage>(this.RPC_DamageText));         ZRoutedRpc.instance.Register<ZPackage>("DamageText", new Action<long, ZPackage>(this.RPC_DamageText));
    }     }
   
    private void LateUpdate()     private void LateUpdate()
    {     {
        this.UpdateWorldTexts(Time.deltaTime);         this.UpdateWorldTexts(Time.deltaTime);
    }     }
   
    private void UpdateWorldTexts(float dt)     private void UpdateWorldTexts(float dt)
    {     {
        DamageText.WorldTextInstance worldTextInstance = null;         DamageText.WorldTextInstance worldTextInstance = null;
        Camera mainCamera = Utils.GetMainCamera();         Camera mainCamera = Utils.GetMainCamera();
        foreach (DamageText.WorldTextInstance worldTextInstance2 in this.m_worldTexts)         foreach (DamageText.WorldTextInstance worldTextInstance2 in this.m_worldTexts)
        {         {
            worldTextInstance2.m_timer += dt;             worldTextInstance2.m_timer += dt;
            if (worldTextInstance2.m_timer > this.m_textDuration && worldTextInstance == null)             if (worldTextInstance2.m_timer > this.m_textDuration && worldTextInstance == null)
            {             {
                worldTextInstance = worldTextInstance2;                 worldTextInstance = worldTextInstance2;
            }             }
            DamageText.WorldTextInstance worldTextInstance3 = worldTextInstance2;             DamageText.WorldTextInstance worldTextInstance3 = worldTextInstance2;
            worldTextInstance3.m_worldPos.y = worldTextInstance3.m_worldPos.y + dt;             worldTextInstance3.m_worldPos.y = worldTextInstance3.m_worldPos.y + dt;
            float num = Mathf.Clamp01(worldTextInstance2.m_timer / this.m_textDuration);             float num = Mathf.Clamp01(worldTextInstance2.m_timer / this.m_textDuration);
            Color color = worldTextInstance2.m_textField.color;             Color color = worldTextInstance2.m_textField.color;
            color.a = 1f - Mathf.Pow(num, 3f);             color.a = 1f - Mathf.Pow(num, 3f);
            worldTextInstance2.m_textField.color = color;             worldTextInstance2.m_textField.color = color;
            Vector3 vector = mainCamera.WorldToScreenPointScaled(worldTextInstance2.m_worldPos);             Vector3 vector = mainCamera.WorldToScreenPointScaled(worldTextInstance2.m_worldPos);
            if (vector.x < 0f || vector.x > (float)Screen.width || vector.y < 0f || vector.y > (float)Screen.height || vector.z < 0f)             if (vector.x < 0f || vector.x > (float)Screen.width || vector.y < 0f || vector.y > (float)Screen.height || vector.z < 0f)
            {             {
                worldTextInstance2.m_gui.SetActive(false);                 worldTextInstance2.m_gui.SetActive(false);
            }             }
            else             else
            {             {
                worldTextInstance2.m_gui.SetActive(true);                 worldTextInstance2.m_gui.SetActive(true);
                worldTextInstance2.m_gui.transform.position = vector;                 worldTextInstance2.m_gui.transform.position = vector;
            }             }
        }         }
        if (worldTextInstance != null)         if (worldTextInstance != null)
        {         {
            UnityEngine.Object.Destroy(worldTextInstance.m_gui);             UnityEngine.Object.Destroy(worldTextInstance.m_gui);
            this.m_worldTexts.Remove(worldTextInstance);             this.m_worldTexts.Remove(worldTextInstance);
        }         }
    }     }
   
    private void AddInworldText(DamageText.TextType type, Vector3 pos, float distance, float dmg, bool mySelf)     private void AddInworldText(DamageText.TextType type, Vector3 pos, float distance, float dmg, bool mySelf)
    {     {
.          if (dmg == 0f && this.m_worldTexts.Count > 200)
          {
              return;
          }
        DamageText.WorldTextInstance worldTextInstance = new DamageText.WorldTextInstance();         DamageText.WorldTextInstance worldTextInstance = new DamageText.WorldTextInstance();
        worldTextInstance.m_worldPos = pos + UnityEngine.Random.insideUnitSphere * 0.5f;         worldTextInstance.m_worldPos = pos + UnityEngine.Random.insideUnitSphere * 0.5f;
        worldTextInstance.m_gui = UnityEngine.Object.Instantiate<GameObject>(this.m_worldTextBase, base.transform);         worldTextInstance.m_gui = UnityEngine.Object.Instantiate<GameObject>(this.m_worldTextBase, base.transform);
        worldTextInstance.m_textField = worldTextInstance.m_gui.GetComponent<TMP_Text>();         worldTextInstance.m_textField = worldTextInstance.m_gui.GetComponent<TMP_Text>();
        this.m_worldTexts.Add(worldTextInstance);         this.m_worldTexts.Add(worldTextInstance);
        Color white;         Color white;
        if (type == DamageText.TextType.Heal)         if (type == DamageText.TextType.Heal)
        {         {
            white = new Color(0.5f, 1f, 0.5f, 0.7f);             white = new Color(0.5f, 1f, 0.5f, 0.7f);
        }         }
        else if (mySelf)         else if (mySelf)
        {         {
            if (dmg == 0f)             if (dmg == 0f)
            {             {
                white = new Color(0.5f, 0.5f, 0.5f, 1f);                 white = new Color(0.5f, 0.5f, 0.5f, 1f);
            }             }
            else             else
            {             {
                white = new Color(1f, 0f, 0f, 1f);                 white = new Color(1f, 0f, 0f, 1f);
            }             }
        }         }
        else         else
        {         {
            switch (type)             switch (type)
            {             {
            case DamageText.TextType.Normal:             case DamageText.TextType.Normal:
                white = new Color(1f, 1f, 1f, 1f);                 white = new Color(1f, 1f, 1f, 1f);
.                goto IL_180;                 goto IL_19C;
            case DamageText.TextType.Resistant:             case DamageText.TextType.Resistant:
                white = new Color(0.6f, 0.6f, 0.6f, 1f);                 white = new Color(0.6f, 0.6f, 0.6f, 1f);
.                goto IL_180;                 goto IL_19C;
            case DamageText.TextType.Weak:             case DamageText.TextType.Weak:
                white = new Color(1f, 1f, 0f, 1f);                 white = new Color(1f, 1f, 0f, 1f);
.                goto IL_180;                 goto IL_19C;
            case DamageText.TextType.Immune:             case DamageText.TextType.Immune:
                white = new Color(0.6f, 0.6f, 0.6f, 1f);                 white = new Color(0.6f, 0.6f, 0.6f, 1f);
.                goto IL_180;                 goto IL_19C;
            case DamageText.TextType.TooHard:             case DamageText.TextType.TooHard:
                white = new Color(0.8f, 0.7f, 0.7f, 1f);                 white = new Color(0.8f, 0.7f, 0.7f, 1f);
.                goto IL_180;                 goto IL_19C;
            }             }
            white = Color.white;             white = Color.white;
        }         }
.        IL_180:         IL_19C:
        worldTextInstance.m_textField.color = white;         worldTextInstance.m_textField.color = white;
        if (distance > this.m_smallFontDistance)         if (distance > this.m_smallFontDistance)
        {         {
            worldTextInstance.m_textField.fontSize = (float)this.m_smallFontSize;             worldTextInstance.m_textField.fontSize = (float)this.m_smallFontSize;
        }         }
        else         else
        {         {
            worldTextInstance.m_textField.fontSize = (float)this.m_largeFontSize;             worldTextInstance.m_textField.fontSize = (float)this.m_largeFontSize;
        }         }
        string text;         string text;
        switch (type)         switch (type)
        {         {
        case DamageText.TextType.Heal:         case DamageText.TextType.Heal:
            text = "+" + dmg.ToString("0.#", CultureInfo.InvariantCulture);             text = "+" + dmg.ToString("0.#", CultureInfo.InvariantCulture);
            break;             break;
        case DamageText.TextType.TooHard:         case DamageText.TextType.TooHard:
            text = Localization.instance.Localize("$msg_toohard");             text = Localization.instance.Localize("$msg_toohard");
            break;             break;
        case DamageText.TextType.Blocked:         case DamageText.TextType.Blocked:
            text = Localization.instance.Localize("$msg_blocked: ") + dmg.ToString("0.#", CultureInfo.InvariantCulture);             text = Localization.instance.Localize("$msg_blocked: ") + dmg.ToString("0.#", CultureInfo.InvariantCulture);
            break;             break;
        default:         default:
            text = dmg.ToString("0.#", CultureInfo.InvariantCulture);             text = dmg.ToString("0.#", CultureInfo.InvariantCulture);
            break;             break;
        }         }
        worldTextInstance.m_textField.text = text;         worldTextInstance.m_textField.text = text;
        worldTextInstance.m_timer = 0f;         worldTextInstance.m_timer = 0f;
    }     }
   
    public void ShowText(HitData.DamageModifier type, Vector3 pos, float dmg, bool player = false)     public void ShowText(HitData.DamageModifier type, Vector3 pos, float dmg, bool player = false)
    {     {
        DamageText.TextType textType = DamageText.TextType.Normal;         DamageText.TextType textType = DamageText.TextType.Normal;
        switch (type)         switch (type)
        {         {
        case HitData.DamageModifier.Normal:         case HitData.DamageModifier.Normal:
            textType = DamageText.TextType.Normal;             textType = DamageText.TextType.Normal;
            break;             break;
        case HitData.DamageModifier.Resistant:         case HitData.DamageModifier.Resistant:
            textType = DamageText.TextType.Resistant;             textType = DamageText.TextType.Resistant;
            break;             break;
        case HitData.DamageModifier.Weak:         case HitData.DamageModifier.Weak:
            textType = DamageText.TextType.Weak;             textType = DamageText.TextType.Weak;
            break;             break;
        case HitData.DamageModifier.Immune:         case HitData.DamageModifier.Immune:
            textType = DamageText.TextType.Immune;             textType = DamageText.TextType.Immune;
            break;             break;
        case HitData.DamageModifier.VeryResistant:         case HitData.DamageModifier.VeryResistant:
            textType = DamageText.TextType.Resistant;             textType = DamageText.TextType.Resistant;
            break;             break;
        case HitData.DamageModifier.VeryWeak:         case HitData.DamageModifier.VeryWeak:
            textType = DamageText.TextType.Weak;             textType = DamageText.TextType.Weak;
            break;             break;
        }         }
        this.ShowText(textType, pos, dmg, player);         this.ShowText(textType, pos, dmg, player);
    }     }
   
    public void ShowText(DamageText.TextType type, Vector3 pos, float dmg, bool player = false)     public void ShowText(DamageText.TextType type, Vector3 pos, float dmg, bool player = false)
    {     {
        ZPackage zpackage = new ZPackage();         ZPackage zpackage = new ZPackage();
        zpackage.Write((int)type);         zpackage.Write((int)type);
        zpackage.Write(pos);         zpackage.Write(pos);
        zpackage.Write(dmg);         zpackage.Write(dmg);
        zpackage.Write(player);         zpackage.Write(player);
        ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "DamageText", new object[] { zpackage });         ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "DamageText", new object[] { zpackage });
    }     }
   
    private void RPC_DamageText(long sender, ZPackage pkg)     private void RPC_DamageText(long sender, ZPackage pkg)
    {     {
        Camera mainCamera = Utils.GetMainCamera();         Camera mainCamera = Utils.GetMainCamera();
        if (!mainCamera)         if (!mainCamera)
        {         {
            return;             return;
        }         }
        if (Hud.IsUserHidden())         if (Hud.IsUserHidden())
        {         {
            return;             return;
        }         }
        DamageText.TextType textType = (DamageText.TextType)pkg.ReadInt();         DamageText.TextType textType = (DamageText.TextType)pkg.ReadInt();
        Vector3 vector = pkg.ReadVector3();         Vector3 vector = pkg.ReadVector3();
        float num = pkg.ReadSingle();         float num = pkg.ReadSingle();
        bool flag = pkg.ReadBool();         bool flag = pkg.ReadBool();
        float num2 = Vector3.Distance(mainCamera.transform.position, vector);         float num2 = Vector3.Distance(mainCamera.transform.position, vector);
        if (num2 > this.m_maxTextDistance)         if (num2 > this.m_maxTextDistance)
        {         {
            return;             return;
        }         }
        bool flag2 = flag && sender == ZNet.GetUID();         bool flag2 = flag && sender == ZNet.GetUID();
        this.AddInworldText(textType, vector, num2, num, flag2);         this.AddInworldText(textType, vector, num2, num, flag2);
    }     }
   
    private static DamageText m_instance;     private static DamageText m_instance;
   
    public float m_textDuration = 1.5f;     public float m_textDuration = 1.5f;
   
    public float m_maxTextDistance = 30f;     public float m_maxTextDistance = 30f;
   
    public int m_largeFontSize = 16;     public int m_largeFontSize = 16;
   
    public int m_smallFontSize = 8;     public int m_smallFontSize = 8;
   
    public float m_smallFontDistance = 10f;     public float m_smallFontDistance = 10f;
   
    public GameObject m_worldTextBase;     public GameObject m_worldTextBase;
   
    private List<DamageText.WorldTextInstance> m_worldTexts = new List<DamageText.WorldTextInstance>();     private List<DamageText.WorldTextInstance> m_worldTexts = new List<DamageText.WorldTextInstance>();
   
    public enum TextType     public enum TextType
    {     {
        Normal,         Normal,
        Resistant,         Resistant,
        Weak,         Weak,
        Immune,         Immune,
        Heal,         Heal,
        TooHard,         TooHard,
        Blocked         Blocked
    }     }
   
    private class WorldTextInstance     private class WorldTextInstance
    {     {
        public Vector3 m_worldPos;         public Vector3 m_worldPos;
   
        public GameObject m_gui;         public GameObject m_gui;
   
        public float m_timer;         public float m_timer;
   
        public TMP_Text m_textField;         public TMP_Text m_textField;
    }     }
} }