示例#1
0
    public void FindTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget, ArrayRO <BaseUnitBehaviour> possibleUnits,
                           Action <BaseUnitBehaviour> onTargetFound, Action onTargetAttacked)
    {
        Reset(false);
        //UnitSet.Instance.SetUnitPositions();

        _onTargetFound    = onTargetFound;
        _onTargetAttacked = onTargetAttacked;
        _target           = UnitSet.Instance.GetTarget(unit, currentTarget, possibleUnits);
        if (_target != null)
        {
            _targetTransform = _target.transform;
        }
        if (_targetTransform == null)
        {
            Reset(false);
            State = EUnitAttackState.NoTarget;
            return;
        }
        onTargetFound(_targetTransform.gameObject.GetComponent <BaseUnitBehaviour>());
        if (State == EUnitAttackState.None || State == EUnitAttackState.NoAttack || State == EUnitAttackState.WatchTarget)
        {
            StartTargetAttack(_target);
        }
    }
示例#2
0
    void StartTargetAttack(BaseUnitBehaviour target)
    {
        _model.StopCurrentAnimation();
        Action <BaseUnitBehaviour> onTargetFound = _onTargetFound;

        _onTargetFound = null;
        StopAllCoroutines();

        State = EUnitAttackState.WatchTarget;
        onTargetFound(target);
    }
示例#3
0
    public void MoveToPosition()
    {
        float minDistance = 0.1f;

        _transform.position = Vector3.MoveTowards(_modelTransform.position, _destinationPosition, Time.deltaTime * _speed * 3);
        if (Vector3.Distance(_transform.position, _destinationPosition) < minDistance)
        {
            //_model.StopCurrentAnimation();
            _destinationPosition = _transform.position;
            State = EUnitAttackState.None;
        }
    }
示例#4
0
    public void Reset(bool full)
    {
        _target          = null;
        _targetTransform = null;

        _onTargetFound    = null;
        _onTargetAttacked = null;
        StopAllCoroutines();
        if (full)
        {
            State = EUnitAttackState.None;
            //Debug.Log("None " + gameObject.GetComponent<BaseUnitBehaviour>().name);
        }
    }
示例#5
0
    private void WatchTarget()
    {
        _modelTransform.localRotation = Quaternion.Lerp(_modelTransform.localRotation,
                                                        Quaternion.LookRotation(_targetTransform.position - _transform.position), _rotationSpeed * Time.deltaTime);

        BaseUnitBehaviour unit       = gameObject.GetComponent <BaseUnitBehaviour>();
        BaseUnitBehaviour attackUnit = UnitSet.Instance.GetNextAttackUnit(_lastAttackUnit);

        if (attackUnit != null && attackUnit.Equals(unit))
        {
            if (_lastAttackUnit == null || _lastAttackUnit != null &&
                _lastAttackUnit.UnitAttack.State != EUnitAttackState.AttackTarget)
            {
                State = EUnitAttackState.AttackTarget;
            }
        }
    }
示例#6
0
 public void SetPosition(BaseUnitBehaviour unit, Vector3 position)
 {
     if (_destinationPosition == Vector3.zero)
     {
         _destinationPosition = unit.transform.position = position;
     }
     else
     {
         _destinationPosition = position;
         if (_destinationPosition != _modelTransform.position)
         {
             if (State != EUnitAttackState.AttackTarget)
             {
                 State = EUnitAttackState.NoAttack;
             }
             //_model.PlayRunAnimation();
         }
     }
 }
示例#7
0
    public void FindTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget, ArrayRO<BaseUnitBehaviour> possibleUnits,
        Action<BaseUnitBehaviour> onTargetFound, Action onTargetAttacked)
    {
        Reset(false);
        //UnitSet.Instance.SetUnitPositions();

        _onTargetFound = onTargetFound;
        _onTargetAttacked = onTargetAttacked;
        _target = UnitSet.Instance.GetTarget(unit, currentTarget, possibleUnits);
        if (_target != null)
        {
            _targetTransform = _target.transform;
        }
        if (_targetTransform == null)
        {
            Reset(false);
            State = EUnitAttackState.NoTarget;
            return;
        }
        onTargetFound(_targetTransform.gameObject.GetComponent<BaseUnitBehaviour>());
        if (State == EUnitAttackState.None || State == EUnitAttackState.NoAttack || State == EUnitAttackState.WatchTarget)
        {
            StartTargetAttack(_target);
        }
    }
示例#8
0
 public void WalkIntoSunset()
 {
     State = EUnitAttackState.WalkIntoSunset;
     _model.PlayRunAnimation();
 }
示例#9
0
 public void LookIntoSunset()
 {
     State = EUnitAttackState.LookIntoSunset;
     _lastAttackUnit = null;
 }
示例#10
0
    public void Reset(bool full)
    {
        _target = null;
        _targetTransform = null;

        _onTargetFound = null;
        _onTargetAttacked = null;
		StopAllCoroutines();
        if (full)
        {
            State = EUnitAttackState.None;
            //Debug.Log("None " + gameObject.GetComponent<BaseUnitBehaviour>().name);
        }
    }
示例#11
0
 public void MoveToPosition()
 {
     float minDistance = 0.1f;
     _transform.position = Vector3.MoveTowards(_modelTransform.position, _destinationPosition, Time.deltaTime * _speed * 3);
     if (Vector3.Distance(_transform.position, _destinationPosition) < minDistance)
     {
         //_model.StopCurrentAnimation();
         _destinationPosition = _transform.position;
         State = EUnitAttackState.None;
     }
 }
示例#12
0
 public void SetPosition(BaseUnitBehaviour unit, Vector3 position)
 {
     if (_destinationPosition == Vector3.zero)
         _destinationPosition = unit.transform.position = position;
     else
     {
         _destinationPosition = position;
         if (_destinationPosition != _modelTransform.position)
         {
             if (State != EUnitAttackState.AttackTarget)
                 State = EUnitAttackState.NoAttack;
             //_model.PlayRunAnimation();
         }
     }
 }
示例#13
0
    private void WatchTarget()
    {
        _modelTransform.localRotation = Quaternion.Lerp(_modelTransform.localRotation,
            Quaternion.LookRotation(_targetTransform.position - _transform.position), _rotationSpeed * Time.deltaTime);

        BaseUnitBehaviour unit = gameObject.GetComponent<BaseUnitBehaviour>();
        BaseUnitBehaviour attackUnit = UnitSet.Instance.GetNextAttackUnit(_lastAttackUnit);
        if (attackUnit != null && attackUnit.Equals(unit))
        {
            if (_lastAttackUnit == null || _lastAttackUnit != null 
                && _lastAttackUnit.UnitAttack.State != EUnitAttackState.AttackTarget)
            {
                State = EUnitAttackState.AttackTarget;
            }
        }
    }
示例#14
0
    void StartTargetAttack(BaseUnitBehaviour target)
    {
        _model.StopCurrentAnimation();
        Action<BaseUnitBehaviour> onTargetFound = _onTargetFound;
        _onTargetFound = null;
        StopAllCoroutines();

        State = EUnitAttackState.WatchTarget;
        onTargetFound(target);
    }
示例#15
0
 public void WalkIntoSunset()
 {
     State = EUnitAttackState.WalkIntoSunset;
     _model.PlayRunAnimation();
 }
示例#16
0
 public void LookIntoSunset()
 {
     State           = EUnitAttackState.LookIntoSunset;
     _lastAttackUnit = null;
 }