Quellcode durchsuchen

Changed K_EXE to K_SHIFT in menu and added animation.

Eiyeron Fulmincendii vor 11 Jahren
Ursprung
Commit
e6ae56c611
3 geänderte Dateien mit 72 neuen und 50 gelöschten Zeilen
  1. 6 0
      draw_states.c
  2. 1 1
      init_states.c
  3. 65 49
      update_states.c

+ 6 - 0
draw_states.c

@@ -58,10 +58,16 @@ void draw_title(Game_Data *data)
 }
 void draw_menu(Game_Data *data)
 {
+	char buffer[20];
+	sprintf(buffer, "%i", data->cam.angle);
 	fillBackground(data);
 	drawPolygon(data, data->nb_lines, data->line_transition);
 	drawDiagonals(data, data->nb_lines, data->line_transition);
 	drawTopRightCornerText(data->entry_difficulties[data->current_entry - 1], data->are_colors_reversed);
+	if(data->current_entry > 3) {
+		// Hyper Mode
+		drawBottomRightCornerText("Hyper Mode", data->are_colors_reversed);
+	}
 }
 void draw_game_over(Game_Data *data)
 {

+ 1 - 1
init_states.c

@@ -234,7 +234,7 @@ void init_menu(Game_Data *data)
 	data->cam.cX = 64;
 	data->cam.cY = 70;
 	data->cam.angle = 0;
-	data->cam.speed = 1.0;
+	data->cam.speed = 0;
 	data->cam.zoom = 8.0;
 	data->nb_lines = 6;
 	data->line_transition.counter = 0;

+ 65 - 49
update_states.c

@@ -54,71 +54,71 @@ void update_game(Game_Data *data)
 		/*if(!isCollidingSide(data->list, data->player_angle, data->nb_lines) && isCollidingSide(data->list, new_player_position, data->nb_lines)) {
 			new_player_position = data->player_angle;
 		}*/
-		data->player_angle = new_player_position;
-	}
-	if(KeyDown(K_RIGHT)){
-		float new_player_position = data->player_angle + data->level->player_rotation_speed *  (data->current_time - data->last_time)*FRAME_TIME;
+			data->player_angle = new_player_position;
+		}
+		if(KeyDown(K_RIGHT)){
+			float new_player_position = data->player_angle + data->level->player_rotation_speed *  (data->current_time - data->last_time)*FRAME_TIME;
 		/*if(!isCollidingSide(data->list, data->player_angle, data->nb_lines) && isCollidingSide(data->list, new_player_position, data->nb_lines)) {
 			new_player_position = data->player_angle;
 		}*/
-		data->player_angle = new_player_position;
-	}
+			data->player_angle = new_player_position;
+		}
 
-	if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
-		game_over(data);
-	}
+		if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
+			game_over(data);
+		}
 
 
-	if(KeyDown(K_PLUS) && data->line_transition.counter == 0)
-	{
-		data->line_transition.counter = 10;
-		data->line_transition.counter_start = 10;
-		data->line_transition.delta_nb_lines = 1;
-	}else if(KeyDown(K_MINUS) && data->line_transition.counter == 0){
-		data->line_transition.counter = 10;
-		data->line_transition.counter_start = 10;
-		data->line_transition.delta_nb_lines = -1;
-	}
-	if(data->line_transition.counter != 0){
-		data->line_transition.counter --;
-		if(data->line_transition.counter <= 0){
-			data->nb_lines += data->line_transition.delta_nb_lines;
-			data->line_transition.counter_start = 0;
-			data->line_transition.delta_nb_lines = 0;
+		if(KeyDown(K_PLUS) && data->line_transition.counter == 0)
+		{
+			data->line_transition.counter = 10;
+			data->line_transition.counter_start = 10;
+			data->line_transition.delta_nb_lines = 1;
+		}else if(KeyDown(K_MINUS) && data->line_transition.counter == 0){
+			data->line_transition.counter = 10;
+			data->line_transition.counter_start = 10;
+			data->line_transition.delta_nb_lines = -1;
+		}
+		if(data->line_transition.counter != 0){
+			data->line_transition.counter --;
+			if(data->line_transition.counter <= 0){
+				data->nb_lines += data->line_transition.delta_nb_lines;
+				data->line_transition.counter_start = 0;
+				data->line_transition.delta_nb_lines = 0;
+			}
 		}
-	}
 
 
-	data->player_angle = MOD(data->player_angle, 360);
+		data->player_angle = MOD(data->player_angle, 360);
 
-	updateCamera(&(data->cam), data->current_time - data->last_time);
+		updateCamera(&(data->cam), data->current_time - data->last_time);
 
-}
-void update_game_over(Game_Data *data)
-{
-	data->last_time = data->current_time;
-	data->current_time = RTC_GetTicks();
-	data->chrono_time += (data->current_time - data->last_time)/ 128.;
-
-	if(KeyDown(K_SHIFT) && data->shift_latch_value == 0) {
-		switch_to_state(GAME, data);
-	}
-	if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
-		switch_to_state(TITLE, data);
 	}
