/** * @brief Determine what action should be performed when a Recon mission stage ends. * @param[in] mission Pointer to the mission which stage ended. */ void CP_ReconMissionNextStage (mission_t *mission) { switch (mission->stage) { case STAGE_NOT_ACTIVE: /* Create Recon mission */ CP_MissionBegin(mission); break; case STAGE_COME_FROM_ORBIT: case STAGE_RECON_GROUND: /* Choose if a new ground mission should be started */ CP_ReconMissionSelect(mission); break; case STAGE_MISSION_GOTO: /* just arrived on a new ground mission: start it */ CP_ReconMissionGround(mission); break; case STAGE_RECON_AIR: /* Leave earth */ CP_ReconMissionLeave(mission); break; case STAGE_RETURN_TO_ORBIT: /* mission is over, remove mission */ CP_ReconMissionIsSuccess(mission); break; default: Com_Printf("CP_ReconMissionNextStage: Unknown stage: %i, removing mission.\n", mission->stage); CP_MissionRemove(mission); break; } }
/** * @brief Determine what action should be performed when a Harvesting mission stage ends. * @param[in] mission Pointer to the mission which stage ended. */ void CP_HarvestMissionNextStage (mission_t* mission) { switch (mission->stage) { case STAGE_NOT_ACTIVE: /* Create Harvesting mission */ CP_MissionBegin(mission); break; case STAGE_COME_FROM_ORBIT: /* Go to mission */ CP_HarvestMissionGo(mission); break; case STAGE_MISSION_GOTO: /* just arrived on a new Harvesting mission: start it */ CP_HarvestMissionStart(mission); break; case STAGE_HARVEST: /* Leave earth */ CP_ReconMissionLeave(mission); break; case STAGE_RETURN_TO_ORBIT: /* mission is over, remove mission */ CP_HarvestMissionIsSuccess(mission); break; default: Com_Printf("CP_HarvestMissionNextStage: Unknown stage: %i, removing mission.\n", mission->stage); CP_MissionRemove(mission); break; } }
/** * @brief Set recon mission type (aerial or ground). * @note Recon mission -- Stage 1 */ static void CP_ReconMissionSelect (mission_t *mission) { if (mission->stage == STAGE_COME_FROM_ORBIT) { /* this is the begining of the mission: choose between aerial or ground mission */ if (CP_ReconMissionChoose(mission)) /* This is a aerial mission */ CP_ReconMissionAerial(mission); else /* This is a ground mission */ CP_ReconMissionGroundGo(mission); } else if (mission->stage == STAGE_RECON_GROUND) { /* Ground mission may occur several times */ if (CP_ReconMissionNewGroundMission(mission)) CP_ReconMissionGroundGo(mission); else CP_ReconMissionLeave(mission); } }