/*Troy Rosin*/ #include #include #include #include #include #include #include #include #include #include #define BOARDER_THICKNESS 20 int over_object; int num_players = 1; int lobby_has_name = 0; struct host_ctx { char player_names[MAX_PLAYERS][MAX_NAMESZ]; char temp_name[MAX_NAMESZ]; char lobby_name[MAX_NAMESZ]; char lobby_name_perm[MAX_NAMESZ]; SDL_Rect set_name_rect, name_rect, player_name_rect; SDL_Rect player_rects[MAX_PLAYERS]; SDL_Rect player_name_rects[MAX_PLAYERS]; SDL_Rect start_rect; TTF_Font* font; SDL_Surface *set_name_surf; SDL_Surface *start_surf; SDL_Surface *lobby_name_surf; SDL_Texture *set_name_tex; SDL_Texture *lobby_name_tex; SDL_Texture *start_tex; SDL_Surface *player_name_surfs[MAX_PLAYERS]; SDL_Surface *player_tempname_surf; SDL_Texture *player_name_texs[MAX_PLAYERS]; SDL_Texture *player_tempname_tex; }; struct host_ctx host; void init_host() { int i; over_object = NO_OBJECT; strcpy(host.player_names[0], "player_1"); strcpy(host.player_names[1], "no_player_2"); strcpy(host.player_names[2], "no_player_3"); strcpy(host.player_names[3], "no_player_4"); host.font = TTF_OpenFont("assets/font.ttf", 24); host.set_name_surf = TTF_RenderText_Solid(host.font, "set name", white); host.start_surf = TTF_RenderText_Solid(host.font, "start game", white); host.lobby_name_surf = TTF_RenderText_Solid(host.font, host.lobby_name, white); host.set_name_tex = SDL_CreateTextureFromSurface(renderer, host.set_name_surf); host.start_tex = SDL_CreateTextureFromSurface(renderer, host.start_surf); host.set_name_rect.w = DEF_WINDOW_WIDTH >> 3; host.set_name_rect.h = DEF_WINDOW_HEIGHT >> 4; host.set_name_rect.x = DEF_WINDOW_WIDTH - (host.set_name_rect.w << 1); host.set_name_rect.y = DEF_WINDOW_HEIGHT - (host.set_name_rect.h << 2); host.name_rect.w = DEF_WINDOW_WIDTH - (host.set_name_rect.w << 2) - (BOARDER_THICKNESS << 1); host.name_rect.h = host.set_name_rect.h; host.name_rect.x = (host.set_name_rect.w << 1) + BOARDER_THICKNESS; host.name_rect.y = host.set_name_rect.y; host.start_rect.w = host.set_name_rect.w; host.start_rect.h = host.set_name_rect.h; host.start_rect.x = (DEF_WINDOW_WIDTH >> 1) - (host.start_rect.w >> 1); host.start_rect.y = host.set_name_rect.y + host.set_name_rect.h + BOARDER_THICKNESS; host.player_name_rect.w = DEF_WINDOW_WIDTH - (host.set_name_rect.w << 2) - (BOARDER_THICKNESS << 1); host.player_name_rect.h = host.set_name_rect.h; host.player_name_rect.x = (host.set_name_rect.w << 1) + BOARDER_THICKNESS; host.player_name_rect.y = host.set_name_rect.y; host.player_rects[0].w = host.player_rects[1].w = host.player_rects[2].w = host.player_rects[3].w = DEF_WINDOW_WIDTH - (host.set_name_rect.w << 1); host.player_rects[0].h = host.player_rects[1].h = host.player_rects[2].h = host.player_rects[3].h = ((DEF_WINDOW_HEIGHT - (DEF_WINDOW_HEIGHT - host.set_name_rect.y)) - (BOARDER_THICKNESS << 2) - BOARDER_THICKNESS) >> 2; host.player_rects[0].x = host.player_rects[1].x = host.player_rects[2].x = host.player_rects[3].x = host.set_name_rect.w; host.player_rects[0].y = BOARDER_THICKNESS; host.player_rects[1].y = host.player_rects[0].y + host.player_rects[0].h + BOARDER_THICKNESS; host.player_rects[2].y = host.player_rects[1].y + host.player_rects[1].h + BOARDER_THICKNESS; host.player_rects[3].y = host.player_rects[2].y + host.player_rects[2].h + BOARDER_THICKNESS; for(i = 0; i < MAX_PLAYERS; i++) { host.player_name_rects[i].w = host.player_rects[i].w; host.player_name_rects[i].h = host.player_rects[i].h - (BOARDER_THICKNESS << 1); host.player_name_rects[i].x = host.player_rects[i].x + BOARDER_THICKNESS; host.player_name_rects[i].y = host.player_rects[i].y + BOARDER_THICKNESS; } return; } char *get_this_name(int i) { if(!lobby_has_name) { if(i == -1){return host.lobby_name; } if(i == 0) { return host.lobby_name_perm; } } else{ if(i == -1) { return host.temp_name; } if(i >= 0 && i < MAX_PLAYERS){ return host.player_names[i]; } } return NULL; } void render_lobby() { int i; host.player_tempname_surf= TTF_RenderText_Solid(host.font, host.temp_name, white); host.player_tempname_tex = SDL_CreateTextureFromSurface(renderer, host.player_tempname_surf); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); //set name button SDL_SetRenderDrawColor(renderer, 64, 64, 64,255); SDL_RenderFillRect(renderer, &host.set_name_rect); SDL_RenderCopy(renderer, host.set_name_tex, NULL, &(host.set_name_rect)); //player fields for(i = 0; i < MAX_PLAYERS; i++) { host.player_name_rects[i].w = (host.player_rects[0].w / MAX_NAMESZ) * strlen(host.player_names[i]); host.player_name_surfs[i] = TTF_RenderText_Solid(host.font, host.player_names[i], white); host.player_name_texs[i] = SDL_CreateTextureFromSurface(renderer, host.player_name_surfs[i]); SDL_RenderFillRect(renderer, &(host.player_rects[i])); SDL_RenderCopy(renderer, host.player_name_texs[i], NULL, &(host.player_name_rects[i])); } //name field host.player_name_rect.w = (host.name_rect.w / MAX_NAMESZ) * strlen(host.temp_name); SDL_RenderFillRect(renderer, &host.name_rect); SDL_RenderCopy(renderer, host.player_tempname_tex, NULL, &host.player_name_rect); //start game button SDL_RenderFillRect(renderer, &host.start_rect); SDL_RenderCopy(renderer, host.start_tex, NULL, &(host.start_rect)); SDL_RenderPresent(renderer); host.player_tempname_surf= TTF_RenderText_Solid(host.font, host.temp_name, white); host.player_tempname_tex = SDL_CreateTextureFromSurface(renderer, host.player_tempname_surf); SDL_FreeSurface(host.player_tempname_surf); SDL_DestroyTexture(host.player_tempname_tex); for(i = 0; i < MAX_PLAYERS; i++) { SDL_FreeSurface(host.player_name_surfs[i]); SDL_DestroyTexture(host.player_name_texs[i]); } } void render_lobby_name() { host.lobby_name_surf = TTF_RenderText_Solid(host.font, host.lobby_name, white); host.lobby_name_tex = SDL_CreateTextureFromSurface(renderer, host.lobby_name_surf); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); //set lobby name button SDL_SetRenderDrawColor(renderer, 64, 64, 64,255); SDL_RenderFillRect(renderer, &host.set_name_rect); SDL_RenderCopy(renderer, host.set_name_tex, NULL, &(host.set_name_rect)); //name field host.player_name_rect.w = (host.name_rect.w / MAX_NAMESZ) * strlen(host.lobby_name); SDL_RenderFillRect(renderer, &host.name_rect); SDL_RenderCopy(renderer, host.lobby_name_tex, NULL, &host.player_name_rect); //start game button SDL_RenderFillRect(renderer, &host.start_rect); SDL_RenderCopy(renderer, host.start_tex, NULL, &(host.start_rect)); SDL_RenderPresent(renderer); } void render_main() { SDL_SetTextInputRect(&host.name_rect); SDL_GetMouseState(&(mouse_pos.x), &(mouse_pos.y)); if(SDL_PointInRect(&mouse_pos, &host.start_rect)){ over_object = START_GAME_BUTTON; } else if(SDL_PointInRect(&mouse_pos, &host.set_name_rect)){ over_object = SET_NAME_BUTTON; } if(lobby_has_name){ render_lobby(); } else{ render_lobby_name(); } } void render_host_game(){ render_main(); return; }