Example #1
0
        /// <summary>
        ///     写入指定标点
        /// </summary>
        /// <param name="waymark">标点</param>
        /// <param name="id">ID</param>
        private void WriteWaymark(Waymark waymark, int id = -1)
        {
            if (waymark == null)
            {
                return;
            }

            var wId = id == -1 ? (byte)waymark.ID : id;

            var markAddr = wId switch
            {
                (int)WaymarkID.A => Waymarks + 0x00,
                (int)WaymarkID.B => Waymarks + 0x20,
                (int)WaymarkID.C => Waymarks + 0x40,
                (int)WaymarkID.D => Waymarks + 0x60,
                (int)WaymarkID.One => Waymarks + 0x80,
                (int)WaymarkID.Two => Waymarks + 0xA0,
                (int)WaymarkID.Three => Waymarks + 0xC0,
                (int)WaymarkID.Four => Waymarks + 0xE0,
                _ => IntPtr.Zero
            };

            // Write the X, Y and Z coordinates
            Memory.Write(markAddr, waymark.X);
            Memory.Write(markAddr + 0x4, waymark.Y);
            Memory.Write(markAddr + 0x8, waymark.Z);

            Memory.Write(markAddr + 0x10, (int)(waymark.X * 1000));
            Memory.Write(markAddr + 0x14, (int)(waymark.Y * 1000));
            Memory.Write(markAddr + 0x18, (int)(waymark.Z * 1000));

            // Write the active state
            Memory.Write(markAddr + 0x1C, (byte)(waymark.Active ? 1 : 0));
        }
Example #2
0
        /// <summary>
        ///     写入指定标点
        /// </summary>
        /// <param name="waymark">标点</param>
        /// <param name="id">ID</param>
        public void WriteWaymark(Waymark waymark, int id = -1)
        {
            if (waymark == null)
            {
                return;
            }

            var wId = id == -1 ? (byte)waymark.ID : id;

            var markAddr = IntPtr.Zero;

            switch (wId)
            {
            case (int)WaymarkID.A:
                markAddr = Offsets.Waymarks + 0x00;
                break;

            case (int)WaymarkID.B:
                markAddr = Offsets.Waymarks + 0x20;
                break;

            case (int)WaymarkID.C:
                markAddr = Offsets.Waymarks + 0x40;
                break;

            case (int)WaymarkID.D:
                markAddr = Offsets.Waymarks + 0x60;
                break;

            case (int)WaymarkID.One:
                markAddr = Offsets.Waymarks + 0x80;
                break;

            case (int)WaymarkID.Two:
                markAddr = Offsets.Waymarks + 0xA0;
                break;

            case (int)WaymarkID.Three:
                markAddr = Offsets.Waymarks + 0xC0;
                break;

            case (int)WaymarkID.Four:
                markAddr = Offsets.Waymarks + 0xE0;
                break;
            }

            // Write the X, Y and Z coordinates
            Memory.Write(markAddr, waymark.X);
            Memory.Write(markAddr + 0x4, waymark.Y);
            Memory.Write(markAddr + 0x8, waymark.Z);

            Memory.Write(markAddr + 0x10, (int)(waymark.X * 1000));
            Memory.Write(markAddr + 0x14, (int)(waymark.Y * 1000));
            Memory.Write(markAddr + 0x18, (int)(waymark.Z * 1000));

            // Write the active state
            Memory.Write(markAddr + 0x1C, (byte)(waymark.Active ? 1 : 0));
        }
Example #3
0
 /// <summary>
 /// 写入单个标点
 /// </summary>
 /// <param name="waymark">标点数据</param>
 public static void WriteWaymark(Waymark waymark, int id = -1)
 {
     try
     {
         if (Namazu == null)
         {
             Namazu = Namazu.Instance;
         }
         Namazu.WriteWaymark(waymark, id);
     }
     catch (Exception e)
     {
         Log(e.ToString());
     }
 }