/** * @brief Generates error dialogues used by several landing tabs. * @param name Name of the ship, outfit or commodity being acted upon. * @param type Type of action. */ int land_errDialogue( char* name, char* type ) { errorlist_ptr = NULL; if (strcmp(type,"tradeShip")==0) shipyard_canTrade( name ); else if (strcmp(type,"buyShip")==0) shipyard_canBuy( name, land_planet ); else if (strcmp(type,"swapEquipment")==0) can_swapEquipment( name ); else if (strcmp(type,"swap")==0) can_swap( name ); else if (strcmp(type,"sellShip")==0) can_sell( name ); else if (strcmp(type,"buyOutfit")==0) outfit_canBuy( name, land_planet ); else if (strcmp(type,"sellOutfit")==0) outfit_canSell( name ); else if (strcmp(type,"buyCommodity")==0) commodity_canBuy( name ); else if (strcmp(type,"sellCommodity")==0) commodity_canSell( name ); if (errorlist_ptr != NULL) { dialogue_alert( "%s", errorlist ); return 1; } return 0; }
/** * @brief Adds the "Buy Local Map" button if needed. */ void land_checkAddMap (void) { char buf[ECON_CRED_STRLEN], cred[ECON_CRED_STRLEN]; Outfit *o; /* Maps are only offered if the planet provides fuel. */ if (!planet_hasService(land_planet, PLANET_SERVICE_REFUEL)) return; o = outfit_get( LOCAL_MAP_NAME ); if (o == NULL) { WARN("Outfit '%s' does not exist!", LOCAL_MAP_NAME); return; } /* Just enable button if it exists. */ if (widget_exists( land_windows[0], "btnMap" )) window_enableButton( land_windows[0], "btnMap"); /* Else create it. */ else { /* Refuel button. */ credits2str( cred, o->price, 2 ); nsnprintf( buf, sizeof(buf), "Buy Local Map (%s)", cred ); window_addButtonKey( land_windows[0], -20, 20 + (LAND_BUTTON_HEIGHT + 20), LAND_BUTTON_WIDTH,LAND_BUTTON_HEIGHT, "btnMap", buf, spaceport_buyMap, SDLK_b ); } /* Make sure player can click it. */ if (!outfit_canBuy(LOCAL_MAP_NAME, land_planet)) window_disableButtonSoft( land_windows[0], "btnMap" ); }
/** * @brief Updates the outfits in the outfit window. * @param wid Window to update the outfits in. * @param str Unused. */ void outfits_update( unsigned int wid, char* str ) { (void)str; char *outfitname; Outfit* outfit; char buf[PATH_MAX], buf2[ECON_CRED_STRLEN], buf3[ECON_CRED_STRLEN]; double th; int iw, ih; int w, h; /* Get dimensions. */ outfits_getSize( wid, &w, &h, &iw, &ih, NULL, NULL ); /* Get and set parameters. */ outfitname = toolkit_getImageArray( wid, "iarOutfits" ); if (strcmp(outfitname,"None")==0) { /* No outfits */ window_modifyImage( wid, "imgOutfit", NULL, 0, 0 ); window_disableButton( wid, "btnBuyOutfit" ); window_disableButton( wid, "btnSellOutfit" ); snprintf( buf, PATH_MAX, "NA\n" "\n" "NA\n" "NA\n" "NA\n" "\n" "NA\n" "NA\n" "NA\n" ); window_modifyText( wid, "txtDDesc", buf ); window_modifyText( wid, "txtOutfitName", "None" ); window_modifyText( wid, "txtDescShort", NULL ); /* Reposition. */ window_moveWidget( wid, "txtSDesc", 20+iw+20, -60 ); window_moveWidget( wid, "txtDDesc", 20+iw+20+60, -60 ); window_moveWidget( wid, "txtDescription", 20+iw+40, -240 ); return; } outfit = outfit_get( outfitname ); /* new image */ window_modifyImage( wid, "imgOutfit", outfit->gfx_store, 0, 0 ); if (outfit_canBuy(outfit,1,0) > 0) window_enableButton( wid, "btnBuyOutfit" ); else window_disableButton( wid, "btnBuyOutfit" ); /* gray out sell button */ if (outfit_canSell(outfit,1,0) > 0) window_enableButton( wid, "btnSellOutfit" ); else window_disableButton( wid, "btnSellOutfit" ); /* new text */ window_modifyText( wid, "txtDescription", outfit->description ); credits2str( buf2, outfit->price, 2 ); credits2str( buf3, player.p->credits, 2 ); snprintf( buf, PATH_MAX, "%d\n" "\n" "%s\n" "%s\n" "%.0f tons\n" "\n" "%s credits\n" "%s credits\n" "%s\n", player_outfitOwned(outfit), outfit_slotName(outfit), outfit_slotSize(outfit), outfit->mass, buf2, buf3, (outfit->license != NULL) ? outfit->license : "None" ); window_modifyText( wid, "txtDDesc", buf ); window_modifyText( wid, "txtOutfitName", outfit->name ); window_modifyText( wid, "txtDescShort", outfit->desc_short ); th = MAX( 128, gl_printHeightRaw( &gl_smallFont, 320, outfit->desc_short ) ); window_moveWidget( wid, "txtSDesc", 40+iw+20, -60-th-20 ); window_moveWidget( wid, "txtDDesc", 40+iw+20+60, -60-th-20 ); th += gl_printHeightRaw( &gl_smallFont, 250, buf ); window_moveWidget( wid, "txtDescription", 20+iw+40, -60-th-20 ); }