Files
Nitrox/NitroxClient/Helpers/NitroxEntityExtensions.cs
2025-07-06 00:23:46 +02:00

117 lines
3.6 KiB
C#

using System;
using System.Runtime.CompilerServices;
using NitroxClient.MonoBehaviours;
using NitroxClient.Unity.Helper;
using NitroxModel.DataStructures;
using NitroxModel.DataStructures.Util;
using UnityEngine;
namespace NitroxClient.Helpers;
public static class NitroxEntityExtensions
{
public static bool TryGetNitroxEntity(this Component component, out NitroxEntity nitroxEntity)
{
nitroxEntity = null;
return component && component.TryGetComponent(out nitroxEntity);
}
public static bool TryGetNitroxEntity(this GameObject gameObject, out NitroxEntity nitroxEntity)
{
nitroxEntity = null;
return gameObject && gameObject.TryGetComponent(out nitroxEntity);
}
public static bool TryGetNitroxId(this GameObject gameObject, out NitroxId nitroxId)
{
if (!gameObject || !gameObject.TryGetComponent(out NitroxEntity nitroxEntity))
{
nitroxId = null;
return false;
}
nitroxId = nitroxEntity.Id;
return nitroxId != null;
}
public static bool TryGetNitroxId(this Component component, out NitroxId nitroxId)
{
if (!component || !component.TryGetComponent(out NitroxEntity nitroxEntity))
{
nitroxId = null;
return false;
}
nitroxId = nitroxEntity.Id;
return nitroxId != null;
}
public static bool TryGetIdOrWarn(
this GameObject gameObject,
out NitroxId nitroxId,
[CallerMemberName] string methodName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
{
// Since a destroyed but non-null object is normal behavior for Unity, we don't want to warn about it.
if (!gameObject)
{
nitroxId = null;
return false;
}
if (!gameObject.TryGetComponent(out NitroxEntity nitroxEntity))
{
Log.Warn($"[{filePath[(filePath.LastIndexOf("\\", StringComparison.Ordinal) + 1)..^2] + methodName}():L{lineNumber}] Couldn't find an id on {gameObject.GetFullHierarchyPath()}");
nitroxId = null;
return false;
}
nitroxId = nitroxEntity.Id;
return nitroxId != null;
}
public static bool TryGetIdOrWarn(
this Component component,
out NitroxId nitroxId,
[CallerMemberName] string methodName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
{
// Since a destroyed but non-null object is normal behavior for Unity, we don't want to warn about it.
if (!component)
{
nitroxId = null;
return false;
}
if (!component.TryGetComponent(out NitroxEntity nitroxEntity))
{
Log.WarnOnce($"[{filePath[(filePath.LastIndexOf("\\", StringComparison.Ordinal) + 1)..^2] + methodName}():L{lineNumber}] Couldn't find an id on {component.GetFullHierarchyPath()}");
nitroxId = null;
return false;
}
nitroxId = nitroxEntity.Id;
return nitroxId != null;
}
public static Optional<NitroxId> GetId(this GameObject gameObject)
{
if (gameObject && gameObject.TryGetComponent(out NitroxEntity nitroxEntity))
{
return Optional.Of(nitroxEntity.Id);
}
return Optional.Empty;
}
public static Optional<NitroxId> GetId(this Component component)
{
if (component && component.TryGetComponent(out NitroxEntity nitroxEntity))
{
return Optional.Of(nitroxEntity.Id);
}
return Optional.Empty;
}
}