2
0

MapEditor.Mod 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. MODULE MapEditor;
  2. IMPORT G := Graph, S := SimpleGui, Out, Int, Strings, E := GameEngine;
  3. CONST window = FALSE;
  4. VAR
  5. frmMain: S.Form;
  6. pnlTop: S.Panel;
  7. lblMapName: S.Label;
  8. edtMapName: S.Edit;
  9. btnOpen: S.Button;
  10. btnSave: S.Button;
  11. btnExit: S.Button;
  12. pnlSide: S.Panel;
  13. scbVert: S.ScrollBar;
  14. sbxMap: S.ScrollBox;
  15. wgtMap: S.Widget;
  16. cellX, cellY: INTEGER;
  17. game: E.Game;
  18. PROCEDURE BtnExitOnClick(c: S.Widget);
  19. BEGIN
  20. S.Quit
  21. END BtnExitOnClick;
  22. PROCEDURE DrawCell(cell: E.Cell; x, y, toX, toY: INTEGER);
  23. VAR kx, ky: INTEGER;
  24. BEGIN
  25. kx := cell.kind MOD E.tilesInRow * E.cellW;
  26. ky := cell.kind DIV E.tilesInRow * E.cellH;
  27. G.DrawPart(E.tiles, kx, ky, E.cellW, E.cellH, toX, toY);
  28. END DrawCell;
  29. PROCEDURE WgtMapOnPaint(c: S.Widget; x, y, w, h: INTEGER);
  30. VAR X, Y, i, j: INTEGER;
  31. BEGIN
  32. Y := y;
  33. FOR i := 0 TO game.map.h - 1 DO
  34. X := x;
  35. FOR j := 0 TO game.map.w - 1 DO
  36. DrawCell(game.map.cells[i, j], i, j, X, Y);
  37. INC(X, E.cellW)
  38. END;
  39. INC(Y, E.cellH)
  40. END
  41. END WgtMapOnPaint;
  42. PROCEDURE WgtMapOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
  43. VAR color: G.Color;
  44. draw: BOOLEAN;
  45. BEGIN
  46. draw := TRUE;
  47. IF btns = {1} THEN
  48. G.MakeCol(color, 0, 0, 0)
  49. ELSIF btns = {2} THEN
  50. G.MakeCol(color, 0, 255, 255)
  51. ELSE
  52. draw := FALSE
  53. END;
  54. IF draw THEN
  55. G.Target(c(S.Canvas).bmp);
  56. G.PutPixel(x, y, color)
  57. END
  58. END WgtMapOnMouseMove;
  59. PROCEDURE InitMapWidgetVars;
  60. BEGIN
  61. cellX := -1;
  62. cellY := 0
  63. END InitMapWidgetVars;
  64. PROCEDURE InitInterface(): BOOLEAN;
  65. VAR W, H: INTEGER;
  66. color: G.Color;
  67. BEGIN
  68. G.GetScreenSize(W, H);
  69. frmMain := S.NewForm(0, 0, W, H);
  70. pnlTop := S.NewPanel(frmMain, 0, 0, W, 40);
  71. lblMapName := S.NewLabel(pnlTop, 8, 9, 120, 22, 'Имя файла:');
  72. S.LabelSetAlign(lblMapName, S.alRight);
  73. edtMapName := S.NewEdit(pnlTop, lblMapName.x + lblMapName.w + 8,
  74. 9, 120, 22);
  75. btnOpen := S.NewButton(pnlTop, edtMapName.x + edtMapName.w + 8,
  76. 8, 96, 24, 'Открыть');
  77. btnSave := S.NewButton(pnlTop, btnOpen.x + btnOpen.w + 8,
  78. 8, 96, 24, 'Сохранить');
  79. btnExit := S.NewButton(pnlTop, W - 68, 8, 60, 24, 'Выход');
  80. S.SetOnClick(btnExit, BtnExitOnClick);
  81. pnlSide := S.NewPanel(frmMain, 0, pnlTop.h, 180, H - pnlTop.h);
  82. G.MakeCol(color, 40, 150, 40);
  83. S.SetBgColor(pnlSide, color);
  84. scbVert := S.NewScrollBar(pnlSide, 20, 20, 16, 150);
  85. S.ScrollBarSetVertical(scbVert, TRUE);
  86. scbVert.max := 8;
  87. sbxMap := S.NewScrollBox(frmMain, pnlSide.w, pnlTop.h,
  88. W - pnlSide.w, H - pnlTop.h);
  89. S.ScrollBoxSetInnerSize(sbxMap, 1024, 1024);
  90. G.MakeCol(color, 0, 0, 0);
  91. S.ScrollBoxSetNoBg(sbxMap, TRUE);
  92. wgtMap := S.NewWidget(sbxMap, 0, 0, 1024, 1024);
  93. S.SetOnPaint(wgtMap, WgtMapOnPaint);
  94. (*S.SetOnMouseMove(wgtMap, WgtMapOnMouseMove);*)
  95. InitMapWidgetVars
  96. RETURN TRUE END InitInterface;
  97. PROCEDURE Init(): BOOLEAN;
  98. VAR ok: BOOLEAN;
  99. BEGIN ok := TRUE;
  100. IF window THEN G.Settings(640, 480, {G.window}) END;
  101. G.Init;
  102. IF ~G.Done THEN ok := FALSE END;
  103. IF ok THEN
  104. S.Init;
  105. IF ~S.Done THEN ok := FALSE END
  106. END;
  107. IF ok & ~E.Init() THEN ok := FALSE END;
  108. IF ok THEN E.InitGame(game) END;
  109. IF ok & ~InitInterface() THEN ok := FALSE END
  110. RETURN ok END Init;
  111. PROCEDURE Close;
  112. BEGIN
  113. G.Close
  114. END Close;
  115. BEGIN
  116. IF Init() THEN S.Run ELSE Out.String('Error loading.'); Out.Ln END;
  117. Close
  118. END MapEditor.