private void MoveToTarget() { if (_dude.State != Dude.DudeState.Walking || !Planet) { return; } if (_target == null) { return; } var axis = Vector3.Cross((_target.transform.position - transform.position).normalized, (Planet.transform.position - transform.position).normalized); transform.RotateAround(Planet.transform.position, axis.normalized, _movementSpeed * Time.deltaTime); var vectorToTarget = _target.transform.position - transform.position; var vectorToPlanet = (Planet.transform.position - transform.position).normalized; var facingVec = Vector3.Cross(vectorToPlanet, axis.normalized).normalized; //Face towards movedir transform.rotation = Quaternion.LookRotation(facingVec, -vectorToPlanet); if (vectorToTarget.magnitude <= _target.GetRadius()) { _target = null; OnReachedTarget.Invoke(); } }
public static MeltableBase GetClosestMeltable(Vector3 position) { var closestDistance = Mathf.Infinity; MeltableBase closestMeltable = null; foreach (var meltable in MeltableBase.meltables) { var distance = Vector3.Distance(position, meltable.transform.position); if (distance < closestDistance) { closestDistance = distance; closestMeltable = meltable; } } return(closestMeltable); }
public void FindNewTarget() { if (State == DudeState.Grabbed) { return; } _target = MeltableBase.GetClosestMeltable(transform.position); if (_target == null) { SetState(DudeState.Idle); return; } else { SetState(DudeState.Walking); } _movement.SetTarget(_target); _target.OnMelted.AddListener(FindNewTarget); }
public void SetTarget(MeltableBase target) { _target = target; }