Made hardcoded components slower to fix a timing bug in the Am2900
[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.LogicCoreAdapter;
9
10 public class SimpleLogicUIStandalone
11 {
12         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel)
13         {
14                 executeVisualisation(setupLogicModel, (Consumer<VisualisationObjects>) null);
15         }
16
17         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, Consumer<VisualisationObjects> beforeRun)
18         {
19                 CoreModelParameters params = new CoreModelParameters();
20                 params.gateProcessTime = 50;
21                 params.hardcodedComponentProcessTime = params.gateProcessTime * 5;
22                 params.wireTravelTime = 10;
23                 executeVisualisation(setupLogicModel, params, beforeRun);
24         }
25
26         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params)
27         {
28                 executeVisualisation(setupLogicModel, params, null);
29         }
30
31         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params,
32                         Consumer<VisualisationObjects> beforeRun)
33         {
34                 // setup logic model
35                 LogicModelModifiable logicModel = new LogicModelModifiable();
36                 setupLogicModel.accept(logicModel);
37
38                 // convert to core model
39                 Timeline timeline = LogicCoreAdapter.convert(logicModel, params);
40
41                 // initialize UI and executer
42                 LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel);
43                 LogicExecuter exec = new LogicExecuter(timeline);
44
45                 if (beforeRun != null)
46                         beforeRun.accept(new VisualisationObjects(logicModel, timeline, ui, exec));
47
48                 // run it
49                 exec.startLiveExecution();
50                 ui.run();
51                 exec.stopLiveExecution();
52         }
53
54         public static class VisualisationObjects
55         {
56                 public final LogicModelModifiable model;
57                 public final Timeline timeline;
58                 public final LogicUIStandaloneGUI gui;
59                 public final LogicExecuter executer;
60
61                 public VisualisationObjects(LogicModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
62                 {
63                         this.model = model;
64                         this.timeline = timeline;
65                         this.gui = gui;
66                         this.executer = executer;
67                 }
68         }
69
70         private SimpleLogicUIStandalone()
71         {
72                 throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
73         }
74 }