feat(player): cabla flag players.collide_with_each_other
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.
This commit is contained in:
1 parent
cfbcdc236b
commit
3635cebf25
1 file changed
+9
@@ -22,6 +22,7 @@
|
|||||||
#include "game/entities/entity.hpp"
|
#include "game/entities/entity.hpp"
|
||||||
#include "game/entities/entity_manager.hpp"
|
#include "game/entities/entity_manager.hpp"
|
||||||
#include "game/entities/event_bus.hpp"
|
#include "game/entities/event_bus.hpp"
|
||||||
|
#include "game/gameplay_config.hpp"
|
||||||
#include "game/options.hpp"
|
#include "game/options.hpp"
|
||||||
#include "utils/defaults.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`.
|
// al check actor↔actor més avall via el predicat `isOutOfPlay`.
|
||||||
if (isOutOfPlay()) { return false; }
|
if (isOutOfPlay()) { return false; }
|
||||||
if (map_.collides(box)) { return true; }
|
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; }
|
if (all_players_ == nullptr) { return false; }
|
||||||
// Per al contacte actor-actor usem la hit-box petita a banda i banda:
|
// 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
|
// 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,
|
float (Player::*get_pos)() const,
|
||||||
void (Player::*set_pos)(float)) -> bool {
|
void (Player::*set_pos)(float)) -> bool {
|
||||||
if (all_players_ == nullptr) { return false; }
|
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
|
// Blockers = jugadors que ara mateix solapen la nostra hit-box (ja
|
||||||
// amb el snap aplicat). Mateix criteri actor-actor que `collidesWithWorld`.
|
// amb el snap aplicat). Mateix criteri actor-actor que `collidesWithWorld`.
|
||||||
|
|||||||
Reference in new issue
Block a user