You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.2 KiB
C#

using System;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using DotNetCTFDumper.MMFParser.EXE;
using DotNetCTFDumper.MMFParser.EXE.Loaders;
using DotNetCTFDumper.MMFParser.EXE.Loaders.Banks;
using Frame = DotNetCTFDumper.MMFParser.EXE.Loaders.Frame;
namespace DotNetCTFDumper.GUI
{
public partial class FrameViewer : Form
{
private ImageBank images;
private ObjectBox _lastSelectedObject;
public FrameViewer()
{
InitializeComponent();
}
public FrameViewer(Frame frame, ImageBank imgs)
{
InitializeComponent();
this.Width = frame.Width;
this.Height = frame.Height;
this.BackColor = Color.Black;
this.Text = "Frame Viewer: "+frame.Name;
images = imgs;
contextMenuStrip1.ItemClicked+= new ToolStripItemClickedEventHandler(MenuItemSelected);
LoadObjects(frame);
}
public void CreateImage(ObjectInstance obj)
{
var pictureBox1 = new ObjectBox(obj);
var img = obj.FrameItem.GetPreview();
if (img != null)
{
pictureBox1.Anchor = AnchorStyles.None;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Location = new Point(obj.X-obj.FrameItem.GetPreview().XHotspot, obj.Y-obj.FrameItem.GetPreview().YHotspot);
pictureBox1.ClientSize = new Size(img.Bitmap.Width, img.Bitmap.Height);
pictureBox1.Image = img.Bitmap;
pictureBox1.MouseClick += new MouseEventHandler(OnObjectSelected);
scrollableControl1.Controls.Add(pictureBox1);
}
}
private void OnObjectSelected(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Right) != 0)
{
_lastSelectedObject = (ObjectBox) sender;
nameMenuItem.Text = "Name: " + _lastSelectedObject.Obj.Name;
positionMenuItem.Text = $"Position: {_lastSelectedObject.Obj.X}x{_lastSelectedObject.Obj.Y}";
contextMenuStrip1.Show(Cursor.Position);
}
else
{
}
}
private void LoadObjects(Frame frame)
{
var size = new Size(Exe.Instance.GameData.Header.WindowWidth,Exe.Instance.GameData.Header.WindowHeight);
scrollableControl1.Size = new Size(frame.Width,frame.Height);;
ClientSize = size;
var list = frame.Objects.Items.OrderBy(x=>x.Handle);
foreach (var obj in list)
{
//TODO:Layers
CreateImage(obj);
}
}
private void MenuItemSelected(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.Name == "deleteObjBtn")
{
Controls.Remove(_lastSelectedObject);
_lastSelectedObject.Dispose();
}
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
}
}
}