public float GetDistanceTo(TargetInfo target)
 {
     var distanceX = (float)Math.Abs(X - target.X);
     var distanceY = (float)Math.Abs(Y - target.Y);
     var distanceZ = (float)Math.Abs(Z - target.Z);
     return (float)Math.Sqrt((distanceX * distanceX) + (distanceY * distanceY) + (distanceZ * distanceZ));
 }
 public float GetHorizontalDistanceTo(TargetInfo target)
 {
     var distanceX = (float)Math.Abs(X - target.X);
     var distanceY = (float)Math.Abs(Y - target.Y);
     return (float)Math.Sqrt((distanceX * distanceX) + (distanceY * distanceY));
 }
        // <summary>
        // ターゲットの情報(とりあえず必要なものだけ)
        // </summary>
        //
        //
        public unsafe static TargetInfo GetTargetInfoFromByteArray(byte[] source)
        {

            TargetInfo target = new TargetInfo();

            target.Name = FFXIVPluginHelper.GetStringFromBytes(source, 48);

            fixed (byte* p = &source[0x74]) target.ID = *(uint*)p;

            target.Type = (TargetType)source[0x8A];
            target.EffectiveDistance = source[0x90];

            fixed (byte* p = &source[0xA0]) target.X = *(float*)p;
            fixed (byte* p = &source[0xA4]) target.Z = *(float*)p;
            fixed (byte* p = &source[0xA8]) target.Y = *(float*)p;

            if (target.Type != TargetType.PC && target.Type != TargetType.Monster)
            {
                target.CurrentHP = target.MaxHP = target.CurrentMP = target.MaxMP = 0;
            }
            else
            {
                fixed (byte* p = &source[0x1548]) target.CurrentHP = *(int*)p;
                fixed (byte* p = &source[0x154C]) target.MaxHP = *(int*)p;
                fixed (byte* p = &source[0x1550]) target.CurrentMP = *(int*)p;
                fixed (byte* p = &source[0x1554]) target.MaxMP = *(int*)p;
            }
            return target;
        }