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; } } }
public void UnregisterSlave(SlaveBrains slave, EBiomType owner) { _registeredSlaves[owner].Remove(slave); }
public void RegisterSlave(SlaveBrains slave, EBiomType owner) { _registeredSlaves[owner].Add(slave); }
public AIStateCratePicked(ArtificialIntelligence brains) : base(brains) { _ownerBrain = (SlaveBrains)brains; }