29 printf(
"Deselect item not given menu");
49 printf(
"Select item not given menu");
69 printf(
"NULL menu updated \n");
74 case(SDL_CONTROLLER_BUTTON_DPAD_UP):
90 case(SDL_CONTROLLER_BUTTON_DPAD_DOWN):
102 case(SDL_CONTROLLER_BUTTON_A):
127 int i, powerUps, selected_power_ups;
128 object_t *temp, *choose_obj;
133 printf(
"NULL menu updated \n");
138 case(SDL_CONTROLLER_BUTTON_DPAD_UP):
140 if(!self->mSelectedItem)
142 self->mSelectedItem =
self->mItems;
144 if(self->mSelectedItem-1 < self->mItems)
148 self->mSelectedItem--;
151 case(SDL_CONTROLLER_BUTTON_DPAD_DOWN):
153 if(!self->mSelectedItem)
155 self->mSelectedItem =
self->mItems;
157 if(self->mSelectedItem+1 == self->mItems+self->mItemCount)
161 self->mSelectedItem++;
164 case(SDL_CONTROLLER_BUTTON_A):
166 if(!self->mSelectedItem)
168 self->mSelectedItem =
self->mItems;
170 if(self->mSelectedItem->NextState ==
SPLASH)
178 selected_power_ups = 0;
179 for(i = 0; i < powerUps; i++)
184 selected_power_ups++;
189 printf(
"Too many or not enough power_ups selected");
190 for(i = 0; i < selected_power_ups; i++)
197 gUsedPowerUps = (
char**) malloc(
sizeof(
char*)*(selected_power_ups+1));
198 memset(
gUsedPowerUps, 0,
sizeof(
char*)*(selected_power_ups+1));
205 printf(
"Failure to load Choose Menu \n");
208 for(i = 0; i <
self->mItemCount; i++)
212 self->mSelectedItem = NULL;
236 int i, powerUps, usedPower = 1;
239 printf(
"NULL menu updated \n");
244 case(SDL_CONTROLLER_BUTTON_DPAD_UP):
246 if(self->mSelectedItem-1 < self->mItems)
250 self->mSelectedItem--;
253 case(SDL_CONTROLLER_BUTTON_DPAD_DOWN):
255 if(self->mSelectedItem+1 == self->mItems+self->mItemCount)
259 self->mSelectedItem++;
262 case(SDL_CONTROLLER_BUTTON_A):
267 for(i = 0; i < powerUps; i++)
274 }
else if(!strcmp(self->mSelectedItem[i].Name,
gUsedPowerUps[i]))
285 gGameState =
self->mSelectedItem[i].NextState;
303 printf(
"gMenus already initialized");
309 printf(
"Allocate menu error");
320 SDL_Rect selection_rect = {0,0,10,10};
324 printf(
"Null menu tried to be drawn \n");
328 if(self->mBackground)
332 printf(
"Failed to draw Background \n");
337 for(i = 0; i <
self->mItemCount; i++)
343 printf(
"Failed to draw Menu Item : %d \n", i);
346 selection_rect.x =
self->mItems[i].Position.x;
347 selection_rect.y =
self->mItems[i].Position.y;
352 printf(
"Failed to draw Menu Item : %d \n", i);
364 SDL_Rect selection_rect = {0,0,10,10};
368 printf(
"Null menu tried to be drawn \n");
372 if(self->mBackground)
377 for(i = 0; i <
self->mItemCount; i++)
383 printf(
"Failed to draw Menu Item : %d \n", i);
386 selection_rect.x =
self->mItems[i].Position.x;
387 selection_rect.y =
self->mItems[i].Position.y;
395 printf(
"Failed to draw Menu Item : %d \n", i);
416 int itemCount, i, width, height, divisor;
418 itemCount =
CountMem(items,
sizeof(menu_item_t));
419 divisor = 0; radius = 0;
428 SDL_SetRect(&format, 0, height/(itemCount+1), 0, 0);
433 SDL_SetRect(&format, width/(itemCount+1), 0, 0, 0);
438 SDL_SetRect(&format, width/(itemCount+1), height/(itemCount+1), 0, 0);
446 radius = (float) height/3;
451 SDL_SetRect(&format, 0, height/(itemCount+1), 0, 0);
456 for(i = 0; i < itemCount; i++)
460 items[i].Position.x = format.x * i;
461 items[i].Position.y = format.y * i;
465 items[i].Position.x = format.x * i%divisor;
466 items[i].Position.y = format.y * i/divisor;
470 items[i].Position.x = format.x - (float) radius*sinf( 3.14 * (
float) i/(itemCount+1));
471 items[i].Position.y = format.y - (float) radius*cosf( 3.14 * (
float) i/(itemCount+1));
480 menu_t *menu, *ref_menu;
481 menu_item_t *ref_menu_item;
483 char *temp_str, *type_str, *bg_str;
484 int i, temp_i, choose_i;
487 if(!
object || !g_str)
489 printf(
"No object / str given to load menu \n");
497 printf(
"Could not find free menu \n");
501 menu->mPreviousState = previous_state;
502 menu->mCurrentState = curr_state;
507 printf(
"No items in menu %s \n", object->name);
515 printf(
"No background loaded for menu %s \n", object->name);
525 printf(
"Not found menu layout type for %s. Switching to default vertical layout", object->name);
533 printf(
"Max menu items for menu %s \n", object->name);
537 menu->mItemCount = temp_i;
538 for(i = 0; i < temp_i; i++)
541 menu->mItems[i].Info = NULL;
546 menu->mItems[i].Image =
LoadSprite(temp_str, 0);
552 menu->mItems[i].Name = temp_str;
559 if(temp_str) free(temp_str);
562 menu->mItems[i].NextState =
SPLASH;
568 menu->mItems[i].Info = temp_str;
569 if(!menu->mItems[i].Name)
571 menu->mItems[i].Name = temp_str;
575 menu->mItems[i].Info = NULL;
588 printf(
"Trouble loading choose menu , no GUESS menu found \n");
592 for(i = 0; i < choose_i; i++)
599 memcpy(&menu->mItems[menu->mItemCount+i], ref_menu_item,
sizeof(menu_item_t));
601 menu->mItems[menu->mItemCount+i].NextState =
PLAYING;
603 menu->mItemCount += choose_i;
610 menu->mSelectedItem = menu->mItems;
642 printf(
"Menu Sys not Initialized");
651 if(
gMenus[i].mCurrentState == curr_state)
664 printf(
"Menu System not initialized");
667 menuCmp = (
int*) malloc(
sizeof(menu_t));
668 memset(menuCmp, 0,
sizeof(menu_t));
671 if(!memcmp(menuCmp, &
gMenus[i],
sizeof(menu_t)))
682 items =
CountMem(menu->mItems,
sizeof(menu_item_t));
683 for(i = 0; i < items; i++)
685 if(!menu->mItems[i].Name)
689 if(!strcmp(item, menu->mItems[i].Name))
691 return &menu->mItems[i];
int CountMem(void *src, int size_type)
int CountObjectChildren(object_t *obj)
GameState StrToGameState(char *str)
object_t * FindObject(object_t *obj, char *name)
char * JsmnToString(jsmntok_t *token, char *g_str)
int ConvertFileToUseable(char *fileName, jsmn_parser *parser, char **stringStorage, jsmntok_t **jsmnStorage)
int LargestDivisor(int num)
SDL_Texture * gRedTexture
void SDL_SetRect(SDL_Rect *rect, int x, int y, int w, int h)
int LoadSelectedLevel(int level)
power_t * FindPower(char *str)
char ** gSelectedPowerUps
sprite_t * LoadSprite(const char *name, int flags)
int DrawSprite(sprite_t *sprite, int *frame, vec2_t *position, SDL_Renderer *renderer)
char * FindValue(struct object_s *obj, char *key, char *g_str)
object_t * ParseToObject(jsmntok_t *token, char *g_str)
power_t * gCurrentPowerUp
char * gCurrentPowerUpName