Пример #1
0
        /// <summary>Accepts an event attendee with specified properties.</summary>
        /// <param name="age">The attendee age.</param>
        /// <param name="gender">The attendee gender.</param>
        /// <param name="education">The attendee education.</param>
        /// <param name="wealth">The attendee wealth.</param>
        /// <param name="wellbeing">The attendee wellbeing.</param>
        /// <param name="happiness">The attendee happiness.</param>
        /// <param name="randomizer">A reference to the game's randomizer.</param>
        /// <returns>
        /// <c>true</c> if the event attendee with specified properties is accepted and can attend this city event;
        /// otherwise, <c>false</c>.
        /// </returns>
        public override bool TryAcceptAttendee(
            Citizen.AgeGroup age,
            Citizen.Gender gender,
            Citizen.Education education,
            Citizen.Wealth wealth,
            Citizen.Wellbeing wellbeing,
            Citizen.Happiness happiness,
            IRandomizer randomizer)
        {
            if (attendeesCount > eventTemplate.Capacity)
            {
                return(false);
            }

            if (eventTemplate.Costs != null && eventTemplate.Costs.Entry > GetCitizenBudgetForEvent(wealth, randomizer))
            {
                return(false);
            }

            CityEventAttendees attendees = eventTemplate.Attendees;
            float randomPercentage       = randomizer.GetRandomValue(100u);

            if (!CheckAge(age, attendees, randomPercentage))
            {
                return(false);
            }

            randomPercentage = randomizer.GetRandomValue(100u);
            if (!CheckGender(gender, attendees, randomPercentage))
            {
                return(false);
            }

            randomPercentage = randomizer.GetRandomValue(100u);
            if (!CheckEducation(education, attendees, randomPercentage))
            {
                return(false);
            }

            randomPercentage = randomizer.GetRandomValue(100u);
            if (!CheckWealth(wealth, attendees, randomPercentage))
            {
                return(false);
            }

            randomPercentage = randomizer.GetRandomValue(100u);
            if (!CheckWellbeing(wellbeing, attendees, randomPercentage))
            {
                return(false);
            }

            randomPercentage = randomizer.GetRandomValue(100u);
            if (!CheckHappiness(happiness, attendees, randomPercentage))
            {
                return(false);
            }

            attendeesCount++;
            return(true);
        }
Пример #2
0
 /// <summary>Accepts an event attendee with specified properties.</summary>
 /// <param name="age">The attendee age.</param>
 /// <param name="gender">The attendee gender.</param>
 /// <param name="education">The attendee education.</param>
 /// <param name="wealth">The attendee wealth.</param>
 /// <param name="wellbeing">The attendee wellbeing.</param>
 /// <param name="happiness">The attendee happiness.</param>
 /// <param name="randomizer">A reference to the game's randomizer.</param>
 /// <returns>
 /// <c>true</c> if the event attendee with specified properties is accepted and can attend
 /// this city event; otherwise, <c>false</c>.
 /// </returns>
 public override bool TryAcceptAttendee(
     Citizen.AgeGroup age,
     Citizen.Gender gender,
     Citizen.Education education,
     Citizen.Wealth wealth,
     Citizen.Wellbeing wellbeing,
     Citizen.Happiness happiness,
     IRandomizer randomizer) => ticketPrice <= GetCitizenBudgetForEvent(wealth, randomizer);
Пример #3
0
 /// <summary>Accepts an event attendee with specified properties.</summary>
 /// <param name="age">The attendee age.</param>
 /// <param name="gender">The attendee gender.</param>
 /// <param name="education">The attendee education.</param>
 /// <param name="wealth">The attendee wealth.</param>
 /// <param name="wellbeing">The attendee wellbeing.</param>
 /// <param name="happiness">The attendee happiness.</param>
 /// <param name="randomizer">A reference to the game's randomizer.</param>
 /// <returns>
 /// <c>true</c> if the event attendee with specified properties is accepted and can attend
 /// this city event; otherwise, <c>false</c>.
 /// </returns>
 public virtual bool TryAcceptAttendee(
     Citizen.AgeGroup age,
     Citizen.Gender gender,
     Citizen.Education education,
     Citizen.Wealth wealth,
     Citizen.Wellbeing wellbeing,
     Citizen.Happiness happiness,
     IRandomizer randomizer) => true;
Пример #4
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Wealth    _citizenWealth    = person.WealthLevel;
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);

            return(_citizenWealth > Citizen.Wealth.Low &&
                   _citizenHappiness > Citizen.Happiness.Poor &&
                   _citizenWellbeing > Citizen.Wellbeing.VeryUnhappy);
        }
