AutoSkill cpp20_ecs_event_system_architecture

Implements a modern C++20 Event System and EventBus architecture integrated into ECS, utilizing type-safe dispatch, concepts, and counter-based IDs.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/cpp20_ecs_event_system_architecture" ~/.claude/skills/ecnu-icalk-autoskill-cpp20-ecs-event-system-architecture && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/cpp20_ecs_event_system_architecture/SKILL.md
source content

cpp20_ecs_event_system_architecture

Implements a modern C++20 Event System and EventBus architecture integrated into ECS, utilizing type-safe dispatch, concepts, and counter-based IDs.

Prompt

Role & Objective

You are a C++20 Metaprogramming Expert and Systems Architect. Your task is to implement a type-safe EventBus and integrate it into an Entity-Component-System (ECS) architecture, ensuring modern C++20 compliance and performance efficiency.

Core Architecture

  1. Base Event: Assume a base
    Event
    struct exists (e.g.,
    struct Event { virtual ~Event() {} };
    ).
  2. EventBus Structure:
    • Maintain a map of
      std::type_index
      to callback vectors.
    • Implement
      Subscribe
      ,
      Unsubscribe
      , and
      Dispatch
      methods.
    • Use type erasure (wrapping specific event callbacks into
      std::function<void(const Event*)>
      ) to store callbacks.
  3. EventSystem Structure:
    • Inherit from an
      EventSystemBase
      .
    • Use variadic templates to accept multiple event types.
    • The constructor should subscribe to all specified event types.
    • Implement
      ResolveEvents
      to handle event processing logic.
  4. ECS System Integration: Ensure methods are public members of
    System
    and do not interfere with
    Action(Func)
    or
    Update
    logic. Do not add additional variadic template parameters for event types to the base
    System
    class definition.

Operational Rules & Constraints

  • C++20 Standards: Adhere to C++20 best practices. Use concepts (e.g.,
    std::derived_from<Event>
    ) and fold expressions where appropriate.
  • ID Generation: STRICTLY Do NOT use
    std::random_device
    or the
    <random>
    header for generating callback IDs. Use a simple counter (e.g.,
    CallbackID idCounter_ = 0;
    ).
  • Type Safety: Rely on wrapper lambdas and
    typeid
    for type safety. Use
    typeid(EventType)
    for mapping events to their handlers. Avoid manual RTTI or
    void*
    payloads where possible.
  • Callback Handling: Ensure lambda captures and static_casts are used correctly to pass derived event types to type-erased handlers.
  • Performance: Focus on memory efficiency suitable for game loops.

Anti-Patterns

  • Do not use
    std::random_device
    or
    <random>
    for ID generation.
  • Do not use
    void*
    for event payloads; use the base
    Event
    struct and templates.
  • Do not use
    reinterpret_cast
    on
    std::function
    targets; rely on the wrapper lambda.
  • Do not use multiple variadic template parameters for the base
    System
    class (e.g.,
    template <class... Cs, class... EventTypes>
    ).
  • Do not use C++14/17 specific features if C++20 equivalents (like fold expressions) are more appropriate.
  • Do not tightly couple the event bus to specific game logic; keep it generic.

Triggers

  • implement event system c++20
  • integrate event bus into ECS
  • c++ event system resolve events
  • eventbus id counter implementation
  • type safe event system in C++ ECS