Description:
Add contracts window.
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r194:49caa188c262 -

@@ -0,0 +1,10
1 using Encompass;
2
3 using isometricparkfna.Messages;
4
5 namespace isometricparkfna.Components {
6
7 public struct WindowTypeComponent : IComponent {
8 public Window type;
9 }
10 }
@@ -0,0 +1,35
1
2
3
4 using Microsoft.Xna.Framework.Input;
5
6 using Encompass;
7
8 using isometricparkfna.Messages;
9 using isometricparkfna.Components;
10
11 namespace isometricparkfna.Engines {
12
13 [Receives(typeof(ToggleWindowMessage), typeof(ToggleVisibilityMessage))]
14 [Reads(typeof(WindowTypeComponent), typeof(VisibilityComponent))]
15 [Writes(typeof(VisibilityComponent))]
16 class UIEngine : Engine
17 {
18
19 public override void Update(double dt)
20 {
21 foreach (ref readonly var windowMessage in ReadMessages<ToggleWindowMessage>())
22 {
23 foreach (ref readonly var entity in ReadEntities<WindowTypeComponent>())
24 {
25 var window_type = GetComponent<WindowTypeComponent>(entity).type;
26 if (window_type == windowMessage.Window)
27 {
28 var visibilityComponent = GetComponent<VisibilityComponent>(entity);
29 SetComponent(entity, new VisibilityComponent{visible = !visibilityComponent.visible});
30 }
31 }
32 }
33 }
34 }
35 } No newline at end of file
@@ -0,0 +1,63
1 using Microsoft.Xna.Framework;
2 using Microsoft.Xna.Framework.Graphics;
3
4 using System.Collections.Generic;
5
6 using isometricparkfna.UI;
7 using isometricparkfna.Engines;
8 using isometricparkfna.Components;
9 using isometricparkfna.Messages;
10
11 using ImGuiNET;
12
13 using Encompass;
14 using SpriteFontPlus;
15
16 namespace isometricparkfna.Renderers
17 {
18 public class ImGuiWindowRenderer : GeneralRenderer
19 {
20 private ImFontPtr font;
21 private ImGuiWindowBridgeEngine BridgeEngine;
22 public ImGuiWindowRenderer(ImFontPtr font, ImGuiWindowBridgeEngine engine)
23 {
24 this.font = font;
25 this.BridgeEngine = engine;
26 }
27
28 public override void Render()
29 {
30 foreach (ref readonly var entity in ReadEntities<WindowTypeComponent>())
31 {
32 var window_type = GetComponent<WindowTypeComponent>(entity).type;
33 var visible = GetComponent<VisibilityComponent>(entity).visible;
34
35 if (visible)
36 {
37 switch (window_type)
38 {
39 case Window.Contracts:
40 var contracts = ReadEntities<AreaComponent>();
41
42 var names = new List<string>();
43
44 // var names = contracts.Select(entity => GetComponent<NameComponent>(entity).DisplayName)
45 foreach(var e in contracts)
46 {
47 names.Add(GetComponent<NameComponent>(e).DisplayName);
48
49 }
50
51 ContractsWindow.Render(this.font, this.BridgeEngine, names);
52 break;
53 default:
54 break;
55 }
56 }
57
58 }
59
60 }
61
62 }
63 } No newline at end of file
@@ -0,0 +1,73
1 using System.Collections.Generic;
2
3 using ImGuiNET;
4
5 using isometricparkfna.Engines;
6 using isometricparkfna.Messages;
7
8 using Num = System.Numerics;
9
10 namespace isometricparkfna.UI
11 {
12 public static class ContractsWindow
13 {
14
15 public static void Render(ImFontPtr font, ImGuiWindowBridgeEngine engine, List<string> contracts )
16 {
17 bool newShow = true;
18 if (newShow)
19 {
20 ImGui.PushFont(font);
21
22 ImGui.GetStyle().WindowMenuButtonPosition = ImGuiDir.None;
23 ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 0.0f);
24 ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0.0f);
25 ImGui.PushStyleVar(ImGuiStyleVar.FrameBorderSize, 1.0f);
26 ImGui.PushStyleVar(ImGuiStyleVar.TabRounding, 0.0f);
27 ImGui.PushStyleColor(ImGuiCol.WindowBg, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
28 ImGui.PushStyleColor(ImGuiCol.Header, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
29 ImGui.PushStyleColor(ImGuiCol.HeaderHovered, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
30 ImGui.PushStyleColor(ImGuiCol.HeaderActive, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
31 ImGui.PushStyleColor(ImGuiCol.ButtonHovered, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
32
33 var title_bar = new Num.Vector4(0.65f, 0.65f, 0.65f, 1f);
34 ImGui.PushStyleColor(ImGuiCol.TitleBg, title_bar);
35 ImGui.PushStyleColor(ImGuiCol.TitleBgActive, title_bar);
36 ImGui.PushStyleColor(ImGuiCol.TitleBgCollapsed, title_bar);
37
38 ImGui.PushStyleColor(ImGuiCol.Border, new Num.Vector4(0f, 0f, 0f, 1f));
39 ImGui.PushStyleColor(ImGuiCol.BorderShadow, new Num.Vector4(0f, 0f, 0f, 0.5f));
40
41
42
43 ImGui.PushStyleColor(ImGuiCol.Button, new Num.Vector4(0.75f, 0.75f, 0.75f, 1f));
44 ImGui.PushStyleColor(ImGuiCol.Text, new Num.Vector4(0f, 0f, 0f, 1f));
45 ImGui.SetNextWindowSize(new Num.Vector2(400, 400));
46 ImGui.Begin("Contracts", ref newShow, ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings);
47 ImGui.ListBoxHeader("Contracts:");
48 foreach (var contract in contracts)
49 {
50 // ImGui.Text(contract);
51 ImGui.Selectable(contract, false);
52 }
53 ImGui.ListBoxFooter();
54 if (ImGui.Button("Okay"))
55 {
56 newShow = false;
57 }
58
59 ImGui.End();
60 ImGui.GetStyle().WindowMenuButtonPosition = ImGuiDir.Left;
61 ImGui.PopStyleVar(4);
62 ImGui.PopStyleColor(12);
63 ImGui.PopFont();
64 }
65
66 if (!newShow)
67 {
68 engine.messages.Add(new ToggleWindowMessage {Window = Window.Contracts });
69 }
70
71 }
72 }
73 } No newline at end of file
@@ -10,7 +10,7
10 "args": [],
10 "args": [],
11 "env": {
11 "env": {
12 "LD_LIBRARY_PATH": "${workspaceFolder}/isometric-park-fna/bin/Debug/netcoreapp3.1/lib64",
12 "LD_LIBRARY_PATH": "${workspaceFolder}/isometric-park-fna/bin/Debug/netcoreapp3.1/lib64",
13 "DYLD_LIBRARY_PATH": "${workspaceFolder}/isometric-park-fna/bin/Debug/netcoreapp3.1/osx"
13 "DYLD_LIBRARY_PATH": "${workspaceFolder}/fnalibs/osx"
14 },
14 },
15 "cwd": "${workspaceFolder}/isometric-park-fna/bin/Debug/netcoreapp3.1",
15 "cwd": "${workspaceFolder}/isometric-park-fna/bin/Debug/netcoreapp3.1",
16 "console": "integratedTerminal",
16 "console": "integratedTerminal",
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -11,7 +11,7
11 EndProject
11 EndProject
12 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.NET", "ImGui.NET\ImGui.NET.csproj", "{0023328E-2EFD-448B-BD85-A76769CD106A}"
12 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.NET", "ImGui.NET\ImGui.NET.csproj", "{0023328E-2EFD-448B-BD85-A76769CD106A}"
13 EndProject
13 EndProject
14 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "encompass-cs", "encompass-cs\encompass-cs\encompass-cs.csproj", "{93842D17-2CBE-40A9-AA4C-A2BCE836B817}"
14 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "encompass-cs", "encompass-cs\encompass-cs\encompass-cs.csproj", "{D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}"
15 EndProject
15 EndProject
16 Global
16 Global
17 GlobalSection(SolutionConfigurationPlatforms) = preSolution
17 GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -71,18 +71,18
71 {0023328E-2EFD-448B-BD85-A76769CD106A}.Debug|x64.Build.0 = Debug|Any CPU
71 {0023328E-2EFD-448B-BD85-A76769CD106A}.Debug|x64.Build.0 = Debug|Any CPU
72 {0023328E-2EFD-448B-BD85-A76769CD106A}.Release|x64.ActiveCfg = Release|Any CPU
72 {0023328E-2EFD-448B-BD85-A76769CD106A}.Release|x64.ActiveCfg = Release|Any CPU
73 {0023328E-2EFD-448B-BD85-A76769CD106A}.Release|x64.Build.0 = Release|Any CPU
73 {0023328E-2EFD-448B-BD85-A76769CD106A}.Release|x64.Build.0 = Release|Any CPU
74 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|anycpu.ActiveCfg = Debug|Any CPU
74 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|anycpu.ActiveCfg = Debug|Any CPU
75 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|anycpu.Build.0 = Debug|Any CPU
75 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|anycpu.Build.0 = Debug|Any CPU
76 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|anycpu.ActiveCfg = Release|Any CPU
76 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|anycpu.ActiveCfg = Release|Any CPU
77 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|anycpu.Build.0 = Release|Any CPU
77 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|anycpu.Build.0 = Release|Any CPU
78 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|x86.ActiveCfg = Debug|Any CPU
78 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|x86.ActiveCfg = Debug|Any CPU
79 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|x86.Build.0 = Debug|Any CPU
79 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|x86.Build.0 = Debug|Any CPU
80 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|x86.ActiveCfg = Release|Any CPU
80 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|x86.ActiveCfg = Release|Any CPU
81 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|x86.Build.0 = Release|Any CPU
81 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|x86.Build.0 = Release|Any CPU
82 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|x64.ActiveCfg = Debug|Any CPU
82 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|x64.ActiveCfg = Debug|Any CPU
83 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Debug|x64.Build.0 = Debug|Any CPU
83 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Debug|x64.Build.0 = Debug|Any CPU
84 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|x64.ActiveCfg = Release|Any CPU
84 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|x64.ActiveCfg = Release|Any CPU
85 {93842D17-2CBE-40A9-AA4C-A2BCE836B817}.Release|x64.Build.0 = Release|Any CPU
85 {D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}.Release|x64.Build.0 = Release|Any CPU
86 EndGlobalSection
86 EndGlobalSection
87 GlobalSection(SolutionProperties) = preSolution
87 GlobalSection(SolutionProperties) = preSolution
88 HideSolutionNode = FALSE
88 HideSolutionNode = FALSE
@@ -6,6 +6,7
6 using Encompass;
6 using Encompass;
7
7
8 using isometricparkfna.Messages;
8 using isometricparkfna.Messages;
9 using isometricparkfna.Components;
9
10
10 namespace isometricparkfna.Engines {
11 namespace isometricparkfna.Engines {
11
12
@@ -18,6 +19,8
18 typeof(ToggleVisibilityMessage),
19 typeof(ToggleVisibilityMessage),
19 typeof(TogglePauseMessage),
20 typeof(TogglePauseMessage),
20 typeof(GameRateMessage))]
21 typeof(GameRateMessage))]
22 [Reads(typeof(WindowTypeComponent),
23 typeof(VisibilityComponent))]
21 public class InputEngine : Engine
24 public class InputEngine : Engine
22 {
25 {
23 private KeyboardState keyboardPrev;
26 private KeyboardState keyboardPrev;
@@ -141,6 +144,10
141 SendMessage(new ToggleWindowMessage{Window = Window.News});
144 SendMessage(new ToggleWindowMessage{Window = Window.News});
142
145
143 }
146 }
147 if (keyboardCur.IsKeyDown(Keys.O) && keyboardPrev.IsKeyUp(Keys.O))
148 {
149 SendMessage(new ToggleWindowMessage{Window = Window.Contracts});
150 }
144 if (keyboardCur.IsKeyDown(Keys.G) && keyboardPrev.IsKeyUp(Keys.G))
151 if (keyboardCur.IsKeyDown(Keys.G) && keyboardPrev.IsKeyUp(Keys.G))
145 {
152 {
146 SendMessage(new ToggleVisibilityMessage{Element = Element.Grid});
153 SendMessage(new ToggleVisibilityMessage{Element = Element.Grid});
@@ -90,6 +90,7
90 private BudgetWindow budgetWindow;
90 private BudgetWindow budgetWindow;
91 public bool showForest;
91 public bool showForest;
92 public bool showNews;
92 public bool showNews;
93 public bool showContracts;
93
94
94 //Encompass
95 //Encompass
95 private WorldBuilder WorldBuilder = new WorldBuilder();
96 private WorldBuilder WorldBuilder = new WorldBuilder();
@@ -186,20 +187,32
186
187
187 Line.initialize(GraphicsDevice);
188 Line.initialize(GraphicsDevice);
188
189
190 //Has to happen before Encompass stuff, because the Encompass machinery around ImGui requires debugWindow's monoFont to be loaded:
191 this.debugWindow = new DebugWindow(this._imGuiRenderer, GraphicsDevice);
192
189 //let's see if this works:
193 //let's see if this works:
190 // WorldBuilder = new WorldBuilder();
194 // WorldBuilder = new WorldBuilder();
191 var dummy_entity = WorldBuilder.CreateEntity();
195 var dummy_entity = WorldBuilder.CreateEntity();
192
196
193
197
194 WorldBuilder.AddGeneralRenderer(new AreaRenderer(this.batch, this.monoFont), 1);
195 WorldBuilder.AddEngine(new InputEngine(Menu.MENU_BAR_HEIGHT, FNAGame.width, FNAGame.height));
198 WorldBuilder.AddEngine(new InputEngine(Menu.MENU_BAR_HEIGHT, FNAGame.width, FNAGame.height));
199 WorldBuilder.AddEngine(new UIEngine());
200
196 WorldBuilder.AddEngine(new GameBridgeEngine(this));
201 WorldBuilder.AddEngine(new GameBridgeEngine(this));
197 WorldBuilder.AddEngine(new SimulationBridgeEngine(this.simulation));
202 WorldBuilder.AddEngine(new SimulationBridgeEngine(this.simulation));
198 WorldBuilder.AddEngine(new CameraBridgeEngine(this.camera));
203 WorldBuilder.AddEngine(new CameraBridgeEngine(this.camera));
199 this.imGuiWindowBridgeEngine = new ImGuiWindowBridgeEngine();
204 this.imGuiWindowBridgeEngine = new ImGuiWindowBridgeEngine();
200 WorldBuilder.AddEngine(this.imGuiWindowBridgeEngine);
205 WorldBuilder.AddEngine(this.imGuiWindowBridgeEngine);
206
201 WorldBuilder.AddEngine(new ContractSpawner());
207 WorldBuilder.AddEngine(new ContractSpawner());
202
208
209 WorldBuilder.AddGeneralRenderer(new AreaRenderer(this.batch, this.monoFont), 1);
210 WorldBuilder.AddGeneralRenderer(new ImGuiWindowRenderer(debugWindow.monoFont, this.imGuiWindowBridgeEngine), 2);
211 var contractWindow = WorldBuilder.CreateEntity();
212 WorldBuilder.SetComponent(contractWindow, new VisibilityComponent{visible = false});
213 WorldBuilder.SetComponent(contractWindow, new WindowTypeComponent{type = isometricparkfna.Messages.Window.Contracts});
214
215
203 // var budgetWindow = WorldBuilder.CreateEntity();
216 // var budgetWindow = WorldBuilder.CreateEntity();
204 // WorldBuilder.SetComponent(budgetWindow, new VisibilityComponent{visible = true});
217 // WorldBuilder.SetComponent(budgetWindow, new VisibilityComponent{visible = true});
205 // WorldBuilder.SetComponent(budgetWindow, new BudgetComponent());
218 // WorldBuilder.SetComponent(budgetWindow, new BudgetComponent());
@@ -226,7 +239,6
226 }
239 }
227 );
240 );
228
241
229 this.debugWindow = new DebugWindow(this._imGuiRenderer, GraphicsDevice);
230
242
231 var json2 = new FileInfo(@"Content/grammar.json");
243 var json2 = new FileInfo(@"Content/grammar.json");
232
244
@@ -710,7 +722,9
710 drawTileAt(1, 1, 140, 2);
722 drawTileAt(1, 1, 140, 2);
711 drawTileAt(3, 2, 140, 2);
723 drawTileAt(3, 2, 140, 2);
712
724
725 _imGuiRenderer.BeforeLayout(gameTime);
713 World.Draw();
726 World.Draw();
727 // _imGuiRenderer.AfterLayout();
714 batch.End();
728 batch.End();
715
729
716 #region draw_header
730 #region draw_header
@@ -797,7 +811,7
797 };
811 };
798
812
799 //Finally, draw the debug window
813 //Finally, draw the debug window
800 _imGuiRenderer.BeforeLayout(gameTime);
814 // _imGuiRenderer.BeforeLayout(gameTime);
801
815
802 var additionalInfo = new Dictionary<string, string>();
816 var additionalInfo = new Dictionary<string, string>();
803
817
@@ -6,7 +6,8
6 Debug,
6 Debug,
7 Budget,
7 Budget,
8 Forest,
8 Forest,
9 News
9 News,
10 Contracts
10 }
11 }
11
12
12 public struct ToggleWindowMessage : IMessage//, IHasEntity
13 public struct ToggleWindowMessage : IMessage//, IHasEntity
@@ -52,6 +52,7
52 <Compile Include="Utils\Extensions.cs" />
52 <Compile Include="Utils\Extensions.cs" />
53 <Compile Include="Utils\Node.cs" />
53 <Compile Include="Utils\Node.cs" />
54 <Compile Include="UI\BudgetWindow.cs" />
54 <Compile Include="UI\BudgetWindow.cs" />
55 <Compile Include="UI\ContractsWindow.cs" />
55 <Compile Include="UI\DebugWindow.cs" />
56 <Compile Include="UI\DebugWindow.cs" />
56 <Compile Include="UI\Dialog.cs" />
57 <Compile Include="UI\Dialog.cs" />
57 <Compile Include="UI\ForestWindow.cs" />
58 <Compile Include="UI\ForestWindow.cs" />
@@ -73,7 +74,7
73 <HintPath>..\packages\ImGui.NET.1.78.0\lib\netstandard2.0\ImGui.NET.dll</HintPath>
74 <HintPath>..\packages\ImGui.NET.1.78.0\lib\netstandard2.0\ImGui.NET.dll</HintPath>
74 </ProjectReference>
75 </ProjectReference>
75 <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj">
76 <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj">
76 <Project>{93842D17-2CBE-40A9-AA4C-A2BCE836B817}</Project>
77 <Project>{D0CCEB74-D8A8-446A-AFFC-2B043DAF1E5F}</Project>
77 <Name>encompass-cs</Name>
78 <Name>encompass-cs</Name>
78 </ProjectReference>
79 </ProjectReference>
79 </ItemGroup>
80 </ItemGroup>
You need to be logged in to leave comments. Login now