void menu_connect_start(component *c, void *userdata) { scene *s = userdata; connect_menu_data *local = menu_get_userdata(c->parent); ENetAddress address; const char *addr = textinput_value(local->addr_input); s->gs->role = ROLE_CLIENT; // Free old saved address, and set new free(settings_get()->net.net_connect_ip); settings_get()->net.net_connect_ip = strdup(addr); // Set up enet host local->host = enet_host_create(NULL, 1, 2, 0, 0); if(local->host == NULL) { DEBUG("Failed to initialize ENet client"); return; } // Disable connect button and address input field component_disable(local->connect_button, 1); component_disable(local->addr_input, 1); menu_select(c->parent, local->cancel_button); // Set address enet_address_set_host(&address, addr); address.port = settings_get()->net.net_connect_port; ENetPeer *peer = enet_host_connect(local->host, &address, 2, 0); if(peer == NULL) { DEBUG("Unable to connect to %s", addr); enet_host_destroy(local->host); local->host = NULL; } time(&local->connect_start); }
component* textbutton_create(const text_settings *tconf, const char *text, int disabled, textbutton_click_cb cb, void *userdata) { component *c = widget_create(); component_disable(c, disabled); textbutton *tb = malloc(sizeof(textbutton)); memset(tb, 0, sizeof(textbutton)); tb->text = strdup(text); memcpy(&tb->tconf, tconf, sizeof(text_settings)); tb->click_cb = cb; tb->userdata = userdata; widget_set_obj(c, tb); widget_set_render_cb(c, textbutton_render); widget_set_action_cb(c, textbutton_action); widget_set_tick_cb(c, textbutton_tick); widget_set_free_cb(c, textbutton_free); return c; }
component* spritebutton_create(const text_settings *tconf, const char *text, surface *img, int disabled, spritebutton_click_cb cb, void *userdata) { component *c = widget_create(); component_disable(c, disabled); spritebutton *sb = malloc(sizeof(spritebutton)); memset(sb, 0, sizeof(spritebutton)); if(text != NULL) sb->text = strdup(text); memcpy(&sb->tconf, tconf, sizeof(text_settings)); sb->click_cb = cb; sb->img = img; sb->userdata = userdata; widget_set_obj(c, sb); widget_set_render_cb(c, spritebutton_render); widget_set_action_cb(c, spritebutton_action); widget_set_tick_cb(c, spritebutton_tick); widget_set_free_cb(c, spritebutton_free); return c; }