summaryrefslogtreecommitdiff
path: root/NW4RTools/Models/ByteCode.cs
blob: 6df6dee87aba272ead396837689455ba3ee19694 (plain)
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
using System;
using System.Collections.Generic;

namespace NW4RTools.Models {
	public class ByteCode {
		public enum OpType {
			None, Done, AssignNodeToParentMtx, BlendMatrices, DrawShape, AssignMtxToNode
		}

		public class Instruction {
			public virtual OpType GetOp() {
				return OpType.None;
			}
		}

		public class DoneInstruction : Instruction {
			public override OpType GetOp() {
				return OpType.Done;
			}
		}

		public class AssignNodeToParentMtxInstruction : Instruction {
			public override OpType GetOp() {
				return OpType.AssignNodeToParentMtx;
			}

			public UInt16 NodeID;
			public UInt16 ParentMatrixID;
		}

		// According to BrawlLib: in NodeMix, this is for "weighted influences"
		public class BlendMatricesInstruction : Instruction {
			public override OpType GetOp() {
				return OpType.BlendMatrices;
			}

			public UInt16 MatrixID;
			public BlendedMatrix[] BlendedMatrices;

			public struct BlendedMatrix {
				public UInt16 MatrixID;
				public float Ratio;
			}
		}

		public class DrawShapeInstruction : Instruction {
			public override OpType GetOp() {
				return OpType.DrawShape;
			}

			public UInt16 MaterialID;
			public UInt16 ShapeID;
			public UInt16 NodeID;
		}

		// According to BrawlLib: in NodeMix, this is for "primary influences"
		public class AssignMtxToNodeInstruction : Instruction {
			public override OpType GetOp() {
				return OpType.AssignMtxToNode;
			}

			public UInt16 MatrixID;
			public UInt16 NodeID;
		}




		public List<Instruction> Instructions;

		public ByteCode() {
			Instructions = new List<Instruction>();
		}
	}
}