All Projects → NIKEA-SOFT → HelenaFramework

NIKEA-SOFT / HelenaFramework

Licence: MIT license
Modern framework on C++20 for backend/frontend development.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to HelenaFramework

Gdk For Unity Fps Starter Project
SpatialOS GDK for Unity FPS Starter Project
Stars: ✭ 119 (+124.53%)
Mutual labels:  ecs, mmo
SlimTracin
Software ray tracer written from scratch in C that can run on CPU or GPU with emphasis on ease of use and trivial setup
Stars: ✭ 49 (-7.55%)
Mutual labels:  engine, game-framework
Uecs
Ubpa Entity-Component-System (U ECS) in Unity3D-style
Stars: ✭ 174 (+228.3%)
Mutual labels:  ecs, game-dev
Entt
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more
Stars: ✭ 6,017 (+11252.83%)
Mutual labels:  ecs, game-dev
Enduro2d
Yet another 2d game engine of dreams (work in progress)
Stars: ✭ 82 (+54.72%)
Mutual labels:  engine, game-framework
Unitymmo
an unity mmo demo, base on ecs(game play), xlua(ui)
Stars: ✭ 780 (+1371.7%)
Mutual labels:  ecs, mmo
Mirror
#1 Open Source Unity Networking Library
Stars: ✭ 2,905 (+5381.13%)
Mutual labels:  udp, mmo
harmony-ecs
A small archetypal ECS focused on compatibility and performance
Stars: ✭ 33 (-37.74%)
Mutual labels:  ecs, game-dev
Kengine
Entity-Component-System (ECS) with a focus on ease-of-use, runtime extensibility and compile-time type safety and clarity.
Stars: ✭ 417 (+686.79%)
Mutual labels:  engine, ecs
IwEngine
This is an engine that I initially started building after taking a game coding class in high school. I didn't like Unity so tried to make something more code focused that was personally easier to use.
Stars: ✭ 97 (+83.02%)
Mutual labels:  engine, ecs
Actors.unity
🚀Actors is a framework empowering developers to make better games faster on Unity.
Stars: ✭ 437 (+724.53%)
Mutual labels:  ecs, game-framework
Gamedev Resources
🎮 🎲 A wonderful list of Game Development resources.
Stars: ✭ 2,054 (+3775.47%)
Mutual labels:  engine, game-dev
Gdk For Unity
SpatialOS GDK for Unity
Stars: ✭ 296 (+458.49%)
Mutual labels:  ecs, mmo
Rust Game Development Frameworks
List of curated frameworks by the **Game Development in Rust** community.
Stars: ✭ 81 (+52.83%)
Mutual labels:  ecs, frameworks
space
A SCI-FI community game server simulating space(ships). Built from the ground up to support moddable online action multiplayer and roleplay!
Stars: ✭ 25 (-52.83%)
Mutual labels:  ecs, mmo
game 01
Scalable MMORPG game server based on entity control
Stars: ✭ 19 (-64.15%)
Mutual labels:  udp, mmo
Reldens
Reldens - You can make it - Open Source MMORPG Platform
Stars: ✭ 130 (+145.28%)
Mutual labels:  mmo, game-dev
gdk-for-unity-blank-project
SpatialOS GDK for Unity Blank Project
Stars: ✭ 33 (-37.74%)
Mutual labels:  ecs, mmo
mine.js
🌏 A voxel engine built with JS/TS/RS. (formerly mc.js) (maybe mine.ts? or even mine.rs?)
Stars: ✭ 282 (+432.08%)
Mutual labels:  engine, ecs
Geotic
Entity Component System library for javascript
Stars: ✭ 97 (+83.02%)
Mutual labels:  engine, ecs

HelenaFramework


Introduction

HelenaFramework is a header-only, tiny and easy to use library for game backend programming and much more written in modern C++

Systems

The Systems are classes that implement specific logic.
Systems can register and throw signals to interact with other systems.

