NAK_CVR_Mods/.Experimental/CVRLuaToolsExtension/LuaToolsExtension/Extensions/CVRBaseLuaBehaviourExtensions.cs
2025-04-03 03:03:24 -05:00

47 lines
No EOL
2 KiB
C#

using ABI_RC.Core.Player;
using ABI_RC.Core.Savior;
using ABI.CCK.Components;
using ABI.Scripting.CVRSTL.Common;
using UnityEngine;
namespace NAK.CVRLuaToolsExtension;
public static class CVRBaseLuaBehaviourExtensions
{
// check if the script is eligible for hot reload
public static bool IsScriptEligibleForHotReload(this CVRBaseLuaBehaviour script)
{
return script.Context.IsWornByMe // avatar if worn
|| script.Context.IsSpawnedByMe // prop if spawned
|| script.Context.objContext == CVRLuaObjectContext.WORLD; // always world scripts
}
// gets the asset id from the script
public static string GetAssetIdFromScript(this CVRBaseLuaBehaviour script)
{
switch (script.Context.objContext)
{
case CVRLuaObjectContext.WORLD:
//return MetaPort.Instance.CurrentWorldId; // do not trust CVRAssetInfo, can be destroyed at runtime
return "SYSTEM"; // default for world scripts is SYSTEM, but TODO: use actual world id
case CVRLuaObjectContext.AVATAR:
Component rootComponent = script.Context.RootComponent;
return rootComponent switch
{
PlayerSetup => MetaPort.Instance.currentAvatarGuid, // local avatar
PuppetMaster puppetMaster => puppetMaster.CVRPlayerEntity.AvatarId, // remote avatar
_ => string.Empty // fuck
};
case CVRLuaObjectContext.PROP:
{
CVRSpawnable spawnable = (CVRSpawnable)script.Context.RootComponent;
if (!string.IsNullOrEmpty(spawnable.guid)) return spawnable.guid; // after filtering has occured
return spawnable.TryGetComponent(out CVRAssetInfo assetInfo)
? assetInfo.objectId // before filtering has occured
: string.Empty; // well shit
}
default:
throw new ArgumentOutOfRangeException();
}
}
}