Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
PlayerMouvementSystem.cpp
Go to the documentation of this file.
1
11
12namespace rtp::server
13{
15 // Public API
17
19 : _registry(registry)
20 {
21 }
22
24 {
25 (void)dt;
26 auto view =
32
33 for (auto &&[tf, vel, input, type, speed] : view) {
34 if (type.type != net::EntityType::Player)
35 continue;
36
37 if (speed.boostRemaining > 0.0f) {
38 speed.boostRemaining -= dt;
39 if (speed.boostRemaining <= 0.0f) {
40 speed.boostRemaining = 0.0f;
41 speed.multiplier = 1.0f;
42 }
43 }
44
45 const float finalSpeed = speed.baseSpeed * speed.multiplier;
46
47 float dx = 0.f, dy = 0.f;
48 using Bits =
50
51 if (input.mask & Bits::MoveUp)
52 dy -= 1.f;
53 if (input.mask & Bits::MoveDown)
54 dy += 1.f;
55 if (input.mask & Bits::MoveLeft)
56 dx -= 1.f;
57 if (input.mask & Bits::MoveRight)
58 dx += 1.f;
59
60 const float len = std::sqrt(dx * dx + dy * dy);
61 if (len > 0.f) {
62 dx /= len;
63 dy /= len;
64 }
65
66 const float targetX = dx * finalSpeed;
67 const float targetY = dy * finalSpeed;
68
69 constexpr float accel = 8.0f;
70 constexpr float decel = 10.0f;
71
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;
75 } else {
76 vel.direction.x += (0.0f - vel.direction.x) * decel * dt;
77 vel.direction.y += (0.0f - vel.direction.y) * decel * dt;
78 }
79 }
80 }
81} // namespace rtp::server
auto zipView(this Self &self)
void update(float dt) override
Update player movement system logic for one frame.
PlayerMouvementSystem(ecs::Registry &registry)
Constructor for PlayerMouvementSystem.
ecs::Registry & _registry
Reference to the entity registry.
File : GameManager.hpp License: MIT Author : Elias Josué HAJJAR LLAUQUEN elias-josue....
Component representing movement speed with temporary boosts.
float boostRemaining
Remaining boost duration in seconds.
Component representing position, rotation, and scale of an entity.
Definition Transform.hpp:23
Component representing a 2D velocity.
Definition Velocity.hpp:17
Component to handle network input for server entities.