Skip to content

Commit d7e98da

Browse files
committed
Added camera auto resize method
1 parent ae94820 commit d7e98da

7 files changed

Lines changed: 33 additions & 9 deletions

File tree

engine/core/Engine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ void Engine::pauseGameEvents(bool pause) {
245245
void Engine::includeScene(size_t index, Scene* scene){
246246
if (viewLoaded){
247247
scene->load();
248-
scene->updateSizeFromCamera();
248+
scene->updateCameraSize();
249249
}
250250
}
251251

@@ -670,7 +670,7 @@ void Engine::systemViewChanged(){
670670
}
671671

672672
for (int i = 0; i < scenes.size(); i++){
673-
scenes[i]->updateSizeFromCamera();
673+
scenes[i]->updateCameraSize();
674674
}
675675

676676
onViewChanged.call();

engine/core/Scene.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,15 @@ void Scene::setCamera(Camera* camera){
5050

5151
void Scene::setCamera(Entity camera){
5252
if (CameraComponent* cameracomp = findComponent<CameraComponent>(camera)){
53-
this->camera = camera;
54-
if (defaultCamera != NULL_ENTITY){
55-
destroyEntity(defaultCamera);
56-
defaultCamera = NULL_ENTITY;
53+
if (camera != this->camera){
54+
this->camera = camera;
55+
if (defaultCamera != NULL_ENTITY){
56+
destroyEntity(defaultCamera);
57+
defaultCamera = NULL_ENTITY;
58+
}
59+
cameracomp->needUpdate = true;
60+
updateCameraSize();
5761
}
58-
cameracomp->needUpdate = true;
5962
}else{
6063
Log::error("Invalid camera entity: need CameraComponent");
6164
}
@@ -189,6 +192,6 @@ void Scene::update(double dt){
189192
}
190193
}
191194

192-
void Scene::updateSizeFromCamera(){
195+
void Scene::updateCameraSize(){
193196
getSystem<RenderSystem>()->updateCameraSize(getCamera());
194197
}

engine/core/Scene.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ namespace Supernova{
7676
void draw();
7777
void update(double dt);
7878

79-
void updateSizeFromCamera();
79+
void updateCameraSize();
8080

8181
void setCamera(Camera* camera);
8282
void setCamera(Entity camera);

engine/core/object/Camera.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,22 @@ void Camera::setPerspective(float yfov, float aspect, float nearValue, float far
8686
camera.needUpdate = true;
8787
}
8888

89+
void Camera::setAutoResize(bool autoResize){
90+
CameraComponent& camera = getComponent<CameraComponent>();
91+
92+
if (camera.autoResize != autoResize){
93+
camera.autoResize = autoResize;
94+
95+
camera.needUpdate = true;
96+
}
97+
}
98+
99+
bool Camera::isAutoResize() const{
100+
CameraComponent& camera = getComponent<CameraComponent>();
101+
102+
return camera.autoResize;
103+
}
104+
89105
void Camera::setNearClip(float nearValue){
90106
CameraComponent& camera = getComponent<CameraComponent>();
91107

engine/core/object/Camera.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ namespace Supernova{
2727
void setOrtho(float left, float right, float bottom, float top, float nearValue, float farValue);
2828
void setPerspective(float yfov, float aspect, float nearValue, float farValue);
2929

30+
void setAutoResize(bool autoResize);
31+
bool isAutoResize() const;
32+
3033
void setNearClip(float nearValue);
3134
float getNearClip() const;
3235

engine/core/script/binding/CoreClassesLua.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ void LuaBinding::registerCoreClasses(lua_State *L){
509509
.addFunction("destroy", &Scene::destroy)
510510
.addFunction("draw", &Scene::draw)
511511
.addFunction("update", &Scene::update)
512+
.addFunction("updateCameraSize", &Scene::updateCameraSize)
512513
.addProperty("camera", (Entity(Scene::*)()const)&Scene::getCamera, (void(Scene::*)(Entity))&Scene::setCamera)
513514
.addFunction("setCamera",
514515
luabridge::overload<Camera*>(&Scene::setCamera),

engine/core/script/binding/ObjectClassesLua.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ void LuaBinding::registerObjectClasses(lua_State *L){
221221
.addFunction("activate", &Camera::activate)
222222
.addFunction("setOrtho", &Camera::setOrtho)
223223
.addFunction("setPerspective", &Camera::setPerspective)
224+
.addProperty("autoResize", &Camera::isAutoResize, &Camera::setAutoResize)
224225
.addProperty("nearClip", &Camera::getNearClip, &Camera::setNearClip)
225226
.addProperty("farClip", &Camera::getFarClip, &Camera::setFarClip)
226227
.addProperty("leftClip", &Camera::getLeftClip, &Camera::setLeftClip)

0 commit comments

Comments
 (0)