/** * @brief Gets the ships sold at a planet. * * @luatparam Planet p Planet to get ships sold at. * @luatreturn {Ship,...} An ordered table containing all the ships sold (empty if none sold). * @luafunc shipsSold( p ) */ static int planetL_shipsSold( lua_State *L ) { Planet *p; int i, n; Ship **s; /* Get result and tech. */ p = luaL_validplanet(L,1); s = tech_getShip( p->tech, &n ); /* Push results in a table. */ lua_newtable(L); for (i=0; i<n; i++) { lua_pushnumber(L,i+1); /* index, starts with 1 */ lua_pushship(L,s[i]); /* value = LuaShip */ lua_rawset(L,-3); /* store the value in the table */ } return 1; }
/** * @brief Opens the shipyard window. */ void shipyard_open( unsigned int wid ) { int i; Ship **ships; char **sships; glTexture **tships; int nships; int w, h; int iw, ih; int bw, bh, padding, off; int th; int y; const char *buf; /* Mark as generated. */ land_tabGenerate(LAND_WINDOW_SHIPYARD); /* Init vars. */ shipyard_selected = NULL; /* Get window dimensions. */ window_dimWindow( wid, &w, &h ); /* Calculate image array dimensions. */ iw = 310 + (w-800); ih = h - 60; /* Left padding + per-button padding * nbuttons */ padding = 40 + 20 * 4; /* Calculate button dimensions. */ bw = (w - iw - padding) / 4; bh = LAND_BUTTON_HEIGHT; /* buttons */ window_addButtonKey( wid, off = -20, 20, bw, bh, "btnCloseShipyard", "Take Off", land_buttonTakeoff, SDLK_t ); window_addButtonKey( wid, off -= 20+bw, 20, bw, bh, "btnTradeShip", "Trade-In", shipyard_trade, SDLK_r ); window_addButtonKey( wid, off -= 20+bw, 20, bw, bh, "btnBuyShip", "Buy", shipyard_buy, SDLK_b ); window_addButtonKey( wid, off -= 20+bw, 20, bw, bh, "btnFindShips", "Find Ships", shipyard_find, SDLK_f ); /* target gfx */ window_addRect( wid, -41, -50, SHIP_TARGET_W, SHIP_TARGET_H, "rctTarget", &cBlack, 0 ); window_addImage( wid, -40, -50, SHIP_TARGET_W, SHIP_TARGET_H, "imgTarget", NULL, 1 ); /* slot types */ window_addCust( wid, -20, -160, 148, 70, "cstSlots", 0., shipyard_renderSlots, NULL, NULL ); /* stat text */ window_addText( wid, -40, -240, 128, 200, 0, "txtStats", &gl_smallFont, &cBlack, NULL ); /* text */ buf = "Model:\n" "Class:\n" "Fabricator:\n" "Crew:\n" "\n" "CPU:\n" "Mass:\n" "Thrust:\n" "Speed:\n" "Turn:\n" "\n" "Absorption:\n" "Shield:\n" "Armour:\n" "Energy:\n" "Cargo Space:\n" "Fuel:\n" "Fuel Use:\n" "Price:\n" "Money:\n" "License:\n"; th = gl_printHeightRaw( &gl_smallFont, 100, buf ); y = -55; window_addText( wid, 40+iw+20, y, 100, th, 0, "txtSDesc", &gl_smallFont, &cDConsole, buf ); window_addText( wid, 40+iw+20+100, y, w-(40+iw+20+100)-20, th, 0, "txtDDesc", &gl_smallFont, &cBlack, NULL ); y -= th; window_addText( wid, 20+iw+40, y, w-(20+iw+40) - 180, 185, 0, "txtDescription", &gl_smallFont, NULL, NULL ); /* set up the ships to buy/sell */ ships = tech_getShip( land_planet->tech, &nships ); if (nships <= 0) { sships = malloc(sizeof(char*)); sships[0] = strdup("None"); tships = malloc(sizeof(glTexture*)); tships[0] = NULL; nships = 1; } else { sships = malloc(sizeof(char*)*nships); tships = malloc(sizeof(glTexture*)*nships); for (i=0; i<nships; i++) { sships[i] = strdup(ships[i]->name); tships[i] = ships[i]->gfx_store; } free(ships); } window_addImageArray( wid, 20, 20, iw, ih, "iarShipyard", 64./96.*128., 64., tships, sships, nships, shipyard_update, shipyard_rmouse ); /* write the shipyard stuff */ shipyard_update(wid, NULL); /* Set default keyboard focuse to the list */ window_setFocus( wid , "iarShipyard" ); }