Starting point

This commit is contained in:
Connor
2026-01-27 00:59:20 +09:00
commit 618b7bd257
10 changed files with 181 additions and 0 deletions

29
.gitignore vendored Normal file
View File

@@ -0,0 +1,29 @@
# Build directories
build/
cmake-build-*/
out/
# IDE files
.idea/
.vscode/
*.swp
*.swo
*~
# Compiled files
*.o
*.a
*.so
*.dylib
# CMake generated files
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
compile_commands.json
CTestTestfile.cmake
Testing/
# OS files
.DS_Store
Thumbs.db

33
CMakeLists.txt Normal file
View File

@@ -0,0 +1,33 @@
cmake_minimum_required(VERSION 3.16)
project(factory_hole_core
VERSION 0.1.0
DESCRIPTION "High-performance ECS-based factory game engine core"
LANGUAGES CXX
)
# C++17 standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Options
option(FACTORY_CORE_BUILD_TESTS "Build tests" ON)
option(FACTORY_CORE_BUILD_EXAMPLES "Build examples" ON)
# Export compile commands for IDE support
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Include dependency management
include(cmake/FetchDependencies.cmake)
# Add subdirectories
add_subdirectory(src)
if(FACTORY_CORE_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
if(FACTORY_CORE_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()

View File

@@ -0,0 +1,20 @@
include(FetchContent)
# Fetch flecs - high-performance ECS library
FetchContent_Declare(
flecs
GIT_REPOSITORY https://github.com/SanderMertens/flecs.git
GIT_TAG v4.0.4
GIT_SHALLOW TRUE
)
# Fetch doctest - testing framework (same as Godot uses)
FetchContent_Declare(
doctest
GIT_REPOSITORY https://github.com/doctest/doctest.git
GIT_TAG v2.4.11
GIT_SHALLOW TRUE
)
# Make dependencies available
FetchContent_MakeAvailable(flecs doctest)

1
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1 @@
add_subdirectory(core)

21
src/core/CMakeLists.txt Normal file
View File

@@ -0,0 +1,21 @@
# Factory Core library
add_library(factory_core STATIC
factory_core.cpp
)
# Add alias for consistent usage
add_library(factory::core ALIAS factory_core)
target_include_directories(factory_core
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(factory_core
PUBLIC
flecs::flecs_static
)
# Set compile features
target_compile_features(factory_core PUBLIC cxx_std_17)

View File

@@ -0,0 +1,5 @@
#include "factory_core.hpp"
// Implementation file for factory_core
// Currently empty as Core is header-only, but needed for static library target
// Future implementations will go here

25
src/core/factory_core.hpp Normal file
View File

@@ -0,0 +1,25 @@
#pragma once
#include <flecs.h>
namespace factory {
// Core engine class wrapping flecs world
class Core {
public:
Core() : world_() {}
// Access the underlying flecs world
flecs::world& world() { return world_; }
const flecs::world& world() const { return world_; }
// Progress the simulation by one tick
bool progress(float delta_time = 0.0f) {
return world_.progress(delta_time);
}
private:
flecs::world world_;
};
} // namespace factory

15
tests/CMakeLists.txt Normal file
View File

@@ -0,0 +1,15 @@
# Test executable
add_executable(factory_core_tests
test_main.cpp
test_example.cpp
)
target_link_libraries(factory_core_tests
PRIVATE
factory_core
doctest::doctest
)
# Register with CTest
include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake)
doctest_discover_tests(factory_core_tests)

30
tests/test_example.cpp Normal file
View File

@@ -0,0 +1,30 @@
#include <doctest/doctest.h>
#include "factory_core.hpp"
TEST_CASE("Core initialization") {
factory::Core core;
SUBCASE("World is valid after construction") {
CHECK(core.world().id() != 0);
}
SUBCASE("Progress returns true") {
CHECK(core.progress() == true);
}
}
TEST_CASE("Basic ECS operations") {
factory::Core core;
auto& world = core.world();
SUBCASE("Can create entity") {
auto entity = world.entity();
CHECK(entity.is_valid());
}
SUBCASE("Can create entity with name") {
auto entity = world.entity("test_entity");
CHECK(entity.is_valid());
CHECK(entity.name() == std::string("test_entity"));
}
}

2
tests/test_main.cpp Normal file
View File

@@ -0,0 +1,2 @@
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>