ソースを参照

Added a basic level selection UI. Still a lot of work ahead (mainly graphical), but it's functionnal.

Adrien Boucaud 12 年 前
コミット
3ceee0b3af
共有4 個のファイルを変更した34 個の追加8 個の削除を含む
  1. 3 2
      draw_states.c
  2. 3 2
      init_states.c
  3. 1 0
      struct.h
  4. 27 4
      update_states.c

+ 3 - 2
draw_states.c

@@ -15,7 +15,8 @@ void draw_title(Game_Data *data)
 }
 void draw_menu(Game_Data *data)
 {
-
+	PrintMini(20,28, data->entry_difficulties[data->current_entry - 1]);
+	drawDiagonals(data->cam, 6, data->line_transition);
 }
 void draw_game_over(Game_Data *data)
 {
@@ -29,7 +30,7 @@ void draw_game_over(Game_Data *data)
 void drawPlayer(Camera *cam, int player_angle, int nb_lines, Line_Transition line_transition)
 {
 	int x[32];
-	int y[32];
+ 	int y[32];
 	int i = 0;
 	int angle = 0;
 

+ 3 - 2
init_states.c

@@ -2,12 +2,12 @@
 
 void init_game(Game_Data *data)
 {
+//TODO: init the level depending on the value of data->current_entry
 	data->level = NULL;
 	data->level = malloc(sizeof(Level));
 	if(data->level == NULL)
 		return;
 
-	data->level->id = 1;
 	data->level->nb_patterns = 0;
 
 	data->level->cam_change_interval = 5;
@@ -42,7 +42,7 @@ void init_game(Game_Data *data)
 void init_title(Game_Data *data)
 {
         data->cam.cX = 64;
-        data->cam.cY = 70;
+        data->cam.cY = 75;
         data->cam.angle = 0;
         data->cam.speed = 1.0;
         data->nb_lines = 6;
@@ -81,6 +81,7 @@ void load_difficulty_names(char **str_list)
 }
 void init_menu(Game_Data *data)
 {
+	data->keypress_delay = 50;
 	data->nb_entries = 6;
 	data->current_entry = 1;
 	data->current_entry_high_score = 0; //to load from a save file

+ 1 - 0
struct.h

@@ -104,6 +104,7 @@ struct Game_Data{
 	unsigned int current_entry; //from 1 to 6
 	unsigned int current_entry_high_score;
 	char **entry_difficulties; //a table of null-terminated strings
+	unsigned int keypress_delay;
 };
 
 #endif

+ 27 - 4
update_states.c

@@ -7,7 +7,7 @@ void update_title(Game_Data *data)
 
 	updateCamera(&(data->cam), data->current_time - data->last_time);
 	if(KeyDown(K_EXE))
-		switch_to_state(GAME, data);
+		switch_to_state(MENU, data);
 }
 void update_game(Game_Data *data)
 {
@@ -64,13 +64,36 @@ void update_game(Game_Data *data)
 
 	updateCamera(&(data->cam), data->current_time - data->last_time);
 }
-void update_menu(Game_Data *data)
+void update_game_over(Game_Data *data)
 {
 //TODO
 }
-void update_game_over(Game_Data *data)
+void update_menu(Game_Data *data)
 {
-//TODO
+//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
+			switch_to_state(GAME, data);//TODO: change some values in data first
+		else if(KeyDown(K_LEFT))
+		{
+			data->current_entry --;//change the selected id
+			if(data->current_entry == 0)//check for overflows
+				data->current_entry = 6;
+			data->keypress_delay = 15;//init the delay
+			//TODO: load high score data and stuff, probably not at run time, but in init_states
+		}else if(KeyDown(K_RIGHT))
+		{
+			data->current_entry ++;
+			if(data->current_entry == 7)
+				data->current_entry = 1;
+			data->keypress_delay = 15;
+		}
+	}else data->keypress_delay --;
+	updateCamera(&(data->cam), data->current_time - data->last_time);//update the camera for the background
 }
 
 void updateCamera(Camera *cam, unsigned int delta_time){