MapEditor.Mod 3.1 KB

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