Пример #1
0
    void OnTriggerEnter2D(Collider2D collider)
    {
        if (collider.transform.tag == "unit")
        {
            if (
                _state == States.WAITING_ORIGIN ||
                _state == States.WAITING_TARGET ||
                _state == States.TRAVELING
                )
            {
                // Retrieve unit to integrate
                CharacterSystem unitToIntegrate = collider.gameObject.GetComponent <CharacterSystem>();

                if (
                    unitToIntegrate != null &&
                    (unitToIntegrate == _originUnit || unitToIntegrate == _targetUnit)
                    )
                {
                    return;
                }

                if (unitToIntegrate._frontUnits.Contains(_originUnit))
                {
                    return;
                }

                CharacterSystem.IntegratePathBehindUnit(
                    _originUnit,
                    unitToIntegrate
                    );

                // Remove this order from old target's waiting list
                if (_targetUnit != null)
                {
                    _targetUnit._pendingOrder.Remove(this);
                }

                // Set unit to integrate as new target
                _targetUnit = unitToIntegrate;

                _targetUnit.transform.position = transform.position;
                if (_targetUnit._currentOrder != null)
                {
                    _targetUnit._orderCompleated = true;
                }

                _integrateUnitFound = true;

                // _targetUnit._frontUnits.Add(_originUnit);

                // Add this order to the new target waiting list

                /*
                 * if (_targetUnit != null)
                 *  _targetUnit._pendingOrder.Add(this);
                 */

                if (_state == States.TRAVELING)
                {
                    // Desactivate de delay feedback
                    _durationTransform.gameObject.SetActive(false);

                    // Recalculate the particle feedback
                    _particle.SetNewTarget(_targetUnit);

                    return;
                }
            }
        }
    }