// Alot of the time it will be sensible to have the same object/component implementing both the characters perception management (awareness state)
    // and the perception event invoker, because the thing managing what the character is aware of is the best position to know when to invoke certain
    // events relating to those very perceptions. However, those things are still logically distinct in regard to the USERS of those operations, namely,
    // some clients will care about controlling the parameters of the awareness logic, while others will only care about recieving updates on what the
    // character is currently awareof/percieving. Consequently, these are two distinct interfaces!

    // Use unity engine to aquire all the dependencies needed for a character to operate. They are mandated by this script to be attached to the gameobject.
    void Awake()
    {
        object[] temp = GetComponents <ICombatAi>();
        if (temp.Length > 1)
        {
            throw new System.Exception("Character gameobject had more than one ICombatAi component attached! This is not allowed");
        }
        combatAi = (ICombatAi)temp[0];

        temp = GetComponents <IHealthSystem>();
        if (temp.Length > 1)
        {
            throw new System.Exception("Character gameobject had more than one IHealthSystem component attached! This is not allowed");
        }
        healthSystem = (IHealthSystem)temp[0];

        temp = GetComponents <IPerceptionEventInvoker>();
        if (temp.Length > 1)
        {
            throw new System.Exception("Character gameobject had more than one IPerceptionEventInvoker component attached! This is not allowed");
        }
        perceptionEventInvoker = (IPerceptionEventInvoker)temp[0];

        temp = GetComponents <ICharacterAwarenessState>();
        if (temp.Length > 1)
        {
            throw new System.Exception("Character gameobject had more than one ICharacterAwarenessState component attached! This is not allowed");
        }
        characterAwarenessState = (ICharacterAwarenessState)temp[0];
    }
 public BattleManagerFactory(IAbilityManager abilityManager,
                             IEquipmentManager equipmentManager,
                             IStatusEffectManager statusEffectManager,
                             IRepository <StatusEffect> statusEffectRepo,
                             ICombatAi combatAi)
 {
     _abilityManager      = abilityManager;
     _equipmentManager    = equipmentManager;
     _statusEffectManager = statusEffectManager;
     _statusEffectRepo    = statusEffectRepo;
     _combatAi            = combatAi;
 }
Beispiel #3
0
        public BattleManager(IAbilityManager abilityManager,
                             IEquipmentManager equipmentManager,
                             IStatusEffectManager statusEffectManager,
                             IRepository <StatusEffect> statusEffectRepo,
                             ICombatAi combatAi)
        {
            _abilityManager      = abilityManager;
            _equipmentManager    = equipmentManager;
            _statusEffectManager = statusEffectManager;
            _statusEffectRepo    = statusEffectRepo;
            _combatAi            = combatAi;
            _seed = new Random();

            _timer           = new Timer();
            _timer.AutoReset = false;
            _timer.Interval  = GameplayConstants.EndOfTurnDelayInSeconds;
            _timer.Elapsed  += (sender, args) => StartTurn();
        }