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> >());
        }
Exemple #2
0
        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> >());
        }