Prechádzať zdrojové kódy

decoupled animation speed from cpu speed

git-svn-id: https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk@8701 8c9fc860-2736-0410-a75d-ab315db34111
infsvn.guenter 6 rokov pred
rodič
commit
d99c747176
1 zmenil súbory, kde vykonal 19 pridanie a 5 odobranie
  1. 19 5
      source/TuringCoatWnd.Mod

+ 19 - 5
source/TuringCoatWnd.Mod

@@ -1,7 +1,7 @@
 MODULE TuringCoatWnd;	(* Soren Renner / TF *)
 
 IMPORT
-	Raster, Random, Objects, WMRectangles, WMGraphics, Modules, Strings,
+	Raster, Random, Objects, Kernel, WMRectangles, WMGraphics, Modules, Strings,
 	WM := WMWindowManager, WMMessages;
 
 CONST
@@ -20,7 +20,8 @@ TYPE
 		mesh1, mesh2, n1 : ARRAY m, m OF REAL;
 		random : Random.Generator;
 		alive, dead, alpha : BOOLEAN;
-		i : LONGINT;
+		t0 : LONGINT;
+		timer : Kernel.Timer;
 
 		PROCEDURE &New*(alpha : BOOLEAN);
 		VAR i, j : LONGINT;
@@ -33,7 +34,9 @@ TYPE
 			SetTitle(Strings.NewString("Turing"));
 			SetIcon(WMGraphics.LoadImage("WMIcons.tar://TuringCoatWnd.png", TRUE));
 
-			NEW(random);
+			NEW(random);  
+			
+			NEW( timer );  t0 := Kernel.GetTicks( );
 
 			FOR i := 0 TO m - 1 DO
 				FOR j := 0 TO m - 1 DO
@@ -70,6 +73,16 @@ TYPE
 			Close^;
 			DecCount;
 		END Close;
+		
+		PROCEDURE Delay;
+		VAR t: LONGINT;
+		BEGIN
+			t := Kernel.GetTicks( ) - t0;
+			IF t < 8 THEN
+				IF t >= 0 THEN  timer.Sleep( 8 - t )  END;  
+			END;
+			t0 := Kernel.GetTicks( )
+		END Delay;
 
 		PROCEDURE Generation;
 		VAR i, j : LONGINT;
@@ -129,10 +142,11 @@ TYPE
 		END DrawIt;
 
 	BEGIN {ACTIVE}
-		alive := TRUE;
+		alive := TRUE; 
 		Objects.SetPriority(Objects.Low);
 		WHILE alive DO
-			FOR i := 0 TO 0 DO Generation END;
+			Generation;	
+			Delay;	(* GF, make animation speed independent of CPU speed *)
 			DrawIt;
 		END;
 		BEGIN {EXCLUSIVE} dead := TRUE; END;