From 66fd89ef9a7da5cf70fc2cff09129e193a27abab Mon Sep 17 00:00:00 2001
From: Lucas Stratmann <lucas.stratmann@student.reutlingen-university.de>
Date: Tue, 6 Oct 2020 20:33:18 +0200
Subject: [PATCH] Changed Variable Handling

---
 .../com/ardublock/translator/Translator.java  | 16 ++++++++--
 .../translator/block/control/LoopBlock.java   | 29 ++++++++++++++-----
 .../translator/block/control/SketchBlock.java | 21 ++++++++++++--
 .../numbers/LocalVariableDigitalBlock.java    | 14 +++++++++
 .../numbers/SetterVariableDigitalBlock.java   |  3 ++
 .../numbers/SetterVariableNumberBlock.java    |  4 +++
 .../listener/SimulateCodeButtonListener.java  |  4 +--
 7 files changed, 77 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ardublock/translator/Translator.java b/src/main/java/com/ardublock/translator/Translator.java
index 801ed89..12e826b 100644
--- a/src/main/java/com/ardublock/translator/Translator.java
+++ b/src/main/java/com/ardublock/translator/Translator.java
@@ -136,15 +136,27 @@ public class Translator
 	//added by letsoING -> simulator
 	//TODO check if it works as expected ;-P 
 	//-> only changed rootTranslatorBlock.toCode to .toSim from translate
-	public SimCode simulate(Long blockId,Simulator sim) throws SocketNullException, SubroutineNotDeclaredException, BlockException
+	public SimCode simulate(Long blockId) throws SocketNullException, SubroutineNotDeclaredException, BlockException
 	{
 		TranslatorBlockFactory translatorBlockFactory = new TranslatorBlockFactory();
 		Block block = workspace.getEnv().getBlock(blockId);
 		TranslatorBlock rootTranslatorBlock = translatorBlockFactory.buildTranslatorBlock(this, blockId, block.getGenusName(), "", "", block.getBlockLabel());
-		rootTranslatorBlock.toSim(sim);
+		rootTranslatorBlock.toSim();
 		return null;
 	}
 	
+	public void clearMaps() {
+		numberVariableSet.clear();
+		booleanVariableSet.clear();
+	}
+	public Map<String, String> getNuberMap() {
+		return numberVariableSet;
+	}
+	
+	public Map<String, String> getBooleanMap() {
+		return booleanVariableSet;
+	}
+	
 	public BlockAdaptor getBlockAdaptor()
 	{
 		return blockAdaptor;
diff --git a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
index 95581a5..79447c9 100644
--- a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
@@ -1,5 +1,6 @@
 package com.ardublock.translator.block.control;
 
+import java.util.Map;
 import java.util.Vector;
 
 import com.ardublock.translator.Translator;
@@ -12,8 +13,12 @@ import tec.letsgoing.ardublock.simulator.Simulator;
 import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
 import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
 import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
 import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolSet;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeIntSet;
 
 
 public class LoopBlock extends TranslatorBlock
@@ -40,7 +45,9 @@ public class LoopBlock extends TranslatorBlock
 		return ret;
 	}
 	
-	public void toSim(Simulator sim) throws BlockException, SocketNullException {
+	public SimCode toSim() throws BlockException, SocketNullException {
+		Simulator sim = Simulator.getInstance();
+		translator.clearMaps();
 		Vector<SimCode> vec =new Vector<SimCode>();
 		TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
 		while (translatorBlock != null)
@@ -50,25 +57,31 @@ public class LoopBlock extends TranslatorBlock
 			if (newSimCode != null) {
 				vec.add(newSimCode);
 			}
-			
-			
 		}
 		SimCodeFunction loop =new SimCodeFunction("loop",vec);
-		
-		SimTypeBool boolTrue = new SimTypeBool(true);
 		Vector<SimCode> mainVec = new Vector<SimCode>();
-		//mainVec.add(new CodeExecuteFunction("setup"));
+		
+		Map<String,String> numbers=translator.getNuberMap();
+		Map<String,String> bools=translator.getBooleanMap();
+		for (String var : numbers.keySet()) {
+			mainVec.add(new CodeIntSet(new SimTypeString(var),new SimTypeInt(0)));
+		}
+		
+		for (String var : bools.keySet()) {
+			mainVec.add(new CodeBoolSet(new SimTypeString(var),new SimTypeBool(false)));
+		}
+		
 		Vector<SimCode> loopVec = new Vector<SimCode>();
 		loopVec.add(new CodeExecuteFunction("loop"));
+		SimTypeBool boolTrue = new SimTypeBool(true);
 		mainVec.add(new CodeWhile(boolTrue, loopVec));
 		SimCodeFunction main = new SimCodeFunction("main", mainVec);
 
-		//sim.addFunctionsCode(setupCode);
-		System.out.println("Add new Functions");
 		sim.stopSimu();
 		sim.resetFunctions();
 		sim.addFunctionsCode(loop);
 		sim.addFunctionsCode(main);
+		return null;
 		
 	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/SketchBlock.java b/src/main/java/com/ardublock/translator/block/control/SketchBlock.java
index 55298c3..78acf29 100644
--- a/src/main/java/com/ardublock/translator/block/control/SketchBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/SketchBlock.java
@@ -2,6 +2,7 @@ package com.ardublock.translator.block.control;
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.Vector;
 
@@ -19,8 +20,12 @@ import tec.letsgoing.ardublock.simulator.Simulator;
 import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
 import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
 import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
 import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolSet;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeIntSet;
 
 
 @SuppressWarnings("unused")
@@ -96,7 +101,9 @@ public class SketchBlock extends TranslatorBlock
 		}
 	}
 	
