JailDesigner 2fe22ff911 Fase 6c: migrar Ship al sistema de fisica vectorial
Primera entidad migrada. La nave del jugador ya NO mantiene su propio
estado cinemático ad-hoc — toda la física vive en Entity::body_ y el
movimiento lo realiza Physics::PhysicsWorld.

Cambios en ship.hpp:
- Eliminado: float velocity_ (escalar, polar)
- Eliminado: void applyPhysics() (lo hace el world)
- Añadido: override postUpdate() para sincronizar center_/angle_
- getVelocityVector() ahora devuelve body_.velocity (Vec2 cartesiano)
- Nuevo getter getSpeed() = body_.velocity.length()
- setCenter() actualiza tanto el mirror como body_.position
- markHit() detiene el body_ (velocity = 0)

Cambios en ship.cpp:
- Constructor configura el body_:
  * mass = 10.0 (referencia para impulsos en choques)
  * radius = SHIP_RADIUS (12.0)
  * restitution = 0.6 (rebote moderado en paredes)
  * linear_damping = 1.5 s⁻¹ (fricción exponencial)
  * angular_damping = 0.0 (la rotación es por input, no inercial)
- init() resetea body_ a la posición/orientación nueva, velocity = 0
- processInput() ahora:
  * Rotación: modifica body_.angle directamente (no física)
  * Thrust: applyForce(direction * mass * ACCELERATION)
- update() solo gestiona timer de invulnerabilidad y aplica el cap de
  MAX_VELOCITY (el thrust acumula fuerza sin tope; clampamos body_.velocity)
- postUpdate() copia body_.position -> center_ y body_.angle -> angle_
- draw() sin cambios funcionales (usa getSpeed() en lugar de velocity_)

Cambios en GameScene:
- En init(): physics_world_.addBody(&ship.getBody()) por cada nave activa
- En update(): physics_world_.update(dt) + ship.postUpdate(dt) al inicio
  del frame (las fuerzas del frame N-1 se integran en el frame N; 1
  frame de latencia ~16ms, imperceptible a 60fps)

Cambios de comportamiento visibles esperados:
- La nave ahora rebota contra las paredes del PLAYAREA con restitution=0.6
  (antes: clipping silencioso). PRIMERA muestra de la nueva física.
- Inercia: tras soltar THRUST, la nave conserva velocidad y se decelera
  exponencialmente con linear_damping. Sensación más espacial.
- Velocidad limitada en magnitud vectorial (antes: escalar). El cap
  preserva el feel arcade aproximado de MAX_VELOCITY = 120 px/s.

Edge case pendiente para tuning:
- Naves muertas siguen en el world como obstáculos físicos (radius=12).
  No es crítico mientras los enemies/bullets no estén migrados.

Smoke test xvfb: arranca correctamente. Validación de feeling requiere
test del usuario en vivo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:32:11 +02:00
2026-05-19 08:54:51 +02:00
2025-12-16 22:14:55 +01:00
2022-08-13 09:21:45 +02:00
2025-12-23 13:06:52 +01:00
2025-12-02 13:51:54 +01:00

Orni Attack

Orni Attack

Destrueix als cosinus mesisinus que ens ataquen montats en ORNIs!


Controls

El joc permet l'ús del teclat per a controlar la nau i la finestra. Les tecles són les següents:

Tecla Acció
Accelerar la nau
Frenar
Rotar a l'esquerra
Rotar a la dreta
Espai Disparar
ESC Eixir del joc
F1 Disminuir la mida de la finestra
F2 Augmentar la mida de la finestra
F3 Alternar pantalla completa

Compilació i execució

Compilar el joc

make           # Compilar
make debug     # Compilació en mode debug
make clean     # Netejar fitxers compilats
./orni         # Executar

Crear versions release

make macos_release     # macOS .app bundle + .dmg (Apple Silicon)
make linux_release     # Linux .tar.gz
make windows_release   # Windows .zip (requereix MinGW a Windows)
make windows_cross     # Cross-compilació Windows des de Linux/macOS
make rpi_release       # Raspberry Pi ARM64 cross-compilació

Requisits

  • C++20 compatible compiler
  • SDL3 library
  • CMake 3.15 o superior

Plataformes suportades

  • macOS (Apple Silicon i Intel)
  • Linux (x86_64)
  • Windows (MinGW)
  • Raspberry Pi (ARM64)

Història

Joc original creat en Turbo Pascal 7 per a DOS (1999), ara migrat a C++20 amb SDL3. Aquest port modern preserva la jugabilitat i l'estètica de l'original mentre aprofita les capacitats dels sistemes actuals.

Versió actual: BETA 3.0

S
Description
Destrueix als cosinus mesisinus que ens ataquen montats en ORNIs!
Readme GPL-3.0 54 MiB
v0.7.2 Latest
2025-12-23 13:16:31 +01:00
Languages
C 70.2%
C++ 28.4%
CMake 0.4%
Makefile 0.3%
Python 0.3%
Other 0.4%