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); } }
void StartTargetAttack(BaseUnitBehaviour target) { _model.StopCurrentAnimation(); Action <BaseUnitBehaviour> onTargetFound = _onTargetFound; _onTargetFound = null; StopAllCoroutines(); State = EUnitAttackState.WatchTarget; onTargetFound(target); }
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; } }
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); } }
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; } } }
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(); } } }
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); } }
public void WalkIntoSunset() { State = EUnitAttackState.WalkIntoSunset; _model.PlayRunAnimation(); }
public void LookIntoSunset() { State = EUnitAttackState.LookIntoSunset; _lastAttackUnit = null; }
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(); } } }
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; } } }
void StartTargetAttack(BaseUnitBehaviour target) { _model.StopCurrentAnimation(); Action<BaseUnitBehaviour> onTargetFound = _onTargetFound; _onTargetFound = null; StopAllCoroutines(); State = EUnitAttackState.WatchTarget; onTargetFound(target); }