This repository has been archived on 2026-10-29. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
EveUnity/packages/org.gamecult.eve.unity-scene/Tests/Editor/EveUnityFeedbackEffectRendererTests.cs
2026-07-12 05:27:38 +01:00

60 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
#nullable enable
namespace GameCult.Eve.UnityScene.Tests
{
public sealed class EveUnityFeedbackEffectRendererTests
{
[Test]
public void RendererResolvesSemanticFeedbackRoleAtProviderPosition()
{
var root = new GameObject("feedback-renderer-test");
var prefab = new GameObject("destruction-prefab");
try
{
var host = root.AddComponent<EveUnityPlayableWorldClientHost>();
var renderer = root.AddComponent<EveUnityFeedbackEffectRenderer>();
var provider = new CapturingProvider(prefab);
renderer.Bind(host, provider);
renderer.Present(Event("destroyed-1", "entity.destroyed", "4,2,7"));
Assert.That(provider.LastRole, Is.EqualTo("effect.feedback.entity.destroyed"));
Assert.That(renderer.ActiveEffectCount, Is.EqualTo(1));
Assert.That(root.transform.childCount, Is.EqualTo(1));
Assert.That(root.transform.GetChild(0).position, Is.EqualTo(new Vector3(4, 2, 7)));
}
finally
{
UnityEngine.Object.DestroyImmediate(root);
UnityEngine.Object.DestroyImmediate(prefab);
}
}
private static EveUnityFeedbackEvent Event(string id, string kind, string position) =>
new EveUnityFeedbackEvent(new EveUnitySceneNode(id, "feedback.event", "scene-node",
new Dictionary<string, string>(StringComparer.Ordinal)
{
["eventId"] = id, ["eventKind"] = kind, ["position"] = position
}, Empty(), Empty(), 0, 0, Array.Empty<EveUnitySceneEmbeddedDocumentSlot>(), null,
Array.Empty<EveUnitySceneNode>()));
private static IReadOnlyDictionary<string, string> Empty() =>
new Dictionary<string, string>(StringComparer.Ordinal);
private sealed class CapturingProvider : IEveUnityGameObjectAssetProvider
{
private readonly GameObject _prefab;
public CapturingProvider(GameObject prefab) { _prefab = prefab; }
public string LastRole { get; private set; } = "";
public GameObject? ResolvePrefab(EveUnityPlayableWorldAssetBinding asset)
{
LastRole = asset.EntityKind;
return _prefab;
}
}
}
}