Code: Select all
enum InputEventKind {
MouseButtonCase,
MouseAxisCase,
GamepadAxisCase,
GamepadButtonCase,
KeyboardKeyCase
}
struct InputEvent {
InputEventKind kind;
MouseButton? mouseButton;
MouseAxis? mouseAxis;
GamepadAxis? gamepadAxis;
GamepadButton? gamepadButton;
KeyboardKey? keyboardKey;
}
Code: Select all
interface InputEvent;
struct MouseButtonCase : InputEvent {
MouseButton mouseButton;
}
struct MouseAxisCase : InputEvent {
MouseAxis mouseAxis;
}
// .. and so on
Code: Select all
union InputEvent(GamepadButton, GamepadAxis, MouseButton, ...and the others);
Code: Select all
void Foo(InputEvent ev) =>
ev switch {
GamepadButton gb => $"Gamepad button {gb}",
GamepadAxis ga => $"Gamepad axis {ga}"
MouseButton mb => ..., // and so on...
MouseAxis ma => ...,
KeyboardKey kb => ...,
};
Code: Select all
enum InputEventKind {
MouseButtonCase,
MouseAxisCase,
GamepadAxisCase,
GamepadButtonCase,
KeyboardKeyCase
}
struct InputEvent {
InputEventKind kind;
MouseButton? mouseButton;
MouseAxis? mouseAxis;
GamepadAxis? gamepadAxis;
GamepadButton? gamepadButton;
KeyboardKey? keyboardKey;
}
Code: Select all
interface InputEvent;
struct MouseButtonCase : InputEvent {
MouseButton mouseButton;
}
struct MouseAxisCase : InputEvent {
MouseAxis mouseAxis;
}
// .. and so on
Code: Select all
union InputEvent(GamepadButton, GamepadAxis, MouseButton, ...and the others);
Code: Select all
void Foo(InputEvent ev) =>
ev switch {
GamepadButton gb => $"Gamepad button {gb}",
GamepadAxis ga => $"Gamepad axis {ga}"
MouseButton mb => ..., // and so on...
MouseAxis ma => ...,
KeyboardKey kb => ...,
};