| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package controller;
- import controller.tiles.interactive.InteractiveTileController;
- import util.GAMESTATE;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
- public class RessourceManager {
- private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
- private final GameController gameController;
- public RessourceManager(GameController gameController) {
- this.gameController = gameController;
- }
- public void start() {
- scheduler.scheduleAtFixedRate(() -> {
- if (!gameController.isRunning()) {
- scheduler.shutdown();
- return;
- }
- if(gameController.getView().gameState == GAMESTATE.INVENTORY || gameController.getView().gameState == GAMESTATE.PLAY)
- calculateResources();
- }, 0, 1, TimeUnit.SECONDS);
- }
- public void stop() {
- scheduler.shutdownNow();
- }
- private void calculateResources() {
- // If interactiveTileControllers can change concurrently, consider making a snapshot:
- List<InteractiveTileController> snapshot;
- synchronized(gameController.interactiveTileControllers) {
- snapshot = new ArrayList<>(gameController.interactiveTileControllers);
- }
- for (InteractiveTileController c : snapshot) {
- int spI = c.getModel().getSecondsPerItem();
- // Avoid division by zero or spI <= 0:
- if (spI > 0) {
- // You need to track elapsed seconds per controller or use a shared seconds counter:
- // For simplicity, you could store a counter in each model:
- c.getModel().incrementSecondCounter();
- if (c.getModel().getSecondCounter() % spI == 0) {
- c.getModel().addItem();
- System.out.println("New amount: " + c.getModel().getItemAmount());
- }
- }
- }
- }
- }
|