-	public void toSim(Simulator sim) throws BlockException, SocketNullException {
+	public SimCode toSim() throws BlockException, SocketNullException {
+		Simulator sim = Simulator.getInstance();
+		translator.clearMaps();
 		Vector<SimCode> mainVec =new Vector<SimCode>();
 		Vector<SimCode> setup =new Vector<SimCode>();
 		Vector<SimCode> loop =new Vector<SimCode>();
@@ -110,6 +117,16 @@ public class SketchBlock extends TranslatorBlock
 				mainVec.add(newSimCode);
 			}		
 		}
+		Map<String,String> numbers=translator.getNuberMap();
+		Map<String,String> bools=translator.getBooleanMap();
+		for (String var : numbers.keySet()) {
+			mainVec.add(new CodeIntSet(new SimTypeString(var),new SimTypeInt(0)));
+		}
+		
+		for (String var : bools.keySet()) {
+			mainVec.add(new CodeBoolSet(new SimTypeString(var),new SimTypeBool(false)));
+		}
+		
 		//Setup
 		translatorBlock = getTranslatorBlockAtSocket(1);
 		while (translatorBlock != null)
@@ -150,7 +167,7 @@ public class SketchBlock extends TranslatorBlock
 		sim.addFunctionsCode(setupFunc);
 		sim.addFunctionsCode(loopFunc);
 		sim.addFunctionsCode(main);
-		
+		return null;
 		
 		
 	}
diff --git a/src/main/java/com/ardublock/translator/block/numbers/LocalVariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/LocalVariableDigitalBlock.java
index 608683d..2a1aa30 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/LocalVariableDigitalBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/LocalVariableDigitalBlock.java
@@ -3,6 +3,11 @@ package com.ardublock.translator.block.numbers;
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolGet;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeIntGet;
+
 public class LocalVariableDigitalBlock extends TranslatorBlock
 {
 	public LocalVariableDigitalBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -25,4 +30,13 @@ public class LocalVariableDigitalBlock extends TranslatorBlock
 		}
 		return codePrefix + newInternalName + codeSuffix;
 	}
+	
+	public String toString() {
+		return label;
+	}
+	
+	public SimCode toSim() {
+		return new CodeBoolGet(new SimTypeString(label));
+		
+	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
index 6e30e2f..dca5ce6 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
@@ -78,6 +78,9 @@ public class SetterVariableDigitalBlock extends TranslatorBlock
 	public SimCode toSim() throws SocketNullException {
 		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
 		SimTypeString variableName = new SimTypeString(translatorBlock.toString());
+		if (translatorBlock instanceof VariableDigitalBlock) {
+			translator.addBooleanVariable(translatorBlock.toString(), translatorBlock.toString());
+		}
 		translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
 		SimTypeBool value = new SimTypeBool(translatorBlock.toSim());
 		return new CodeBoolSet(variableName,value);
diff --git a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableNumberBlock.java b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableNumberBlock.java
index 798ba68..34b3733 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableNumberBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableNumberBlock.java
@@ -74,8 +74,12 @@ public class SetterVariableNumberBlock extends TranslatorBlock
 	public SimCode toSim() throws SocketNullException {
 		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
 		SimTypeString variableName = new SimTypeString(translatorBlock.toString());
+		if (translatorBlock instanceof VariableNumberBlock) {
+			translator.addNumberVariable(translatorBlock.toString(), translatorBlock.toString());
+		}
 		translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
 		SimTypeInt value = new SimTypeInt(translatorBlock.toSim());
+		
 		return new CodeIntSet(variableName,value);
 	}
 }
diff --git a/src/main/java/com/ardublock/ui/listener/SimulateCodeButtonListener.java b/src/main/java/com/ardublock/ui/listener/SimulateCodeButtonListener.java
index 48258f4..f51c3df 100644
--- a/src/main/java/com/ardublock/ui/listener/SimulateCodeButtonListener.java
+++ b/src/main/java/com/ardublock/ui/listener/SimulateCodeButtonListener.java
@@ -211,7 +211,7 @@ public class SimulateCodeButtonListener implements ActionListener
 				translator.setRootBlockName("loop");
 				Block loopBlock = renderableBlock.getBlock();
 				code.append(translator.translate(loopBlock.getBlockID()));			
-				translator.simulate(loopBlock.getBlockID(),sim);
+				translator.simulate(loopBlock.getBlockID());
 			}
 			
 			for (RenderableBlock renderableBlock : subroutineBlockSet)
@@ -219,7 +219,7 @@ public class SimulateCodeButtonListener implements ActionListener
 				translator.setRootBlockName("subroutine");
 				Block subroutineBlock = renderableBlock.getBlock();
 				code.append(translator.translate(subroutineBlock.getBlockID()));
-				translator.simulate(subroutineBlock.getBlockID(),sim);
+				translator.simulate(subroutineBlock.getBlockID());
 				//collect simcode objects here -> all SimCodeObjects inside main subroutines
 				//eg. simList.append(translator.simulate(subroutineBlock.getBlockID())); -> simList = simCodeObject-List
 			}
-- 
GitLab