From 38db0c22aee89e356babf6137085a8e942c79c8f Mon Sep 17 00:00:00 2001 From: praydog Date: Mon, 13 May 2024 04:12:54 -0700 Subject: [PATCH] .NET: Add support for nulling out object fields --- csharp-api/REFrameworkNET/Field.cpp | 12 ++++++++++++ csharp-api/test/Test/Test.cs | 3 +++ 2 files changed, 15 insertions(+) diff --git a/csharp-api/REFrameworkNET/Field.cpp b/csharp-api/REFrameworkNET/Field.cpp index 063e030ac..78d73da59 100644 --- a/csharp-api/REFrameworkNET/Field.cpp +++ b/csharp-api/REFrameworkNET/Field.cpp @@ -55,6 +55,18 @@ namespace REFrameworkNET { } if (!field_type->IsValueType()) { + if (value == nullptr) { + // Lightweight managed object + auto originalObject = *(reframework::API::ManagedObject**)data_ptr; + + if (originalObject != nullptr && originalObject->get_ref_count() > 0) { + originalObject->release(); + } + + *(uintptr_t*)data_ptr = 0; + return; + } + auto iobject = dynamic_cast(value); if (iobject != nullptr) { diff --git a/csharp-api/test/Test/Test.cs b/csharp-api/test/Test/Test.cs index ab8a52196..5febd6815 100644 --- a/csharp-api/test/Test/Test.cs +++ b/csharp-api/test/Test/Test.cs @@ -151,6 +151,9 @@ public static void Entry() { var position = transform.get_Position(); REFrameworkNET.API.LogInfo("Player position: " + position.x + " " + position.y + " " + position.z); + + position.y += 5.0f; + transform.set_Position(position); } }