project(editScene)
set(CMAKE_CXX_STANDARD 17)

find_package(OGRE REQUIRED COMPONENTS Bites Overlay MeshLodGenerator CONFIG)
find_package(flecs REQUIRED CONFIG)
find_package(nlohmann_json REQUIRED)
find_package(SDL2 REQUIRED)
find_package(Jolt REQUIRED)

# Collect all source files
set(EDITSCENE_SOURCES
	main.cpp
	EditorApp.cpp
	systems/EditorUISystem.cpp
	systems/SceneSerializer.cpp
	systems/PhysicsSystem.cpp
	systems/LightSystem.cpp
	systems/CameraSystem.cpp
	systems/LodSystem.cpp
	systems/StaticGeometrySystem.cpp
	ui/TransformEditor.cpp
	ui/RenderableEditor.cpp
	ui/PhysicsColliderEditor.cpp
	ui/RigidBodyEditor.cpp
	ui/LightEditor.cpp
	ui/CameraEditor.cpp
	ui/LodEditor.cpp
	ui/LodSettingsEditor.cpp
	ui/StaticGeometryEditor.cpp
	ui/StaticGeometryMemberEditor.cpp
	ui/ComponentRegistration.cpp
	components/LightModule.cpp
	components/CameraModule.cpp
	components/LodModule.cpp
	components/StaticGeometryModule.cpp
	camera/EditorCamera.cpp
	gizmo/Gizmo.cpp
	physics/physics.cpp
)

set(EDITSCENE_HEADERS
	EditorApp.hpp
	components/Transform.hpp
	components/Renderable.hpp
	components/EntityName.hpp
	components/Relationship.hpp
	components/PhysicsCollider.hpp
	components/RigidBody.hpp
	components/Light.hpp
	components/Camera.hpp
	components/Lod.hpp
	components/LodSettings.hpp
	components/StaticGeometry.hpp
	components/StaticGeometryMember.hpp
	systems/EditorUISystem.hpp
	systems/StaticGeometrySystem.hpp
	systems/SceneSerializer.hpp
	systems/PhysicsSystem.hpp
	systems/LightSystem.hpp
	systems/CameraSystem.hpp
	systems/LodSystem.hpp
	ui/ComponentEditor.hpp
	ui/ComponentRegistry.hpp
	ui/ComponentRegistration.hpp
	ui/TransformEditor.hpp
	ui/RenderableEditor.hpp
	ui/PhysicsColliderEditor.hpp
	ui/RigidBodyEditor.hpp
	ui/LightEditor.hpp
	ui/CameraEditor.hpp
	ui/LodEditor.hpp
	ui/LodSettingsEditor.hpp
	camera/EditorCamera.hpp
	gizmo/Gizmo.hpp
	physics/physics.h
)

add_executable(editSceneEditor ${EDITSCENE_SOURCES} ${EDITSCENE_HEADERS})

# Define JPH_DEBUG_RENDERER for physics debug drawing
target_compile_definitions(editSceneEditor PRIVATE JPH_DEBUG_RENDERER)

target_link_libraries(editSceneEditor
	OgreMain
	OgreBites
	OgreOverlay
	OgreMeshLodGenerator
	flecs::flecs_static
	nlohmann_json::nlohmann_json
	Jolt::Jolt
)

target_include_directories(editSceneEditor PRIVATE
	${CMAKE_CURRENT_SOURCE_DIR}
)

# Copy local resources (materials, etc.)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/resources")
	file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/resources"
		DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
endif()

# Copy resources from main build
add_custom_command(TARGET editSceneEditor POST_BUILD
	COMMAND ${CMAKE_COMMAND} -E copy_directory
	"${CMAKE_BINARY_DIR}/resources"
	"${CMAKE_CURRENT_BINARY_DIR}/resources"
	COMMAND ${CMAKE_COMMAND} -E copy
	"${CMAKE_CURRENT_SOURCE_DIR}/resources.cfg"
	"${CMAKE_CURRENT_BINARY_DIR}/resources.cfg"
	COMMENT "Copying resources to editSceneEditor build directory"
)