Пример #5
0
        private bool CanAttendEvent(uint citizenId, ref TCitizen citizen, ICityEvent cityEvent)
        {
            Citizen.AgeGroup  age       = CitizenProxy.GetAge(ref citizen);
            Citizen.Gender    gender    = CitizenProxy.GetGender(citizenId);
            Citizen.Education education = CitizenProxy.GetEducationLevel(ref citizen);
            Citizen.Wealth    wealth    = CitizenProxy.GetWealthLevel(ref citizen);
            Citizen.Wellbeing wellbeing = CitizenProxy.GetWellbeingLevel(ref citizen);
            Citizen.Happiness happiness = CitizenProxy.GetHappinessLevel(ref citizen);

            return(cityEvent.TryAcceptAttendee(age, gender, education, wealth, wellbeing, happiness, Random));
        }
Пример #6
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.AgeGroup  _citizenAge       = Citizen.GetAgeGroup(person.Age);
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);

            return(_citizenAge >= Citizen.AgeGroup.Teen &&
                   _citizenHappiness >= Citizen.Happiness.Good &&
                   _citizenWellbeing >= Citizen.Wellbeing.Unhappy);
        }
Пример #7
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Wealth    _citizenWealth    = person.WealthLevel;
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);

            return(_citizenWealth > Citizen.Wealth.Low &&
                   _citizenEducation > Citizen.Education.TwoSchools &&
                   _citizenHappiness >= Citizen.Happiness.Good &&
                   _citizenWellbeing >= Citizen.Wellbeing.Satisfied);
        }
Пример #8
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Wealth    _citizenWealth    = person.WealthLevel;
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.AgeGroup  _citizenAge       = Citizen.GetAgeGroup(person.Age);
            Citizen.Gender    _citizenGender    = Citizen.GetGender(citizenID);
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);

            return(_citizenWealth >= Citizen.Wealth.Medium &&
                   _citizenAge == Citizen.AgeGroup.Senior &&
                   _citizenHappiness >= Citizen.Happiness.Good &&
                   _citizenWellbeing > Citizen.Wellbeing.Unhappy);
        }
Пример #9
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Wealth    _citizenWealth    = person.WealthLevel;
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.Gender    _citizenGender    = Citizen.GetGender(citizenID);
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);
            Citizen.AgeGroup  _citizenAgeGroup  = Citizen.GetAgeGroup(person.Age);

            int percentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100);

            return(_citizenWealth < Citizen.Wealth.High &&
                   (_citizenEducation < Citizen.Education.ThreeSchools || _citizenEducation == Citizen.Education.ThreeSchools && percentage < 5) &&
                   (_citizenGender == Citizen.Gender.Male || (_citizenGender == Citizen.Gender.Female && percentage < 20)) &&
                   _citizenHappiness > Citizen.Happiness.Bad &&
                   _citizenWellbeing > Citizen.Wellbeing.Unhappy);
        }
Пример #10
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            Citizen.Wealth    _citizenWealth    = person.WealthLevel;
            Citizen.Education _citizenEducation = person.EducationLevel;
            Citizen.AgeGroup  _citizenAge       = Citizen.GetAgeGroup(person.Age);
            Citizen.Gender    _citizenGender    = Citizen.GetGender(citizenID);
            Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
            Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);

            int percentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100);

            return(_citizenWealth >= Citizen.Wealth.Medium &&
                   (_citizenGender == Citizen.Gender.Male || (_citizenGender == Citizen.Gender.Female && percentage < 40)) &&
                   _citizenAge >= Citizen.AgeGroup.Young && _citizenAge < Citizen.AgeGroup.Senior &&
                   _citizenHappiness >= Citizen.Happiness.Good &&
                   _citizenWellbeing > Citizen.Wellbeing.Unhappy);
        }
Пример #11
0
        private static bool CheckHappiness(Citizen.Happiness happiness, CityEventAttendees attendees, float randomPercentage)
        {
            switch (happiness)
            {
            case Citizen.Happiness.Bad:
                return(randomPercentage < attendees.BadHappiness);

            case Citizen.Happiness.Poor:
                return(randomPercentage < attendees.PoorHappiness);

            case Citizen.Happiness.Good:
                return(randomPercentage < attendees.GoodHappiness);

            case Citizen.Happiness.Excellent:
                return(randomPercentage < attendees.ExcellentHappiness);

            case Citizen.Happiness.Suberb:
                return(randomPercentage < attendees.SuperbHappiness);
            }

            return(false);
        }
