mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-01 13:59:22 +00:00
47 lines
No EOL
2 KiB
C#
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();
|
|
}
|
|
}
|
|
} |