Class WorldMap

java.lang.Object
epidemic.model.WorldMap

public class WorldMap extends Object
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 Details

  • 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

      public void addAgent(Agent agent)
      Zleca dodanie nowego agenta do środowiska. Wykorzystuje mechanizm buforowania – agent zostanie faktycznie udostępniony dla logiki silnika dopiero po wywołaniu metody applyChanges().
      Parameters:
      agent - Jednostka do zaaplikowania na mapie.
    • removeAgent

      public void removeAgent(Agent agent)
      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 typu ConcurrentModificationException podczas iterowania po głównej kolekcji w poszczególnych fazach epoki.
    • getNeighbors

      public List<Agent> getNeighbors(Point2D pos, double radius)
      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

      public List<Agent> getNeighborsForAgent(Agent agent, double radius)
      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

      public List<Agent> getAgents()
    • getHospitals

      public List<Hospital> getHospitals()
    • addHospital

      public void addHospital(Hospital hospital)
      Umieszcza nową placówkę medyczną w przestrzeni symulacji.
      Parameters:
      hospital - Skonfigurowany obiekt szpitala.
    • getSpatialManager

      public SpatialManager getSpatialManager()
    • getHospitalAt

      public Hospital getHospitalAt(Point2D pos)
      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

      public boolean isWithinBounds(Point2D pos)
      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

      public void addOrRefreshInfectionField(Point2D pos, double infectivity)
      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

      public InfectionField getFieldAt(Point2D pos)
      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

      public Collection<InfectionField> 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.