67 lines
1.9 KiB
C
67 lines
1.9 KiB
C
/**
|
|
* 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();
|
|
}
|