something something
This commit is contained in:
@@ -14,6 +14,14 @@ public class ExampleComponent : Component
|
||||
Console.WriteLine($"C# deltaTime {deltaTime} object id {Owner.Id}");
|
||||
ImGui.Begin("C# WINDOW");
|
||||
ImGui.Text("Hello from ExampleComponent!");
|
||||
if (ImGui.Button("create GameObject"))
|
||||
{
|
||||
GameObject.Create();
|
||||
}
|
||||
if (ImGui.Button("GC Collect"))
|
||||
{
|
||||
GC.Collect();
|
||||
}
|
||||
ImGui.End();
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,7 @@ public class GameObject
|
||||
{
|
||||
NativeFunctions.createGameObject(out ulong id, out uint index);
|
||||
var o = new GameObject(id, index);
|
||||
Console.WriteLine($"C# created object with id {id}, index {index}");
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -54,18 +55,24 @@ public class GameObject
|
||||
throw new Exception($"Can't destroy GameObject({_id})");
|
||||
}
|
||||
|
||||
~GameObject()
|
||||
{
|
||||
// destroys object native part when managed part is garbage-collected
|
||||
Destroy();
|
||||
}
|
||||
|
||||
/// <param name="t">type derived from Component</param>
|
||||
/// <returns>true if new component instance was created, false if component of the same tipe is already added to GameObject</returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
public bool TryCreateComponent(Type t)
|
||||
{
|
||||
if(!t.IsSubclassOf(typeof(Component)))
|
||||
if (!t.IsSubclassOf(typeof(Component)))
|
||||
throw new Exception($"type {t.FullName} is not a derived class of {typeof(Component).FullName}");
|
||||
|
||||
if(Components.ContainsKey(t))
|
||||
if (Components.ContainsKey(t))
|
||||
return false;
|
||||
|
||||
Component component = (Component?)Activator.CreateInstance(t, this)
|
||||
|
||||
Component component = (Component?)Activator.CreateInstance(t, this)
|
||||
?? throw new Exception($"can't create instance of class {t.FullName}");
|
||||
Components.Add(t, component);
|
||||
return true;
|
||||
@@ -78,7 +85,9 @@ public class GameObject
|
||||
|
||||
private void InvokeUpdate(double deltaTime)
|
||||
{
|
||||
foreach(var p in Components)
|
||||
Console.WriteLine("C# InvokeUpdate");
|
||||
Console.WriteLine($"id {_id}, index {_index}, destroyed {_isDestroyed}");
|
||||
foreach (var p in Components)
|
||||
{
|
||||
p.Value.Update(deltaTime);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Ougge;
|
||||
|
||||
internal static class NativeFunctions
|
||||
{
|
||||
[DllImport("__Internal")]
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal extern static void createGameObject(out ulong id, out uint index);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal extern static bool freeGameObject(uint index);
|
||||
}
|
||||
Reference in New Issue
Block a user