Copperfield engine is a C++ game engine designed with a strong emphasis on both ease of use and performance. Whether you're a seasoned game developer or just starting your journey in the world of game development, our engine provides a powerful and intuitive platform to bring your creative visions to life.
The engine is Built on the foundation of an Entity Component System, our engine provides a modular and scalable architecture. This design allows for flexible and efficient game development, making it easier to manage and extend your projects as they evolve.
Main Features
Real Time Editor
simple run time editor that allow to modify the properties of the objects on the scene

Multithread Resource Load
Load models, textures and sound esaily and fast using multithreading
resource_manager.loadResource(
"../assets/textures/box.png",
"Box"
);
resource_manager.WaitResourceLoad();
const Texture& texture = resource_manager.getTexture("Box");
@ kTexture
Texture accepts .png and .jpg.

Resource load in depth
Blinn-Phong lighting and Shadow Mapping
Efficient directional, Point and Spot lights that cast dynamic shadows

Input
Simple action based input system
{"Move", {InputButton::W, InputButton::UP}},
{"Jump", {InputButton::Space}},
{"OpenMenu", {InputButton::Enter}}
};
if (input.buttonPressed("Move")) {
}
Input in depth
ECS
allows for custom components and systems providing a simple interface to iterate components
while (it.next()) {
auto [movement_cmp, position_cmp] = it.get();
}
}
Helper to iterate several component lists simultaneously.
Definition: lists_iterator.hpp:9
Handles anything related to entities and components in the engine.
Definition: component_manager.hpp:29
ComponentListCompact< T > & getComponentList() const
Retrieves the list of all the components of the same type.
Definition: component_manager.hpp:161
ComponentListSparse< T > & getSparseList() const
Retrieves the list of all the components of the same type.
Definition: component_manager.hpp:178
ECS Depth
Collision
Bounding box collision detenction
}
bool collidesWith(const BoxCmp &me, const BoxCmp &other)
Detect if the BoxCmp are colliding.
Component used to detect collisions.
Definition: default_components.hpp:337
Collisions in depth
Sound
Simple system to add music and sound effect into your game
component_manager.addEntity(
nullptr,
AudioCmp(
"Other", resource_manager.getSound(
"CivilWar"))
);
auto* audio_cmp = component_manager.getComponent<
AudioCmp>(audioPlayer);
void SoundSystem(ComponentManager &cmp_manager)
System used for sound reproduction without it the sound cannot be played.
Component used for audio reproduction.
Definition: default_components.hpp:40
SoundSource src
Object used to reproduce the audio.
Definition: default_components.hpp:52
Sound in depth
Getting Started
We have created a visual studio project you can use that will include all the required libraries and the code example achieved on the Tutorials Section
usage instructions
- Download project: Starter Project
- Unzip it
- run setup.bat
- wait until all dependencies have been downloaded this will take several minutes
- open build/ with visual studio