static void testEmployeeHandling (void) { employeeType_t type; ResetCampaignData(); for (type = 0; type < MAX_EMPL; type++) { if (type != EMPL_ROBOT) { int cnt; employee_t *e = E_CreateEmployee(type, NULL, NULL); CU_ASSERT_PTR_NOT_NULL(e); cnt = E_CountUnhired(type); CU_ASSERT_EQUAL(cnt, 1); E_DeleteEmployee(e); cnt = E_CountUnhired(type); CU_ASSERT_EQUAL(cnt, 0); } } { int i; const int amount = 3; for (i = 0; i < amount; i++) { employee_t *e = E_CreateEmployee(EMPL_SOLDIER, NULL, NULL); CU_ASSERT_PTR_NOT_NULL(e); } { employee_t *e; int cnt = 0; E_Foreach(EMPL_SOLDIER, e) { cnt++; } CU_ASSERT_EQUAL(cnt, amount); E_Foreach(EMPL_SOLDIER, e) { CU_ASSERT_TRUE(E_DeleteEmployee(e)); } cnt = E_CountUnhired(EMPL_SOLDIER); CU_ASSERT_EQUAL(cnt, 0) } }
TEST_F(CampaignTest, testEmployeeHandling) { int i; for (i = 0; i < MAX_EMPL; i++) { employeeType_t type = (employeeType_t)i; if (type != EMPL_ROBOT) { int cnt; Employee* e = E_CreateEmployee(type, nullptr, nullptr); ASSERT_TRUE(nullptr != e); cnt = E_CountUnhired(type); ASSERT_EQ(cnt, 1); E_DeleteEmployee(e); cnt = E_CountUnhired(type); ASSERT_EQ(cnt, 0); } } { const int amount = 3; for (i = 0; i < amount; i++) { Employee* e = E_CreateEmployee(EMPL_SOLDIER, nullptr, nullptr); ASSERT_TRUE(nullptr != e); } { int cnt = 0; E_Foreach(EMPL_SOLDIER, e) { (void)e; cnt++; } ASSERT_EQ(cnt, amount); E_Foreach(EMPL_SOLDIER, e) { ASSERT_TRUE(E_DeleteEmployee(e)); } cnt = E_CountUnhired(EMPL_SOLDIER); ASSERT_EQ(cnt, 0); }
/** * @brief Recreates all the employees for a particular employee type in the global list. * But it does not overwrite any employees already hired. * @param[in] type The type of the employee list to process. * @param[in] excludeUnhappyNations True if a nation is unhappy then they wont * send any pilots, false if happiness of nations in not considered. * @sa CP_NationHandleBudget */ int E_RefreshUnhiredEmployeeGlobalList (const employeeType_t type, const qboolean excludeUnhappyNations) { const nation_t *happyNations[MAX_NATIONS]; int numHappyNations = 0; int idx, nationIdx, cnt; employee_t *employee; happyNations[0] = NULL; /* get a list of nations, if excludeHappyNations is qtrue then also exclude * unhappy nations (unhappy nation: happiness <= 0) from the list */ for (idx = 0; idx < ccs.numNations; idx++) { const nation_t *nation = NAT_GetNationByIDX(idx); const nationInfo_t *stats = NAT_GetCurrentMonthInfo(nation); if (stats->happiness > 0 || !excludeUnhappyNations) { happyNations[numHappyNations] = nation; numHappyNations++; } } if (!numHappyNations) return 0; idx = 0; /* Fill the global data employee list with employees, evenly distributed * between nations in the happyNations list */ E_Foreach(type, employee) { /* we don't want to overwrite employees that have already been hired */ if (!E_IsHired(employee)) { E_DeleteEmployee(employee); idx++; } } nationIdx = 0; cnt = 0; while (idx-- > 0) { if (E_CreateEmployee(type, happyNations[nationIdx], NULL) != NULL) cnt++; nationIdx = (nationIdx + 1) % numHappyNations; } return cnt; }
void E_InitialEmployees (const campaign_t *campaign) { int i; /* setup initial employee count */ for (i = 0; i < campaign->soldiers; i++) E_CreateEmployee(EMPL_SOLDIER, E_RandomNation(), NULL); for (i = 0; i < campaign->scientists; i++) E_CreateEmployee(EMPL_SCIENTIST, E_RandomNation(), NULL); for (i = 0; i < campaign->ugvs; i++) { if (frand() > 0.5) E_CreateEmployee(EMPL_ROBOT, E_RandomNation(), Com_GetUGVByID("ugv_ares_w")); else E_CreateEmployee(EMPL_ROBOT, E_RandomNation(), Com_GetUGVByID("ugv_phoenix")); } for (i = 0; i < campaign->workers; i++) E_CreateEmployee(EMPL_WORKER, E_RandomNation(), NULL); for (i = 0; i < campaign->pilots; i++) E_CreateEmployee(EMPL_PILOT, E_RandomNation(), NULL); }