From 3635cebf256cffb28e463b72c9e8b10a3a00443b Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 8 May 2026 13:26:47 +0200 Subject: [PATCH] feat(player): cabla flag players.collide_with_each_other MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A `collidesWithWorld` saltem la branca actor↔actor quan el flag està desactivat: els jugadors travessen els altres lliurement però segueixen topant amb murs i sarcs. A `tryPushSnapBlockers` retornem early per la mateixa raó: si no hi ha col·lisió entre jugadors, no hi ha ningú a empentar quan el snap del corredor s'aplica. --- source/game/entities/player.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/game/entities/player.cpp b/source/game/entities/player.cpp index f009bf2..4f47b04 100644 --- a/source/game/entities/player.cpp +++ b/source/game/entities/player.cpp @@ -22,6 +22,7 @@ #include "game/entities/entity.hpp" #include "game/entities/entity_manager.hpp" #include "game/entities/event_bus.hpp" +#include "game/gameplay_config.hpp" #include "game/options.hpp" #include "utils/defaults.hpp" @@ -414,6 +415,10 @@ auto Player::collidesWithWorld(const SDL_FRect& box) const -> bool { // al check actor↔actor més avall via el predicat `isOutOfPlay`. if (isOutOfPlay()) { return false; } if (map_.collides(box)) { return true; } + // Tweak `players.collide_with_each_other`: si està desactivat, els + // jugadors es travessen lliurement. La col·lisió contra el món + // (murs/sarcs) ja s'ha avaluat dalt; saltem només la part actor↔actor. + if (!GameplayConfig::get().playersCollide()) { return false; } if (all_players_ == nullptr) { return false; } // Per al contacte actor-actor usem la hit-box petita a banda i banda: // projectem la hit-box des de la posició base proposada i la comparem @@ -1737,6 +1742,10 @@ auto Player::tryPushSnapBlockers( float (Player::*get_pos)() const, void (Player::*set_pos)(float)) -> bool { if (all_players_ == nullptr) { return false; } + // Si el tweak de col·lisió entre jugadors està desactivat, mai hi + // ha res a empentar — els jugadors són intangibles entre si i el + // snap pot procedir lliurement sense desplaçar ningú. + if (!GameplayConfig::get().playersCollide()) { return false; } // Blockers = jugadors que ara mateix solapen la nostra hit-box (ja // amb el snap aplicat). Mateix criteri actor-actor que `collidesWithWorld`.