Add Unity-style GetComponents scripting API
This commit is contained in:
@@ -1920,6 +1920,62 @@ TEST_F(MonoScriptRuntimeTest, TransformHierarchyApiExposesParentChildAndReparent
|
||||
EXPECT_EQ(reparentTarget->GetChildCount(), 1u);
|
||||
}
|
||||
|
||||
TEST_F(MonoScriptRuntimeTest, UnityObjectApiGetComponentsReturnsDirectComponentsAndReusesManagedInstances) {
|
||||
Scene* runtimeScene = CreateScene("MonoRuntimeScene");
|
||||
GameObject* host = runtimeScene->CreateGameObject("Host");
|
||||
GameObject* child = runtimeScene->CreateGameObject("Child", host);
|
||||
|
||||
host->AddComponent<CameraComponent>();
|
||||
child->AddComponent<CameraComponent>();
|
||||
child->AddComponent<MeshRendererComponent>();
|
||||
|
||||
AddScript(host, "Gameplay", "ObjectApiMarkerProbe");
|
||||
AddScript(host, "Gameplay", "ObjectApiMarkerProbe");
|
||||
ScriptComponent* hostProbe = AddScript(host, "Gameplay", "GetComponentsProbe");
|
||||
|
||||
engine->OnRuntimeStart(runtimeScene);
|
||||
engine->OnUpdate(0.016f);
|
||||
|
||||
int32_t observedTransformCount = -1;
|
||||
int32_t observedCameraCount = -1;
|
||||
int32_t observedCameraCountViaGameObject = -1;
|
||||
int32_t observedMarkerCount = -1;
|
||||
int32_t observedMeshRendererCount = -1;
|
||||
bool observedAllMarkersNonNull = false;
|
||||
bool observedFirstMarkerMatchesGetComponent = false;
|
||||
bool observedMarkerInstancesAreDistinct = false;
|
||||
bool observedTransformBoundToHost = false;
|
||||
std::string observedFirstMarkerHostName;
|
||||
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedTransformCount", observedTransformCount));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedCameraCount", observedCameraCount));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedCameraCountViaGameObject", observedCameraCountViaGameObject));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedMarkerCount", observedMarkerCount));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedMeshRendererCount", observedMeshRendererCount));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedAllMarkersNonNull", observedAllMarkersNonNull));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedFirstMarkerMatchesGetComponent", observedFirstMarkerMatchesGetComponent));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedMarkerInstancesAreDistinct", observedMarkerInstancesAreDistinct));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedTransformBoundToHost", observedTransformBoundToHost));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(hostProbe, "ObservedFirstMarkerHostName", observedFirstMarkerHostName));
|
||||
|
||||
EXPECT_EQ(observedTransformCount, 1);
|
||||
EXPECT_EQ(observedCameraCount, 1);
|
||||
EXPECT_EQ(observedCameraCountViaGameObject, 1);
|
||||
EXPECT_EQ(observedMarkerCount, 2);
|
||||
EXPECT_EQ(observedMeshRendererCount, 0);
|
||||
EXPECT_TRUE(observedAllMarkersNonNull);
|
||||
EXPECT_TRUE(observedFirstMarkerMatchesGetComponent);
|
||||
EXPECT_TRUE(observedMarkerInstancesAreDistinct);
|
||||
EXPECT_TRUE(observedTransformBoundToHost);
|
||||
EXPECT_EQ(observedFirstMarkerHostName, "Host");
|
||||
|
||||
EXPECT_EQ(host->GetComponents<CameraComponent>().size(), 1u);
|
||||
EXPECT_EQ(host->GetComponents<ScriptComponent>().size(), 3u);
|
||||
EXPECT_EQ(child->GetComponents<CameraComponent>().size(), 1u);
|
||||
EXPECT_EQ(child->GetComponents<MeshRendererComponent>().size(), 1u);
|
||||
EXPECT_EQ(runtime->GetManagedInstanceCount(), 3u);
|
||||
}
|
||||
|
||||
TEST_F(MonoScriptRuntimeTest, UnityObjectApiSupportsHierarchyLookupAndDestroy) {
|
||||
Scene* runtimeScene = CreateScene("MonoRuntimeScene");
|
||||
GameObject* root = runtimeScene->CreateGameObject("Root");
|
||||
|
||||
Reference in New Issue
Block a user