Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)

option(PRODUCTION "Enable production build flags" OFF)
option(SANDBOX_SCRIPTS "Enable script sandboxing build flags" OFF)
option(CWD "Current Resources Dir" "")


execute_process(
Expand Down Expand Up @@ -42,19 +43,33 @@ if(NOT PRODUCTION)
DESTINATION "${ENGINE_SRC_DEST}"
PATTERN "Examples" EXCLUDE)

file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Tests"
DESTINATION "${ENGINE_SRC_DEST}"
PATTERN "Examples" EXCLUDE)

file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/vendor"
DESTINATION "${ENGINE_SRC_DEST}"
PATTERN "Examples" EXCLUDE)

file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt"
DESTINATION "${ENGINE_SRC_DEST}")
endif()


file(GLOB_RECURSE GameDataSet CONFIGURE_DEPENDS "GameData/**")
cmrc_add_resource_library(GameData ${GameDataSet})

file(GLOB_RECURSE PROD_SCRIPTS CONFIGURE_DEPENDS "Scripts/*.cpp")
message(STATUS "CWD = ${CWD}")
file(GLOB_RECURSE GameDataSet CONFIGURE_DEPENDS "${CWD}GameData/**")
cmrc_add_resource_library(GameData WHENCE "${CWD}" ${GameDataSet})
message(STATUS "============ GameData Resources Found: =============")
foreach(res ${GameDataSet})
message(STATUS "* " ${res})
endforeach()
message(STATUS "================ GameData Resources ================")

file(GLOB_RECURSE PROD_SCRIPTS CONFIGURE_DEPENDS "${CWD}Scripts/*.cpp")
message(STATUS "================== Scripts Found: ==================")
foreach(res ${PROD_SCRIPTS})
message(STATUS "* " ${res})
endforeach()
message(STATUS "====================== Scripts =====================")

add_subdirectory(Engine)

Expand Down
1 change: 1 addition & 0 deletions Engine/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ add_library(Core STATIC ${src} ${PROD_SCRIPTS})
target_link_libraries(Core CWindow Utils)
target_link_libraries(Core GameData)
target_include_directories(Core PUBLIC "Core/" "../ScriptShared")
target_include_directories(Core PUBLIC "${CMAKE_SOURCE_DIR}")
target_compile_definitions(Core PRIVATE ENGINE_SRC_DEST="${ENGINE_SRC_DEST}")
target_compile_definitions(Core PRIVATE PRODUCTION)

Expand Down
112 changes: 112 additions & 0 deletions Engine/Core/Core/Camera/Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@


#include "Camera.h"
#include "Objects/GameObject.h"



Expand All @@ -16,7 +17,10 @@
Engine::Core::Camera::Camera() noexcept {
if (!renderer || !renderer->getWindowData()) {
Engine::Utils::Logger::get().warn("Engine::Core::Camera::Camera()", "renderer is nullptr");
return;
};

fbo = CW::Renderer::Framebuffer(fbo_size.x, fbo_size.y);
};


