123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- MODULE MapEditor;
- IMPORT G := Graph, S := SimpleGui, Out, Int, Strings, E := GameEngine;
- CONST window = FALSE;
- VAR
- frmMain: S.Form;
- pnlTop: S.Panel;
- lblMapName: S.Label;
- edtMapName: S.Edit;
- btnOpen: S.Button;
- btnSave: S.Button;
- btnExit: S.Button;
- pnlSide: S.Panel;
- scbVert: S.ScrollBar;
- sbxMap: S.ScrollBox;
- wgtMap: S.Widget;
- cellX, cellY: INTEGER;
- game: E.Game;
- PROCEDURE BtnExitOnClick(c: S.Widget);
- BEGIN
- S.Quit
- END BtnExitOnClick;
- PROCEDURE DrawCell(cell: E.Cell; x, y, toX, toY: INTEGER);
- VAR kx, ky: INTEGER;
- BEGIN
- kx := cell.kind MOD E.tilesInRow * E.cellW;
- ky := cell.kind DIV E.tilesInRow * E.cellH;
- G.DrawPart(E.tiles, kx, ky, E.cellW, E.cellH, toX, toY);
- END DrawCell;
- PROCEDURE WgtMapOnPaint(c: S.Widget; x, y, w, h: INTEGER);
- VAR X, Y, i, j: INTEGER;
- BEGIN
- Y := y;
- FOR i := 0 TO game.map.h - 1 DO
- X := x;
- FOR j := 0 TO game.map.w - 1 DO
- DrawCell(game.map.cells[i, j], i, j, X, Y);
- INC(X, E.cellW)
- END;
- INC(Y, E.cellH)
- END
- END WgtMapOnPaint;
- PROCEDURE WgtMapOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
- VAR color: G.Color;
- draw: BOOLEAN;
- BEGIN
- draw := TRUE;
- IF btns = {1} THEN
- G.MakeCol(color, 0, 0, 0)
- ELSIF btns = {2} THEN
- G.MakeCol(color, 0, 255, 255)
- ELSE
- draw := FALSE
- END;
- IF draw THEN
- G.Target(c(S.Canvas).bmp);
- G.PutPixel(x, y, color)
- END
- END WgtMapOnMouseMove;
- PROCEDURE InitMapWidgetVars;
- BEGIN
- cellX := -1;
- cellY := 0
- END InitMapWidgetVars;
- PROCEDURE InitInterface(): BOOLEAN;
- VAR W, H: INTEGER;
- color: G.Color;
- BEGIN
- G.GetScreenSize(W, H);
- frmMain := S.NewForm(0, 0, W, H);
- pnlTop := S.NewPanel(frmMain, 0, 0, W, 40);
- lblMapName := S.NewLabel(pnlTop, 8, 9, 120, 22, 'Имя файла:');
- S.LabelSetAlign(lblMapName, S.alRight);
- edtMapName := S.NewEdit(pnlTop, lblMapName.x + lblMapName.w + 8,
- 9, 120, 22);
- btnOpen := S.NewButton(pnlTop, edtMapName.x + edtMapName.w + 8,
- 8, 96, 24, 'Открыть');
- btnSave := S.NewButton(pnlTop, btnOpen.x + btnOpen.w + 8,
- 8, 96, 24, 'Сохранить');
- btnExit := S.NewButton(pnlTop, W - 68, 8, 60, 24, 'Выход');
- S.SetOnClick(btnExit, BtnExitOnClick);
- pnlSide := S.NewPanel(frmMain, 0, pnlTop.h, 180, H - pnlTop.h);
- G.MakeCol(color, 40, 150, 40);
- S.SetBgColor(pnlSide, color);
- scbVert := S.NewScrollBar(pnlSide, 20, 20, 16, 150);
- S.ScrollBarSetVertical(scbVert, TRUE);
- scbVert.max := 8;
- sbxMap := S.NewScrollBox(frmMain, pnlSide.w, pnlTop.h,
- W - pnlSide.w, H - pnlTop.h);
- S.ScrollBoxSetInnerSize(sbxMap, 1024, 1024);
- G.MakeCol(color, 0, 0, 0);
- S.ScrollBoxSetNoBg(sbxMap, TRUE);
- wgtMap := S.NewWidget(sbxMap, 0, 0, 1024, 1024);
- S.SetOnPaint(wgtMap, WgtMapOnPaint);
- (*S.SetOnMouseMove(wgtMap, WgtMapOnMouseMove);*)
- InitMapWidgetVars
- RETURN TRUE END InitInterface;
- PROCEDURE Init(): BOOLEAN;
- VAR ok: BOOLEAN;
- BEGIN ok := TRUE;
- IF window THEN G.Settings(640, 480, {G.window}) END;
- G.Init;
- IF ~G.Done THEN ok := FALSE END;
- IF ok THEN
- S.Init;
- IF ~S.Done THEN ok := FALSE END
- END;
- IF ok & ~E.Init() THEN ok := FALSE END;
- IF ok THEN E.InitGame(game) END;
- IF ok & ~InitInterface() THEN ok := FALSE END
- RETURN ok END Init;
- PROCEDURE Close;
- BEGIN
- G.Close
- END Close;
- BEGIN
- IF Init() THEN S.Run ELSE Out.String('Error loading.'); Out.Ln END;
- Close
- END MapEditor.
|