feat(player): inèrcia de frenada amb acumulador de moviment
This commit is contained in:
1 parent
291cbdc957
commit
ea0f6d98a9
5 files changed
+153
-7
No files matched your search
@@ -92,6 +92,11 @@ namespace {
|
||||
// gestionarà a `applyMovement` mogent la distància parcial possible.
|
||||
// Amb dos jugadors només és un parell; si en un futur n'hi ha més,
|
||||
// la mateixa lògica es pot aplicar pairwise.
|
||||
// Important: el criteri "mou-se vs parat" consulta INPUT cru (no la
|
||||
// velocitat física), així un jugador que coasta per inèrcia sense
|
||||
// input compta com a parat — ni dispara head-on ni empeny l'altre.
|
||||
// L'overlap predictiu sí que usa velocitat física (intended), perquè
|
||||
// és el desplaçament real d'aquest frame.
|
||||
void resolvePlayerVsPlayer(const std::vector<Player*>& ps, float dt, float push_factor) {
|
||||
if (ps.size() < 2) { return; }
|
||||
auto* a = ps[0];
|
||||
@@ -119,8 +124,8 @@ namespace {
|
||||
};
|
||||
if (!rectsOverlap(NEXT_A, NEXT_B)) { return; }
|
||||
|
||||
const bool MOVING_A = (a->getIntendedVX() != 0.0F) || (a->getIntendedVY() != 0.0F);
|
||||
const bool MOVING_B = (b->getIntendedVX() != 0.0F) || (b->getIntendedVY() != 0.0F);
|
||||
const bool MOVING_A = (a->getInputVX() != 0.0F) || (a->getInputVY() != 0.0F);
|
||||
const bool MOVING_B = (b->getInputVX() != 0.0F) || (b->getInputVY() != 0.0F);
|
||||
|
||||
if (MOVING_A && MOVING_B) {
|
||||
// Head-on o encreuament amb col·lisió: cap dels dos es mou.
|
||||
|
||||
Reference in new issue
Block a user