mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-23 20:04:31 +00:00
202 lines
5.5 KiB
C#
202 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using System.Windows.Forms;
|
|
using MetroFramework.Forms;
|
|
using System.Drawing.Drawing2D;
|
|
using Newtonsoft.Json.Linq;
|
|
using PckStudio.Properties;
|
|
|
|
namespace PckStudio.Forms.Utilities.AnimationEditor
|
|
{
|
|
public partial class ChangeTile : MetroForm
|
|
{
|
|
string selectedTile = "";
|
|
string oldTileName = "";
|
|
bool isItem = false;
|
|
public string SelectedTile => selectedTile;
|
|
public bool IsItem => isItem;
|
|
|
|
List<TreeNode> treeView1Cache = new List<TreeNode>();
|
|
List<TreeNode> treeView2Cache = new List<TreeNode>();
|
|
|
|
public ChangeTile(string oldName = "")
|
|
{
|
|
oldTileName = oldName;
|
|
InitializeComponent();
|
|
ImageList tiles = new ImageList();
|
|
tiles.ColorDepth = ColorDepth.Depth32Bit;
|
|
|
|
for (int i = 1; i < 545; i++)
|
|
{
|
|
int row = (i - 1) / 16;
|
|
int column = (i - 1) % 16;
|
|
|
|
Rectangle tileArea = new Rectangle(new Point(column * 16, row * 16), new Size(16, 16));
|
|
|
|
Bitmap tileImage = new Bitmap(16, 16);
|
|
using (Graphics gfx = Graphics.FromImage(tileImage))
|
|
{
|
|
gfx.SmoothingMode = SmoothingMode.None;
|
|
gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
|
|
gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
|
|
|
gfx.DrawImage(Properties.Resources.terrain_sheet, new Rectangle(0, 0, 16, 16), tileArea, GraphicsUnit.Pixel);
|
|
}
|
|
|
|
tiles.Images.Add(tileImage);
|
|
}
|
|
for (int i = 1; i < 273; i++)
|
|
{
|
|
int row = (i - 1) / 16;
|
|
int column = (i - 1) % 16;
|
|
|
|
Rectangle tileArea = new Rectangle(new Point(column * 16, row * 16), new Size(16, 16));
|
|
|
|
Bitmap tileImage = new Bitmap(16, 16);
|
|
using (Graphics gfx = Graphics.FromImage(tileImage))
|
|
{
|
|
gfx.SmoothingMode = SmoothingMode.None;
|
|
gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
|
|
gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
|
|
|
gfx.DrawImage(Resources.items_sheet, new Rectangle(0, 0, 16, 16), tileArea, GraphicsUnit.Pixel);
|
|
}
|
|
|
|
tiles.Images.Add(tileImage);
|
|
}
|
|
|
|
try
|
|
{
|
|
JObject tileData = JObject.Parse(Encoding.Default.GetString(Resources.tileData));
|
|
int i = 0;
|
|
|
|
if (tileData["Blocks"] != null)
|
|
{
|
|
foreach (JObject content in tileData["Blocks"].Children())
|
|
{
|
|
foreach (JProperty prop in content.Properties())
|
|
{
|
|
if (!string.IsNullOrEmpty((string)prop.Value))
|
|
{
|
|
TreeNode tileNode = new TreeNode();
|
|
tileNode.Text = (string)prop.Value;
|
|
Tuple<string, int> finalTileData = new Tuple<string, int>(prop.Name, i);
|
|
tileNode.Tag = finalTileData;
|
|
tileNode.ImageIndex = i;
|
|
tileNode.SelectedImageIndex = i;
|
|
treeView1.Nodes.Add(tileNode);
|
|
treeView1Cache.Add(tileNode);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
if (tileData["Items"] != null)
|
|
{
|
|
foreach (JObject content in tileData["Items"].Children())
|
|
{
|
|
foreach (JProperty prop in content.Properties())
|
|
{
|
|
if (!string.IsNullOrEmpty((string)prop.Value))
|
|
{
|
|
TreeNode tileNode = new TreeNode();
|
|
tileNode.Text = (string)prop.Value;
|
|
Tuple<string, int> finalTileData = new Tuple<string, int>(prop.Name, i);
|
|
tileNode.Tag = finalTileData;
|
|
tileNode.ImageIndex = i;
|
|
tileNode.SelectedImageIndex = i;
|
|
treeView2.Nodes.Add(tileNode);
|
|
treeView2Cache.Add(tileNode);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
treeView1.ImageList = tiles;
|
|
treeView2.ImageList = tiles;
|
|
Blocks.Controls.Add(treeView1);
|
|
Items.Controls.Add(treeView2);
|
|
}
|
|
catch (Newtonsoft.Json.JsonException j_ex)
|
|
{
|
|
MessageBox.Show(j_ex.Message, "Error");
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void treeViews_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
Tuple<string, int> tileData = e.Node.Tag as Tuple<string, int>;
|
|
Console.WriteLine(tileData.Item1 + " - " + tileData.Item2);
|
|
selectedTile = tileData.Item1;
|
|
Console.WriteLine(selectedTile);
|
|
|
|
if (e.Node.TreeView == treeView1) isItem = false;
|
|
if (e.Node.TreeView == treeView2) isItem = true;
|
|
}
|
|
|
|
void filter_TextChanged(object sender, EventArgs e)
|
|
{
|
|
// Some code in this function is modified code from this StackOverflow answer - MattNL
|
|
//https://stackoverflow.com/questions/8260322/filter-a-treeview-with-a-textbox-in-a-c-sharp-winforms-app
|
|
|
|
//blocks repainting tree until all objects loaded
|
|
treeView1.BeginUpdate();
|
|
treeView1.Nodes.Clear();
|
|
treeView2.BeginUpdate();
|
|
treeView2.Nodes.Clear();
|
|
if (metroTextBox1.Text != string.Empty)
|
|
{
|
|
foreach (TreeNode _node in treeView1Cache)
|
|
{
|
|
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()))
|
|
{
|
|
treeView1.Nodes.Add((TreeNode)_node.Clone());
|
|
}
|
|
}
|
|
foreach (TreeNode _node in treeView2Cache)
|
|
{
|
|
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()))
|
|
{
|
|
treeView2.Nodes.Add((TreeNode)_node.Clone());
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (TreeNode _node in treeView1Cache)
|
|
{
|
|
treeView1.Nodes.Add((TreeNode)_node.Clone());
|
|
}
|
|
foreach (TreeNode _node in treeView2Cache)
|
|
{
|
|
treeView2.Nodes.Add((TreeNode)_node.Clone());
|
|
}
|
|
}
|
|
//enables redrawing tree after all objects have been added
|
|
treeView1.EndUpdate();
|
|
treeView2.EndUpdate();
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
selectedTile = oldTileName;
|
|
Close();
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
if (String.IsNullOrEmpty(selectedTile)) return;
|
|
Close();
|
|
}
|
|
}
|
|
}
|