public void LoadWarLionTest()
        {
            RmvRigidModel model = new RmvRigidModel(GetLionMeshData(), "UnitTestModel");

            // Header
            Assert.AreEqual("RMV2", model.Header.FileType);
            Assert.AreEqual(4, model.Header.LodCount);
            Assert.AreEqual("bigcat04", model.Header.SkeletonName);
            Assert.AreEqual(7, model.Header.Version);

            // Lod headers
            Assert.AreEqual(4, model.LodHeaders.Length);

            Assert.AreEqual(3, model.LodHeaders[0].MeshCount);
            Assert.AreEqual(85530, model.LodHeaders[0].TotalLodIndexSize);
            Assert.AreEqual(357696, model.LodHeaders[0].TotalLodVertexSize);

            Assert.AreEqual(3, model.LodHeaders[1].MeshCount);
            Assert.AreEqual(55584, model.LodHeaders[1].TotalLodIndexSize);
            Assert.AreEqual(266848, model.LodHeaders[1].TotalLodVertexSize);

            Assert.AreEqual(2, model.LodHeaders[2].MeshCount);
            Assert.AreEqual(10890, model.LodHeaders[2].TotalLodIndexSize);
            Assert.AreEqual(71148, model.LodHeaders[2].TotalLodVertexSize);

            Assert.AreEqual(2, model.LodHeaders[3].MeshCount);
            Assert.AreEqual(6492, model.LodHeaders[3].TotalLodIndexSize);
            Assert.AreEqual(50316, model.LodHeaders[3].TotalLodVertexSize);

            // MeshList
        }
Exemplo n.º 2
0
        public void LoadEditableModel(PackFile file)
        {
            var rmv = new RmvRigidModel(file.DataSource.ReadData(), file.Name);

            EditableMeshNode.SetModel(rmv, _resourceLibary, _animationView.Player, GeometryGraphicsContextFactory.CreateInstance(_resourceLibary.GraphicsDevice));

            _animationView.SetActiveSkeleton(rmv.Header.SkeletonName);
        }
        public Rmv2ModelNode(RmvRigidModel model, ResourceLibary resourceLib, string name, AnimationPlayer animationPlayer, IGeometryGraphicsContextFactory contextFactory) : base(name)
        {
            Name = name;

            for (int lodIndex = 0; lodIndex < 4; lodIndex++)
            {
                var lodNode = new Rmv2LodNode("Lod " + lodIndex, lodIndex)
                {
                    IsVisible = lodIndex == 0
                };
                AddObject(lodNode);
            }

            SetModel(model, resourceLib, animationPlayer, contextFactory);
        }
Exemplo n.º 4
0
        private byte[] GetBytesToSave()
        {
            var  isAllVisible    = _editableMeshNode.AreAllNodesVisible();
            bool onlySaveVisible = false;

            if (isAllVisible == false)
            {
                if (MessageBox.Show("Only save visible nodes?", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    onlySaveVisible = true;
                }
            }

            var bytes         = _editableMeshNode.Save(onlySaveVisible);
            var reloadedModel = new RmvRigidModel(bytes, "reloadedFile");

            return(bytes);
        }
        public void SaveWarLion()
        {
            var           originalMeshBytes = GetLionMeshData();
            RmvRigidModel model             = new RmvRigidModel(originalMeshBytes, "UnitTestModel");

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(ms))
                    model.SaveToByteArray(writer);

                var savedMeshBytes = ms.ToArray();
                Assert.AreEqual(originalMeshBytes.Length, savedMeshBytes.Length);

                for (int i = 0; i < originalMeshBytes.Length; i++)
                {
                    Assert.AreEqual(originalMeshBytes[i], savedMeshBytes[i]);
                }
            }
        }
        Rmv2ModelNode LoadRigidMesh(PackFile file, ref ISceneNode parent, AnimationPlayer player, ref string skeletonName)
        {
            var rmvModel = new RmvRigidModel(file.DataSource.ReadData(), file.Name);
            var model    = new Rmv2ModelNode(rmvModel, _resourceLibary, Path.GetFileName(rmvModel.FileName), player, GeometryGraphicsContextFactory.CreateInstance(_device));

            if (parent == null)
            {
                parent = model;
            }
            else
            {
                parent.AddObject(model);
            }
            if (!string.IsNullOrWhiteSpace(rmvModel.Header.SkeletonName))
            {
                skeletonName = rmvModel.Header.SkeletonName;
            }
            return(model);
        }
        public void SetModel(RmvRigidModel model, ResourceLibary resourceLibary, AnimationPlayer animationPlayer, IGeometryGraphicsContextFactory contextFactory)
        {
            Model = model;
            for (int lodIndex = 0; lodIndex < model.Header.LodCount; lodIndex++)
            {
                if (lodIndex >= Children.Count)
                {
                    AddObject(new Rmv2LodNode("Lod " + lodIndex, lodIndex));
                }

                var lodNode = Children[lodIndex];
                for (int modelIndex = 0; modelIndex < model.LodHeaders[lodIndex].MeshCount; modelIndex++)
                {
                    var node = new Rmv2MeshNode(model.MeshList[lodIndex][modelIndex], contextFactory.Create(), resourceLibary, animationPlayer);
                    node.LodIndex = lodIndex;
                    lodNode.AddObject(node);
                }
            }
        }
        public void UpdateOffsets()
        {
            var           meshData = GetLionMeshData();
            RmvRigidModel model    = new RmvRigidModel(meshData, "UnitTestModel");

            model.UpdateOffsets();

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(ms))
                    model.SaveToByteArray(writer);

                var bits = ms.ToArray();
                Assert.AreEqual(meshData.Length, bits.Length);

                for (int i = 0; i < meshData.Length; i++)
                {
                    Assert.AreEqual(meshData[i], bits[i]);
                }
            }
        }