/// <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)); }
/// <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)); }
/// <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()); } }