Skip to content

Commit 70587a6

Browse files
committed
controller improvements
1 parent a34f423 commit 70587a6

File tree

4 files changed

+141
-3
lines changed

4 files changed

+141
-3
lines changed

SimulationFramework.sln

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
4949
Directory.Build.props = Directory.Build.props
5050
EndProjectSection
5151
EndProject
52+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GamepadInput", "examples\GamepadInput\GamepadInput.csproj", "{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}"
53+
EndProject
5254
Global
5355
GlobalSection(SolutionConfigurationPlatforms) = preSolution
5456
Debug|Any CPU = Debug|Any CPU
@@ -227,6 +229,18 @@ Global
227229
{99D048A2-CFED-45D6-B28E-CB4C1F45F9FF}.Release|arm64.Build.0 = Release|Any CPU
228230
{99D048A2-CFED-45D6-B28E-CB4C1F45F9FF}.Release|x86.ActiveCfg = Release|Any CPU
229231
{99D048A2-CFED-45D6-B28E-CB4C1F45F9FF}.Release|x86.Build.0 = Release|Any CPU
232+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
233+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
234+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|arm64.ActiveCfg = Debug|Any CPU
235+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|arm64.Build.0 = Debug|Any CPU
236+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|x86.ActiveCfg = Debug|Any CPU
237+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Debug|x86.Build.0 = Debug|Any CPU
238+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
239+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|Any CPU.Build.0 = Release|Any CPU
240+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|arm64.ActiveCfg = Release|Any CPU
241+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|arm64.Build.0 = Release|Any CPU
242+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|x86.ActiveCfg = Release|Any CPU
243+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD}.Release|x86.Build.0 = Release|Any CPU
230244
EndGlobalSection
231245
GlobalSection(SolutionProperties) = preSolution
232246
HideSolutionNode = FALSE
@@ -245,6 +259,7 @@ Global
245259
{BFFC36CA-1F5E-4F8B-89A2-B3C7FC41A175} = {DEF0CFA4-7823-4702-A5B6-264CF0895BA7}
246260
{8F5B5C67-D652-4F17-A461-635BE3836352} = {DEF0CFA4-7823-4702-A5B6-264CF0895BA7}
247261
{99D048A2-CFED-45D6-B28E-CB4C1F45F9FF} = {DEF0CFA4-7823-4702-A5B6-264CF0895BA7}
262+
{88254E0E-1ABA-468C-BE90-C2C6C355AEFD} = {DEF0CFA4-7823-4702-A5B6-264CF0895BA7}
248263
EndGlobalSection
249264
GlobalSection(ExtensibilityGlobals) = postSolution
250265
SolutionGuid = {09D3B2BE-AC85-48C2-835F-6B781E265873}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<ProjectReference Include="..\..\src\SimulationFramework.Desktop\SimulationFramework.Desktop.csproj" />
12+
<ProjectReference Include="..\..\src\SimulationFramework\SimulationFramework.csproj" />
13+
</ItemGroup>
14+
15+
</Project>

