/// moves to destination in area around target (max in search area) /// if target is null treat yourself as target /// target position is predicted in future, You can adjust the prediction via @maxRespectedTime and @timeScale /// @maxRespectedTime -> clamps how much in future the event will be predicted /// @timeScale -> specifies how important prediction is public void SetDestination_Search(FocusOwned focus, float searchArea, float maxRespectedTime = float.MaxValue, float timeScale = 1.0f) { if (!focus.HasTarget()) { destination = (Vector2)transform.position + Random.insideUnitCircle * searchArea; return; } destination = focus.GetTarget().GetPosition(maxRespectedTime, timeScale) + Random.insideUnitCircle * searchArea; }
public void SetDestination_Flee(FocusOwned focus, RangedFloat desiredDistance, float searchArea = 1.0f) { if (!focus.HasTarget()) { destination = (Vector2)transform.position + Random.insideUnitCircle.normalized * desiredDistance.GetRandom() + Random.insideUnitCircle * searchArea; return; } Vector2 toTarget = -focus.ToTarget(); destination = (Vector2)transform.position + toTarget.normalized * desiredDistance.GetRandom() + Random.insideUnitCircle * searchArea; }