Repository navigation
Expand file tree
/
Copy pathMainForm.cs
More file actions
124 lines (118 loc) · 4.55 KB
/
Copy pathMainForm.cs
File metadata and controls
124 lines (118 loc) · 4.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Sledge.Providers.Map;
using Sledge.DataStructures.MapObjects;
using Path = System.IO.Path;
namespace Sledge.Tools.MapFileDebugger
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
MapProvider.Register(new RmfProvider());
}
private void OpenToolStripButtonClick(object sender, EventArgs e)
{
var ofd = new OpenFileDialog();
ofd.Filter = @"Map Files (*.rmf, *.vmf, *.map)|*.rmf;*.vmf;*.map;*.rmx;*.vmx;*.max";
if (ofd.ShowDialog() == DialogResult.OK)
{
try
{
var map = MapProvider.GetMapFromFile(ofd.FileName);
lstLog.Items.Insert(0, Path.GetFileName(ofd.FileName) + ": Map Loaded.");
LoadMap(map);
}
catch(Exception ex)
{
lstLog.Items.Insert(0, Path.GetFileName(ofd.FileName) + ": " + ex.Message);
}
}
}
private void LoadMap(Map map)
{
treeMap.Nodes.Clear();
LoadMapNode(null, map.WorldSpawn);
}
private void LoadMapNode(TreeNode parent, MapObject obj)
{
var node = new TreeNode(obj.GetType().Name);
if (obj is World)
{
var w = (World) obj;
node.Nodes.Add(GetEntityNode(w.EntityData));
}
else if (obj is Entity)
{
var e = (Entity) obj;
node.Nodes.Add(GetEntityNode(e.EntityData));
}
else if (obj is Solid)
{
var s = (Solid) obj;
node.Nodes.Add(GetFacesNode(s.Faces));
}
foreach (var mo in obj.GetChildren())
{
LoadMapNode(node, mo);
}
if (parent == null) treeMap.Nodes.Add(node);
else parent.Nodes.Add(node);
}
private TreeNode GetEntityNode(EntityData data)
{
var node = new TreeNode("Entity: " + data.Name);
var pnode = node.Nodes.Add("Properties: " + data.Properties.Count);
foreach (var p in data.Properties)
{
pnode.Nodes.Add(p.Key + " = " + p.Value);
}
if (data.Outputs.Count > 0)
{
var onode = node.Nodes.Add("Outputs: " + data.Outputs);
foreach (var o in data.Outputs)
{
onode.Nodes.Add(o.Name + " > " + o.Target);
}
}
var fnode = node.Nodes.Add("Flags: " + data.Flags);
return node;
}
private TreeNode GetFacesNode(IEnumerable<Face> faces)
{
var node = new TreeNode("Faces: " + faces.Count());
var c = 0;
foreach (var face in faces)
{
var fnode = node.Nodes.Add("Face " + c);
c++;
var pnode = fnode.Nodes.Add("Plane: " + face.Plane.Normal + " * " + face.Plane.DistanceFromOrigin);
pnode.Nodes.Add("Normal: " + face.Plane.Normal);
pnode.Nodes.Add("Distance: " + face.Plane.DistanceFromOrigin);
pnode.Nodes.Add("A: " + face.Plane.A);
pnode.Nodes.Add("B: " + face.Plane.B);
pnode.Nodes.Add("C: " + face.Plane.C);
pnode.Nodes.Add("D: " + face.Plane.D);
var tnode = fnode.Nodes.Add("Texture: " + face.Texture.Name);
tnode.Nodes.Add("U Axis: " + face.Texture.UAxis);
tnode.Nodes.Add("V Axis: " + face.Texture.VAxis);
tnode.Nodes.Add(String.Format("Scale: X = {0}, Y = {1}", face.Texture.XScale, face.Texture.YScale));
tnode.Nodes.Add(String.Format("Offset: X = {0}, Y = {1}", face.Texture.XShift, face.Texture.YShift));
tnode.Nodes.Add("Rotation: " + face.Texture.Rotation);
var vnode = fnode.Nodes.Add("Vertices: " + face.Vertices.Count);
var d = 0;
foreach (var vertex in face.Vertices)
{
var cnode = vnode.Nodes.Add("Vertex " + d + ": " + vertex.Location);
d++;
cnode.Nodes.Add("Texture U: " + vertex.TextureU);
cnode.Nodes.Add("Texture V: " + vertex.TextureV);
}
}
return node;
}
}
}