Package epidemic.model
Class WorldMap
java.lang.Object
epidemic.model.WorldMap
Centralne repozytorium reprezentujące dyskretne środowisko przestrzenne symulacji.
Zarządza cyklem życia oraz kolekcjami agentów i infrastruktury medycznej (szpitali).
Realizuje opóźnione modyfikacje list (wzorzec podwójnego buforowania) w celu zapewnienia
bezpieczeństwa wątkowego i uniknięcia błędów podczas iteracji, a także deleguje
złożone zapytania przestrzenne do dedykowanego komponentu
SpatialManager.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Map<String, InfectionField> private intprivate SpatialManagerprivate int -
Constructor Summary
ConstructorsConstructorDescriptionWorldMap(int width, int height, double cellSize) Inicjalizuje nową przestrzeń o zadanych wymiarach. -
Method Summary
Modifier and TypeMethodDescriptionvoidZleca dodanie nowego agenta do środowiska.voidaddHospital(Hospital hospital) Umieszcza nową placówkę medyczną w przestrzeni symulacji.voidaddOrRefreshInfectionField(Point2D pos, double infectivity) Rejestruje nowe pole infekcji (aerozol) lub odświeża już istniejące na danej współrzędnej.voidAplikuje wszystkie zakolejkowane zmiany z buforów do głównej listy agentów.voidPrzetwarza cykl życia stref skażeń środowiskowych.Udostępnia bezstanowy widok na wszystkie aktywne chmury zakaźne w środowisku.getFieldAt(Point2D pos) Pobiera stan zakażenia środowiskowego z konkretnej komórki przestrzeni.intgetHospitalAt(Point2D pos) Wyszukuje szpital znajdujący się dokładnie we wskazanych współrzędnych geograficznych siatki.getNeighbors(Point2D pos, double radius) Wyszukuje agentów znajdujących się w określonym promieniu od zadanego punktu przestrzennego.getNeighborsForAgent(Agent agent, double radius) Wyszukuje bezpośrednich sąsiadów dla wskazanego agenta.intgetWidth()booleanisWithinBounds(Point2D pos) Sprawdza geometryczną poprawność położenia na mapie.voidZleca przebudowę globalnego indeksu przestrzennego na podstawie aktualnych pozycji wszystkich agentów w głównej kolekcji.voidremoveAgent(Agent agent) Zleca usunięcie istniejącego agenta ze środowiska (np.
-
Field Details
-
agents
-
hospitals
-
width
private int width -
height
private int height -
spatialManager
-
agentsToAdd
-
agentsToRemove
-
airborneFields
-
-
Constructor Details
-
WorldMap
public WorldMap(int width, int height, double cellSize) Inicjalizuje nową przestrzeń o zadanych wymiarach.- Parameters:
width- Szerokość mapy w jednostkach logicznych.height- Wysokość mapy w jednostkach logicznych.cellSize- Rozmiar pojedynczej komórki siatki używanej przez menedżera przestrzennego.
-
-
Method Details
-
addAgent
Zleca dodanie nowego agenta do środowiska. Wykorzystuje mechanizm buforowania – agent zostanie faktycznie udostępniony dla logiki silnika dopiero po wywołaniu metodyapplyChanges().- Parameters:
agent- Jednostka do zaaplikowania na mapie.
-
removeAgent
Zleca usunięcie istniejącego agenta ze środowiska (np. w wyniku zgonu). Podobnie jak przy dodawaniu, usunięcie zostaje zbuforowane.- Parameters:
agent- Jednostka do zaaplikowania na mapie.
-
applyChanges
public void applyChanges()Aplikuje wszystkie zakolejkowane zmiany z buforów do głównej listy agentów. Metoda ta zapobiega wyjątkom typuConcurrentModificationExceptionpodczas iterowania po głównej kolekcji w poszczególnych fazach epoki. -
getNeighbors
Wyszukuje agentów znajdujących się w określonym promieniu od zadanego punktu przestrzennego.- Parameters:
pos- Centralny punkt wyszukiwania.radius- Zasięg wyszukiwania w jednostkach mapy.- Returns:
- Lista jednostek znajdujących się w strefie.
-
getNeighborsForAgent
Wyszukuje bezpośrednich sąsiadów dla wskazanego agenta.- Parameters:
agent- Agent stanowiący centrum obszaru poszukiwań.radius- Promień wyszukiwania.- Returns:
- Lista jednostek przebywających w pobliżu.
-
rebuildSpatialIndex
public void rebuildSpatialIndex()Zleca przebudowę globalnego indeksu przestrzennego na podstawie aktualnych pozycji wszystkich agentów w głównej kolekcji. -
getWidth
public int getWidth() -
getHeight
public int getHeight() -
getAgents
-
getHospitals
-
addHospital
Umieszcza nową placówkę medyczną w przestrzeni symulacji.- Parameters:
hospital- Skonfigurowany obiekt szpitala.
-
getSpatialManager
-
getHospitalAt
Wyszukuje szpital znajdujący się dokładnie we wskazanych współrzędnych geograficznych siatki.- Parameters:
pos- Pozycja do weryfikacji.- Returns:
- Obiekt placówki lub
null, jeśli infrastruktura nie istnieje w danym punkcie.
-
isWithinBounds
Sprawdza geometryczną poprawność położenia na mapie.- Parameters:
pos- Punkt przestrzenny do weryfikacji.- Returns:
true, jeśli punkt leży ściśle wewnątrz dozwolonych granic mapy.
-
addOrRefreshInfectionField
Rejestruje nowe pole infekcji (aerozol) lub odświeża już istniejące na danej współrzędnej. Mapowanie realizowane jest z wykorzystaniem słownika wielowątkowego (ConcurrentHashMap), a klucz generowany jest ze złączenia współrzędnych (format "X,Y"), co gwarantuje optymalizację wyszukiwania i aktualizacji w stałym czasie O(1).- Parameters:
pos- Dokładna pozycja źródła powstania infekcji środowiskowej.infectivity- Parametr określający siłę zostawionego wirusa.
-
getFieldAt
Pobiera stan zakażenia środowiskowego z konkretnej komórki przestrzeni.- Parameters:
pos- Pozycja docelowa do przeanalizowania.- Returns:
- Odpowiedni obiekt chmury (InfectionField) lub
null, jeśli powietrze w tym miejscu jest czyste.
-
getActiveFields
Udostępnia bezstanowy widok na wszystkie aktywne chmury zakaźne w środowisku. Metoda używana głównie na potrzeby silnika renderującego (GUI).- Returns:
- Kolekcja aktualnie istniejących stref skażenia.
-
decayInfectionFields
public void decayInfectionFields()Przetwarza cykl życia stref skażeń środowiskowych. Redukuje siłę zakaźną wszystkich istniejących chmur w środowisku i automatycznie usuwa z kolekcji (ewikcja) te, które osiągnęły próg wygaśnięcia.
-