76 lines
2.7 KiB
C#
76 lines
2.7 KiB
C#
using HarmonyLib;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace MxValheim.Patch.HUD
|
|
{
|
|
internal class Splash
|
|
{
|
|
public static GameObject m_canvasObject;
|
|
public static Text m_textComponent;
|
|
|
|
public void CreateOverlay()
|
|
{
|
|
// 1. Create a dedicated Canvas for our mod
|
|
m_canvasObject = new GameObject("ModdedCanvas");
|
|
Canvas canvas = m_canvasObject.AddComponent<Canvas>();
|
|
canvas.renderMode = RenderMode.ScreenSpaceOverlay; // Always stays on top
|
|
canvas.sortingOrder = 100; // Higher than standard HUD
|
|
|
|
m_canvasObject.AddComponent<CanvasScaler>();
|
|
m_canvasObject.AddComponent<GraphicRaycaster>();
|
|
|
|
// 2. Create the Text Object
|
|
GameObject textObj = new GameObject("ModdedText");
|
|
textObj.transform.SetParent(m_canvasObject.transform, false);
|
|
|
|
m_textComponent = textObj.AddComponent<Text>();
|
|
|
|
// Attempt to find Valheim's specific font, fallback to Arial if not found
|
|
Font valheimFont = null;
|
|
foreach (Font f in Resources.FindObjectsOfTypeAll<Font>())
|
|
{
|
|
if (f.name == "AveriaSerifLibre-Bold")
|
|
{
|
|
valheimFont = f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Corrected fallback for older Unity versions used in Valheim
|
|
if (valheimFont == null)
|
|
{
|
|
valheimFont = Resources.GetBuiltinResource<Font>("Arial.ttf");
|
|
}
|
|
|
|
m_textComponent.font = valheimFont;
|
|
m_textComponent.fontSize = 24;
|
|
m_textComponent.color = Color.yellow; // Bright yellow to stand out
|
|
m_textComponent.alignment = TextAnchor.UpperRight;
|
|
m_textComponent.supportRichText = true;
|
|
|
|
// This prevents the text from vanishing if the box is too small
|
|
m_textComponent.horizontalOverflow = HorizontalWrapMode.Overflow;
|
|
m_textComponent.verticalOverflow = VerticalWrapMode.Overflow;
|
|
|
|
// Add Shadow so it's visible in snow
|
|
var shadow = textObj.AddComponent<Shadow>();
|
|
shadow.effectColor = Color.black;
|
|
shadow.effectDistance = new Vector2(2, 2);
|
|
|
|
// 3. Position it
|
|
RectTransform rect = textObj.GetComponent<RectTransform>();
|
|
rect.anchorMin = new Vector2(1, 1);
|
|
rect.anchorMax = new Vector2(1, 1);
|
|
rect.pivot = new Vector2(1, 1);
|
|
rect.anchoredPosition = new Vector2(-10, -5); // Top Right
|
|
rect.sizeDelta = new Vector2(300, 100);
|
|
}
|
|
}
|
|
}
|