Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MODULE Test333;
- IMPORT WM := WMWindowManager, WMGraphics, WMRectangles, Modules, Math, Kernel;
- CONST
- W = 800;
- H = 800;
- TYPE
- Window = OBJECT (WM.DoubleBufferWindow);
- VAR
- t := 0, t1 := 0: FLOAT32;
- alive := TRUE;
- PROCEDURE &New*;
- BEGIN
- Init(W, H, FALSE);
- WM.AddWindow(SELF, 100, 100);
- canvas.Fill(WMRectangles.MakeRect(0, 0, W, H), WMGraphics.White, WMGraphics.ModeCopy);
- Invalidate(WMRectangles.MakeRect(0, 0, W, H));
- END New;
- PROCEDURE Clear;
- BEGIN
- canvas.Fill(WMRectangles.MakeRect(0, 0, W, H), WMGraphics.Black, WMGraphics.ModeCopy);
- END Clear;
- PROCEDURE Points0();
- VAR i: INTEGER;
- k, d, e, c, q, x, y: FLOAT32;
- BEGIN
- FOR i := 0 TO 9999 DO
- x := i;
- y := i/235.0;
- k := (4.0 + Math.sin(x / 11.0 + t * 8.0)) * Math.cos(x / 14.0);
- e := y / 8.0 - 19.0;
- d := Math.sqrt(k * k + e * e) + Math.sin(y / 9.0 + t * 2.0);
- c := d * d / 49.0 - t;
- q := 2.0 * Math.sin(k * 2.0) + Math.sin(y / 17.0) * k * (9.0 + 2.0 * Math.sin(y - d * 3.0));
- canvas.SetPixel(FLOOR(q + 50.0 * Math.cos(c) + 200.0), FLOOR(q * Math.sin(c) + d * 39.0 - 440.0), WMGraphics.White, WMGraphics.ModeCopy);
- END;
- END Points0;
- PROCEDURE Jelly;
- VAR
- x, y, k, e, d0, d, angle, q, c: FLOAT32;
- i: INTEGER;
- BEGIN
- t := t + 0.01;
- FOR i := 0 TO 9999 DO
- x := i;
- y := i / 41.0;
- k := 5 * Math.cos(x/19) * Math.cos(y/30);
- e := y/8 - 12;
- d0 := Math.sqrt(k*k + e*e);
- d := (d0*d0)/59 + 2;
- angle := Math.arctan2(k, e);
- q := (4 * Math.sin(angle * 9) + 9 * Math.sin(d - t) - (k/d) * (9 + 3*Math.sin(d*9 - t*16)));
- c := (d*d)/7 - t;
- canvas.SetPixel(FLOOR((q + 50*Math.cos(c)) * 2 + 800/2), FLOOR((q*Math.sin(c) + d*45) * 2), WMGraphics.Green, WMGraphics.ModeCopy);
- END;
- END Jelly;
- PROCEDURE DrawFrame;
- BEGIN
- t := t + Math.pi / 240.0;
- Clear;
- Points0;
- Jelly;
- Swap;
- Invalidate(WMRectangles.MakeRect(0, 0, W, H));
- END DrawFrame;
- PROCEDURE Close*;
- BEGIN
- alive := FALSE;
- Close^;
- END Close;
- BEGIN
- VAR timer := NEW Kernel.Timer();
- WHILE alive DO
- DrawFrame;
- timer.Sleep(10);
- END;
- END Window;
- VAR s : Window;
- PROCEDURE Open*;
- BEGIN {EXCLUSIVE}
- IF s # NIL THEN s.Close END; NEW(s);
- END Open;
- PROCEDURE Close;
- BEGIN
- IF s # NIL THEN s.Close END
- END Close;
- BEGIN
- Modules.InstallTermHandler(Close)
- END Test333.
- Test333.Open~
- Test333.Close~
- System.Free Test333~
Advertisement
Add Comment
Please, Sign In to add comment