public void SplitEdge_CreatesVertexAtMousePosition_CreatesTwoEdges_InterpolatesWeights() { Vector2 position1 = Vector2.up * 10f; Vector2 position2 = Vector2.right * 10f; Vector2 createPosition = Vector2.zero; m_SpriteMeshDataController.CreateVertex(position1); m_SpriteMeshDataController.CreateVertex(position2); m_SpriteMeshDataController.CreateEdge(0, 1); m_SpriteMeshData.vertices[0].editableBoneWeight.SetFromBoneWeight(new BoneWeight() { boneIndex0 = 0, weight0 = 1f }); m_SpriteMeshData.vertices[1].editableBoneWeight.SetFromBoneWeight(new BoneWeight() { boneIndex0 = 1, weight0 = 1f }); m_SpriteMeshData.bones.Add(new SpriteBoneData()); m_SpriteMeshData.bones.Add(new SpriteBoneData()); m_HoveredVertex = -1; m_HoveredEdge = -1; m_ClosestEdge = 0; m_MousePosition = createPosition; m_View.DoSplitEdge().Returns(true); m_SpriteMeshController.OnGUI(); Assert.AreEqual(3, m_SpriteMeshData.vertices.Count, "Incorrect number of vertices"); Assert.AreEqual(2, m_SpriteMeshData.edges.Count, "Incorrect number of edges"); AssertEdge(new Edge(0, 2), m_SpriteMeshData.edges[0]); AssertEdge(new Edge(1, 2), m_SpriteMeshData.edges[1]); Assert.AreEqual(createPosition, m_SpriteMeshData.vertices[2].position, "Vertex position is incorrect"); var expected = new BoneWeight() { boneIndex0 = 0, boneIndex1 = 1, boneIndex2 = 0, boneIndex3 = 0, weight0 = 0.5f, weight1 = 0.5f, weight2 = 0f, weight3 = 0f }; AssertBoneWeightContainsChannels(expected, m_SpriteMeshData.vertices[2].editableBoneWeight.ToBoneWeight(false)); m_CacheUndo.Received().BeginUndoOperation(Arg.Any <string>()); m_Triangulator.Received().Triangulate(Arg.Any <IList <Vector2> >(), Arg.Any <IList <Edge> >(), Arg.Any <IList <int> >()); }
public void SplitEdge_CreatesVertexAtMousePosition_CreatesTwoEdges_InterpolatesWeights() { Vector2 position1 = Vector2.up * 10f; Vector2 position2 = Vector2.right * 10f; Vector2 createPosition = Vector2.zero; m_SpriteMeshData.CreateVertex(position1); m_SpriteMeshData.CreateVertex(position2); m_SpriteMeshData.CreateEdge(0, 1); m_SpriteMeshData.vertices[0].editableBoneWeight.SetFromBoneWeight(new BoneWeight() { boneIndex0 = 0, weight0 = 1f }); m_SpriteMeshData.vertices[1].editableBoneWeight.SetFromBoneWeight(new BoneWeight() { boneIndex0 = 1, weight0 = 1f }); m_SpriteMeshData.bones.Add(new SpriteBoneData()); m_SpriteMeshData.bones.Add(new SpriteBoneData()); m_HoveredVertex = -1; m_HoveredEdge = -1; m_ClosestEdge = 0; m_MousePosition = createPosition; m_View.DoSplitEdge().Returns(true); m_SpriteMeshController.OnGUI(); Assert.AreEqual(3, m_SpriteMeshData.vertices.Count, "Incorrect number of vertices"); Assert.AreEqual(2, m_SpriteMeshData.edges.Count, "Incorrect number of edges"); AssertEdge(new Edge(0, 2), m_SpriteMeshData.edges[0]); AssertEdge(new Edge(1, 2), m_SpriteMeshData.edges[1]); Assert.AreEqual(createPosition, m_SpriteMeshData.vertices[2].position, "Vertex position is incorrect"); Assert.AreEqual(0, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(0).boneIndex, "Index is incorrect"); Assert.AreEqual(1, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(1).boneIndex, "Index is incorrect"); Assert.AreEqual(0, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(2).boneIndex, "Index is incorrect"); Assert.AreEqual(0, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(3).boneIndex, "Index is incorrect"); Assert.AreEqual(0.5f, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(0).weight, "Weight is incorrect"); Assert.AreEqual(0.5f, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(1).weight, "Weight is incorrect"); Assert.AreEqual(0f, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(2).weight, "Weight is incorrect"); Assert.AreEqual(0f, m_SpriteMeshData.vertices[2].editableBoneWeight.GetBoneWeightData(3).weight, "Weight is incorrect"); m_UndoObject.Received().RegisterCompleteObjectUndo(Arg.Any <string>()); m_Triangulator.Received().Triangulate(Arg.Any <IList <Vector2> >(), Arg.Any <IList <Edge> >(), Arg.Any <IList <int> >()); }