+void LocateResourceGoal::RandomWalk() {
+ if (searching) {
+ return;
+ }
+
+ const world::Planet &planet = GetSituation().GetPlanet();
+ const glm::dvec3 &pos = GetSituation().Position();
+ const glm::dvec3 normal(planet.NormalAt(pos));
+ const glm::dvec3 step_x(glm::normalize(glm::cross(normal, glm::dvec3(normal.z, normal.x, normal.y))));
+ const glm::dvec3 step_y(glm::normalize(glm::cross(step_x, normal)));
+
+ found = false;
+ searching = true;
+ target_pos = GetSituation().Position();
+ target_pos += Random().SNorm() * step_x;
+ target_pos += Random().SNorm() * step_y;
+ // bias towards current heading
+ target_pos += GetSituation().Heading() * 1.5;
+ target_pos = glm::normalize(target_pos) * planet.Radius();
+ GetSteering().GoTo(target_pos);
+}
+