From 7a3716e537f5e63af46213ad96bf4f00b6d1a09e Mon Sep 17 00:00:00 2001 From: titou Date: Mon, 27 May 2024 17:13:02 +0200 Subject: [PATCH] loadAgent --- src/backend/Agent.java | 4 +++- src/backend/Simulator.java | 49 ++++++++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/backend/Agent.java b/src/backend/Agent.java index 8b11e23..0ef1b9d 100644 --- a/src/backend/Agent.java +++ b/src/backend/Agent.java @@ -36,5 +36,7 @@ public abstract class Agent { // see step function in Simulator public abstract boolean liveTurn(ArrayList neighbors, Simulator world); - + public String save() { + return ""; + } } diff --git a/src/backend/Simulator.java b/src/backend/Simulator.java index e43efaf..1b01aec 100644 --- a/src/backend/Simulator.java +++ b/src/backend/Simulator.java @@ -354,14 +354,53 @@ public class Simulator extends Thread { //DONE public ArrayList getAgentsSave() { - //TODO : Same idea as the other save method, but for agents - return null; + ArrayList agentsSave = new ArrayList<>(); + for (Agent agent : agents) { + agentsSave.add(agent.save()); + } + return agentsSave; } + //DONE - public void loadAgents(ArrayList stringArray) { - //TODO : Same idea as other load methods, but for agent list - + public void loadAgents(ArrayList agentData) { + synchronized (agents) { + agents.clear(); + for (String data : agentData) { + Agent agent = createAgent(data); + if (agent != null) { + agents.add(agent); + } + } + } } + + private Agent createAgent(String agentData) { + String[] parts = agentData.split(","); + if (parts.length < 1) { + return null; + } + String agentType = parts[0]; + switch (agentType) { + case "Sheep": + return createSheep(parts); + default: + System.out.println("Unknown agent type: " + agentType); + return null; + } + } + + private Sheep createSheep(String[] parts) { + if (parts.length >= 3) { + int x = Integer.parseInt(parts[1]); + int y = Integer.parseInt(parts[2]); + return new Sheep(x, y); + } else { + System.out.println("Invalid Sheep data: " + String.join(",", parts)); + return null; + } + } + + //DONE /** * used by label in interface to show the active click action