Expand Down Expand Up @@ -60,6 +64,10 @@ Engine::Core::Camera::Camera(const Camera &second) noexcept
orthogonal_mat_ready(second.orthogonal_mat_ready),
perspective_mat(second.perspective_mat),
orthogonal_mat(second.orthogonal_mat),
fbo(second.fbo),
fbo_size(second.fbo_size),
track_window_size(second.track_window_size),
fbo_size_ready(second.fbo_size_ready),
default_movemement_on(second.default_movemement_on),
sensitivity(second.sensitivity),
velocity(second.velocity),
Expand Down Expand Up @@ -99,6 +107,10 @@ Engine::Core::Camera &Engine::Core::Camera::operator=(const Camera &second) noex
orthogonal_near_plane = second.orthogonal_near_plane;
perspective_far_plane = second.perspective_far_plane;
orthogonal_far_plane = second.orthogonal_far_plane;
fbo = second.fbo;
fbo_size = second.fbo_size;
track_window_size = second.track_window_size;
fbo_size_ready = second.fbo_size_ready;
perspective_mat_ready = second.perspective_mat_ready;
orthogonal_mat_ready = second.orthogonal_mat_ready;
perspective_mat = second.perspective_mat;
Expand Down Expand Up @@ -140,6 +152,10 @@ Engine::Core::Camera::Camera(Camera &&second) noexcept
orthogonal_mat_ready(std::move(second.orthogonal_mat_ready)),
perspective_mat(std::move(second.perspective_mat)),
orthogonal_mat(std::move(second.orthogonal_mat)),
fbo(std::move(second.fbo)),
fbo_size(std::move(second.fbo_size)),
track_window_size(std::move(second.track_window_size)),
fbo_size_ready(std::move(second.fbo_size_ready)),
default_movemement_on(std::move(second.default_movemement_on)),
sensitivity(std::move(second.sensitivity)),
velocity(std::move(second.velocity)),
Expand All @@ -152,6 +168,8 @@ Engine::Core::Camera::Camera(Camera &&second) noexcept
if (!renderer || !renderer->getWindowData()) {
Engine::Utils::Logger::get().warn("Engine::Core::Camera::Camera(Camera &&second)", "renderer is nullptr");
};

second.renderer = nullptr;
};


Expand Down Expand Up @@ -183,6 +201,10 @@ Engine::Core::Camera& Engine::Core::Camera::operator=(Camera &&second) noexcept
orthogonal_mat_ready = std::move(second.orthogonal_mat_ready);
perspective_mat = std::move(second.perspective_mat);
orthogonal_mat = std::move(second.orthogonal_mat);
fbo = std::move(second.fbo);
fbo_size = std::move(second.fbo_size);
track_window_size = std::move(second.track_window_size);
fbo_size_ready = std::move(second.fbo_size_ready);
default_movemement_on = std::move(second.default_movemement_on);
sensitivity = std::move(second.sensitivity);
velocity = std::move(second.velocity);
Expand All @@ -192,6 +214,8 @@ Engine::Core::Camera& Engine::Core::Camera::operator=(Camera &&second) noexcept
cursor_visible_lock = std::move(second.cursor_visible_lock);
cursor_lock = std::move(second.cursor_lock);

second.renderer = nullptr;

return *this;
};

Expand Down Expand Up @@ -476,6 +500,39 @@ void Engine::Core::Camera::setCameraMode(Engine::ScriptShared::CameraMode mode)



glm::ivec2 Engine::Core::Camera::getFboSize() const noexcept {
return fbo_size;
};



void Engine::Core::Camera::setFboSize(glm::ivec2 size) noexcept {
fbo_size = size;
if(fbo_size.x < 0) fbo_size.x = 0;
if(fbo_size.y < 0) fbo_size.y = 0;
fbo_size_ready = false;
};



CW::Renderer::Framebuffer &Engine::Core::Camera::getFbo() noexcept {
return fbo;
};



void Engine::Core::Camera::setTrackWindowSize(bool track) noexcept {
track_window_size = track;
};



bool Engine::Core::Camera::getTrackWindowSize() const noexcept {
return track_window_size;
};



