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(); }