Using Builder pattern for CoreModelParameters now
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / SimpleLogicUIStandalone.java
1 package net.mograsim.logic.model;
2
3 import java.util.function.Consumer;
4
5 import net.mograsim.logic.core.timeline.Timeline;
6 import net.mograsim.logic.model.model.LogicModelModifiable;
7 import net.mograsim.logic.model.modeladapter.CoreModelParameters;
8 import net.mograsim.logic.model.modeladapter.CoreModelParameters.CoreModelParametersBuilder;
9 import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
10 import net.mograsim.logic.model.preferences.DefaultRenderPreferences;
11
12 public class SimpleLogicUIStandalone
13 {
14         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel)
15         {
16                 executeVisualisation(setupLogicModel, (Consumer<VisualisationObjects>) null);
17         }
18
19         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, Consumer<VisualisationObjects> beforeRun)
20         {
21                 CoreModelParametersBuilder paramsBuilder = new CoreModelParametersBuilder();
22                 paramsBuilder.gateProcessTime = 50;
23                 paramsBuilder.hardcodedComponentProcessTime = paramsBuilder.gateProcessTime * 5;
24                 paramsBuilder.wireTravelTime = 10;
25                 executeVisualisation(setupLogicModel, paramsBuilder.build(), beforeRun);
26         }
27
28         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params)
29         {
30                 executeVisualisation(setupLogicModel, params, null);
31         }
32
33         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params,
34                         Consumer<VisualisationObjects> beforeRun)
35         {
36                 // setup logic model
37                 LogicModelModifiable logicModel = new LogicModelModifiable();
38                 setupLogicModel.accept(logicModel);
39
40                 // convert to core model
41                 Timeline timeline = LogicCoreAdapter.convert(logicModel, params);
42
43                 // initialize UI and executer
44                 LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel, new DefaultRenderPreferences());
45                 LogicExecuter exec = new LogicExecuter(timeline);
46
47                 if (beforeRun != null)
48                         beforeRun.accept(new VisualisationObjects(logicModel, timeline, ui, exec));
49
50                 // run it
51                 exec.setSpeedFactor(1);
52                 exec.startLiveExecution();
53                 ui.run();
54                 exec.stopLiveExecution();
55         }
56
57         public static class VisualisationObjects
58         {
59                 public final LogicModelModifiable model;
60                 public final Timeline timeline;
61                 public final LogicUIStandaloneGUI gui;
62                 public final LogicExecuter executer;
63
64                 public VisualisationObjects(LogicModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
65                 {
66                         this.model = model;
67                         this.timeline = timeline;
68                         this.gui = gui;
69                         this.executer = executer;
70                 }
71         }
72
73         private SimpleLogicUIStandalone()
74         {
75                 throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
76         }
77 }