[nexuiz-commits] r7396 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Aug 8 16:11:33 EDT 2009


Author: div0
Date: 2009-08-08 16:11:33 -0400 (Sat, 08 Aug 2009)
New Revision: 7396

Modified:
   trunk/data/qcsrc/server/g_tetris.qc
Log:
proper key repeat for tetris


Modified: trunk/data/qcsrc/server/g_tetris.qc
===================================================================
--- trunk/data/qcsrc/server/g_tetris.qc	2009-08-08 20:03:42 UTC (rev 7395)
+++ trunk/data/qcsrc/server/g_tetris.qc	2009-08-08 20:11:33 UTC (rev 7396)
@@ -10,7 +10,6 @@
 
 .vector tet_org;
 
-.float tet_old_keys;
 .float tetris_on, tet_gameovertime, tet_drawtime, tet_autodown;
 .vector piece_pos;
 .float piece_type, next_piece, tet_score, tet_lines;
@@ -800,7 +799,35 @@
 	return answer;
 };
 
+.float tetkey_down, tetkey_rotright, tetkey_left, tetkey_right, tetkey_rotleft, tetkey_drop;
 
+float TetrisKeyRepeat(.float fld, float f)
+{
+	if(f)
+	{
+		if(self.fld == 0) // initial key press
+		{
+			self.fld = time + 0.3;
+			return 1;
+		}
+		else if(time > self.fld)
+		{
+			self.fld = time + 0.1;
+			return 1;
+		}
+		else
+		{
+			// repeating too fast
+			return 0;
+		}
+	}
+	else
+	{
+		self.fld = 0;
+		return 0;
+	}
+}
+
 float TetrisPostFrame()
 {
 	float keysa, keysb;
@@ -817,25 +844,29 @@
 	
 	self.origin = self.tet_org;
 
-	if(self.movement_x < 0)
-		keysa |= TETKEY_DOWN;
-	else if(self.movement_x > 0)
-		keysa |= TETKEY_ROTRIGHT;
-	if(self.movement_y < 0)
-		keysa |= TETKEY_LEFT;
-	else if(self.movement_y > 0)
-		keysa |= TETKEY_RIGHT;
-	if (self.BUTTON_CROUCH)
-		keysa = keysa | TETKEY_ROTLEFT;
-	if (self.BUTTON_JUMP)
-		keysa = keysa | TETKEY_DROP;
+	if(self.tetris_on == 1)
+	{
+		if(TetrisKeyRepeat(tetkey_down, self.movement_x < 0))
+			keysa |= TETKEY_DOWN;
 
-	keysb = keysa;
-	keysa &~= self.tet_old_keys;
-	self.tet_old_keys = keysb;
+		if(TetrisKeyRepeat(tetkey_rotright, self.movement_x > 0))
+			keysa |= TETKEY_ROTRIGHT;
 
-	if(self.tetris_on == 1)
+		if(TetrisKeyRepeat(tetkey_left, self.movement_y < 0))
+			keysa |= TETKEY_LEFT;
+
+		if(TetrisKeyRepeat(tetkey_right, self.movement_y > 0))
+			keysa |= TETKEY_RIGHT;
+		
+		if(TetrisKeyRepeat(tetkey_rotleft, self.BUTTON_CROUCH))
+			keysa = keysa | TETKEY_ROTLEFT;
+
+		if(TetrisKeyRepeat(tetkey_drop, self.BUTTON_JUMP))
+			keysa = keysa | TETKEY_DROP;
+
 		HandleGame(keysa);
+	}
+
 	return 1;
 };
 



More information about the nexuiz-commits mailing list