Пример #1
0
        private void FindSlave()
        {
            var slaves = Game.Instance.ReferenceStorage.GetSlavesOfBiome(_ownerBrain.EnemyBiome);

            if (slaves == null || slaves.Length < 1)
            {
                _currentCondition = AIStateCondition.Done;
                _pendingState     = EAIState.Wandering;
                return;
            }
            var distanceTonearestSlave = float.MaxValue;

            foreach (var slave in slaves)
            {
                if (!slave.gameObject.activeInHierarchy || slave == _targetSlave && slave.MovableObject.MyPosition.BiomOwner != Core.Bioms.EBiomType.None)
                {
                    continue;
                }
                var currentDistance = Vector3.Distance(_masterBrain.MovableObject.MyPosition.Position, slave.MovableObject.MyPosition.Position);

                var newTargetHasMoreHealth = _targetSlave != null && _targetSlave.isActiveAndEnabled && slave.Health.CurrentHealthAmount > _targetSlave.Health.CurrentHealthAmount;
                if (newTargetHasMoreHealth)
                {
                    continue;
                }

                if (currentDistance < distanceTonearestSlave)
                {
                    distanceTonearestSlave = currentDistance;
                    _ownerBrain.SetTarget(slave);
                    _targetSlave = slave;
                }
            }
        }
Пример #2
0
 public void UnregisterSlave(SlaveBrains slave, EBiomType owner)
 {
     _registeredSlaves[owner].Remove(slave);
 }
Пример #3
0
 public void RegisterSlave(SlaveBrains slave, EBiomType owner)
 {
     _registeredSlaves[owner].Add(slave);
 }
Пример #4
0
 public AIStateCratePicked(ArtificialIntelligence brains)
     : base(brains)
 {
     _ownerBrain = (SlaveBrains)brains;
 }