Features

  • Cross-platform
  • High performance
  • Friendly API
  • Scalable and flexible
  • Header only

Code Example

Requires systems: ECSManager

#include <Helena/Helena.hpp>
//#include <Test/Systems/ECSManager.hpp>

// Test System
class TestSystem
{
public:
    TestSystem() {
        // Start listen Engine events
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Init>    (&TestSystem::OnInit);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Config>  (&TestSystem::OnConfig);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Execute> (&TestSystem::OnExecute);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Tick>    (&TestSystem::OnTick);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Update>  (&TestSystem::OnUpdate);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Render>  (&TestSystem::OnRender);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Finalize>(&TestSystem::OnFinalize);
        Helena::Engine::SubscribeEvent<Helena::Events::Engine::Shutdown>(&TestSystem::OnShutdown);

        // Start listen events from system ECSManager
        Helena::Engine::SubscribeEvent<Helena::Events::ECSManager::CreateEntity>(&TestSystem::OnCreateEntity);
        Helena::Engine::SubscribeEvent<Helena::Events::ECSManager::RemoveEntity>(&TestSystem::OnRemoveEntity);
    }
    ~TestSystem() = default;

    // if event type is empty we can ignore argument in callback
    void OnInit() {
        HELENA_MSG_DEBUG("EventInit");

        auto& ecs = Helena::Engine::GetSystem<Helena::Systems::ECSManager>();
        ecs.CreateEntity(); // Create entity and trigger event CreateEntity
    }

    void OnConfig() {
        HELENA_MSG_DEBUG("EngineConfig");
    }

    void OnExecute() {
        HELENA_MSG_DEBUG("EngineExecute");
    }

    void OnTick(const Helena::Events::Engine::Tick event) {
        HELENA_MSG_DEBUG("EngineTick: {:.4f}", event.deltaTime);
    }

    void OnUpdate(const Helena::Events::Engine::Update event) {
        HELENA_MSG_DEBUG("EngineUpdate: {:.4f}", event.fixedTime);
    }

    void OnRender(const Helena::Events::Engine::Render event) {
        HELENA_MSG_DEBUG("EngineRender: {:.4f}", event.deltaTime);
    }

    void OnFinalize() {
        HELENA_MSG_DEBUG("EngineFinalize");
    }

    void OnShutdown() {
        HELENA_MSG_DEBUG("EngineShutdown");
    }

    void OnCreateEntity(const Helena::Events::ECSManager::CreateEntity& event) {
        auto& ecs = Helena::Engine::GetSystem<Helena::Systems::ECSManager>();
        auto& userInfo = ecs.AddComponent<UserInfo>(event.Entity, "Helena", 30u);

        HELENA_MSG_DEBUG("Entity created, user name: {}, age: {}", userInfo.name, userInfo.age);
        ecs.RemoveEntity(event.Entity); // Removed entity after trigger RemoveEntity event
    }

    void OnRemoveEntity(const Helena::Events::ECSManager::RemoveEntity& event) {
        auto& ecs = Helena::Engine::GetSystem<Helena::Systems::ECSManager>();
        auto& userInfo = ecs.GetComponent<UserInfo>(event.Entity);

        HELENA_MSG_DEBUG("Entity: {} removed!", userInfo.name);
    }
};

int main(int argc, char** argv)
{
    // Engine started from Initialize method
    Helena::Engine::Context::Initialize();          // Initialize Context
    Helena::Engine::Context::SetAppName("Helena");  // Set application name
    Helena::Engine::Context::SetTickrate(60.f);     // Set fixed update frequency
    Helena::Engine::Context::SetMain([]()           // Register systems happen in this callback
    {
        // Register all used systems
        Helena::Engine::RegisterSystem<Helena::Systems::ECSManager>();  // Entity Component System
        Helena::Engine::RegisterSystem<TestSystem>();                   // Test System
    });

    // Engine loop
    while(Helena::Engine::Heartbeat()) {}

    return 0;
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].