Browse Source

Working on Atomic C#

Josh Engebretson 10 years ago
parent
commit
d4c0e189de

+ 23 - 6
Build/AtomicSharp/AtomicSharpTest/Program.cs

@@ -20,19 +20,36 @@ namespace AtomicSharpTest
 
 
 		}
 		}
 
 
+		static private Node parent;
+		static private Node child;
+
+		static void setup()
+		{
+			parent = CreateNode ();
+			AddLight (parent);
+			parent.Name = "MyNode";
+
+			child = parent.CreateChild ("Child", CreateMode.REPLICATED, 0);
+
+			child = null;
+
+		}
+
 		public static void Main (string[] args)
 		public static void Main (string[] args)
 		{
 		{
 			AtomicSharp.AtomicSharp.Initialize ();
 			AtomicSharp.AtomicSharp.Initialize ();
 
 
-			var node = CreateNode ();
-			AddLight (node);
+			setup ();
 
 
-			node.Name = "MyNode";
+			while (AtomicSharp.AtomicSharp.RunFrame ()) {
 
 
-			if (node.HasComponent("Light"))
-				Console.Write (node.Name + " has a light");
+				child = parent.GetChild ("Child", false);
 
 
-			while (AtomicSharp.AtomicSharp.RunFrame ()) {
+				if (child.Parent.HasComponent("Light"))
+					Console.Write (child.Parent.Name + " has a light\n");
+
+				child = null;
+			
 				
 				
 			}
 			}
 		}
 		}

+ 7 - 11
Build/AtomicSharp/MyClass.cs

@@ -5,16 +5,6 @@ using System.Runtime.InteropServices;
 namespace AtomicSharp
 namespace AtomicSharp
 {
 {
 
 
-	public class MyClass
-	{
-		Light CreateLight()
-		{
-			var light = new Light ();
-			light.LightType = LightType.LIGHT_DIRECTIONAL;
-			return light;
-		}
-	}
-
 	public static class AtomicSharp
 	public static class AtomicSharp
 	{
 	{
 		[DllImport (Constants.LIBNAME, CallingConvention = CallingConvention.Cdecl)]
 		[DllImport (Constants.LIBNAME, CallingConvention = CallingConvention.Cdecl)]
@@ -26,6 +16,11 @@ namespace AtomicSharp
 
 
 		public static bool RunFrame()
 		public static bool RunFrame()
 		{
 		{
+			GC.Collect();
+			GC.WaitForPendingFinalizers();
+			GC.Collect();				
+			NativeCore.ReleaseExpiredNativeReferences ();
+
 			return atomicsharp_runframe ();
 			return atomicsharp_runframe ();
 		}
 		}
 
 
@@ -53,7 +48,7 @@ namespace AtomicSharp
 		{
 		{
 			nativeInstance = native;
 			nativeInstance = native;
 		}
 		}
-
+			
 		public IntPtr nativeInstance;
 		public IntPtr nativeInstance;
 
 
 		static public void _AddRef(IntPtr native)
 		static public void _AddRef(IntPtr native)
@@ -96,6 +91,7 @@ namespace AtomicSharp
 
 
 				if (entry.Value.Target == null || !entry.Value.IsAlive) {										
 				if (entry.Value.Target == null || !entry.Value.IsAlive) {										
 					released.Add (entry.Key);
 					released.Add (entry.Key);
+
 					Console.WriteLine("Not Alive");
 					Console.WriteLine("Not Alive");
 				} else {
 				} else {
 					
 					

+ 8 - 0
Source/AtomicSharp/AtomicSharpAPI.cpp

@@ -18,4 +18,12 @@ using namespace Atomic;
 extern "C"
 extern "C"
 {
 {
 
 
+ClassID csb_RefCounted_GetClassID(RefCounted* refCounted)
+{
+    if (!refCounted)
+        return 0;
+
+    return refCounted->GetClassID();
+}
+
 }
 }

+ 2 - 2
Source/ToolCore/JSBind/CSharp/CSClassWriter.cpp

@@ -56,7 +56,7 @@ void CSClassWriter::GenerateNativeSource(String& sourceOut)
 
 
     JSBPackage* package = klass_->GetPackage();
     JSBPackage* package = klass_->GetPackage();
 
 
-    source.AppendWithFormat("ClassID csb_%s_%s_GetClassID()\n{\n", package->GetName().CString(),klass_->GetName().CString());
+    source.AppendWithFormat("ClassID csb_%s_%s_GetClassIDStatic()\n{\n", package->GetName().CString(),klass_->GetName().CString());
     source.AppendWithFormat("   return %s::GetClassIDStatic();\n}\n\n", klass_->GetNativeName().CString());
     source.AppendWithFormat("   return %s::GetClassIDStatic();\n}\n\n", klass_->GetNativeName().CString());
 
 
     WriteNativeFunctions(source);
     WriteNativeFunctions(source);
@@ -202,7 +202,7 @@ void CSClassWriter::GenerateManagedSource(String& sourceOut)
     JSBPackage* package = klass_->GetPackage();
     JSBPackage* package = klass_->GetPackage();
     line = "[DllImport (Constants.LIBNAME, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]\n";
     line = "[DllImport (Constants.LIBNAME, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]\n";
     source += IndentLine(line);
     source += IndentLine(line);
-    line = ToString("public static extern IntPtr csb_%s_%s_GetClassID();\n", package->GetName().CString(),klass_->GetName().CString());
+    line = ToString("public static extern IntPtr csb_%s_%s_GetClassIDStatic();\n", package->GetName().CString(),klass_->GetName().CString());
     source += IndentLine(line);
     source += IndentLine(line);
     source += "\n";
     source += "\n";
     Dedent();
     Dedent();

+ 1 - 0
Source/ToolCore/JSBind/CSharp/CSFunctionWriter.h

@@ -47,6 +47,7 @@ private:
     void GenPInvokeCallParameters(String& sig);
     void GenPInvokeCallParameters(String& sig);
 
 
     void WriteManagedConstructor(String& source);
     void WriteManagedConstructor(String& source);
+    void WriteManagedDestructor(String& source);
     void WriteManagedFunction(String& source);
     void WriteManagedFunction(String& source);
 
 
     void WriteManagedPInvokeFunctionSignature(String& source);
     void WriteManagedPInvokeFunctionSignature(String& source);

+ 1 - 1
Source/ToolCore/JSBind/CSharp/CSModuleWriter.cpp

@@ -311,7 +311,7 @@ void CSModuleWriter::GenerateManagedModuleClass(String& sourceOut)
             continue;
             continue;
 
 
 
 
-        line = ToString("NativeCore.nativeClassIDToManagedConstructor [ %s.csb_%s_%s_GetClassID ()] = (IntPtr x) => {\n",
+        line = ToString("NativeCore.nativeClassIDToManagedConstructor [ %s.csb_%s_%s_GetClassIDStatic ()] = (IntPtr x) => {\n",
                         klass->GetName().CString(), package->GetName().CString(), klass->GetName().CString());
                         klass->GetName().CString(), package->GetName().CString(), klass->GetName().CString());
 
 
         source += IndentLine(line);
         source += IndentLine(line);