namespace XCEngine { public sealed class GameObject { private readonly ulong m_uuid; internal GameObject(ulong uuid) { m_uuid = uuid; } public ulong UUID => m_uuid; 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 Transform Transform => GetComponent(); public Transform transform => Transform; public bool HasComponent() where T : Component { return InternalCalls.GameObject_HasComponent(UUID, typeof(T)); } public T GetComponent() where T : Component { ulong componentOwnerUUID = InternalCalls.GameObject_GetComponent(UUID, typeof(T)); return Component.Create(componentOwnerUUID); } public bool TryGetComponent(out T component) where T : Component { component = GetComponent(); return component != null; } } }