Beispiel #1
0
        public object Load(AssetManager assets, VFS.VFSHandle handle, object parameters)
        {
            string filename = handle.FileName;

            using (var stream = handle.Open())
                if (filename.EndsWith(".CPS"))
                {
                    return(CpsFile.Read(stream));
                }
                else if (filename.EndsWith(".PCX"))
                {
                    return(PcxFile.Read(stream));
                }
                else
                {
                    return(ShpFile.Read(stream));
                }
        }
        private void showFileDetails(DatFileEntry entry)
        {
            selectionLabel.Text = "";
            detailsStatusLabel.Text = "";
            cursorStatusLabel.Text = "";
            currentBitmap = null;
            currentSprite = null;
            currentMap = null;
            canvasPanel.Visible = false;
            detailsTextBox.Visible = false;

            pngButton.Visible = false;
            mapButtonsPanel.Visible = false;
            frameSelectionPanel.Visible = false;

            cmfPlayerPanel.Visible = false;
            stopMusicPlayback();

            vocPlayerPanel.Visible = false;

            currentSpriteFrame = 0;

            if (entry == null) return;

            selectionLabel.Text = "[" + entry.TypeString.ToUpper() + "] " + 
                Path.GetFileName(Game.ArchiveFile) + " / " + 
                entry.Filename;

            switch(entry.Type)
            {
                case DatFileEntry.DataType.Sprite:
                    currentSprite = entry.GetSprite(game.MainPalette);

                    if (currentSprite == null)
                    {
                        MessageBox.Show("Failed to load sprite");
                        return;
                    }

                    currentBitmap = currentSprite.Frames[0];

                    detailsStatusLabel.Text = $"Frame size: {currentBitmap.Width}x{currentBitmap.Height}";
                    
                    if (currentSprite.Frames.Length > 1)
                    {
                        frameSelectionPanel.Visible = true;
                        frameLabel.Text = "1/" + currentSprite.Frames.Length;
                        currentSpriteFrame = 0;
                    }

                    pngButton.Visible = true;
                    canvasPanel.Visible = true;
                    break;

                case DatFileEntry.DataType.Image:
                    try
                    {
                        PcxFile pcx = entry.GetPicture();
                        currentBitmap = pcx.Bitmap;
                        detailsStatusLabel.Text = $"Image size: {currentBitmap.Width}x{currentBitmap.Height}";
                        pngButton.Visible = true;
                        canvasPanel.Visible = true;
                    }
                    catch (Exception e)
                    { 
                        MessageBox.Show("Failed to convert from PCX to bitmap: " + e.Message, "Conversion failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;

                case DatFileEntry.DataType.Map:
                    currentMap = entry.GetMap();
                    if (currentMap == null)
                    {
                        MessageBox.Show("Failed to load map");
                        return;
                    }

                    Game.MapInfo info = Game.InfoByFilename(currentMap.Entry.Filename);
                    selectionLabel.Text += $" - \"{info.Title}\"";
                    detailsStatusLabel.Text = $"Size: {currentMap.Width}x{currentMap.Height}, Password: \"{info.Password}\", Music: {info.Music}";

                    mapButtonsPanel.Visible = true;
                    canvasPanel.Visible = true;
                    break;

                case DatFileEntry.DataType.Music:
                    try
                    {
                        startMusicPlayback(entry.Data);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Failed to load CMF music: " + e.Message, "Audio failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;

                case DatFileEntry.DataType.SoundFX:
                    currentVoc = new VocFile(entry.Data);

                    int sec = (int)Math.Ceiling(currentVoc.SecDuration);
                    vocTimeLabel.Text = (sec / 60).ToString("D2") + ":" + (sec % 60).ToString("D2") +
                        " @ " + currentVoc.samplerate +
                        " Hz (" + currentVoc.format + ")";

                    vocPlayerPanel.Visible = true;
                    break;

                case DatFileEntry.DataType.Text:
                    detailsTextBox.Text = entry.GetText();
                    detailsTextBox.Visible = true;
                    break;
            }

            draw();
        }