bool Engine::Core::Camera::getDefaultMovement() const noexcept {
return default_movemement_on;
};
Expand Down Expand Up @@ -526,6 +583,61 @@ void Engine::Core::Camera::setMouseActive(bool active) noexcept{



//// ================ ////
//// ==== Render ==== ////
//// ================ ////
void Engine::Core::Camera::render(std::vector<Engine::Core::GameObject> &objects) noexcept{
if (!renderer || !renderer->getWindowData()) {
Engine::Utils::Logger::get().warn("Engine::Core::Camera::render(std::vector<Engine::Core::GameObject> &objects)", "renderer is nullptr {skipping}");
return;
};

if(track_window_size) autoSizeFboToWindow();
if(!fbo_size_ready) {
fbo.rescale(fbo_size.x, fbo_size.y);
fbo_size_ready = true;
};


fbo.bind();
CW::Renderer::Uniform uniform;
for(Engine::Core::GameObject& object : objects) object.render(renderer, static_cast<Engine::ScriptShared::ICamera&>(*this), static_cast<Engine::ScriptShared::ICamera&>(*this), uniform);
fbo.unbind();
};



void Engine::Core::Camera::autoSizeFboToWindow() noexcept {
if (!renderer || !renderer->getWindowData()) {
Engine::Utils::Logger::get().warn("Engine::Core::Camera::autoSizeToWindow()", "renderer is nullptr {skipping}");
return;
};

if(renderer->getWindowData()->width == fbo_size.x && renderer->getWindowData()->height == fbo_size.y) return;
setFboSize({renderer->getWindowData()->width, renderer->getWindowData()->height});
};



void Engine::Core::Camera::clearFbo() noexcept {
if (!renderer || !renderer->getWindowData()) {
Engine::Utils::Logger::get().warn("Engine::Core::Camera::clearFbo()", "renderer is nullptr {skipping}");
return;
};

if(track_window_size) autoSizeFboToWindow();
if(!fbo_size_ready) {
fbo.rescale(fbo_size.x, fbo_size.y);
fbo_size_ready = true;
};

fbo.bind();
renderer->beginFrame();
fbo.unbind();
};



//// ================== ////
//// ==== Movement ==== ////
//// ================== ////
Expand Down
36 changes: 31 additions & 5 deletions Engine/Core/Core/Camera/Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#pragma once
#include "Renderer.h"
#include "Renderer/OpenGL/Framebuffer.h"

#define GLM_ENABLE_EXPERIMENTAL
#include "../vendor/glm/glm/gtx/euler_angles.hpp"
Expand All @@ -19,6 +20,12 @@



namespace Engine::Core{
class GameObject;
};



namespace Engine::Core {
class Camera : public Engine::ScriptShared::ICamera {
//////// ============================================ ////////
Expand Down Expand Up @@ -58,7 +65,16 @@ class Camera : public Engine::ScriptShared::ICamera {
float orthogonal_far_plane = Engine::Config::CAMERA_ORTHO_FAR_PLANE;
bool orthogonal_mat_ready = false;
glm::mat4 orthogonal_mat = glm::mat4(1.0f);


//// ================ ////
//// ==== Render ==== ////
//// ================ ////
private:
CW::Renderer::Framebuffer fbo = CW::Renderer::Framebuffer();
glm::ivec2 fbo_size = glm::ivec2(0);
bool track_window_size = true;
bool fbo_size_ready = true;

//// ================== ////
//// ==== Movement ==== ////
//// ================== ////
Expand Down Expand Up @@ -135,6 +151,12 @@ class Camera : public Engine::ScriptShared::ICamera {

Engine::ScriptShared::CameraMode getCameraMode() const noexcept;
void setCameraMode(Engine::ScriptShared::CameraMode mode) noexcept;

glm::ivec2 getFboSize() const noexcept;
void setFboSize(glm::ivec2 size) noexcept;
CW::Renderer::Framebuffer& getFbo() noexcept;
void setTrackWindowSize(bool track) noexcept;
bool getTrackWindowSize() const noexcept;

bool getDefaultMovement() const noexcept;
void setDefaultMovement(bool state) noexcept;
Expand All @@ -146,6 +168,14 @@ class Camera : public Engine::ScriptShared::ICamera {
bool getMouseActive() const noexcept;
void setMouseActive(bool active) noexcept;

//// ================ ////
//// ==== Render ==== ////
//// ================ ////
public:
void render(std::vector<Engine::Core::GameObject>& objects) noexcept;
void autoSizeFboToWindow() noexcept;
void clearFbo() noexcept;

//// ================== ////
//// ==== Movement ==== ////
//// ================== ////
Expand All @@ -158,9 +188,5 @@ class Camera : public Engine::ScriptShared::ICamera {
void velocityButtons(float delta_time) noexcept;
void movementButtons(float delta_time, float& target_bank) noexcept;
void rotationButtons(float delta_time, float& target_bank) noexcept;

// [TODO]
// render
// culling
};
};
Loading
Loading