Skip to content

Instantly share code, notes, and snippets.

@lomeat
Last active February 27, 2023 22:03
Show Gist options
  • Save lomeat/aed51e7adc34fc3401f336ba96e83018 to your computer and use it in GitHub Desktop.
Save lomeat/aed51e7adc34fc3401f336ba96e83018 to your computer and use it in GitHub Desktop.
const movement = Object.entries(gameState.controls.movement).reduce(
(acc, [key, value]) => ({
...acc,
[key]: KeyboardController({
key: value,
action: (dt) => move(dt, key as Model.Player.Direction),
}),
}),
// In my opinion, there is unsafe 'as'
{} as Model.Player.Movement
);
// [methods]
function move(dt, direction: Model.Player.Direction) {
// The 3rd, minimum readability
sprite[EAxis[direction]] += dt * state.speed * EPlayerDirections[direction];
// The 2nd, less readability, but it is shorter
if (direction === "left" || direction === "right") {
sprite.x += dt * state.speed * EPlayerDirections[direction];
} else if (direction === "up" || direction === "down") {
sprite.y += dt * state.speed * EPlayerDirections[direction];
}
// The 1st, too long
switch (direction) {
case "left":
sprite.x += dt * state.speed * -1;
break;
case "right":
sprite.x += dt * state.speed * 1;
break;
case "up":
sprite.y += dt * state.speed * -1;
break;
case "down":
sprite.y += dt * state.speed * 1;
break;
default:
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment