mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-19 15:51:48 +00:00
68 lines
2.5 KiB
C#
68 lines
2.5 KiB
C#
using HarmonyLib;
|
|
using UnityEngine;
|
|
|
|
namespace MiraAPI.Patches.Roles;
|
|
|
|
[HarmonyPatch(typeof(TaskPanelBehaviour))]
|
|
internal static class TaskPanelPatch
|
|
{
|
|
/// <summary>
|
|
/// This patch is to override the automatic updating of the y position on the tab (which is in base game)
|
|
/// because I can't change the custom tab y pos if it's being overridden every frame.
|
|
/// I'm sure there is an easier/better way, but this is the fix that worked for me.
|
|
/// </summary>
|
|
[HarmonyPrefix]
|
|
[HarmonyPatch(nameof(TaskPanelBehaviour.Update))]
|
|
public static bool UpdatePrefix(TaskPanelBehaviour __instance)
|
|
{
|
|
if (__instance.gameObject.name != "RolePanel")
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var transform = __instance.background.transform;
|
|
var vector = __instance.background.sprite.bounds.extents;
|
|
var vector2 = __instance.tab.sprite.bounds.extents;
|
|
|
|
transform.localScale = __instance.taskText.textBounds.size.x > 0f
|
|
? new Vector3(
|
|
__instance.taskText.textBounds.size.x + 0.4f,
|
|
__instance.taskText.textBounds.size.y + 0.3f,
|
|
1f)
|
|
: Vector3.zero;
|
|
|
|
vector.y = -vector.y;
|
|
vector = vector.Mul(transform.localScale);
|
|
__instance.background.transform.localPosition = vector;
|
|
|
|
vector2 = vector2.Mul(__instance.tab.transform.localScale);
|
|
vector2.y = -vector2.y;
|
|
vector2.x += vector.x * 2f;
|
|
__instance.tab.transform.localPosition = vector2;
|
|
|
|
if (!GameManager.Instance)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var closePosition = new Vector3(
|
|
-__instance.background.sprite.bounds.size.x * __instance.background.transform.localScale.x,
|
|
__instance.closedPosition.y,
|
|
__instance.closedPosition.z);
|
|
__instance.closedPosition = closePosition;
|
|
|
|
__instance.timer = __instance.open
|
|
? Mathf.Min(1f, __instance.timer + Time.deltaTime / __instance.animationTimeSeconds)
|
|
: Mathf.Max(0f, __instance.timer - Time.deltaTime / __instance.animationTimeSeconds);
|
|
|
|
var relativePos = new Vector3(
|
|
Mathf.SmoothStep(__instance.closedPosition.x, __instance.openPosition.x, __instance.timer),
|
|
Mathf.SmoothStep(__instance.closedPosition.y, __instance.openPosition.y, __instance.timer),
|
|
__instance.openPosition.z);
|
|
__instance.transform.localPosition = AspectPosition.ComputePosition(
|
|
AspectPosition.EdgeAlignments.LeftTop,
|
|
relativePos);
|
|
return false;
|
|
}
|
|
}
|