public static bool checkIfShouldMoveIn(uint[] familyWithSeniors, ref Building buildingData, ref Randomizer randomizer, float operationRadius, int quality, ref NumWorkers numWorkers) { float chanceValue = BASE_CHANCE_VALUE; Logger.logInfo(LOG_CHANCES, "---------------------------------"); // Age chanceValue += getAgeChanceValue(familyWithSeniors); // Distance chanceValue += getDistanceChanceValue(familyWithSeniors, ref buildingData, operationRadius); // Family Status chanceValue += getFamilyStatusChanceValue(familyWithSeniors); // Wealth chanceValue += getWealthChanceValue(familyWithSeniors, quality); // Workers chanceValue += getWorkersChanceValue(ref numWorkers); // Check for no chance if (chanceValue <= 0) { Logger.logInfo(LOG_CHANCES, "MoveInProbabilityHelper.checkIfShouldMoveIn -- No Chance: {0}", chanceValue); return false; } // Check against random value uint maxChance = (uint) MAX_CHANCE_VALUE; int randomValue = randomizer.Int32(maxChance); Logger.logInfo(LOG_CHANCES, "MoveInProbabilityHelper.checkIfShouldMoveIn -- Total Chance Value: {0} -- Random Number: {1} -- result: {2}", chanceValue, randomValue, randomValue <= chanceValue); return randomValue <= chanceValue; }
private static float getWorkersChanceValue(ref NumWorkers numWorkers) { float chance = WORKER_MAX_CHANCE_VALUE; // Check for missing uneducated workers if (numWorkers.maxNumUneducatedWorkers > 0 && numWorkers.numUneducatedWorkers < numWorkers.maxNumUneducatedWorkers) { chance -= (((float) numWorkers.maxNumUneducatedWorkers - (float) numWorkers.numUneducatedWorkers) / (float) numWorkers.maxNumUneducatedWorkers) * 0.15f * WORKER_MAX_CHANCE_VALUE; } // Check for missing educated workers if (numWorkers.maxNumEducatedWorkers > 0 && numWorkers.numEducatedWorkers < numWorkers.maxNumEducatedWorkers) { chance -= (((float) numWorkers.maxNumEducatedWorkers - (float) numWorkers.numEducatedWorkers) / (float) numWorkers.maxNumEducatedWorkers) * 0.45f * WORKER_MAX_CHANCE_VALUE; } // Check for missing well educated workers if (numWorkers.maxNumWellEducatedWorkers > 0 && numWorkers.numWellEducatedWorkers < numWorkers.maxNumWellEducatedWorkers) { chance -= (((float) numWorkers.maxNumWellEducatedWorkers - (float) numWorkers.numWellEducatedWorkers) / (float) numWorkers.maxNumWellEducatedWorkers) * 0.25f * WORKER_MAX_CHANCE_VALUE; } // Check for missing highly educated workers if (numWorkers.maxNumHighlyEducatedWorkers > 0 && numWorkers.numHighlyEducatedWorkers < numWorkers.maxNumHighlyEducatedWorkers) { chance -= (((float) numWorkers.maxNumHighlyEducatedWorkers - (float) numWorkers.numHighlyEducatedWorkers) / (float) numWorkers.maxNumHighlyEducatedWorkers) * 0.15f * WORKER_MAX_CHANCE_VALUE; } if (LOG_CHANCES) { Logger.logInfo(LOG_CHANCES, "MoveInProbabilityHelper.getQualityLevelChanceValue -- Worker Chance Value: {0} -- Missing Uneducated: {1} -- Missing Educated: {2} -- Missing Well Educated: {3} -- Missing Highly Educated: {4}", chance, (numWorkers.maxNumUneducatedWorkers - numWorkers.numUneducatedWorkers), (numWorkers.maxNumEducatedWorkers - numWorkers.numEducatedWorkers), (numWorkers.maxNumWellEducatedWorkers - numWorkers.numWellEducatedWorkers), (numWorkers.maxNumHighlyEducatedWorkers - numWorkers.numHighlyEducatedWorkers)); } return chance; }