Files
XCEngine/managed/XCEngine.ScriptCore/GameObject.cs

84 lines
2.4 KiB
C#

namespace XCEngine
{
public sealed class GameObject
{
private readonly ulong m_uuid;
internal GameObject(ulong uuid)
{
m_uuid = uuid;
}
public ulong UUID => m_uuid;
public static GameObject Find(string name)
{
ulong uuid = InternalCalls.GameObject_Find(name ?? string.Empty);
return uuid != 0 ? new GameObject(uuid) : null;
}
public static GameObject Create(string name)
{
return Create(name, null);
}
public static GameObject Create(string name, GameObject parent)
{
ulong uuid = InternalCalls.GameObject_Create(name ?? string.Empty, parent?.UUID ?? 0);
return uuid != 0 ? new GameObject(uuid) : null;
}
public string Name
{
get => InternalCalls.GameObject_GetName(UUID) ?? string.Empty;
set => InternalCalls.GameObject_SetName(UUID, value ?? string.Empty);
}
public string name
{
get => Name;
set => Name = value;
}
public bool activeSelf => InternalCalls.GameObject_GetActiveSelf(UUID);
public bool activeInHierarchy => InternalCalls.GameObject_GetActiveInHierarchy(UUID);
public void SetActive(bool value)
{
InternalCalls.GameObject_SetActive(UUID, value);
}
public void Destroy()
{
InternalCalls.GameObject_Destroy(UUID);
}
public Transform Transform => GetComponent<Transform>();
public Transform transform => Transform;
public bool HasComponent<T>() where T : Component
{
return InternalCalls.GameObject_HasComponent(UUID, typeof(T));
}
public T GetComponent<T>() where T : Component
{
ulong componentOwnerUUID = InternalCalls.GameObject_GetComponent(UUID, typeof(T));
return Component.Create<T>(componentOwnerUUID);
}
public T AddComponent<T>() where T : Component
{
ulong componentOwnerUUID = InternalCalls.GameObject_AddComponent(UUID, typeof(T));
return Component.Create<T>(componentOwnerUUID);
}
public bool TryGetComponent<T>(out T component) where T : Component
{
component = GetComponent<T>();
return component != null;
}
}
}