+Camera &Camera::TopDown(const creature::Creature &c, float distance, float roll) {
+ const creature::Situation &s = c.GetSituation();
+ if (s.OnPlanet()) {
+ int srf = s.Surface();
+ glm::vec3 pos(s.Position());
+ pos[(srf + 2) % 3] += srf < 3 ? distance : -distance;
+ Reference(s.GetPlanet());
+ return MapView(srf, pos, roll);
+ } else {
+ glm::vec3 pos(s.Position());
+ pos += glm::normalize(pos) * distance;
+ return Orbital(pos);
+ }
+}
+