handleSdlEvent method
- @mustCallSuper
- Event event
Handle SDL events.
This method will be passed one event at a time.
Implementation
@mustCallSuper
void handleSdlEvent(final Event event) {
final sdl = event.sdl;
if (event is QuitEvent) {
stop();
} else if (event is ControllerDeviceEvent) {
switch (event.state) {
case DeviceState.added:
final controller = sdl.openGameController(event.joystickId);
gameControllers[event.joystickId] = controller;
break;
case DeviceState.removed:
gameControllers.remove(event.joystickId);
break;
case DeviceState.remapped:
// Do nothing.
break;
}
} else if (event is JoyDeviceEvent) {
final id = event.joystickId;
switch (event.state) {
case DeviceState.added:
final joystick = sdl.openJoystick(id);
joysticks[id] = joystick;
break;
case DeviceState.removed:
joysticks.remove(id);
break;
case DeviceState.remapped:
// Do nothing.
break;
}
} else {
final level = currentLevel;
if (level != null) {
for (final commandTrigger in triggerMap.triggers) {
final name = commandTrigger.name;
final key = commandTrigger.keyboardKey;
final button = commandTrigger.button;
if ((event is KeyboardEvent &&
event.repeat == false &&
key != null &&
event.key.scancode == key.scanCode &&
(key.altKey == false ||
event.key.modifiers.contains(KeyMod.alt)) &&
(key.controlKey == false ||
event.key.modifiers.contains(KeyMod.ctrl)) &&
(key.shiftKey == false ||
event.key.modifiers.contains(KeyMod.shift))) ||
(event is ControllerButtonEvent &&
button != null &&
event.button == button)) {
final PressedState state;
if (event is KeyboardEvent) {
state = event.state;
} else if (event is ControllerButtonEvent) {
state = event.state;
} else {
throw Exception('Internal error.');
}
final bool value;
switch (state) {
case PressedState.pressed:
value = level.startCommand(name);
break;
case PressedState.released:
value = level.stopCommand(name);
break;
}
if (value == true) {
return;
}
}
}
level.handleSdlEvent(event);
}
}
}