Exemple #1
0
        private void ButReplaceSprite_Click(object sender, EventArgs e)
        {
            if (dataGridView.SelectedRows.Count == 0)
            {
                return;
            }
            var row = dataGridView.SelectedRows[0];

            using (var fileDialog = new OpenFileDialog())
            {
                fileDialog.Filter      = ImageC.FromFileFileExtensions.GetFilter();
                fileDialog.Multiselect = false;
                if (!string.IsNullOrWhiteSpace(_currentPath))
                {
                    try
                    {
                        fileDialog.InitialDirectory = Path.GetDirectoryName(_currentPath);
                        fileDialog.FileName         = Path.GetFileName(_currentPath);
                    }
                    catch { }
                }
                fileDialog.Title = "Select sprite file that you want to see imported.";

                DialogResult dialogResult = fileDialog.ShowDialog(this);
                _currentPath = fileDialog.FileName;
                if (dialogResult != DialogResult.OK)
                {
                    return;
                }

                // Load sprites
                WadSprite sprite;
                try
                {
                    sprite = new WadSprite {
                        Texture = new WadTexture(ImageC.FromFile(fileDialog.FileName))
                    };
                    dataGridView.EditableRowCollection[row.Index] = sprite;
                    dataGridView.Refresh();
                    dataGridView.Invalidate();
                }
                catch (Exception exc)
                {
                    logger.Error(exc, "Unable to open file '" + fileDialog.FileName + "'.");
                    DarkMessageBox.Show(this, "Unable to load sprite from file '" + fileDialog.FileName + "'. " + exc, "Unable to load sprite",
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }
Exemple #2
0
        private void dataGridView_CellFormattingSafe(object sender, DarkDataGridViewSafeCellFormattingEventArgs e)
        {
            if (!(e.Row.DataBoundItem is WadSprite))
            {
                return;
            }
            WadSprite item = (WadSprite)e.Row.DataBoundItem;

            if (e.Column.Name == SizeColumn.Name)
            {
                e.Value = item.Texture.Image.Size.ToString();
            }
            else if (e.Column.Name == IdColumn.Name)
            {
                e.Value = e.RowIndex.ToString();
            }
            else if (e.Column.Name == PreviewColumn.Name)
            {
                e.Value = _imageCache[item.Texture];
            }
            e.FormattingApplied = true;
        }
Exemple #3
0
        protected override void OnDraw()
        {
            // To make sure things are in a defined state for legacy rendering...
            ((Rendering.DirectX11.Dx11RenderingSwapChain)SwapChain).BindForce();
            ((Rendering.DirectX11.Dx11RenderingDevice)Device).ResetState();

            if (DrawTransparency)
            {
                _legacyDevice.SetBlendState(_legacyDevice.BlendStates.AlphaBlend);
            }
            else
            {
                _legacyDevice.SetBlendState(_legacyDevice.BlendStates.Opaque);
            }

            Matrix4x4 viewProjection = Camera.GetViewProjectionMatrix(Width, Height);

            if (CurrentObject is WadMoveable)
            {
                // HACK: new moveables have one bone with null mesh
                var moveable = (WadMoveable)CurrentObject;
                if (moveable.Meshes.Count == 0 || (moveable.Meshes.Count == 1 && moveable.Meshes[0] == null))
                {
                    return;
                }

                AnimatedModel model = _wadRenderer.GetMoveable((WadMoveable)CurrentObject);
                // We don't need to rebuilt it everytime necessarily, but it's cheap to so and
                // simpler than trying to figure out when it may be necessary.
                model.UpdateAnimation(AnimationIndex, KeyFrameIndex);

                var effect = DeviceManager.DefaultDeviceManager.___LegacyEffects["Model"];

                effect.Parameters["AlphaTest"].SetValue(DrawTransparency);
                effect.Parameters["Color"].SetValue(Vector4.One);
                effect.Parameters["Texture"].SetResource(_wadRenderer.Texture);
                effect.Parameters["TextureSampler"].SetResource(_legacyDevice.SamplerStates.Default);

                // Build animation transforms
                var matrices = new List <Matrix4x4>();
                if (model.Animations.Count != 0)
                {
                    for (var b = 0; b < model.Meshes.Count; b++)
                    {
                        matrices.Add(model.AnimationTransforms[b]);
                    }
                }
                else
                {
                    foreach (var bone in model.Bones)
                    {
                        matrices.Add(bone.GlobalTransform);
                    }
                }

                for (int i = 0; i < model.Meshes.Count; i++)
                {
                    var mesh = model.Meshes[i];
                    if (mesh.Vertices.Count == 0)
                    {
                        continue;
                    }

                    _legacyDevice.SetVertexBuffer(0, mesh.VertexBuffer);
                    _legacyDevice.SetIndexBuffer(mesh.IndexBuffer, true);
                    _legacyDevice.SetVertexInputLayout(VertexInputLayout.FromBuffer(0, mesh.VertexBuffer));

                    effect.Parameters["ModelViewProjection"].SetValue((matrices[i] * viewProjection).ToSharpDX());

                    effect.Techniques[0].Passes[0].Apply();

                    foreach (var submesh in mesh.Submeshes)
                    {
                        _legacyDevice.Draw(PrimitiveType.TriangleList, submesh.Value.NumIndices, submesh.Value.BaseIndex);
                    }

                    //foreach (var submesh in mesh.Submeshes)
                    //    _legacyDevice.DrawIndexed(PrimitiveType.TriangleList, submesh.Value.NumIndices, submesh.Value.MeshBaseIndex);
                }
            }
            else if (CurrentObject is WadStatic)
            {
                StaticModel model = _wadRenderer.GetStatic((WadStatic)CurrentObject);

                var effect = DeviceManager.DefaultDeviceManager.___LegacyEffects["StaticModel"];

                effect.Parameters["ModelViewProjection"].SetValue(viewProjection.ToSharpDX());
                effect.Parameters["AlphaTest"].SetValue(DrawTransparency);
                effect.Parameters["Color"].SetValue(Vector4.One);
                effect.Parameters["Texture"].SetResource(_wadRenderer.Texture);
                effect.Parameters["TextureSampler"].SetResource(_legacyDevice.SamplerStates.Default);

                for (int i = 0; i < model.Meshes.Count; i++)
                {
                    var mesh = model.Meshes[i];

                    _legacyDevice.SetVertexBuffer(0, mesh.VertexBuffer);
                    _legacyDevice.SetIndexBuffer(mesh.IndexBuffer, true);
                    _legacyDevice.SetVertexInputLayout(VertexInputLayout.FromBuffer(0, mesh.VertexBuffer));

                    effect.Parameters["ModelViewProjection"].SetValue(viewProjection.ToSharpDX());
                    effect.Techniques[0].Passes[0].Apply();

                    foreach (var submesh in mesh.Submeshes)
                    {
                        _legacyDevice.DrawIndexed(PrimitiveType.TriangleList, submesh.Value.NumIndices, submesh.Value.BaseIndex);
                    }
                }
            }
            else if (CurrentObject is WadSpriteSequence)
            {
                var seq = (WadSpriteSequence)CurrentObject;
                if (seq.Sprites.Count <= _currentFrame)
                {
                    return;
                }

                WadSprite sprite = seq.Sprites[_currentFrame];
                float     aspectRatioViewport = (float)ClientSize.Width / ClientSize.Height;
                float     aspectRatioImage    = (float)sprite.Texture.Image.Width / sprite.Texture.Image.Height;
                float     aspectRatioAdjust   = aspectRatioViewport / aspectRatioImage;
                Vector2   factor = Vector2.Min(new Vector2(1.0f / aspectRatioAdjust, aspectRatioAdjust), new Vector2(1.0f));

                SwapChain.RenderSprites(_textureAllocator, false, new Sprite
                {
                    Texture  = sprite.Texture.Image,
                    PosStart = -0.9f * factor,
                    PosEnd   = 0.9f * factor
                });
            }
            else if (CurrentObject is ImportedGeometry)
            {
                var geo   = (ImportedGeometry)CurrentObject;
                var model = geo.DirectXModel;

                var effect = DeviceManager.DefaultDeviceManager.___LegacyEffects["RoomGeometry"];

                effect.Parameters["UseVertexColors"].SetValue(true);
                effect.Parameters["AlphaTest"].SetValue(DrawTransparency);
                effect.Parameters["Color"].SetValue(Vector4.One);

                for (int i = 0; i < model.Meshes.Count; i++)
                {
                    var mesh = model.Meshes[i];

                    _legacyDevice.SetVertexBuffer(0, mesh.VertexBuffer);
                    _legacyDevice.SetIndexBuffer(mesh.IndexBuffer, true);
                    _legacyDevice.SetVertexInputLayout(VertexInputLayout.FromBuffer(0, mesh.VertexBuffer));

                    effect.Parameters["ModelViewProjection"].SetValue(viewProjection.ToSharpDX());
                    effect.Techniques[0].Passes[0].Apply();


                    foreach (var submesh in mesh.Submeshes)
                    {
                        var texture = submesh.Value.Material.Texture;
                        if (texture != null && texture is ImportedGeometryTexture)
                        {
                            effect.Parameters["TextureEnabled"].SetValue(true);
                            effect.Parameters["Texture"].SetResource(((ImportedGeometryTexture)texture).DirectXTexture);
                            effect.Parameters["ReciprocalTextureSize"].SetValue(new Vector2(1.0f / texture.Image.Width, 1.0f / texture.Image.Height));
                            effect.Parameters["TextureSampler"].SetResource(_legacyDevice.SamplerStates.AnisotropicWrap);
                        }
                        else
                        {
                            effect.Parameters["TextureEnabled"].SetValue(false);
                        }

                        effect.Techniques[0].Passes[0].Apply();
                        _legacyDevice.DrawIndexed(PrimitiveType.TriangleList, submesh.Value.NumIndices, submesh.Value.BaseIndex);
                    }

                    foreach (var submesh in mesh.Submeshes)
                    {
                        _legacyDevice.DrawIndexed(PrimitiveType.TriangleList, submesh.Value.NumIndices, submesh.Value.BaseIndex);
                    }
                }
            }
        }