Пример #1
0
 public async Task <IModel> LoadModel(IFile file)
 {
     return(await Task.Factory.StartNew(() =>
     {
         var mdl = MdlFile.FromFile(file);
         mdl.WriteFakePrecalculatedChromeCoordinates();
         return new MdlModel(mdl);
     }));
 }
Пример #2
0
        public Solver(string targetFile, string sourceFile)
        {
            var targetData = (targetFile != null ? MdlFile.LoadModel(targetFile) : ((byte, BitArray)?)null);

            // load source
            var sourceData = (sourceFile != null ? MdlFile.LoadModel(sourceFile) : ((byte, BitArray)?)null);

            // create system
            MatterSystem = new MatterSystem(targetData?.Item1 ?? sourceData?.Item1 ?? 0, targetData?.Item2, sourceData?.Item2);
        }
Пример #3
0
        /// <summary>
        /// Creates a new Model instance using the provided MdlFile, level of detail,
        /// and variant ID, without resolving any game data.
        /// </summary>
        /// <param name="mdlFile">The MdlFile to back this Model.</param>
        /// <param name="lod">The quality of the loaded Model.</param>
        /// <param name="variantId">The variant ID of the Model to load. This will be used
        /// to specify a Material variant, and may be used by the caller to limit attributes
        /// depending on data from an ImcFile.</param>
        /// <exception cref="ArgumentException">The specified MdlFile does not contain
        /// the specified ModelLod.</exception>
        public Model(MdlFile mdlFile, ModelLod lod = ModelLod.High, int variantId = 1)
        {
            if ((uint)lod > mdlFile.FileHeader.LodCount)
            {
                throw new ArgumentException("The given model does not have the requested LoD.", nameof(lod));
            }

            File      = mdlFile;
            Lod       = lod;
            VariantId = variantId;
            BuildModel();
        }
Пример #4
0
        public MdlFile LoadMdl(string filename)
        {
            MdlFile loaded;

            if (_sLoadedMdls.TryGetValue(filename, out loaded))
            {
                return(loaded);
            }

            loaded = new MdlFile(this, filename);
            _sLoadedMdls.Add(filename, loaded);

            return(loaded);
        }
Пример #5
0
        private void LoadModels(BspFile bsp, Environment env)
        {
            var loadedModels = new Dictionary <string, MdlFile>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var ent in bsp.Entities.Where(x => EntityModelMap.ContainsKey(x.ClassName)))
            {
                var model = EntityModelMap[ent.ClassName];

                if (model == "")
                {
                    // Use model from the entity
                    if (!ent.KeyValues.ContainsKey("model"))
                    {
                        continue;
                    }
                    model = ent.KeyValues["model"];
                }

                if (ent.KeyValues.ContainsKey("targetname"))
                {
                    var targetters = bsp.Entities.Where(x => x.KeyValues.ContainsKey("target") && x.KeyValues["target"] == ent.KeyValues["targetname"]).ToList();
                }

                var file = env.GetFile(model);
                if (file != null)
                {
                    file = file.Replace('/', '\\'); // normalise path
                    try
                    {
                        MdlFile mdl;
                        if (loadedModels.ContainsKey(file))
                        {
                            mdl = loadedModels[file];
                        }
                        else
                        {
                            mdl = MdlFile.FromFile(file);
                            loadedModels[file] = mdl;
                        }

                        _scene.AddRenderable(new MdlRenderable(mdl, ent.GetVector3("origin", Vector3.Zero)));
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
        }
Пример #6
0
        public MdlRenderable(MdlFile mdl, Vector3 origin)
        {
            _mdl    = mdl;
            _origin = origin;

            _transforms = new Matrix4x4[128];
            for (var i = 0; i < _transforms.Length; i++)
            {
                _transforms[i] = Matrix4x4.Identity;
            }

            _currentFrame      = 0;
            _interframePercent = 0;

            RenderSettings = new ModelRenderSettings(mdl);
        }
Пример #7
0
        public ModelRenderSettings(MdlFile mdl)
        {
            RenderFlags = ModelRenderFlags.Model;
            Skin        = 0;
            Sequence    = 0;

            _bodyParts = new Dictionary <int, int>();
            for (var i = 0; i < mdl.BodyParts.Count; i++)
            {
                _bodyParts[i] = 0;
            }

            _controllerValues = new Dictionary <int, float>();
            for (var i = 0; i < mdl.BoneControllers.Count; i++)
            {
                _controllerValues[i] = mdl.BoneControllers[i].Rest;
            }
        }
Пример #8
0
        public void Test()
        {
            var solver = new Deconstructor((byte)50);

            for (int x = 1; x < 50; x++)
            {
                for (int y = 0; y < 10; y++)
                {
                    for (int z = 1; z < 50; z++)
                    {
                        solver.MatterSystem.Matrix.Get(x, y, z).Filled = true;
                    }
                }
            }

            MdlFile.SaveModel(@"c:\users\tstivers\source\repos\icfp2018\problems\test\dst.mdl", solver.MatterSystem.Matrix);

            solver.Solve(@"c:\users\tstivers\source\repos\icfp2018\problems\test\dst.nbt");
        }
Пример #9
0
        public void Open(Environment environment, string path)
        {
            var options = new GraphicsDeviceOptions()
            {
                HasMainSwapchain     = false,
                ResourceBindingModel = ResourceBindingModel.Improved,
                SwapchainDepthFormat = PixelFormat.R32_Float,
            };

            //_graphicsDevice = GraphicsDevice.CreateVulkan(options);
            _graphicsDevice = GraphicsDevice.CreateD3D11(options);

            _view = new VeldridControl(_graphicsDevice, options)
            {
                Dock = DockStyle.Fill,
            };
            _panel.Controls.Add(_view);
            _panel.Controls.Add(_settingsPanel);

            _camera      = new RotationCamera(_view.Width, _view.Height);
            _view.Camera = _camera;

            _sc = new SceneContext(_graphicsDevice);
            _sc.AddRenderTarget(_view);

            _scene = new Scene();

            _mdl = MdlFile.FromFile(path);

            var(min, max) = GetBbox(_mdl, 0);
            _camera.SetBoundingBox(min, max);

            _renderable = new MdlRenderable(_mdl, Vector3.Zero);
            _scene.AddRenderable(_renderable);
            _sc.Scene = _scene;
            _sc.Start();

            _settingsPanel.SetModel(_mdl);
            _settingsPanel.BodyPartModelSelected += BodyPartSelected;
            _settingsPanel.SequenceSelected      += SequenceSelected;
        }
Пример #10
0
 public bool CanLoadModel(IFile file)
 {
     return(file.Exists && MdlFile.CanRead(file));
 }
Пример #11
0
 protected override Mesh OnGetMesh(MdlFile mdl, int lod)
 {
     return(mdl.GetMesh(lod, VertexLighting));
 }
Пример #12
0
 protected virtual Mesh OnGetMesh(MdlFile mdl, int lod)
 {
     return(mdl.GetMesh(lod, null));
 }
Пример #13
0
 public void MatrixTest()
 {
     var target = MdlFile.LoadModel(@"problems/full/FA110_tgt.mdl");
 }
Пример #14
0
 public MdlModel(MdlFile model)
 {
     Model = model;
     _guid = Guid.NewGuid();
 }
Пример #15
0
 static void Main(string[] args)
 {
     var file = @"F:\Steam\SteamApps\common\Half-Life\valve\models\hgrunt.mdl";
     var mdl  = MdlFile.FromFile(file);
 }