+	void update_game_over(Game_Data *data)
+	{
+		data->last_time = data->current_time;
+		data->current_time = RTC_GetTicks();
+		data->chrono_time += (data->current_time - data->last_time)/ 128.;
 
+		if(KeyDown(K_SHIFT) && data->shift_latch_value == 0) {
+			switch_to_state(GAME, data);
+		}
+		if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
+			switch_to_state(TITLE, data);
+		}
 
-	updateCamera(&(data->cam), data->current_time - data->last_time);
-}
-void update_menu(Game_Data *data)
-{
+
+		updateCamera(&(data->cam), data->current_time - data->last_time);
+	}
+	void update_menu(Game_Data *data)
+	{
 //WARNING: THIS IS JUST PLACEHOLDER TO TEST THE GRAPHICS (too lazy to do some real level handling right now...)
         data->last_time = data->current_time;//updating the time variables
         data->current_time = RTC_GetTicks();
 
 	if(data->keypress_delay == 0) //to make sure that the user isn't scrolling too fast
 	{
-		if(KeyDown(K_EXE)) //load the selected level
+		if(KeyDown(K_SHIFT)) //load the selected level
 			switch_to_state(GAME, data);//TODO: change some values in data first
 		else if(KeyDown(K_LEFT))
 		{
@@ -126,21 +126,37 @@ void update_menu(Game_Data *data)
 			if(data->current_entry == 0)//check for overflows
 				data->current_entry = 6;
 			data->keypress_delay = 15;//init the delay
+			data->are_colors_reversed = data->current_entry > 3;
+
 			//TODO: load high score data and stuff, probably not at run time, but in init_states
+			data->cam.speed = 4;
 		}else if(KeyDown(K_RIGHT))
 		{
 			data->current_entry ++;
 			if(data->current_entry == 7)
 				data->current_entry = 1;
 			data->keypress_delay = 15;
+			data->are_colors_reversed = data->current_entry > 3;
+
+			data->cam.speed = -4;
 		}
-	}else data->keypress_delay --;
-	updateCamera(&(data->cam), data->current_time - data->last_time);//update the camera for the background
+	}else if(data->keypress_delay-- != 0 && data->cam.speed != 0) {
+		if(data->cam.speed < 0)
+			data->cam.angle += 360 + data->cam.speed;
+		else
+			data->cam.angle += data->cam.speed;
+		data->cam.angle %= 360;
+		if(data->keypress_delay == 0)
+			data->cam.speed = 0;
+		//Because the updateCamera isn't really precise
+		//updateCamera(&(data->cam), data->current_time - data->last_time);//update the camera for the background
+	}
+
 }
 
 void updateCamera(Camera *cam, unsigned int delta_time){
-	cam->angle += cam->speed * delta_time / 2.;
-
+	cam->angle += (int)(cam->speed * delta_time / 2.);
+	if(cam->angle < 0) cam->angle += 360;
 	if(cam->angle >= 360)
 		cam->angle = cam->angle % 360;