PageRenderTime 598ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/NekoKun.Editor/RPGMaker/Map/MapEditor.cs

https://bitbucket.org/nekokun/nekokun
C# | 181 lines | 145 code | 30 blank | 6 comment | 22 complexity | 9afc4aaf88d87970fb5d3ff282b1627f MD5 | raw file
Possible License(s): MIT, CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace NekoKun.RPGMaker
  5. {
  6. public class MapEditor : AbstractEditor, IToolboxProvider
  7. {
  8. MapFile map;
  9. TilesetInfo tileset;
  10. MapPanel mapPanel;
  11. TilePanel tilePanel;
  12. System.Windows.Forms.Panel toolboxPanel;
  13. System.Windows.Forms.ToolStrip toolstrip;
  14. System.Windows.Forms.ToolStripButton buttonSelected;
  15. List<System.Windows.Forms.ToolStripButton> buttonLayers;
  16. public short TileID = 0;
  17. public int LayerID = -1;
  18. public MapEditor(MapFile file)
  19. : base(file)
  20. {
  21. map = file;
  22. this.tileset = map.TilesetFile[map.TilesetID];
  23. mapPanel = new MapPanel(map.Layers, tileset);
  24. mapPanel.Dock = System.Windows.Forms.DockStyle.Fill;
  25. this.Controls.Add(mapPanel);
  26. this.KeyPreview = true;
  27. this.KeyDown += new System.Windows.Forms.KeyEventHandler(MapEditor_KeyDown);
  28. this.mapPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(mapPanel_MouseDown);
  29. this.mapPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(mapPanel_MouseMove);
  30. tilePanel = new TilePanel(tileset);
  31. tilePanel.TileSelected += new EventHandler<TilePanel.TileSelectedArgs>(tilePanel_TileSelected);
  32. tilePanel.Dock = System.Windows.Forms.DockStyle.Fill;
  33. toolstrip = new System.Windows.Forms.ToolStrip();
  34. toolstrip.Dock = System.Windows.Forms.DockStyle.Top;
  35. toolstrip.Stretch = true;
  36. toolstrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
  37. buttonSelected = new System.Windows.Forms.ToolStripButton();
  38. buttonSelected.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.SizeToFit;
  39. buttonSelected.AutoSize = true;
  40. buttonSelected.Image = tileset[0];
  41. buttonSelected.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
  42. toolstrip.Items.Add(buttonSelected);
  43. toolstrip.Items.Add(new System.Windows.Forms.ToolStripSeparator());
  44. buttonLayers = new List<System.Windows.Forms.ToolStripButton>();
  45. for (int i = 0; i < this.map.Layers.Count; i++)
  46. {
  47. var laybtn = new System.Windows.Forms.ToolStripButton();
  48. laybtn.Text = string.Format("{0}", i + 1);
  49. laybtn.Tag = i;
  50. laybtn.Click += new EventHandler(laybtn_Click);
  51. if (this.map.Layers[i].Type == MapLayerType.HalfBlockShadow)
  52. {
  53. laybtn.Text = "??";
  54. }
  55. toolstrip.Items.Add(laybtn);
  56. buttonLayers.Add(laybtn);
  57. }
  58. toolboxPanel = new System.Windows.Forms.Panel();
  59. this.toolboxPanel.Controls.Add(tilePanel);
  60. this.toolboxPanel.Controls.Add(toolstrip);
  61. }
  62. void MapEditor_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  63. {
  64. if (e.KeyCode >= System.Windows.Forms.Keys.D1 && e.KeyCode <= System.Windows.Forms.Keys.D9)
  65. {
  66. int id = e.KeyCode - System.Windows.Forms.Keys.D1;
  67. if (id >= 0 && id < this.buttonLayers.Count)
  68. laybtn_Click(this.buttonLayers[id], null);
  69. }
  70. }
  71. void laybtn_Click(object sender, EventArgs e)
  72. {
  73. System.Windows.Forms.ToolStripButton button = sender as System.Windows.Forms.ToolStripButton;
  74. int id = (int)button.Tag;
  75. if (LayerID != id)
  76. {
  77. foreach (var item in this.buttonLayers)
  78. item.Checked = item == button;
  79. this.mapPanel.JustLayer = id;
  80. this.mapPanel.InvalidateContents();
  81. LayerID = id;
  82. }
  83. else
  84. {
  85. foreach (var item in this.buttonLayers)
  86. item.Checked = false;
  87. this.mapPanel.JustLayer = -1;
  88. this.mapPanel.InvalidateContents();
  89. LayerID = -1;
  90. }
  91. }
  92. void tilePanel_TileSelected(object sender, TilePanel.TileSelectedArgs e)
  93. {
  94. SetSelectedTile(e.TileID);
  95. }
  96. void SetSelectedTile(short id)
  97. {
  98. TileID = id;
  99. this.buttonSelected.Image = this.tileset[TileID];
  100. }
  101. void mapPanel_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
  102. {
  103. if (e.Button == System.Windows.Forms.MouseButtons.Left)
  104. MouseDrawCell(e.X, e.Y);
  105. }
  106. void MouseDrawCell(int x, int y)
  107. {
  108. if (LayerID == -1)
  109. return;
  110. System.Drawing.Point pt = mapPanel.PointToMapPoint(x, y);
  111. if (mapPanel.MapPointValid(pt))
  112. {
  113. this.map.Layers[LayerID].Data[pt.X, pt.Y] = (short)TileID;
  114. mapPanel.DrawTile(pt.X, pt.Y);
  115. this.map.MakeDirty();
  116. }
  117. }
  118. void MousePickCell(int x, int y)
  119. {
  120. if (LayerID == -1)
  121. return;
  122. System.Drawing.Point pt = mapPanel.PointToMapPoint(x, y);
  123. if (mapPanel.MapPointValid(pt))
  124. {
  125. SetSelectedTile(this.map.Layers[LayerID].Data[pt.X, pt.Y]);
  126. }
  127. }
  128. void mapPanel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  129. {
  130. if (e.Button == System.Windows.Forms.MouseButtons.Left)
  131. MouseDrawCell(e.X, e.Y);
  132. if (e.Button == System.Windows.Forms.MouseButtons.Right)
  133. MousePickCell(e.X, e.Y);
  134. /*
  135. if (e.Button == System.Windows.Forms.MouseButtons.Left)
  136. this.mapPanel.Zoom *= 2;
  137. else if (e.Button == System.Windows.Forms.MouseButtons.Right)
  138. this.mapPanel.Zoom /= 2;
  139. */
  140. }
  141. protected override void Dispose(bool disposing)
  142. {
  143. this.tileset.Dispose();
  144. base.Dispose(disposing);
  145. }
  146. public System.Windows.Forms.Control ToolboxControl
  147. {
  148. get { return toolboxPanel; }
  149. }
  150. }
  151. }