-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathReflection.cs
More file actions
68 lines (67 loc) · 2.85 KB
/
Reflection.cs
File metadata and controls
68 lines (67 loc) · 2.85 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
using BeastCustomization.UI;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Terraria;
using Terraria.DataStructures;
using Terraria.ID;
using Terraria.ModLoader;
namespace BeastCustomization {
public class Reflection : ILoadable {
public delegate void _DrawSittingLegs(ref PlayerDrawSet drawinfo, Texture2D textureToDraw, Color matchingColor, int shaderIndex = 0, bool glowmask = false);
public static _DrawSittingLegs DrawSittingLegs { get; private set; }
public static Dictionary<Type, MethodInfo> BinaryWriterWrites { get; private set; }
public static Dictionary<Type, MethodInfo> BinaryReaderReads { get; private set; }
public void Load(Mod mod) {
DrawSittingLegs = typeof(PlayerDrawLayers).GetMethod("DrawSittingLegs", BindingFlags.NonPublic | BindingFlags.Static).CreateDelegate<_DrawSittingLegs>();
BinaryWriterWrites = new();
BinaryReaderReads = new();
foreach (var meth in typeof(Reflection).GetMethods()) {
///<see cref="BinaryWriterWriteColor"/><see cref="BinaryWriterWriteItem"/>
if (meth.Name.StartsWith("BinaryWriterWrite") && meth.Name == $"BinaryWriterWrite{meth.GetParameters()[1].ParameterType.Name}") {
BinaryWriterWrites[meth.GetParameters()[1].ParameterType] = meth;
}
///<see cref="BinaryReaderReadColor"/><see cref="BinaryReaderReadItem"/>
if (meth.Name.StartsWith("BinaryReaderRead") && meth.Name == $"BinaryReaderRead{meth.ReturnType.Name}") {
BinaryReaderReads[meth.ReturnType] = meth;
}
}
}
public void Unload() {
DrawSittingLegs = null;
BinaryWriterWrites = null;
BinaryReaderReads = null;
}
public static void BinaryWriterWriteColor(BinaryWriter writer, Color color) {
writer.Write((uint)color.PackedValue);
}
public static Color BinaryReaderReadColor(BinaryReader reader) {
Color color = new();
color.PackedValue = reader.ReadUInt32();
return color;
}
public static void BinaryWriterWriteItem(BinaryWriter writer, Item item) {
writer.Write((int)(item?.netID ?? ItemID.None));
}
public static Item BinaryReaderReadItem(BinaryReader reader) => new Item(reader.ReadInt32());
public static void BinaryWriterWriteColorDefinition(BinaryWriter writer, ColorDefinition colorDefinition) {
writer.Write((uint)colorDefinition.baseColor.PackedValue);
writer.Write((bool)colorDefinition.HasDye);
if (colorDefinition.HasDye) writer.Write((int)colorDefinition.hairDye.netID);
writer.Write((bool)colorDefinition.UseHairDyeShader);
}
public static ColorDefinition BinaryReaderReadColorDefinition(BinaryReader reader) {
return new(
new Color() { PackedValue = reader.ReadUInt32() },
reader.ReadBoolean() ? new Item(reader.ReadInt32()) : null,
reader.ReadBoolean()
);
}
}
}