Пример #12
0
        public override bool CitizenCanGo(uint citizenID, ref Citizen person)
        {
            bool canGo = false;

            if (m_eventChances != null && m_eventData.m_registeredCitizens < GetCapacity())
            {
                canGo = true;

                Citizen.Wealth    _citizenWealth    = person.WealthLevel;
                Citizen.Education _citizenEducation = person.EducationLevel;
                Citizen.Gender    _citizenGender    = Citizen.GetGender(citizenID);
                Citizen.Happiness _citizenHappiness = Citizen.GetHappinessLevel(Citizen.GetHappiness(person.m_health, person.m_wellbeing));
                Citizen.Wellbeing _citizenWellbeing = Citizen.GetWellbeingLevel(_citizenEducation, person.m_wellbeing);
                Citizen.AgeGroup  _citizenAgeGroup  = Citizen.GetAgeGroup(person.Age);

                float percentageChange = GetAdjustedChancePercentage();
                int   randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenWealth)
                {
                case Citizen.Wealth.Low:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._lowWealth, percentageChange);
                    break;

                case Citizen.Wealth.Medium:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._mediumWealth, percentageChange);
                    break;

                case Citizen.Wealth.High:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._highWealth, percentageChange);
                    break;
                }

                randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenEducation)
                {
                case Citizen.Education.Uneducated:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._uneducated, percentageChange);
                    break;

                case Citizen.Education.OneSchool:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._oneSchool, percentageChange);
                    break;

                case Citizen.Education.TwoSchools:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._twoSchools, percentageChange);
                    break;

                case Citizen.Education.ThreeSchools:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._threeSchools, percentageChange);
                    break;
                }

                randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenGender)
                {
                case Citizen.Gender.Female:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._females, percentageChange);
                    break;

                case Citizen.Gender.Male:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._males, percentageChange);
                    break;
                }

                randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenHappiness)
                {
                case Citizen.Happiness.Bad:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._badHappiness, percentageChange);
                    break;

                case Citizen.Happiness.Poor:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._poorHappiness, percentageChange);
                    break;

                case Citizen.Happiness.Good:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._goodHappiness, percentageChange);
                    break;

                case Citizen.Happiness.Excellent:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._excellentHappiness, percentageChange);
                    break;

                case Citizen.Happiness.Suberb:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._superbHappiness, percentageChange);
                    break;
                }

                randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenWellbeing)
                {
                case Citizen.Wellbeing.VeryUnhappy:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._veryUnhappyWellbeing, percentageChange);
                    break;

                case Citizen.Wellbeing.Unhappy:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._unhappyWellbeing, percentageChange);
                    break;

                case Citizen.Wellbeing.Satisfied:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._satisfiedWellbeing, percentageChange);
                    break;

                case Citizen.Wellbeing.Happy:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._happyWellbeing, percentageChange);
                    break;

                case Citizen.Wellbeing.VeryHappy:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._veryHappyWellbeing, percentageChange);
                    break;
                }

                randomPercentage = Singleton <SimulationManager> .instance.m_randomizer.Int32(100U);

                switch (_citizenAgeGroup)
                {
                case Citizen.AgeGroup.Child:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._children, percentageChange);
                    break;

                case Citizen.AgeGroup.Teen:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._teens, percentageChange);
                    break;

                case Citizen.AgeGroup.Young:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._youngAdults, percentageChange);
                    break;

                case Citizen.AgeGroup.Adult:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._adults, percentageChange);
                    break;

                case Citizen.AgeGroup.Senior:
                    canGo = canGo && randomPercentage < Adjust(m_eventChances._seniors, percentageChange);
                    break;
                }

                CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log(
                    (canGo ? "[Can Go]" : "[Ignoring]") +
                    " Citizen " + citizenID + " for " + m_eventData.m_eventName + "\n\t" +
                    _citizenWealth.ToString() + ", " + _citizenEducation.ToString() + ", " + _citizenGender.ToString() + ", " +
                    _citizenHappiness.ToString() + ", " + _citizenWellbeing.ToString() + ", " + _citizenAgeGroup.ToString());
            }

            return(canGo);
        }
Пример #13
0
 internal static string GetHappinessString(Citizen.Happiness happinessLevel)
 {
     return("NotificationIcon" + sHappinessLevels[(int)happinessLevel]);
 }