/*calculates how much space is remaining on the transporter - allows droids to take up different amount depending on their body size - currently all are set to one!*/ UDWORD calcRemainingCapacity(DROID *psTransporter) { SDWORD capacity = TRANSPORTER_CAPACITY; DROID *psDroid, *psNext; // If it's dead then just return 0. if (isDead((BASE_OBJECT *)psTransporter)) { return 0; } for (psDroid = psTransporter->psGroup->psList; psDroid != NULL && psDroid != psTransporter; psDroid = psNext) { psNext = psDroid->psGrpNext; capacity -= transporterSpaceRequired(psDroid); } if (capacity < 0) { capacity = 0; } return (UDWORD)capacity; }
/*calculates how much space is remaining on the transporter - allows droids to take up different amount depending on their body size - currently all are set to one!*/ int calcRemainingCapacity(const DROID *psTransporter) { int capacity = TRANSPORTER_CAPACITY; DROID *psDroid, *psNext; // If it's dead then just return 0. if (isDead((BASE_OBJECT *)psTransporter)) { return 0; } for (psDroid = psTransporter->psGroup->psList; psDroid != nullptr && psDroid != psTransporter; psDroid = psNext) { psNext = psDroid->psGrpNext; const int space = transporterSpaceRequired(psDroid); ASSERT(space > 0, "Invalid space required for %s", objInfo(psDroid)); capacity -= space; } if (capacity < 0) { capacity = 0; } return capacity; }
/*This is used to display the transporter button and capacity when at the home base ONLY*/ bool intAddTransporterLaunch(DROID *psDroid) { UDWORD capacity; DROID *psCurr, *psNext; if (bMultiPlayer) { return true; } //do this first so that if the interface is already up it syncs with this transporter //set up the static transporter psCurrTransporter = psDroid; //check the button is not already up if (widgGetFromID(psWScreen, IDTRANS_LAUNCH) != NULL) { return true; } W_FORMINIT sButInit; //needs to be a clickable form now sButInit.formID = 0; sButInit.id = IDTRANS_LAUNCH; sButInit.style = WFORM_CLICKABLE | WFORM_NOCLICKMOVE; sButInit.x = RET_X; sButInit.y = (SWORD)TIMER_Y; sButInit.width = (UWORD)(10 + iV_GetImageWidth(IntImages, IMAGE_LAUNCHUP)); sButInit.height = iV_GetImageHeight(IntImages, IMAGE_LAUNCHUP); sButInit.pTip = _("Launch Transport"); sButInit.pDisplay = intDisplayImageHilight; sButInit.UserData = PACKDWORD_TRI(0, IMAGE_LAUNCHDOWN, IMAGE_LAUNCHUP); if (!widgAddForm(psWScreen, &sButInit)) { return false; } //add the capacity label W_LABINIT sLabInit; sLabInit.formID = IDTRANS_LAUNCH; sLabInit.id = IDTRANS_CAPACITY; sLabInit.x = (SWORD)(sButInit.x + 20); sLabInit.y = 0; sLabInit.width = 16; sLabInit.height = 16; sLabInit.pText = "00/10"; sLabInit.pCallback = intUpdateTransCapacity; if (!widgAddLabel(psWScreen, &sLabInit)) { return false; } //when full flash the transporter button if (psCurrTransporter && psCurrTransporter->psGroup) { capacity = TRANSPORTER_CAPACITY; for (psCurr = psCurrTransporter->psGroup->psList; psCurr != NULL; psCurr = psNext) { psNext = psCurr->psGrpNext; if (psCurr != psCurrTransporter) { capacity -= transporterSpaceRequired(psCurr); } } if (capacity <= 0) { flashMissionButton(IDTRANS_LAUNCH); } } return true; }