treballant en el extendedMap per a les colisións fora de pantalla
This commit is contained in:
@@ -70,18 +70,11 @@ class Player {
|
||||
auto getSpawnParams() -> SpawnData { return {.x = x_, .y = y_, .vx = vx_, .vy = vy_, .last_grounded_position = last_grounded_position_, .state = state_, .flip = sprite_->getFlip()}; }
|
||||
static auto skinToAnimationPath(const std::string& skin_name) -> std::string;
|
||||
void setRoom(std::shared_ptr<Room> room) { room_ = std::move(room); }
|
||||
void setAdjacentRoom(std::shared_ptr<Room> room, Room::Border direction);
|
||||
void clearAdjacentRoom();
|
||||
[[nodiscard]] auto isAlive() const -> bool { return is_alive_; }
|
||||
[[nodiscard]] auto getVY() const -> float { return vy_; }
|
||||
void applyPlatformDisplacement(float dx, float surface_y);
|
||||
void clearPlatformFlag() { on_platform_ = false; }
|
||||
|
||||
// Cross-room collision: rooms adyacentes (TOP=0, RIGHT=1, BOTTOM=2, LEFT=3, TR=4, BR=5, BL=6, TL=7)
|
||||
static constexpr int BORDER_ROOM_COUNT = 8;
|
||||
void setBorderRoom(int index, std::shared_ptr<Room> room);
|
||||
void clearBorderRooms();
|
||||
|
||||
void setPaused(bool value) { is_paused_ = value; }
|
||||
void setIgnoreInput(bool value) { ignore_input_ = value; }
|
||||
[[nodiscard]] auto getIgnoreInput() const -> bool { return ignore_input_; }
|
||||
@@ -96,18 +89,8 @@ class Player {
|
||||
static constexpr int WIDTH = 12;
|
||||
static constexpr int HEIGHT = 24;
|
||||
|
||||
// --- Contexto de colisión (selección de room + traducción de coordenadas) ---
|
||||
struct CollisionContext {
|
||||
const TileCollider& tc;
|
||||
float offset_x;
|
||||
float offset_y;
|
||||
};
|
||||
auto getCollisionContext() const -> CollisionContext;
|
||||
|
||||
// --- Objetos y punteros ---
|
||||
std::shared_ptr<Room> room_;
|
||||
std::shared_ptr<Room> adjacent_room_;
|
||||
Room::Border adjacent_direction_{Room::Border::NONE};
|
||||
std::unique_ptr<AnimatedSprite> sprite_;
|
||||
|
||||
// --- Posición y física ---
|
||||
@@ -142,9 +125,6 @@ class Player {
|
||||
Room::Border border_ = Room::Border::TOP;
|
||||
int last_grounded_position_ = 0;
|
||||
|
||||
// --- Cross-room collision ---
|
||||
std::shared_ptr<Room> border_rooms_[BORDER_ROOM_COUNT]{};
|
||||
|
||||
// --- Renderizado y sonido ---
|
||||
JA_Sound_t* jump_sound_ = nullptr;
|
||||
JA_Sound_t* land_sound_ = nullptr;
|
||||
@@ -156,21 +136,6 @@ class Player {
|
||||
void handleJumpAndDrop();
|
||||
void moveHorizontal(float delta_time);
|
||||
void moveVertical(float delta_time);
|
||||
|
||||
// Cross-room collision helpers
|
||||
struct CrossRoomEntry {
|
||||
const TileCollider* tc;
|
||||
float ox;
|
||||
float oy;
|
||||
};
|
||||
struct CrossRoomChecks {
|
||||
CrossRoomEntry entries[BORDER_ROOM_COUNT]{};
|
||||
int count{0};
|
||||
};
|
||||
auto getCrossRoomChecks() const -> CrossRoomChecks;
|
||||
void checkCrossRoomWallH(float& new_x, const CrossRoomChecks& checks) const;
|
||||
void checkCrossRoomFloor(float old_y, const CrossRoomChecks& checks);
|
||||
auto hasCrossRoomGround(const CrossRoomChecks& checks) const -> bool;
|
||||
void followSlope();
|
||||
void exitSlope();
|
||||
void detectSlopeEntry();
|
||||
|
||||
Reference in New Issue
Block a user