Releases: EngineSquared/EngineSquared
v0.3.0
Why switching from v0.2 to v0.3?
This release marks two big changes in the evolution of Engine²: the goals and the organization.
Goals
The goals of the project change: from a game engine focused on making realistic physics with appealing graphics for vehicle games to having a completely free engine design. And here, “free” has multiple meanings:
Free as control
Engine² makes you able to understand it, use it, and contribute to it easily—for you, artists. Any kind of artist should be able to take the project in their hands and make stuff with it. If you are an engine programmer, game designer, sound designer, tool programmer, and so on, you will have the possibility to create and express yourself. And as I like to say: “For me, the quality of a game is reflected in the messages it conveys.”
Free as freedom
Engine² is not made to create realistic games nor small arcade ones. This project is made to help you create any kind of project. If you want to make something, you will be able to do it. Anything is possible.
Free as price
Engine² will not force you to spend any money to use any of the services it provides. It’s 101% free to use.
Free as liberty
Engine² makes every process, planning, and evolution visible and understandable by the community. The point here is to know the priorities of the engine, its direction, and to let the community impact most of the engine.
Organization
Before, we had a very specific planning method named “Die&Retry” (D&R), which worked pretty well for a school project scale, but as Engine² grows, it is now too time-consuming for the new goals, especially since we went from four to one contributor in the project.
Die&Retry
For reminder, the “Die&Retry” planning method comes from agility and sprints. It is composed of two kinds of sprints: “Game” and “Engine” ones.
The goal here is for the first sprint to make a very, very simple game in a short period of time using user tools and requirements (fast shipping, AI-driven implementation). While making this game, no engine modification must be required, and everything must be implemented in the game repository. It verifies the engine in a real user experience context and allows us to face the same questions and frustrations.
After the first sprints, we make a postmortem of the game: what worked, what didn’t, what should be easier to make in the engine. From all feedback found, everything can then be thought out for the engine: structured, built, tested, and shipped. This part requires more time than the first one since everything should be thought through to work and be well integrated with the engine.
This method was used two times during v0.1 and v0.2 with the games Rolling-ball and ES-RS, and it worked pretty well. For example, the first one gave us 21 feedbacks of very different sizes, from “add a shutdown system for the window plugin” to “remake the whole camera plugin.” But now Engine² has new goals that can’t be fulfilled only by this method.
New planning
Some things are now more prioritized, like having a well-documented and accessible project or having an editor. Those cannot be targeted through a D&R method. So I will take another path that corresponds to classical sprints. As I don’t really know the perfect amplitudes of sprints, I will start with sprints of two weeks. Considering some other transversal stuffs, I will try to express the planning through issues and GitHub projects that you can find here, here, and here. This will be done through the usage of AI, which I will try to use as best as I can. No implicit choices about the usage of AI. I will use it and try my best with it. Don’t hesitate to tell me through issues or Discord how I should improve stuff like those.
What's Changed
📝 Documentation
- docs: add quality indicator badges to README by @xingzihai in #554
- docs(readme): enhance readme by @Miou-zora in #556
- docs(readme): fix micro typos and improve clarity in documentation by @Miou-zora in #579
- docs(engine): specify which inline file extension to use inl, tpp or ipp and when by @Miou-zora in #580
✨ Feature
- feat(check_leaks): make memory leak check mandatory to pass CI by @Miou-zora in #578
- feat: use xmake toolchain packages so a compiler is the only required local dependency by @Miou-zora in #555
🐛 Fix
- fix(UIContext): prevent rendering when document is not loaded by @Miou-zora in #557
- fix(graphic): resolve memory leaks in BindGroupTest and improve buffer management by @Miou-zora in #569
- fix(physics): add shutdown system for physics management by @Miou-zora in #570
- fix(graphic): resolve memory leaks in TestGPUBuffer by @Miou-zora in #571
- fix(physics): resolve memory leaks in CharacterControllerTest by @Miou-zora in #572
- fix(graphic): resolve memory leaks and improve texture view management by @Miou-zora in #573
✅ Test
- test: add memory check for unit tests in ci by @Miou-zora in #558
♻️ Refactor
- refactor(core): rename RunCore to Run for clarity by @Miou-zora in #581
- refactor(plugin): mark Plugin classes as final by @Miou-zora in #583
👥 New Contributors
- @xingzihai made their first contribution in #554
Full Changelog: v0.2.1...v0.3.0
v0.2.1
What's Changed
- feat: allow to use different schedulers with event manager by @ripel2 in #400
- feat(graphic): add ambient light support and example usage by @Miou-zora in #416
- feat(graphic): update header file inclusions for improved structure by @MasterLaplace in #420
- feat(physics): add CapsuleCollider and SphereCollider components by @MasterLaplace in #402
- ci: run ci for clang format commit and skip workflow if newer is pushed by @Miou-zora in #418
- feat(core): return SystemIDs in plugin abstract RegisterSystems by @ripel2 in #421
- feat: auto update the aspect ratio of the render texture by @Miou-zora in #422
- feat(physics): add constraint components and system integration by @MasterLaplace in #403
- refactor(graphic): remove default render pipeline from graphic plugin by @Miou-zora in #424
- feat(camera-movement): camera movement plugin by @ripel2 in #423
- feat: add back vehicle support by @ripel2 in #417
- feat(physics): add Softbody system and components by @MasterLaplace in #404
- example: vehicle usage example by @ripel2 in #426
- feat(core): separate Entity into Entity, EntityId and Id by @Miou-zora in #425
- fix(graphic): remove memory leaks by @Miou-zora in #429
- feat(graphic): add gbufferpass by @Miou-zora in #427
- build: fix compilation error of external projects with fmt by @ripel2 in #431
- feat: add shape name to obj loader shapes by @ripel2 in #433
- feat: user interface using RmlUi by @Divengerss in #428
- fix(graphic): update default material and texture initialization by @Miou-zora in #432
- feat(graphic): add deferred pass by @Miou-zora in #434
- feat(graphic): support local and file-based textures in material setup by @Miou-zora in #435
- fix(ui): update render pass dependency to use DEFERRED_PASS by @Miou-zora in #437
- feat(graphic): use diffuse texture rather than ambiant texture by @Miou-zora in #436
- feat(physics): mesh collider by @ripel2 in #439
- feat(sound): add Vehicle sound engine by @MasterLaplace in #438
- refactor: use mesh shape for mesh collider by @ripel2 in #440
- refactor: enhanced vehicle handling by @ripel2 in #443
- feat(graphic): add directional light's shadow by @Miou-zora in #442
- feat: adding functions to get the overlay documents by @Divengerss in #457
- example: enhance basic core usage by @Miou-zora in #461
- fix: adding a request late update in the context for ui texts render by @Divengerss in #459
- feat: allow to create mesh colliders without mesh components by @ripel2 in #460
- feat(relationship): implement ForEachChild utility and add tests for child relationships by @Miou-zora in #462
- fix: segfault when destroying sound manager by @ripel2 in #466
- fix: update attributes name in graphic material usage by @Miou-zora in #470
- fix(NativeScripting): compilation errors from latest refactor by @Divengerss in #468
- feat: add input example with controller by @Miou-zora in #464
- feat(example): add event usage example with event manager integration by @Miou-zora in #471
- example: fix vehicle usage by @ripel2 in #467
- build: add optional compilation and execution of tests by @Miou-zora in #473
- refactor: remove unused methods by @Miou-zora in #456
- feat(logging): enhance system error logging with system names by @Miou-zora in #454
- feat(graphic): add custom mesh creation and integration in setup by @Miou-zora in #463
- feat: add transparency handling in GBuffer and enhance ColorTargetState with blend state management by @Miou-zora in #465
- feat(Graphic): adding the README file by @Divengerss in #477
- fix: doxygen deploy ci by @MasterLaplace in #475
- chore: add Issue and Pull Request templates by @Copilot in #479
- docs: clean up comments in export.h by @ripel2 in #480
- docs: update README with examples and remove outdated sections by @Miou-zora in #482
- docs: add missing pictures by @Miou-zora in #483
- fix: update framebuffer size callback to use window resource size by @Miou-zora in #499
- feat(physics): internalize jolt bodyid entity mapping inside the physics plugin by @Miou-zora in #500
- feat(camera): refactor GPUCamera and Camera components for improved matrix handling and aspect ratio updates by @Miou-zora in #502
- chore: add format xmake task by @Miou-zora in #503
- fix: add pull_request branch ignore rules to CI workflow by @Miou-zora in #506
- ci: fix ci run on push and pull request by @Miou-zora in #507
- feat(physics): renamed PhysicsPlugin.hpp to follow consistent plugin naming convention by @eliotttesnier in #505
- refactor(logging): replace Log::Warn with Log::Warning for consistency by @eliotttesnier in #508
- refactor(logging): enhance log level handling and improve consistency with a Log::SetLevel() by @eliotttesnier in #511
- refactor(ci): remove git push step from clang-format job and update formatting logic by @Miou-zora in #510
- feat(pr): add PR title checker to enforce naming conventions by @eliotttesnier in #513
- docs: add documentation script by @Miou-zora in #514
- feat(physics): add CharacterController component backed by JPH::CharacterVirtual (+ interactive graphics/input example) by @Copilot in #504
- docs(engine): clean engine documentation by @Miou-zora in #517
New Contributors
- @eliotttesnier made their first contribution in #505
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- feat: make the project "Packaging compliant" by @Miou-zora in #268
- docs(coc): add code of conduct by @R4F405 in #406
- refactor: merge branch refactor-0.2 by @ripel2 in #415
New Contributors
Full Changelog: v0.1.1...v0.2.0
v0.1.1
What's Changed
- fix(UI): allowing assignment of multiple event listeners per document by @Divengerss in #264
- feat(object): add Shape struct and OBJLoader support for shapes by @Miou-zora in #266
- refactor: remove some warnings by @Miou-zora in #265
- fix(Sound): pcm frame reset for non-looping sounds by @Divengerss in #270
- feat(UI): functions to manipulate the loaded stylesheet by @Divengerss in #269
- feat(vehicle): allow to set vehicle body settings (mass, engine) by @ripel2 in #271
Full Changelog: v0.1.0...v0.1.1
v0.1.0
What's Changed
- ci: add mirroring job by @Miou-zora in #2
- Compilation system by @Miou-zora in #16
- build: add entt, vulkan_sdk and glm to project dependencies by @Miou-zora in #18
- ci: remove execution of mirroring job on pull request event by @Miou-zora in #19
- ci: compilation and unit test check by @ripel2 in #21
- docs: add description and commands in README by @ripel2 in #22
- feat(core): basic game engine implementation by @Miou-zora in #23
- feat(core): object plugin by @Miou-zora in #24
- feat(core): Camera3D component by @ripel2 in #29
- feat(core): collider systems by @Miou-zora in #30
- ci: automatic commit norm verification by @MasterLaplace in #31
- docs: doxygen support by @MasterLaplace in #25
- ci: coding style checker by @MasterLaplace in #27
- feat(core): input plugin by @ripel2 in #26
- feat(core): mass spring plugin by @ripel2 in #32
- ci: add automatic code coverage check by @ripel2 in #35
- feat(core): entity temporary components by @Miou-zora in #43
- feat(vk-wrapper): vulkan API wrapper by @MasterLaplace in #47
- feat(ui): add ui plugin with button management by @Miou-zora in #46
- feat(Scene): add Scene Management by @Miou-zora in #50
- build: separate plugins build from core build by @Miou-zora in #51
- doc(CONTRIBUTING): add the guidelines by @Miou-zora in #57
- refactor: add gitattributes and update files to be LF compliant by @Miou-zora in #55
- refactor: generic collision handling by @ripel2 in #59
- feat(log): add logging library using
spdlogby @Miou-zora in #56 - refactor(Log): remove xmake add_files of cpp where cpp doesn't exist by @Miou-zora in #60
- feat(Registry): add fixed update system management by @Miou-zora in #63
- fix: soft body physics breaking at low framerates by @ripel2 in #64
- refactor: fix sonarcloud issues by @Miou-zora in #67
- feat(schedulers): system schedulers by @ripel2 in #68
- ci: xmake display test output by @MasterLaplace in #71
- Fix last sonar errors by @Miou-zora in #69
- feat(object): obj loader by @MasterLaplace in #72
- ci: use xmake install github action by @ripel2 in #77
- feat(systems): system sets support by @ripel2 in #83
- ci: add critical check workflow by @Miou-zora in #74
- refactor(Engine): rename motherclass "Registry" to "Core" by @Miou-zora in #91
- Uniform Buffers by @MasterLaplace in #93
- feat(NativeScripting): add Native Scripting plugin by @Divengerss in #95
- feat(relationship): add relationship plugin by @Miou-zora in #94
- feat(Entity): add a ctor with Entity by @Miou-zora in #97
- feat(AssetsManager): add id key param when adding an asset by @Miou-zora in #109
- refactor: creating ESQ Entity instead of ENTT by @Divengerss in #117
- feat(vk-wrapper) implement texture mapping by @MasterLaplace in #96
- feat(ESGL): integrate ESGL natively by @ripel2 in #115
- feat(plugin): integration of Window and VkWrapper plugin systems for Core by @MasterLaplace in #116
- refactor: detach the vkwrapper from the project by @ripel2 in #124
- feat(Core): prevent systems from running multiple times by @Miou-zora in #113
- fix(Window): rename CreateWindow system to CreateWindowSystem by @Miou-zora in #127
- feat(Core): functions to run and stop the core by @Divengerss in #122
- feat(Entity): add parameters to AddTemporaryComponent by @Miou-zora in #126
- feat(Scheduler): manage scheduler order with a SchedulerContainer by @Miou-zora in #129
- ci: run on Windows by @ripel2 in #134
- feat(Plugin): add basic plugin creation with dependencies by @Miou-zora in #130
- feat(Log): add logging in Entity class by @Miou-zora in #118
- refactor(OpenGL): move shaders into cpp file by @Miou-zora in #135
- feat(Scheduler): add deltatime in update by @Miou-zora in #137
- refactor(Window, OpenGL): use the Window plugin instead of the wrapper GLFWWindow by @Miou-zora in #138
- feat(Scheduler): add shutdown scheduler by @Divengerss in #131
- fix(NativeScripting): bind
on_destroy(entt::registry) to callOnDestroyofNativeScriptingby @Miou-zora in #139 - refactor(OpenGL): use existing object plugin in opengl by @MasterLaplace in #140
- refactor: replacing usage of std::cout and std::cerr by the logger by @Divengerss in #132
- refactor: renaming all
registryvariables in prototypes tocoreby @Divengerss in #141 - refactor: split material, shader and model in new components by @ripel2 in #136
- chore: replace some "reg", "registry" to "core" by @Miou-zora in #142
- feat(Text): text rendering using OpenGL by @ripel2 in #145
- feat(Physics): JoltPhysics integration by @ripel2 in #154
- refactor: replace AssetsManager by ResourceManager to use entt resource cache by @MasterLaplace in #144
- fix: the ci that stuck after the linter went through by @MasterLaplace in #157
- feat(physics): softbody integration by @ripel2 in #156
- feat(core): merge game dev features by @ripel2 in #192
- feat(RenderingPipeline): add rendering pipeline by @Miou-zora in #194
- feat(UI): implement button image switch by @Miou-zora in #201
- refactor(Color): use char rather than float to store channels by @Miou-zora in #197
- fix: use bottom-left format for return value of GetMousePosition by @Miou-zora in #198
- feat(input): support callbacks in input manager by @ripel2 in #199
- refactor(window): using glm ivec2 to handle window size by @Divengerss in #202
- fix: add input plugin as dependency for opengl by @ripel2 in #215
- feat(input): encapsulate joystick polling functions by @ripel2 in #213
- feat(log): display entity ids with index and version by @ripel2 in #214
- feat: remove ifdef ES_DEBUG and use proper logging by @Miou-zora in #218
- refactor(OpenGL): removing usage of strerror on MSVC by @Divengerss in #220
- refactor(OpenGL): splitting systems into multiple files & rem...