/** * @brief Shows the player's active missions. * * @param parent Unused. * @param str Unused. */ static void info_openMissions( unsigned int wid ) { int w, h; /* Get the dimensions. */ window_dimWindow( wid, &w, &h ); /* buttons */ window_addButton( wid, -20, 20, BUTTON_WIDTH, BUTTON_HEIGHT, "closeMissions", "Close", info_close ); window_addButton( wid, -20, 40 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT, "btnAbortMission", "Abort", mission_menu_abort ); /* text */ window_addText( wid, 300+40, -60, 200, 40, 0, "txtSReward", &gl_smallFont, &cDConsole, "Reward:" ); window_addText( wid, 300+100, -60, 140, 40, 0, "txtReward", &gl_smallFont, &cBlack, NULL ); window_addText( wid, 300+40, -100, w - (300+40+40), h - BUTTON_HEIGHT - 120, 0, "txtDesc", &gl_smallFont, &cBlack, NULL ); /* Put a map. */ map_show( wid, 20, 20, 300, 260, 0.75 ); /* list */ mission_menu_genList(wid ,1); }
/** * @brief Aborts a mission in the mission menu. * @param str Unused. */ static void mission_menu_abort( unsigned int wid, char* str ) { (void)str; int pos; Mission* misn; int ret; if (dialogue_YesNo( "Abort Mission", "Are you sure you want to abort this mission?" )) { /* Get the mission. */ pos = toolkit_getListPos(wid, "lstMission" ); misn = &player_missions[pos]; /* We run the "abort" function if it's found. */ ret = misn_tryRun( misn, "abort" ); /* Now clean up mission. */ if (ret != 2) { mission_cleanup( misn ); memmove( misn, &player_missions[pos+1], sizeof(Mission) * (MISSION_MAX-pos-1) ); memset( &player_missions[MISSION_MAX-1], 0, sizeof(Mission) ); } /* Reset markers. */ mission_sysMark(); /* Reset claims. */ claim_activateAll(); /* Regenerate list. */ mission_menu_genList(wid ,0); } }
/** * @brief Shows the player's active missions. * * @param parent Unused. * @param str Unused. */ static void info_missions_menu( unsigned int parent, char* str ) { (void) str; unsigned int wid; /* create the window */ wid = window_create( "Missions", -1, -1, MISSIONS_WIDTH, MISSIONS_HEIGHT ); window_setParent( wid, parent ); /* buttons */ window_addButton( wid, -20, 20, BUTTON_WIDTH, BUTTON_HEIGHT, "closeMissions", "Back", window_close ); window_addButton( wid, -20, 40 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT, "btnAbortMission", "Abort", mission_menu_abort ); /* text */ window_addText( wid, 300+40, -60, 200, 40, 0, "txtSReward", &gl_smallFont, &cDConsole, "Reward:" ); window_addText( wid, 300+100, -60, 140, 40, 0, "txtReward", &gl_smallFont, &cBlack, NULL ); window_addText( wid, 300+40, -100, 200, MISSIONS_HEIGHT - BUTTON_WIDTH - 120, 0, "txtDesc", &gl_smallFont, &cBlack, NULL ); /* Put a map. */ map_show( wid, 20, 20, 300, 260, 0.75 ); /* list */ mission_menu_genList(wid ,1); }
/** * @brief Makes the player jettison the currently selected cargo. * @param str Unused. */ static void cargo_jettison( unsigned int wid, char* str ) { (void)str; int i, j, f, pos, ret; Mission *misn; if (player.p->ncommodities==0) return; /* No cargo, redundant check */ pos = toolkit_getListPos( wid, "lstCargo" ); /* Special case mission cargo. */ if (player.p->commodities[pos].id != 0) { if (!dialogue_YesNo( "Abort Mission", "Are you sure you want to abort this mission?" )) return; /* Get the mission. */ f = 0; for (i=0; i<MISSION_MAX; i++) { for (j=0; j<player_missions[i].ncargo; j++) { if (player_missions[i].cargo[j] == player.p->commodities[pos].id) { f = 1; break; } } if (f==1) break; } if (!f) { WARN("Cargo '%d' does not belong to any active mission.", player.p->commodities[pos].id); return; } misn = &player_missions[i]; /* We run the "abort" function if it's found. */ ret = misn_tryRun( misn, "abort" ); /* Now clean up mission. */ if (ret != 2) { mission_cleanup( misn ); memmove( misn, &player_missions[i+1], sizeof(Mission) * (MISSION_MAX-i-1) ); memset( &player_missions[MISSION_MAX-1], 0, sizeof(Mission) ); } /* Reset markers. */ mission_sysMark(); /* Reset claims. */ claim_activateAll(); /* Regenerate list. */ mission_menu_genList( info_windows[ INFO_WIN_MISN ] ,0); } else { /* Remove the cargo */ commodity_Jettison( player.p->id, player.p->commodities[pos].commodity, player.p->commodities[pos].quantity ); pilot_cargoRm( player.p, player.p->commodities[pos].commodity, player.p->commodities[pos].quantity ); } /* We reopen the menu to recreate the list now. */ ship_update( info_windows[ INFO_WIN_SHIP ] ); cargo_genList( wid ); }