RespawnEntry.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. using Microsoft.VisualBasic.PowerPacks;
  2. using Server.MirForms.VisualMapInfo.Class;
  3. using Server.MirEnvir;
  4. using Server.MirDatabase;
  5. namespace Server.MirForms.VisualMapInfo.Control
  6. {
  7. public partial class RespawnEntry : UserControl
  8. {
  9. public List<int> IndexList = new List<int>();
  10. public Envir Envir => SMain.EditEnvir;
  11. public RectangleShape RegionHighlight = new RectangleShape();
  12. public int MonsterIndex;
  13. public bool RegionHidden = false;
  14. Point MouseDownLocation;
  15. public int X, Y;
  16. public byte Direction;
  17. public ushort RandomDelay;
  18. public ushort tempRange;
  19. public ushort Range
  20. {
  21. get => (ushort)(tempRange);
  22. set
  23. {
  24. tempRange = 0;
  25. if (value > 0)
  26. tempRange = (ushort)(value);
  27. RegionHighlight.Size = new Size(
  28. (tempRange * 2) * VisualizerGlobal.ZoomLevel,
  29. (tempRange * 2) * VisualizerGlobal.ZoomLevel);
  30. RegionHighlight.Left = (X - value) * VisualizerGlobal.ZoomLevel;
  31. RegionHighlight.Top = (Y - value) * VisualizerGlobal.ZoomLevel;
  32. Details.Text =
  33. $"C D X: {X.ToString()} | Y: {Y.ToString()} | Range: {Range.ToString()}";
  34. }
  35. }
  36. public string RoutePath = string.Empty;
  37. public RespawnEntry()
  38. {
  39. InitializeComponent();
  40. InitializeRegionHighlight();
  41. }
  42. private void InitializeRegionHighlight()
  43. {
  44. RegionHighlight.Visible = false;
  45. RegionHighlight.BorderColor = Color.Lime;
  46. RegionHighlight.FillColor = Color.FromArgb(30, 200, 0, 200);
  47. RegionHighlight.BorderWidth = 2;
  48. RegionHighlight.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Region_MouseMove);
  49. RegionHighlight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Region_MouseDown);
  50. RegionHighlight.MouseEnter += new System.EventHandler(this.Region_MouseEnter);
  51. RegionHighlight.MouseLeave += new System.EventHandler(this.Region_MouseLeave);
  52. RegionHighlight.MouseClick += new System.Windows.Forms.MouseEventHandler(RegionHighlight_MouseClick);
  53. RegionHighlight.MouseHover += RegionHighlight_MouseHover;
  54. }
  55. #region "Start RegionHighlight Methods"
  56. private void Region_MouseLeave(object sender, EventArgs e)
  57. {
  58. if (RegionHighlight.Visible)
  59. this.BackColor = Color.White;
  60. else
  61. this.BackColor = Color.Silver;
  62. RegionHighlight.BorderColor = Color.Lime;
  63. RegionHighlight.FillStyle = FillStyle.Transparent;
  64. }
  65. private void Region_MouseEnter(object sender, EventArgs e)
  66. {
  67. if (!RegionHighlight.Visible) return;
  68. this.BackColor = Color.MediumOrchid;
  69. RegionHighlight.BorderColor = Color.MediumOrchid;
  70. RegionHighlight.FillStyle = FillStyle.Solid;
  71. RegionHighlight.Cursor = VisualizerGlobal.Cursor;
  72. }
  73. private void Region_MouseDown(object sender, MouseEventArgs e)
  74. {
  75. RegionHighlight.BringToFront();
  76. this.BackColor = Color.Orange;
  77. RegionHighlight.BorderColor = Color.Orange;
  78. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Select) return;
  79. MouseDownLocation = e.Location;
  80. }
  81. private void Region_MouseMove(object sender, MouseEventArgs e)
  82. {
  83. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Select) return;
  84. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Add) return;
  85. if (e.Button == System.Windows.Forms.MouseButtons.Left)
  86. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Move)
  87. {
  88. RegionHighlight.Left = e.X + RegionHighlight.Left - MouseDownLocation.X;
  89. RegionHighlight.Top = e.Y + RegionHighlight.Top - MouseDownLocation.Y;
  90. X = (RegionHighlight.Left + Range) / VisualizerGlobal.ZoomLevel;
  91. Y = (RegionHighlight.Top + Range) / VisualizerGlobal.ZoomLevel;
  92. Range = tempRange;
  93. }
  94. else if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Resize)
  95. Range += (ushort)((MouseDownLocation.X - e.Location.X) / VisualizerGlobal.ZoomLevel);
  96. if (e.Button == System.Windows.Forms.MouseButtons.Right)
  97. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Move)
  98. Range += (ushort)((MouseDownLocation.X - e.Location.X) / VisualizerGlobal.ZoomLevel);
  99. else
  100. return;
  101. }
  102. private void RegionHighlight_MouseClick(object sender, MouseEventArgs e)
  103. {
  104. if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Focus)
  105. {
  106. VisualizerGlobal.SelectedFocusType = VisualizerGlobal.FocusType.Respawn;
  107. VisualizerGlobal.FocusRespawnEntry = this;
  108. VisualizerGlobal.FocusModeActive = true;
  109. }
  110. MonsterComboBox.Focus();
  111. }
  112. private void RegionHighlight_MouseHover(object sender, EventArgs e)
  113. {
  114. RegionHighlight.Cursor = VisualizerGlobal.Cursor;
  115. }
  116. #endregion "End RegionHighlight Methods"
  117. public void UpdateForFocus()
  118. {
  119. RegionHighlight.Left = X * VisualizerGlobal.ZoomLevel;
  120. RegionHighlight.Top = Y * VisualizerGlobal.ZoomLevel;
  121. Range = tempRange;
  122. }
  123. public void RemoveEntry()
  124. {
  125. RegionHighlight.Dispose();
  126. this.Dispose();
  127. }
  128. public void HideControl()
  129. {
  130. RegionHighlight.Visible = false;
  131. }
  132. public void ShowControl()
  133. {
  134. RegionHighlight.Visible = true;
  135. }
  136. public void HideRegion()
  137. {
  138. RegionHighlight.Visible = false;
  139. this.BackColor = Color.Silver;
  140. RegionHidden = true;
  141. }
  142. public void ShowRegion()
  143. {
  144. RegionHighlight.Visible = true;
  145. this.BackColor = Color.White;
  146. RegionHidden = false;
  147. }
  148. private void RespawnEntry_Load(object sender, EventArgs e)
  149. {
  150. for (int i = 0; i < Envir.MonsterInfoList.Count; i++) MonsterComboBox.Items.Add(Envir.MonsterInfoList[i]);
  151. MonsterComboBox.SelectedItem = Envir.MonsterInfoList.FirstOrDefault(x => x.Index == MonsterIndex);
  152. Details.Text =
  153. $"C D X: {X.ToString()} | Y: {Y.ToString()} | Range: {Range.ToString()}";
  154. }
  155. private void MonsterComboBox_SelectedIndexChanged(object sender, EventArgs e)
  156. {
  157. MonsterInfo info = MonsterComboBox.SelectedItem as MonsterInfo;
  158. if (info == null) return;
  159. MonsterIndex = info.Index;
  160. }
  161. private void Details_DoubleClick(object sender, EventArgs e)
  162. {
  163. Forms.RespawnsDetailForm RespawnDetail = new Forms.RespawnsDetailForm();
  164. RespawnDetail.X.Text = X.ToString();
  165. RespawnDetail.Y.Text = Y.ToString();
  166. RespawnDetail.Spread.Text = Range.ToString();
  167. RespawnDetail.Count.Text = Count.Text;
  168. RespawnDetail.Delay.Text = Delay.Text;
  169. RespawnDetail.RoutePath.Text = RoutePath;
  170. RespawnDetail.Direction.Text = Direction.ToString();
  171. RespawnDetail.RDelay.Text = RandomDelay.ToString();
  172. RespawnDetail.ShowDialog();
  173. X = Convert.ToInt16(RespawnDetail.X.Text);
  174. Y = Convert.ToInt16(RespawnDetail.Y.Text);
  175. Range = Convert.ToUInt16(RespawnDetail.Spread.Text);
  176. Count.Text = RespawnDetail.Count.Text;
  177. Delay.Text = RespawnDetail.Delay.Text;
  178. RoutePath = RespawnDetail.RoutePath.Text;
  179. Direction = byte.Parse(RespawnDetail.Direction.Text);
  180. RandomDelay = ushort.Parse(RespawnDetail.RDelay.Text);
  181. RespawnDetail.Dispose();
  182. }
  183. }
  184. }