feat(demo): attract mode amb pilot IA, escenaris curats i música contínua del títol

This commit is contained in:
2026-05-28 12:01:12 +02:00
parent 491992a4d7
commit c1956e0028
11 changed files with 404 additions and 27 deletions
+11 -3
View File
@@ -85,16 +85,24 @@ void Ship::processInput(float delta_time, uint8_t player_id) {
? input->checkActionPlayer1(InputAction::THRUST, Input::ALLOW_REPEAT)
: input->checkActionPlayer2(InputAction::THRUST, Input::ALLOW_REPEAT);
if (ROTATE_RIGHT) {
applyMovement(ROTATE_LEFT, ROTATE_RIGHT, THRUST, delta_time);
}
void Ship::applyMovement(bool rotate_left, bool rotate_right, bool thrust, float delta_time) {
if (is_hit_) {
return;
}
if (rotate_right) {
body_.angle += config_.physics.rotation_speed * delta_time;
}
if (ROTATE_LEFT) {
if (rotate_left) {
body_.angle -= config_.physics.rotation_speed * delta_time;
}
// Thrust: fuerza vectorial en la dirección de la nariz.
// angle - PI/2 porque angle=0 apunta hacia arriba (eje Y negativo SDL).
if (THRUST) {
if (thrust) {
const float DIR_X = std::cos(body_.angle - (Constants::PI / 2.0F));
const float DIR_Y = std::sin(body_.angle - (Constants::PI / 2.0F));
const float MAGNITUDE = body_.mass * config_.physics.acceleration;
+3
View File
@@ -22,6 +22,9 @@ class Ship : public Entities::Entity {
void init() override { init(nullptr, false); }
void init(const Vec2* spawn_point, bool activar_invulnerabilitat = false);
void processInput(float delta_time, uint8_t player_id);
// Aplica rotació/empenta des de booleans de control (mateixa física que
// processInput, però sense llegir Input). Usat pel pilot IA del mode demo.
void applyMovement(bool rotate_left, bool rotate_right, bool thrust, float delta_time);
void update(float delta_time) override;
void postUpdate(float delta_time) override;
void draw() const override;