move the remaining hotkeys into the InputMapper
Space, W, S, R, Q and F3 all acted on GameWorldView state, so each needed a request event before it could move. One event per action rather than a shared action enum, matching how the existing request events are named and keeping subscribers from waking on actions they do not care about. The split is deliberate about where knowledge lives. Each event says only what the player asked for, never how to satisfy it: - PauseToggleRequestedEvent carries no speed; which speed to restore is remembered by the receiver. - SpeedStepRequestedEvent is a relative notch, because the ladder of speeds belongs to the receiver (unlike SpeedChangeRequestedEvent, which the speed buttons send with an absolute multiplier). - ModeCancelRequestedEvent names no mode; which of builder, blueprint or deconstruct is active is state only the receiver has. - DebugDrawToggleRequestedEvent is the request to flip the flag, where the existing DebugDrawToggledEvent is the announcement that it was flipped, so the flag keeps a single owner. GameWorldView::keyPressEvent is now nothing but a forward to the mapper. Shift release stays behind on purpose: it is the modifier of a mouse gesture (REQ-BLD-COPY-CONFIG), not a keyboard action, and modelling it as one would misrepresent it. Bindings are still hard-coded, and behaviour is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
This commit is contained in:
@@ -31,8 +31,13 @@
|
||||
#include "EventHandler.h"
|
||||
#include "ExitBlueprintModeRequestedEvent.h"
|
||||
#include "ExitBuilderModeRequestedEvent.h"
|
||||
#include "DebugDrawToggleRequestedEvent.h"
|
||||
#include "GhostRotationRequestedEvent.h"
|
||||
#include "InputMapper.h"
|
||||
#include "ModeCancelRequestedEvent.h"
|
||||
#include "PanDirectionChangedEvent.h"
|
||||
#include "PauseToggleRequestedEvent.h"
|
||||
#include "SpeedStepRequestedEvent.h"
|
||||
#include "DebugDrawToggledEvent.h"
|
||||
#include "ArtifactCountChangedEvent.h"
|
||||
#include "BeamFiredEvent.h"
|
||||
@@ -83,6 +88,11 @@ class GameWorldView : public QOpenGLWidget,
|
||||
ExitBlueprintModeRequestedEvent,
|
||||
SpeedChangeRequestedEvent,
|
||||
PanDirectionChangedEvent,
|
||||
PauseToggleRequestedEvent,
|
||||
SpeedStepRequestedEvent,
|
||||
GhostRotationRequestedEvent,
|
||||
ModeCancelRequestedEvent,
|
||||
DebugDrawToggleRequestedEvent,
|
||||
CommandRequestedEvent>
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -105,6 +115,8 @@ public:
|
||||
protected:
|
||||
void initializeGL() override;
|
||||
void paintGL() override;
|
||||
// Only forwards to the input mapper; every key this widget acts on reaches it
|
||||
// as a published action instead (REQ-UI-HOTKEYS).
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
void keyReleaseEvent(QKeyEvent* event) override;
|
||||
// Key-up never arrives for a key that was still held when focus moved away —
|
||||
@@ -127,6 +139,11 @@ private:
|
||||
void handleEvent(std::shared_ptr<const ExitBlueprintModeRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const SpeedChangeRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const PanDirectionChangedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const PauseToggleRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const SpeedStepRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const GhostRotationRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const ModeCancelRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const DebugDrawToggleRequestedEvent> event) override;
|
||||
void handleEvent(std::shared_ptr<const CommandRequestedEvent> event) override;
|
||||
|
||||
// Enqueue a sim command onto the CommandManager (the single mutation path).
|
||||
|
||||
Reference in New Issue
Block a user