public CombatActionEffect(CombatActionEffectSettings settings, IOffensiveStats stats, Transform ownerTr, int teamId, AuraFactory auraFactory, [Inject(Id = 0)] GameplayEventGameObject targetAddedEvent, [Inject(Id = 1)] GameplayEventGameObject targetRemovedEvent) { /** * Settings : */ _isHealing = settings.IsHealing; _powerRatio = settings.PowerRatio; _maximumTargets = settings.MaximumTargets; _targetSystem = settings.TargetSystemToUse; _searchType = settings.ValidTargets; _vfx = settings.VFX; _auraType = settings.AuraToApply; /** * Client : */ _stats = stats; _ownerTr = ownerTr; _teamId = teamId; /** * Other: */ _targetRemovedEvent = targetRemovedEvent; _targetAddedEvent = targetAddedEvent; _auraFactory = auraFactory; }
private GameObject FindTarget(TargetSearchType searchType) { List <Collider> colliders = new List <Collider>(Physics.OverlapSphere(transform.position, SearchRadius, CombatStats.ATTACKABLE_LAYER)) .FindAll((Collider col) => col.gameObject.GetComponent <MovementController>().Faction != Faction); foreach (Collider col in colliders) { Debug.Log(this.gameObject.name + ": " + col.gameObject.name); } if (colliders.Count < 1) { return(null); } switch (searchType) { case TargetSearchType.First: return(colliders[0].gameObject); case TargetSearchType.Random: return(colliders[Random.Range(0, colliders.Count - 1)].gameObject); case TargetSearchType.Closest: GameObject closestTarget = null; float closestDistance = Mathf.Infinity; foreach (Collider hit in colliders) { float distance = Vector3.Distance(transform.position, hit.transform.position); if (distance < closestDistance) { closestDistance = distance; closestTarget = hit.gameObject; } } return(closestTarget); case TargetSearchType.FocusPlayer: foreach (Collider hit in colliders) { if (hit.gameObject.GetComponent <PlayerController>() != null) { return(hit.gameObject); } } // Return first if player not found. return(colliders[0].gameObject); } return(null); }
public void Construct(int playerId, TargetSystem targetSystem, TargetSearchType searchType) { _playerId = playerId; _targetSystem = targetSystem; _shipSearchType = searchType; }