forked from sruon/ffxivlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTarget.cs
132 lines (112 loc) · 4.36 KB
/
Target.cs
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
125
126
127
128
129
130
131
132
using System;
using System.Runtime.InteropServices;
namespace ffxivlib
{
public class Target : BaseObject<Target.TARGET>
{
#region Constructor
public Target(TARGET structure, IntPtr address)
: base(structure, address)
{
Initialize();
}
#endregion
#region Properties
public int CurrentTarget { get; set; }
public int MouseoverTarget { get; set; }
public int FocusTarget { get; set; }
public int PreviousTarget { get; set; }
public int CurrentTargetID { get; set; }
#endregion
#region Unmanaged structure
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct TARGET
{
[MarshalAs(UnmanagedType.I4)] [FieldOffset(0)] public int CurrentTarget;
[MarshalAs(UnmanagedType.I4)] [FieldOffset(0x18)] public int MouseoverTarget;
[MarshalAs(UnmanagedType.I4)] [FieldOffset(0x40)] public int FocusTarget;
[MarshalAs(UnmanagedType.I4)] [FieldOffset(0x4C)] public int PreviousTarget;
[MarshalAs(UnmanagedType.I4)] [FieldOffset(0x60)] public int CurrentTargetID;
}
#endregion
}
public partial class FFXIVLIB
{
#region Public methods
/// <summary>
/// This function retrieves the target array
/// </summary>
/// <returns>Target object</returns>
public Target GetTargets()
{
IntPtr pointer = _mr.ResolvePointerPath(Constants.TARGETPTR);
var t = new Target(_mr.CreateStructFromAddress<Target.TARGET>(pointer), pointer);
return t;
}
/// <summary>
/// This function retrieves the previous target
/// </summary>
/// <returns>Entity object or null</returns>
public Entity GetPreviousTarget()
{
IntPtr pointer = _mr.ResolvePointerPath(Constants.TARGETPTR);
var t = new Target(_mr.CreateStructFromAddress<Target.TARGET>(pointer), pointer);
var en = _mr.CreateStructFromAddress<Entity.ENTITYINFO>((IntPtr) t.PreviousTarget);
if (!Equals(en, default(Entity.ENTITYINFO)))
{
var e = new Entity(en, (IntPtr) t.PreviousTarget);
return e;
}
return null;
}
/// <summary>
/// This function retrieves the current Mouseover target
/// </summary>
/// <returns>Entity object or null</returns>
public Entity GetMouseoverTarget()
{
IntPtr pointer = _mr.ResolvePointerPath(Constants.TARGETPTR);
var t = new Target(_mr.CreateStructFromAddress<Target.TARGET>(pointer), pointer);
var en = _mr.CreateStructFromAddress<Entity.ENTITYINFO>((IntPtr) t.MouseoverTarget);
if (!Equals(en, default(Entity.ENTITYINFO)))
{
var e = new Entity(en, (IntPtr) t.MouseoverTarget);
return e;
}
return null;
}
/// <summary>
/// This function retrieves the current target
/// </summary>
/// <returns>Entity object or null</returns>
public Entity GetCurrentTarget()
{
IntPtr pointer = _mr.ResolvePointerPath(Constants.TARGETPTR);
var t = new Target(_mr.CreateStructFromAddress<Target.TARGET>(pointer), pointer);
var en = _mr.CreateStructFromAddress<Entity.ENTITYINFO>((IntPtr) t.CurrentTarget);
if (!Equals(en, default(Entity.ENTITYINFO)))
{
var e = new Entity(en, (IntPtr) t.CurrentTarget);
return e;
}
return null;
}
/// <summary>
/// This function retrieves the focus target
/// </summary>
/// <returns>Entity object or null</returns>
public Entity GetFocusTarget()
{
IntPtr pointer = _mr.ResolvePointerPath(Constants.TARGETPTR);
var t = new Target(_mr.CreateStructFromAddress<Target.TARGET>(pointer), pointer);
var en = _mr.CreateStructFromAddress<Entity.ENTITYINFO>((IntPtr) t.FocusTarget);
if (!Equals(en, default(Entity.ENTITYINFO)))
{
var e = new Entity(en, (IntPtr) t.FocusTarget);
return e;
}
return null;
}
#endregion
}
}