/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "scene/scenebase.h" #include "entity/entitybase.h" typedef struct { float_t angle; float_t radius; float_t height; float_t speed; } overworldcameraorbit_t; /** * Creates the overworld scene: a static ground plane, a player entity * (dynamic capsule body, moved relative to the camera by * COMPONENT_TYPE_PLAYER's own update callback), and a camera orbiting the * origin (see overworldSceneCameraOrbitUpdate). Does not make the scene * active -- call sceneSetActive with the returned ID. * * @return The ID of the newly created scene. */ sceneid_t overworldSceneCreate(void); /** * Per-tick update for the test camera: orbits it around the world origin * at a fixed radius/height/speed, always looking back at the origin. * Registered automatically by overworldSceneCreate. * * @param mgr The entity manager that owns the entity. * @param entityId The camera entity ID. * @param componentId The camera's position component ID. * @param user Pointer to this camera's overworldcameraorbit_t state. */ void overworldSceneCameraOrbitUpdate( entitymanager_t *mgr, const entityid_t entityId, const componentid_t componentId, void *user );