33 for (
auto &&[tf, vel, input, type, speed] : view) {
37 if (speed.boostRemaining > 0.0f) {
39 if (speed.boostRemaining <= 0.0f) {
40 speed.boostRemaining = 0.0f;
41 speed.multiplier = 1.0f;
45 const float finalSpeed = speed.baseSpeed * speed.multiplier;
47 float dx = 0.f, dy = 0.f;
51 if (input.mask & Bits::MoveUp)
53 if (input.mask & Bits::MoveDown)
55 if (input.mask & Bits::MoveLeft)
57 if (input.mask & Bits::MoveRight)
60 const float len = std::sqrt(dx * dx + dy * dy);
66 const float targetX = dx * finalSpeed;
67 const float targetY = dy * finalSpeed;
69 constexpr float accel = 8.0f;
70 constexpr float decel = 10.0f;
72 if (dx != 0.f || dy != 0.f) {
73 vel.direction.x += (targetX - vel.direction.x) * accel * dt;
74 vel.direction.y += (targetY - vel.direction.y) * accel * dt;
76 vel.direction.x += (0.0f - vel.direction.x) * decel * dt;
77 vel.direction.y += (0.0f - vel.direction.y) * decel * dt;