Files
FlaxEngine/Source/Tools/FlaxEngine.Tests/TestSceneGraph.cs
2022-01-14 13:31:12 +01:00

133 lines
4.3 KiB
C#

// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
using System;
using System.Collections.Generic;
using FlaxEditor.SceneGraph;
using FlaxEditor.SceneGraph.Actors;
using FlaxEngine;
using NUnit.Framework;
namespace FlaxEditor.Tests
{
[TestFixture]
public class TestSceneGraph
{
public class MyNode : SceneGraphNode
{
private string _name;
public MyNode(string name)
: base(Guid.NewGuid())
{
_name = name;
}
public MyNode[] LinkChildren
{
set
{
foreach (var e in value)
{
e.ParentNode = this;
}
}
}
public override string Name => _name;
public override SceneNode ParentScene => null;
public override Transform Transform { get; set; }
public override bool IsActive => true;
public override bool IsActiveInHierarchy => true;
public override int OrderInParent { get; set; }
}
private MyNode GetTestTree()
{
var root = new MyNode("Root")
{
LinkChildren = new[]
{
new MyNode("Level1_0")
{
LinkChildren = new[]
{
new MyNode("Level2_0"),
new MyNode("Level2_1")
{
LinkChildren = new[]
{
new MyNode("Level3_0"),
new MyNode("Level3_1"),
new MyNode("Level3_2"),
}
},
new MyNode("Level2_2"),
}
},
new MyNode("Level1_1"),
new MyNode("Level1_2"),
new MyNode("Level1_3"),
new MyNode("Level1_4"),
}
};
return root;
}
private MyNode GetNode(SceneGraphNode root, string name)
{
if (root.Name == name)
return root as MyNode;
for (int i = 0; i < root.ChildNodes.Count; i++)
{
var node = GetNode(root.ChildNodes[i], name);
if (node != null)
return node;
}
return null;
}
[Test]
public void TestBuildAllNodes()
{
var root = GetTestTree();
var testList1 = new List<SceneGraphNode>
{
GetNode(root, "Level1_0"),
GetNode(root, "Level3_0"),
GetNode(root, "Level3_1"),
GetNode(root, "Level1_3"),
};
var solidList = SceneGraphTools.BuildAllNodes(testList1);
Assert.IsTrue(solidList != null && solidList.Count == 8);
Assert.IsTrue(solidList.Contains(GetNode(root, "Level1_0")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level1_3")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level2_0")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level2_1")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level2_2")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level3_0")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level3_1")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level3_2")));
}
[Test]
public void TestBuildNodesParents()
{
var root = GetTestTree();
var testList1 = new List<SceneGraphNode>
{
GetNode(root, "Level1_0"),
GetNode(root, "Level3_0"),
GetNode(root, "Level3_1"),
GetNode(root, "Level1_3"),
};
var solidList = SceneGraphTools.BuildNodesParents(testList1);
Assert.IsTrue(solidList != null && solidList.Count == 2);
Assert.IsTrue(solidList.Contains(GetNode(root, "Level1_0")));
Assert.IsTrue(solidList.Contains(GetNode(root, "Level1_3")));
}
}
}