Mouse-Events direkt auf UiComponent #10

Closed
opened 2026-04-16 19:52:50 +00:00 by sebastian · 0 comments
Owner

Problem: Interaktivität erfordert aktuell Vererbung von ClickableUiComponent. Jede zusammengesetzte Komponente die clickable sein soll (z.B. UiBuildingMenuButton) muss davon erben, auch wenn eigentlich nur ein Kind-Element die Interaktion tragen soll. Das erzwingt tiefe Klassenhierarchien.
Lösung: addMouseListener(), fireEvent() und VisualStyle-Map direkt in UiComponent:

class UiComponent {
public:
    void addMouseListener(std::function<void(const MouseEventData&)> cb);
    void setVisualStyle(UiEventType type, const VisualStyle& style);
    // ...
private:
    std::vector<MouseCallback> mouseListeners;
    std::unordered_map<UiEventType, VisualStyle> visualStyles;
    // Mouse-State (mousedOver, etc.) zieht auch hierher
};

ClickableUiComponent als Klasse entfernen.
Acceptance Criteria:

  • Jeder UiComponent-Subtyp kann addMouseListener() nutzen
  • ClickableUiComponent.h/.cpp gelöscht
  • UiBuildingMenuButton erbt direkt von UiComponent (oder einem neuen UiBox)
Problem: Interaktivität erfordert aktuell Vererbung von ClickableUiComponent. Jede zusammengesetzte Komponente die clickable sein soll (z.B. UiBuildingMenuButton) muss davon erben, auch wenn eigentlich nur ein Kind-Element die Interaktion tragen soll. Das erzwingt tiefe Klassenhierarchien. Lösung: addMouseListener(), fireEvent() und VisualStyle-Map direkt in UiComponent: ``` class UiComponent { public: void addMouseListener(std::function<void(const MouseEventData&)> cb); void setVisualStyle(UiEventType type, const VisualStyle& style); // ... private: std::vector<MouseCallback> mouseListeners; std::unordered_map<UiEventType, VisualStyle> visualStyles; // Mouse-State (mousedOver, etc.) zieht auch hierher }; ``` ClickableUiComponent als Klasse entfernen. Acceptance Criteria: - Jeder UiComponent-Subtyp kann addMouseListener() nutzen - ClickableUiComponent.h/.cpp gelöscht - UiBuildingMenuButton erbt direkt von UiComponent (oder einem neuen UiBox)
sebastian added this to the Event-System milestone 2026-04-16 19:52:53 +00:00
sebastian added the
refactoring
engine
labels 2026-04-16 19:53:05 +00:00
sebastian added this to the Dicewars project 2026-04-16 21:00:37 +00:00
sebastian added the
wontfix
label 2026-04-20 09:10:54 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#10
No description provided.