Ejemplo n.º 1
0
    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;
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
 public void Construct(int playerId, TargetSystem targetSystem, TargetSearchType searchType)
 {
     _playerId       = playerId;
     _targetSystem   = targetSystem;
     _shipSearchType = searchType;
 }