/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "entityoverworldcamera.h" #include "entity/entitymanager.h" #include "entity/component/display/entityposition.h" #include "entity/component/display/entitycamera.h" void entityOverworldCameraInit( const entityid_t entityId, const componentid_t componentId ) { entityoverworldcamera_t *cam = entityOverworldCameraGet(entityId, componentId); cam->targetEntityId = ENTITY_ID_INVALID; cam->targetPosCompId = COMPONENT_ID_INVALID; glm_vec3_zero(cam->targetOffset); glm_vec3_zero(cam->eyeOffset); cam->scale = 1.0f; } entityoverworldcamera_t * entityOverworldCameraGet( const entityid_t entityId, const componentid_t componentId ) { return componentGetData(entityId, componentId, COMPONENT_TYPE_OVERWORLD_CAMERA); } void entityOverworldCameraSetTarget( const entityid_t entityId, const componentid_t componentId, const entityid_t targetEntityId, const componentid_t targetPosCompId ) { entityoverworldcamera_t *cam = entityOverworldCameraGet(entityId, componentId); cam->targetEntityId = targetEntityId; cam->targetPosCompId = targetPosCompId; } errorret_t entityOverworldCameraRender( const entityid_t entityId, const componentid_t componentId ) { entityoverworldcamera_t *cam = entityOverworldCameraGet(entityId, componentId); vec3 targetPos; entityPositionGetWorldPosition( cam->targetEntityId, cam->targetPosCompId, targetPos ); vec3 center = { targetPos[0] + cam->targetOffset[0], targetPos[1] + cam->targetOffset[1], targetPos[2] + cam->targetOffset[2] }; componentid_t posComp = entityGetComponent(entityId, COMPONENT_TYPE_POSITION); componentid_t camComp = entityGetComponent(entityId, COMPONENT_TYPE_CAMERA); entityCameraLookAtPixelPerfect( entityId, posComp, camComp, center, cam->eyeOffset, cam->scale ); errorOk(); }