Skip to content

Commit

Permalink
Merge pull request #23 from vonderborch/1.2.0
Browse files Browse the repository at this point in the history
1.2.0
  • Loading branch information
vonderborch authored Apr 7, 2021
2 parents 3c57430 + 2414328 commit fc07fbd
Show file tree
Hide file tree
Showing 86 changed files with 5,675 additions and 1,482 deletions.
67 changes: 65 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ A simple and easy-to-use input library for XNA/Monogame/FNA.

# Installation
There are nuget packages available for Monogame and FNA.
- Monogame: [Velentr.Input.Monogame](https://www.nuget.org/packages/Velentr.Input.Monogame/)
- FNA: [Velentr.Input.FNA](https://www.nuget.org/packages/Velentr.Input.FNA/)
- **Monogame**: [Velentr.Input.Monogame](https://www.nuget.org/packages/Velentr.Input.Monogame/)
- **FNA**: [Velentr.Input.FNA](https://www.nuget.org/packages/Velentr.Input.FNA/)

# Plugins
Additional plugin libraries are available:
- **[System.Speech](https://www.nuget.org/packages/System.Speech/) Voice Recognition Support**:
- **Monogame**: [Velentr.Input.Monogame.SystemSpeech](https://www.nuget.org/packages/Velentr.Input.Monogame.SystemSpeech/)
- **FNA**: [Velentr.Input.FNA.SystemSpeech](https://www.nuget.org/packages/Velentr.Input.FNA.SystemSpeech/)

# Basic Usage
Approach 1: Create an input condition and poll for if the condition is met directly.
Expand Down Expand Up @@ -50,6 +56,63 @@ manager.Update(gameTime);
```

# Plugging into the System
Velentr.Input is flexible and allows you to modify specific behaviors, add support for new platforms, or new input methods entirely easily!

### Need a new type of input not already covered by what is built in?
Create a new input system (your new class should inherit from `InputService`), then call `manager.AddInputService(serviceName, newServiceClassInstance)` to enable it.

### Want to change the behavior of how an existing system works internally?
##### Want to change how things are handled from a service standpoint (how we mark consumed inputs, etc.)?
Built-in Input System | Abstract Implementation | Default Implementation | Manager Method to call to assign
--------------------- | ----------------------- | ---------------------- | --------------------------------
GamePad | `GamePadService` | `DefaultGamePadService` | `manager.SetGamePadService(newGamePadServiceObject)`
Keyboard | `KeyboardService` | `KeyboardDefaultService` | `manager.SetKeyboardService(newKeyboardServiceObject)`
Mouse | `MouseService` | `MouseDefaultService` | `manager.SetMouseService(newMouseServiceObject)`
Touch | `TouchService` | `DefaultTouchService` | `manager.SetTouchService(newTouchServiceObject)`
Voice | `VoiceService` | `DefaultVoiceService` | `manager.SetService(newVoiceServiceObject)`

##### Want to change how we read in inputs?
Create a new class that inherits from the `InputEngine` of the input type that you want to update.

Built-in Input System | Abstract Implementation | Default Implementation
--------------------- | ----------------------- | ----------------------
GamePad | `GamePadEngine` | `XnaGamePadEngine`
Keyboard | `KeyboardEngine` | `XnaKeyboardEngine`
Mouse | `MouseEngine` | `XnaMouseEngine`
Touch | `TouchEngine` | `XnaTouchEngine`
Voice | `VoiceEngine` | N/A (see **Plugins** for the default implementation)

##### Want to add a new condition?
Create a new condition by inheriting from the `InputCondition` class (or an existing class that implements `InputCondition`), then use your new condition as you would any other.

# Voice Recognition Notes:
Full support for voice commands is not built-in, although the basic systems to use it are built out. To use voice commands, you must download a Voice Input library compatible with your platform (see **Plugins** for currently supported speech recognition systems).

We went with this approach because voice support is more of a specialized requirement than the other default supported input methods.

Basic example of setting up/using voice commands (after the plugin has been installed):
```
// This goes in the class
InputManager manager = new InputManager(this);
// This part goes in Setup()
manager.Setup();
manager.SetVoiceService(new DefaultVoiceService(manager), typeof(SystemSpeechEngine), true);
var condition = new AnyCondition(
manager,
new KeyboardButtonPressedCondition(manager, Key.Escape),
new GamePadButtonPressedCondition(manager, GamePadButton.Back),
new MouseButtonPressedCondition(manager, MouseButton.MiddleButton),
new VoiceCommandCondition(manager, "My Phrase or Word Here")
);
condition.Event += ExitGame;
manager.AddInputConditionToTracking(condition);
// This part goes in Update()
manager.Update(gameTime);
```

# Example
Code:
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
<None Remove="Icon.ico" />
<None Remove="Icon.bmp" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\Velentr.Input.Core.DevEnv\Game1.cs" Link="Game1.cs" />
<Compile Include="..\..\Velentr.Input.Core.DevEnv\Program.cs" Link="Program.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Content\PlayfairDisplayRegular-ywLOY.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand All @@ -38,7 +42,7 @@
<PackageReference Include="fnalibs" Version="21.3.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\FNA\FNA.csproj" />
<ProjectReference Include="..\..\..\FNA\FNA.csproj" />
<ProjectReference Include="..\Velentr.Input.FNA\Velentr.Input.FNA.csproj" />
</ItemGroup>
<ItemGroup>
Expand Down
152 changes: 152 additions & 0 deletions Velentr.Input/FNA/Velentr.Input.FNA/Velentr.Input.FNA.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>Velentr.Input</RootNamespace>
<AssemblyName>Velentr.Input.FNA</AssemblyName>
<Platforms>AnyCPU;x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Authors>Christian Webber</Authors>
<Company>Christian Webber</Company>
<RepositoryUrl>https://github.com/vonderborch/Velentr.Input</RepositoryUrl>
<PackageTags>FNA, Input, Keyboard, Mouse, GamePad, Touch, Voice</PackageTags>
<Description>A simple and easy-to-use input library for XNA/Monogame/FNA.</Description>
<Version>1.2.0</Version>
<PackageProjectUrl>https://github.com/vonderborch/Velentr.Input</PackageProjectUrl>
<PackageLicenseExpression></PackageLicenseExpression>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE;FNA</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>C:\Users\ricky\OneDrive\Projects\repos\Velentr\Velentr.Input\release\FNA\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<DefineConstants>TRACE;FNA</DefineConstants>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\Velentr.Input.Core\Conditions\AllCondition.cs" Link="Conditions\AllCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\AnyCondition.cs" Link="Conditions\AnyCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonPressedCondition.cs" Link="Conditions\GamePadButtonPressedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonPressStartedCondition.cs" Link="Conditions\GamePadButtonPressStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonReleasedCondition.cs" Link="Conditions\GamePadButtonReleasedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonReleaseStartedCondition.cs" Link="Conditions\GamePadButtonReleaseStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonSensorDeltaCondition.cs" Link="Conditions\GamePadButtonSensorDeltaCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonSensorMovedCondition.cs" Link="Conditions\GamePadButtonSensorMovedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonSensorPositionCondition.cs" Link="Conditions\GamePadButtonSensorPositionCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\GamePadButtonSensorStationaryCondition.cs" Link="Conditions\GamePadButtonSensorStationaryCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\InputCondition.cs" Link="Conditions\InputCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\BooleanCondition.cs" Link="Conditions\Internal\BooleanCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\GamePadButtonCondition.cs" Link="Conditions\Internal\GamePadButtonCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\GamePadLogicCondition.cs" Link="Conditions\Internal\GamePadLogicCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\GamePadSensorBooleanCondition.cs" Link="Conditions\Internal\GamePadSensorBooleanCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\KeyboardButtonCondition.cs" Link="Conditions\Internal\KeyboardButtonCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\KeyboardLockStateCondition.cs" Link="Conditions\Internal\KeyboardLockStateCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\LogicCondition.cs" Link="Conditions\Internal\LogicCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\Internal\MouseBooleanCondition.cs" Link="Conditions\Internal\MouseBooleanCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardButtonPressedCondition.cs" Link="Conditions\KeyboardButtonPressedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardButtonPressStartedCondition.cs" Link="Conditions\KeyboardButtonPressStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardButtonReleasedCondition.cs" Link="Conditions\KeyboardButtonReleasedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardButtonReleaseStartedCondition.cs" Link="Conditions\KeyboardButtonReleaseStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardCurrentKeysPressedCountCondition.cs" Link="Conditions\KeyboardCurrentKeysPressedCountCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardKeysPressedDeltaCondition.cs" Link="Conditions\KeyboardKeysPressedDeltaCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardLockDisabledCondition.cs" Link="Conditions\KeyboardLockDisabledCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardLockDisabledStartedCondition.cs" Link="Conditions\KeyboardLockDisabledStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardLockEnabledCondition.cs" Link="Conditions\KeyboardLockEnabledCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\KeyboardLockEnabledStartedCondition.cs" Link="Conditions\KeyboardLockEnabledStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseButtonPressedCondition.cs" Link="Conditions\MouseButtonPressedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseButtonPressStartedCondition.cs" Link="Conditions\MouseButtonPressStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseButtonReleasedCondition.cs" Link="Conditions\MouseButtonReleasedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseButtonReleaseStartedCondition.cs" Link="Conditions\MouseButtonReleaseStartedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseSensorCurrentPositionCondition.cs" Link="Conditions\MouseSensorCurrentPositionCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseSensorDeltaCondition.cs" Link="Conditions\MouseSensorDeltaCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseSensorMovedCondition.cs" Link="Conditions\MouseSensorMovedCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseSensorPreviousPositionCondition.cs" Link="Conditions\MouseSensorPreviousPositionCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\MouseSensorStationaryCondition.cs" Link="Conditions\MouseSensorStationaryCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\TouchGestureCondition.cs" Link="Conditions\TouchGestureCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Conditions\VoiceCommandCondition.cs" Link="Conditions\VoiceCommandCondition.cs" />
<Compile Include="..\..\Velentr.Input.Core\Constants.cs" Link="Constants.cs" />
<Compile Include="..\..\Velentr.Input.Core\Enums\Comparison.cs" Link="Enums\Comparison.cs" />
<Compile Include="..\..\Velentr.Input.Core\Enums\InputSource.cs" Link="Enums\InputSource.cs" />
<Compile Include="..\..\Velentr.Input.Core\Enums\InputState.cs" Link="Enums\InputState.cs" />
<Compile Include="..\..\Velentr.Input.Core\Enums\ValueType.cs" Link="Enums\ValueType.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\AllConditionEventArguments.cs" Link="EventArguments\AllConditionEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\AnyConditionalEventArguments.cs" Link="EventArguments\AnyConditionalEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\ConditionEventArguments.cs" Link="EventArguments\ConditionEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\GamePadButtonEventArguments.cs" Link="EventArguments\GamePadButtonEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\GamePadStickSensorEventArguments.cs" Link="EventArguments\GamePadStickSensorEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\GamePadTriggerSensorEventArguments.cs" Link="EventArguments\GamePadTriggerSensorEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\KeyboardButtonEventArguments.cs" Link="EventArguments\KeyboardButtonEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\KeyboardKeysPressedCountEventArguments.cs" Link="EventArguments\KeyboardKeysPressedCountEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\KeyboardLockStateEventArguments.cs" Link="EventArguments\KeyboardLockStateEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\MouseButtonEventArguments.cs" Link="EventArguments\MouseButtonEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\MouseSensorMovementEventArguments.cs" Link="EventArguments\MouseSensorMovementEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\TouchEventArguments.cs" Link="EventArguments\TouchEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\EventArguments\VoiceEventArguments.cs" Link="EventArguments\VoiceEventArguments.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\DefaultGamePadService.cs" Link="GamePad\DefaultGamePadService.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadButton.cs" Link="GamePad\GamePadButton.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadEngine.cs" Link="GamePad\GamePadEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadHelpers.cs" Link="GamePad\GamePadHelpers.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadInputMode.cs" Link="GamePad\GamePadInputMode.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadSensor.cs" Link="GamePad\GamePadSensor.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadSensorValueMode.cs" Link="GamePad\GamePadSensorValueMode.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\GamePadService.cs" Link="GamePad\GamePadService.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\VilliGamePad.cs" Link="GamePad\VilliGamePad.cs" />
<Compile Include="..\..\Velentr.Input.Core\GamePad\XnaGamePadEngine.cs" Link="GamePad\XnaGamePadEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Helpers\Helper.cs" Link="Helpers\Helper.cs" />
<Compile Include="..\..\Velentr.Input.Core\InputConditionEvent.cs" Link="InputConditionEvent.cs" />
<Compile Include="..\..\Velentr.Input.Core\InputEngine.cs" Link="InputEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\InputManager.cs" Link="InputManager.cs" />
<Compile Include="..\..\Velentr.Input.Core\InputService.cs" Link="InputService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\DefaultKeyboardService.cs" Link="Keyboard\DefaultKeyboardService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\Key.cs" Link="Keyboard\Key.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\KeyboardEngine.cs" Link="Keyboard\KeyboardEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\KeyboardLock.cs" Link="Keyboard\KeyboardLock.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\KeyboardService.cs" Link="Keyboard\KeyboardService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Keyboard\XnaKeyboardEngine.cs" Link="Keyboard\XnaKeyboardEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\DefaultMouseService.cs" Link="Mouse\DefaultMouseService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\MouseButton.cs" Link="Mouse\MouseButton.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\MouseEngine.cs" Link="Mouse\MouseEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\MouseSensor.cs" Link="Mouse\MouseSensor.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\MouseService.cs" Link="Mouse\MouseService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Mouse\XnaMouseEngine.cs" Link="Mouse\XnaMouseEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\DefaultTouchService.cs" Link="Touch\DefaultTouchService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\Gesture.cs" Link="Touch\Gesture.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\GestureType.cs" Link="Touch\GestureType.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\TouchEngine.cs" Link="Touch\TouchEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\TouchGestureMapping.cs" Link="Touch\TouchGestureMapping.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\TouchService.cs" Link="Touch\TouchService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Touch\XnaTouchEngine.cs" Link="Touch\XnaTouchEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Value.cs" Link="Value.cs" />
<Compile Include="..\..\Velentr.Input.Core\ValueLogic.cs" Link="ValueLogic.cs" />
<Compile Include="..\..\Velentr.Input.Core\Voice\DefaultVoiceService.cs" Link="Voice\DefaultVoiceService.cs" />
<Compile Include="..\..\Velentr.Input.Core\Voice\RecognizedPhrase.cs" Link="Voice\RecognizedPhrase.cs" />
<Compile Include="..\..\Velentr.Input.Core\Voice\VoiceEngine.cs" Link="Voice\VoiceEngine.cs" />
<Compile Include="..\..\Velentr.Input.Core\Voice\VoiceService.cs" Link="Voice\VoiceService.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="fnalibs" Version="21.3.5" />
<PackageReference Include="System.Speech" Version="5.0.0" />
<PackageReference Include="Velentr.Collections" Version="1.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\FNA\FNA.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\LICENSE">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Conditions\Internal\" />
<Folder Include="Enums\" />
<Folder Include="EventArguments\" />
<Folder Include="GamePad\" />
<Folder Include="Helpers\" />
<Folder Include="Keyboard\" />
<Folder Include="Mouse\" />
<Folder Include="Touch\" />
<Folder Include="Voice\" />
</ItemGroup>
</Project>
File renamed without changes.
Loading

0 comments on commit fc07fbd

Please sign in to comment.