using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Xml; using System.Diagnostics; using System.Drawing; using OpenTK; namespace OdysseyEditor { static class InputDialog { public static DialogResult Show(string title, string promptText, ref string value) { Form form = new Form(); Label label = new Label(); TextBox textBox = new TextBox(); Button buttonOk = new Button(); Button buttonCancel = new Button(); form.Text = title; label.Text = promptText; textBox.Text = value; buttonOk.Text = "OK"; buttonCancel.Text = "Cancel"; buttonOk.DialogResult = DialogResult.OK; buttonCancel.DialogResult = DialogResult.Cancel; label.SetBounds(9, 20, 372, 13); textBox.SetBounds(12, 36, 372, 20); buttonOk.SetBounds(228, 72, 75, 23); buttonCancel.SetBounds(309, 72, 75, 23); label.AutoSize = true; textBox.Anchor = textBox.Anchor | AnchorStyles.Right; buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; form.ClientSize = new Size(396, 107); form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel }); form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height); form.FormBorderStyle = FormBorderStyle.FixedDialog; form.StartPosition = FormStartPosition.CenterScreen; form.MinimizeBox = false; form.MaximizeBox = false; form.AcceptButton = buttonOk; form.CancelButton = buttonCancel; DialogResult dialogResult = form.ShowDialog(); value = textBox.Text; return dialogResult; } } static class DeepCloneDictArr { public static Dictionary DeepClone(Dictionary d) { var res = new Dictionary(); foreach (string k in d.Keys) { if (d[k] is Dictionary || d[k] is List) res.Add(k, DeepClone(d[k])); else if (d[k] is ICloneable) res.Add(k, d[k].Clone()); else res.Add(k, d[k]); } return res; } public static List DeepClone(List l) { var res = new List(); foreach (var o in l) { if (o is Dictionary || o is List) res.Add(DeepClone(o)); else if (o is ICloneable) res.Add(o.Clone()); else res.Add(o); } return res; } } class CustomStringWriter : System.IO.StringWriter { private readonly Encoding encoding; public CustomStringWriter(Encoding encoding) { this.encoding = encoding; } public override Encoding Encoding { get { return encoding; } } } public class CustomStack : IEnumerable { private List items = new List(); public int MaxItems = 50; public int Count { get { return items.Count(); } } public void Remove(int index) { items.RemoveAt(index); } public void Push(T item) { items.Add(item); if (items.Count > MaxItems) { for (int i = MaxItems; i < items.Count; i++) Remove(0); } } public T Pop() { if (items.Count > 0) { T tmp = items[items.Count - 1]; items.RemoveAt(items.Count - 1); return tmp; } else return default(T); } public void RemoveAt(int index) => items.RemoveAt(index); public T Peek() { return items[items.Count - 1]; } public T[] ToArray() { return items.ToArray(); } public void Clear() { items.Clear(); } public IEnumerator GetEnumerator() { return items.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return items.GetEnumerator(); } } public class UndoAction { public string actionName; public Action _act; public dynamic _arg; public void Undo() { _act.Invoke(_arg); } public override string ToString() { return actionName; } public UndoAction(string name, Action Act, dynamic arg) { actionName = name; _act = Act; _arg = arg; } } public class ClipBoardItem { public enum ClipboardType { NotSet = 0, Position = 1, Rotation = 2, Scale = 3, IntArray = 4, Objects = 5, Transform = 8, } public Transform transform; public int[] Args = null; public ClipboardType Type = 0; public LevelObj[] Objs = null; public override string ToString() { switch (Type) { case ClipboardType.Position: return $"Position - {transform.Pos}"; case ClipboardType.Rotation: return $"Rotation - {transform.Rot}"; case ClipboardType.Scale: return $"Scale - {transform.Scale}"; case ClipboardType.IntArray: return "Args[]"; case ClipboardType.Transform: return $"Transform - Pos {transform.Pos}, Rot {transform.Rot}, Scale {transform.Scale}"; case ClipboardType.Objects: return "Object[" + Objs.Length.ToString() + "]"; default: return "Not set"; } } } }