feat(model): track visited rooms on Player for the map

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-31 20:58:21 +02:00
parent f1b83f1f81
commit 42dbcd9696
2 changed files with 32 additions and 1 deletions

View File

@@ -5,7 +5,9 @@ import lombok.Setter;
import thb.jeanluc.adventure.model.item.Item;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
/**
* The player avatar. Tracks the current room, an ordered inventory, and a
@@ -15,9 +17,11 @@ import java.util.Optional;
public class Player {
/** Room the player is currently standing in. */
@Setter
private Room currentRoom;
/** Ids of rooms the player has entered, in first-visit order (for the map). */
private final Set<String> visitedRoomIds = new LinkedHashSet<>();
/**
* Inventory keyed by item id. {@link LinkedHashMap} keeps insertion
* order for stable {@code inventory} listings while still providing
@@ -44,6 +48,17 @@ public class Player {
}
this.currentRoom = startRoom;
this.gold = startGold;
this.visitedRoomIds.add(startRoom.getId());
}
/**
* Moves the player into a room and records it as visited.
*
* @param room the room now occupied; must not be null
*/
public void setCurrentRoom(Room room) {
this.currentRoom = room;
this.visitedRoomIds.add(room.getId());
}
/**

View File

@@ -54,4 +54,20 @@ class PlayerTest {
assertThat(p.getCurrentRoom()).isEqualTo(b);
}
@Test
void startRoomIsVisitedFromTheStart() {
Room start = new Room("kitchen", "Kitchen", "desc");
Player p = new Player(start, 0);
assertThat(p.getVisitedRoomIds()).containsExactly("kitchen");
}
@Test
void movingMarksTheNewRoomVisited() {
Room start = new Room("kitchen", "Kitchen", "desc");
Room hall = new Room("hallway", "Hallway", "desc");
Player p = new Player(start, 0);
p.setCurrentRoom(hall);
assertThat(p.getVisitedRoomIds()).containsExactly("kitchen", "hallway");
}
}