made the join game screen to get ready for attaching to host and also made a protocol doc
This commit is contained in:
256
host.c
256
host.c
@@ -15,49 +15,116 @@
|
||||
#define BOARDER_THICKNESS 20
|
||||
|
||||
int over_object;
|
||||
|
||||
char player_names[MAX_PLAYERS][MAX_NAMESZ];
|
||||
char temp_name[MAX_NAMESZ];
|
||||
char lobby_name[MAX_NAMESZ];
|
||||
char lobby_name_perm[MAX_NAMESZ];
|
||||
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;
|
||||
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_Color white = {255, 255, 255, 0};
|
||||
SDL_Surface *set_name_surf;
|
||||
SDL_Surface *start_surf;
|
||||
SDL_Surface *lobby_name_surf;
|
||||
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_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;
|
||||
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 lobby_name; }
|
||||
if(i == 0) { return lobby_name_perm; }
|
||||
if(i == -1){return host.lobby_name; }
|
||||
if(i == 0) { return host.lobby_name_perm; }
|
||||
}
|
||||
else{
|
||||
if(i == -1) { return temp_name; }
|
||||
if(i == -1) { return host.temp_name; }
|
||||
if(i >= 0 && i < MAX_PLAYERS){
|
||||
return player_names[i];
|
||||
return host.player_names[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
@@ -67,72 +134,72 @@ void render_lobby()
|
||||
{
|
||||
int i;
|
||||
|
||||
player_tempname_surf= TTF_RenderText_Solid(font, temp_name, white);
|
||||
player_tempname_tex = SDL_CreateTextureFromSurface(renderer, player_tempname_surf);
|
||||
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, &set_name_rect);
|
||||
SDL_RenderCopy(renderer, set_name_tex, NULL, &(set_name_rect));
|
||||
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++)
|
||||
{
|
||||
player_name_rects[i].w = (player_rects[0].w / MAX_NAMESZ) * strlen(player_names[i]);
|
||||
player_name_surfs[i] = TTF_RenderText_Solid(font, player_names[i], white);
|
||||
player_name_texs[i] = SDL_CreateTextureFromSurface(renderer, player_name_surfs[i]);
|
||||
SDL_RenderFillRect(renderer, &(player_rects[i]));
|
||||
SDL_RenderCopy(renderer, player_name_texs[i], NULL, &(player_name_rects[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
|
||||
player_name_rect.w = (name_rect.w / MAX_NAMESZ) * strlen(temp_name);
|
||||
SDL_RenderFillRect(renderer, &name_rect);
|
||||
SDL_RenderCopy(renderer, player_tempname_tex, NULL, &player_name_rect);
|
||||
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, &start_rect);
|
||||
SDL_RenderCopy(renderer, start_tex, NULL, &(start_rect));
|
||||
SDL_RenderFillRect(renderer, &host.start_rect);
|
||||
SDL_RenderCopy(renderer, host.start_tex, NULL, &(host.start_rect));
|
||||
|
||||
|
||||
SDL_RenderPresent(renderer);
|
||||
|
||||
player_tempname_surf= TTF_RenderText_Solid(font, temp_name, white);
|
||||
player_tempname_tex = SDL_CreateTextureFromSurface(renderer, player_tempname_surf);
|
||||
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(player_tempname_surf);
|
||||
SDL_DestroyTexture(player_tempname_tex);
|
||||
SDL_FreeSurface(host.player_tempname_surf);
|
||||
SDL_DestroyTexture(host.player_tempname_tex);
|
||||
for(i = 0; i < MAX_PLAYERS; i++)
|
||||
{
|
||||
SDL_FreeSurface(player_name_surfs[i]);
|
||||
SDL_DestroyTexture(player_name_texs[i]);
|
||||
SDL_FreeSurface(host.player_name_surfs[i]);
|
||||
SDL_DestroyTexture(host.player_name_texs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void render_lobby_name()
|
||||
{
|
||||
|
||||
lobby_name_surf = TTF_RenderText_Solid(font, lobby_name, white);
|
||||
lobby_name_tex = SDL_CreateTextureFromSurface(renderer, lobby_name_surf);
|
||||
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, &set_name_rect);
|
||||
SDL_RenderCopy(renderer, set_name_tex, NULL, &(set_name_rect));
|
||||
SDL_RenderFillRect(renderer, &host.set_name_rect);
|
||||
SDL_RenderCopy(renderer, host.set_name_tex, NULL, &(host.set_name_rect));
|
||||
|
||||
//name field
|
||||
player_name_rect.w = (name_rect.w / MAX_NAMESZ) * strlen(lobby_name);
|
||||
SDL_RenderFillRect(renderer, &name_rect);
|
||||
SDL_RenderCopy(renderer, lobby_name_tex, NULL, &player_name_rect);
|
||||
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, &start_rect);
|
||||
SDL_RenderCopy(renderer, start_tex, NULL, &(start_rect));
|
||||
SDL_RenderFillRect(renderer, &host.start_rect);
|
||||
SDL_RenderCopy(renderer, host.start_tex, NULL, &(host.start_rect));
|
||||
|
||||
SDL_RenderPresent(renderer);
|
||||
|
||||
@@ -140,90 +207,25 @@ void render_lobby_name()
|
||||
|
||||
void render_main()
|
||||
{
|
||||
SDL_SetTextInputRect(&host.name_rect);
|
||||
|
||||
SDL_GetMouseState(&(mouse_pos.x), &(mouse_pos.y));
|
||||
|
||||
if(SDL_PointInRect(&mouse_pos, &start_rect)){
|
||||
|
||||
if(SDL_PointInRect(&mouse_pos, &host.start_rect)){
|
||||
over_object = START_GAME_BUTTON;
|
||||
}
|
||||
else if(SDL_PointInRect(&mouse_pos, &set_name_rect)){
|
||||
else if(SDL_PointInRect(&mouse_pos, &host.set_name_rect)){
|
||||
over_object = SET_NAME_BUTTON;
|
||||
}
|
||||
|
||||
handle_event(&event);
|
||||
|
||||
if(lobby_has_name){ render_lobby(); }
|
||||
else{ render_lobby_name(); }
|
||||
|
||||
}
|
||||
|
||||
void host_game(){
|
||||
int i;
|
||||
PRINT_M(HOST state)
|
||||
|
||||
over_object = NO_OBJECT;
|
||||
void render_host_game(){
|
||||
|
||||
strcpy(player_names[0], "player_1");
|
||||
strcpy(player_names[1], "no_player_2");
|
||||
strcpy(player_names[2], "no_player_3");
|
||||
strcpy(player_names[3], "no_player_4");
|
||||
|
||||
font = TTF_OpenFont("assets/font.ttf", 24);
|
||||
set_name_surf = TTF_RenderText_Solid(font, "set name", white);
|
||||
start_surf = TTF_RenderText_Solid(font, "start game", white);
|
||||
lobby_name_surf = TTF_RenderText_Solid(font, lobby_name, white);
|
||||
|
||||
set_name_tex = SDL_CreateTextureFromSurface(renderer, set_name_surf);
|
||||
start_tex = SDL_CreateTextureFromSurface(renderer, start_surf);
|
||||
|
||||
|
||||
set_name_rect.w = DEF_WINDOW_WIDTH >> 3;
|
||||
set_name_rect.h = DEF_WINDOW_HEIGHT >> 4;
|
||||
set_name_rect.x = DEF_WINDOW_WIDTH - (set_name_rect.w << 1);
|
||||
set_name_rect.y = DEF_WINDOW_HEIGHT - (set_name_rect.h << 2);
|
||||
|
||||
name_rect.w = DEF_WINDOW_WIDTH - (set_name_rect.w << 2) - (BOARDER_THICKNESS << 1);
|
||||
name_rect.h = set_name_rect.h;
|
||||
name_rect.x = (set_name_rect.w << 1) + BOARDER_THICKNESS;
|
||||
name_rect.y = set_name_rect.y;
|
||||
|
||||
start_rect.w = set_name_rect.w;
|
||||
start_rect.h = set_name_rect.h;
|
||||
start_rect.x = (DEF_WINDOW_WIDTH >> 1) - (start_rect.w >> 1);
|
||||
start_rect.y = set_name_rect.y + set_name_rect.h + BOARDER_THICKNESS;
|
||||
|
||||
player_name_rect.w = DEF_WINDOW_WIDTH - (set_name_rect.w << 2) - (BOARDER_THICKNESS << 1);
|
||||
player_name_rect.h = set_name_rect.h;
|
||||
player_name_rect.x = (set_name_rect.w << 1) + BOARDER_THICKNESS;
|
||||
player_name_rect.y = set_name_rect.y;
|
||||
|
||||
player_rects[0].w = player_rects[1].w = player_rects[2].w = player_rects[3].w
|
||||
= DEF_WINDOW_WIDTH - (set_name_rect.w << 1);
|
||||
player_rects[0].h = player_rects[1].h = player_rects[2].h = player_rects[3].h
|
||||
= ((DEF_WINDOW_HEIGHT - (DEF_WINDOW_HEIGHT - set_name_rect.y))
|
||||
- (BOARDER_THICKNESS << 2) - BOARDER_THICKNESS) >> 2;
|
||||
player_rects[0].x = player_rects[1].x = player_rects[2].x = player_rects[3].x
|
||||
= set_name_rect.w;
|
||||
|
||||
player_rects[0].y = BOARDER_THICKNESS;
|
||||
player_rects[1].y = player_rects[0].y + player_rects[0].h + BOARDER_THICKNESS;
|
||||
player_rects[2].y = player_rects[1].y + player_rects[1].h + BOARDER_THICKNESS;
|
||||
player_rects[3].y = player_rects[2].y + player_rects[2].h + BOARDER_THICKNESS;
|
||||
|
||||
for(i = 0; i < MAX_PLAYERS; i++){
|
||||
player_name_rects[i].w = player_rects[i].w;
|
||||
player_name_rects[i].h = player_rects[i].h - (BOARDER_THICKNESS << 1);
|
||||
player_name_rects[i].x = player_rects[i].x + BOARDER_THICKNESS;
|
||||
player_name_rects[i].y = player_rects[i].y + BOARDER_THICKNESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
SDL_StartTextInput();
|
||||
SDL_SetTextInputRect(&name_rect);
|
||||
|
||||
while(running)
|
||||
{
|
||||
render_main();
|
||||
}
|
||||
render_main();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user