examples/GamepadInput/Program.cs

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using Silk.NET.Input;
2+
using SimulationFramework;
3+
using SimulationFramework.Drawing;
4+
using SimulationFramework.Input;
5+
using System.Numerics;
6+
7+
Start<Program>();
8+
9+
partial class Program : Simulation
10+
{
11+
Color backgroundColor = Color.FromHSV(0, 0, .05f);
12+
Color foregroundColor = Color.FromHSV(0, 0, .75f);
13+
14+
public override void OnInitialize()
15+
{
16+
}
17+
18+
public override void OnRender(ICanvas canvas)
19+
{
20+
canvas.Clear(backgroundColor);
21+
canvas.Translate(canvas.Width / 2f, canvas.Height / 2f);
22+
23+
canvas.PushState();
24+
canvas.Translate(100, 0);
25+
DrawJoystick(canvas, Gamepad.RightJoystick, Gamepad.IsButtonDown(GamepadButton.RightStick));
26+
canvas.PopState();
27+
28+
canvas.PushState();
29+
canvas.Translate(-100, 0);
30+
DrawJoystick(canvas, Gamepad.LeftJoystick, Gamepad.IsButtonDown(GamepadButton.LeftStick));
31+
canvas.PopState();
32+
33+
canvas.PushState();
34+
canvas.Translate(100, -200);
35+
DrawTrigger(canvas, Gamepad.RightTrigger);
36+
DrawButton(canvas, new(0, 30), Gamepad.IsButtonDown(GamepadButton.RightBumper));
37+
canvas.PopState();
38+
39+
canvas.PushState();
40+
canvas.Translate(-100, -200);
41+
DrawTrigger(canvas, Gamepad.LeftTrigger);
42+
DrawButton(canvas, new(0, 30), Gamepad.IsButtonDown(GamepadButton.LeftBumper));
43+
canvas.PopState();
44+
45+
canvas.PushState();
46+
canvas.Translate(300, 0);
47+
DrawButton(canvas, new(0, 40), Gamepad.IsButtonDown(GamepadButton.A));
48+
DrawButton(canvas, new(40, 0), Gamepad.IsButtonDown(GamepadButton.B));
49+
DrawButton(canvas, new(-40, 0), Gamepad.IsButtonDown(GamepadButton.X));
50+
DrawButton(canvas, new(0, -40), Gamepad.IsButtonDown(GamepadButton.Y));
51+
canvas.PopState();
52+
53+
canvas.PushState();
54+
canvas.Translate(-300, 0);
55+
DrawButton(canvas, new(0, 40), Gamepad.IsButtonDown(GamepadButton.Down));
56+
DrawButton(canvas, new(40, 0), Gamepad.IsButtonDown(GamepadButton.Right));
57+
DrawButton(canvas, new(-40, 0), Gamepad.IsButtonDown(GamepadButton.Left));
58+
DrawButton(canvas, new(0, -40), Gamepad.IsButtonDown(GamepadButton.Up));
59+
canvas.PopState();
60+
61+
canvas.PushState();
62+
canvas.Translate(0, 200);
63+
DrawButton(canvas, new(60, 0), Gamepad.IsButtonDown(GamepadButton.Back));
64+
DrawButton(canvas, new(0, 0), Gamepad.IsButtonDown(GamepadButton.Home));
65+
DrawButton(canvas, new(-60, 0), Gamepad.IsButtonDown(GamepadButton.Start));
66+
canvas.PopState();
67+
68+
}
69+
70+
private void DrawJoystick(ICanvas canvas, Vector2 joystickPosition, bool down)
71+
{
72+
canvas.Fill(foregroundColor);
73+
canvas.DrawCircle(0, 0, 75);
74+
75+
canvas.Fill(Color.Red);
76+
canvas.DrawLine(Vector2.Zero, joystickPosition * 75);
77+
78+
if (down)
79+
{
80+
canvas.DrawCircle(0, 0, 70);
81+
}
82+
}
83+
84+
private void DrawTrigger(ICanvas canvas, float position)
85+
{
86+
canvas.Fill(foregroundColor);
87+
canvas.DrawRect(0, 0, 20, 100, Alignment.BottomCenter);
88+
canvas.Fill(Color.Red);
89+
canvas.DrawRect(0, 0, 20, 100 * position, Alignment.BottomCenter);
90+
}
91+
92+
private void DrawButton(ICanvas canvas, Vector2 offset, bool down)
93+
{
94+
canvas.PushState();
95+
canvas.Translate(offset);
96+
canvas.Fill(foregroundColor);
97+
canvas.DrawCircle(0, 0, 20);
98+
if (down)
99+
{
100+
canvas.Fill(Color.Red);
101+
canvas.DrawCircle(0, 0, 16);
102+
}
103+
canvas.PopState();
104+
}
105+
}

src/SimulationFramework.Desktop/DesktopGamepadProvider.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ internal class DesktopGamepadProvider : IGamepadProvider
1010

1111
public Vector2 LeftJoystick => gamepad is null ? Vector2.Zero : new(gamepad.Thumbsticks[0].X, gamepad.Thumbsticks[0].Y);
1212
public Vector2 RightJoystick => gamepad is null ? Vector2.Zero : new(gamepad.Thumbsticks[1].X, gamepad.Thumbsticks[1].Y);
13-
public float LeftTrigger => gamepad is null ? 0 : gamepad.Triggers[0].Position;
14-
public float RightTrigger => gamepad is null ? 0 : gamepad.Triggers[1].Position;
13+
public float LeftTrigger => gamepad is null ? 0 : gamepad.Triggers[0].Position * .5f + .5f;
14+
public float RightTrigger => gamepad is null ? 0 : gamepad.Triggers[1].Position * .5f + .5f;
1515
public IEnumerable<GamepadButton> HeldButtons => heldButtons;
1616
public IEnumerable<GamepadButton> PressedButtons => pressedButtons;
1717
public IEnumerable<GamepadButton> ReleasedButtons => releasedButtons;
@@ -82,9 +82,12 @@ private void OnGamepadRemoved(IGamepad gamepad)
8282
if (gamepad == this.gamepad)
8383
{
8484
this.gamepad = null;
85+
pressedButtons.Clear();
86+
heldButtons.Clear();
87+
releasedButtons.Clear();
8588
}
8689

87-
if (context.Gamepads.Count > 0)
90+
if (context.Gamepads.Count() > 0)
8891
{
8992
OnGamepadAdded(context.Gamepads.First());
9093
}

0 commit comments

Comments
 (0)