Example #1
0
        protected override void Start()
        {
            base.Start();
            Debug.Assert(_config is AgentConfig);

            _agentConfig = _config as AgentConfig;

            gameObject.name = _agentConfig.name;

            for (int traitType = 0; traitType < (int)DesireType.COUNT; traitType++)
            {
                _desires[traitType] = new Desire((DesireType)traitType);
            }

            foreach (Trait trait in _agentConfig.Traits)
            {
                foreach (Desire.Modifier modifier in trait.DesireModifiers)
                {
                    _desires[(int)modifier.ToModify].ApplyModifier(modifier);
                }

                AvailableBehaviours |= trait.SpecialBehaviours;
            }

            PushState(StateFactory.GetDefaultState(_agentConfig.DefaultState, this));

            _debugUI = HUD.Instance.CreateMenu <AgentDebugUI>();
            _debugUI.Setup(this);

            _conversation = GetComponent <Conversation>();

            Health.OnDamaged         += OnTakeDamage;
            Inventory.OnGetCurrency  += OnAcquireCurrency;
            Inventory.OnLoseCurrency += OnLoseCurrency;
        }
Example #2
0
        private static SpecialistState GetReferenceState(SpecialistStates state)
        {
            switch (state)
            {
            case SpecialistStates.Steal:
                return(new StealState());

            case SpecialistStates.Justice:
                return(new ServeJusticeState());

            case SpecialistStates.Flee:
                return(new FleeState());

            case SpecialistStates.Defend:
                return(new DefendState());

            case SpecialistStates.Mine:
                return(new MineCurrencyState());

            case SpecialistStates.INVALID:
            default:
                Debug.Assert(false, "Can't get reference state for " + state);
                return(null);
            }
        }
Example #3
0
        public static bool ShouldEnterState(AgentController owner, SpecialistStates state, out StateConfig config)
        {
            Debug.Assert(state != SpecialistStates.INVALID);
            int idx = Array.FindIndex((SpecialistStates[])Enum.GetValues(typeof(SpecialistStates)), x => x == state) - 1;             //-1 to account for SpecialistStates.INVALID

            return(_referenceSpecialistStates[idx].ShouldRunState(owner, out config));
        }
Example #4
0
 static StateFactory()
 {
     for (int idx = 0; idx < NumSpecialistStates - 1; idx++)
     {
         SpecialistStates state = (SpecialistStates)(1 << idx);
         if (state != SpecialistStates.INVALID)
         {
             _referenceSpecialistStates[idx] = GetReferenceState(state);
         }
     }
 }
Example #5
0
        private void CheckSpecialistStates()
        {
            for (int state = 0; state < StateFactory.NumSpecialistStates - 1; state++)
            {
                SpecialistStates specialistState = (SpecialistStates)(1 << state);

                if (specialistState != SpecialistStates.INVALID && AvailableBehaviours.HasFlag(specialistState) &&
                    StateFactory.ShouldEnterState(this, specialistState, out StateConfig config))
                {
                    PushState(config);
                }
            }
        }