Add WIP GUI input functionality
This commit is contained in:
parent
d00bdc80ed
commit
5ca18d272a
4 changed files with 180 additions and 1 deletions
115
GamecraftModdingAPI/Input/FakeInput.cs
Normal file
115
GamecraftModdingAPI/Input/FakeInput.cs
Normal file
|
@ -0,0 +1,115 @@
|
|||
using System;
|
||||
|
||||
using RobocraftX.Common;
|
||||
using RobocraftX.Common.Input;
|
||||
using Svelto.ECS;
|
||||
|
||||
using GamecraftModdingAPI.Utility;
|
||||
|
||||
namespace GamecraftModdingAPI.Input
|
||||
{
|
||||
public static class FakeInput
|
||||
{
|
||||
private static readonly FakeInputEngine inputEngine = new FakeInputEngine();
|
||||
|
||||
/// <summary>
|
||||
/// Customize the player input.
|
||||
/// </summary>
|
||||
/// <param name="input">The custom input.</param>
|
||||
/// <param name="playerID">The player. Omit this to use the local player.</param>
|
||||
public static void CustomInput(InputEntityStruct input, uint playerID = uint.MaxValue)
|
||||
{
|
||||
if (playerID == uint.MaxValue)
|
||||
{
|
||||
playerID = inputEngine.GetLocalPlayerID();
|
||||
}
|
||||
inputEngine.SendCustomInput(input, playerID);
|
||||
}
|
||||
|
||||
public static InputEntityStruct GetInput(uint playerID = uint.MaxValue)
|
||||
{
|
||||
if (playerID == uint.MaxValue)
|
||||
{
|
||||
playerID = inputEngine.GetLocalPlayerID();
|
||||
}
|
||||
return inputEngine.GetInput(playerID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fake a GUI input.
|
||||
/// Omit any parameter you do not want to affect.
|
||||
/// Parameters that end with "?" don't do anything... yet.
|
||||
/// </summary>
|
||||
/// <param name="playerID">The player. Omit this to use the local player.</param>
|
||||
/// <param name="hotbar">Select the hotbar slot by number.</param>
|
||||
/// <param name="hotbarHand">Select the hotbar hand.</param>
|
||||
/// <param name="commandLine">Toggle the command line?</param>
|
||||
/// <param name="inventory">Open inventory?</param>
|
||||
/// <param name="escape">Open escape menu?</param>
|
||||
/// <param name="enter">Page return?</param>
|
||||
/// <param name="debug">Toggle debug display?</param>
|
||||
/// <param name="next">Select next?</param>
|
||||
/// <param name="previous">Select previous?</param>
|
||||
/// <param name="tab">Tab?</param>
|
||||
/// <param name="colour">Toggle to hotbar colour mode?</param>
|
||||
/// <param name="hotbarPage">Select the hotbar page by number?</param>
|
||||
/// <param name="quickSave">Quicksave?</param>
|
||||
/// <param name="paste">Paste?</param>
|
||||
public static void GuiInput(uint playerID = uint.MaxValue, int hotbar = -1, bool hotbarHand = false, bool commandLine = false, bool inventory = false, bool escape = false, bool enter = false, bool debug = false, bool next = false, bool previous = false, bool tab = false, bool colour = false, int hotbarPage = -1, bool quickSave = false, bool paste = false)
|
||||
{
|
||||
if (playerID == uint.MaxValue)
|
||||
{
|
||||
playerID = inputEngine.GetLocalPlayerID();
|
||||
}
|
||||
ref InputEntityStruct currentInput = ref inputEngine.GetInputRef(playerID);
|
||||
// set inputs
|
||||
switch(hotbar)
|
||||
{
|
||||
case 0: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_0; break;
|
||||
case 1: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_1; break;
|
||||
case 2: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_2; break;
|
||||
case 3: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_3; break;
|
||||
case 4: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_4; break;
|
||||
case 5: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_5; break;
|
||||
case 6: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_6; break;
|
||||
case 7: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_7; break;
|
||||
case 8: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_8; break;
|
||||
case 9: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_9; break;
|
||||
case 10: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_Hand; break;
|
||||
default: break;
|
||||
}
|
||||
if (hotbarHand) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_Hand;
|
||||
if (commandLine) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.ToggleCommandLine;
|
||||
if (inventory) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Inventory;
|
||||
if (escape) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Escape;
|
||||
if (enter) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Return;
|
||||
if (debug) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.ToggleDebugDisplay;
|
||||
if (next) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.SelectNext;
|
||||
if (previous) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.SelectPrev;
|
||||
if (tab) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Tab;
|
||||
if (colour) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.Hotbar_Colour;
|
||||
switch (hotbarPage)
|
||||
{
|
||||
case 1: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage1; break;
|
||||
case 2: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage2; break;
|
||||
case 3: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage3; break;
|
||||
case 4: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage4; break;
|
||||
case 5: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage5; break;
|
||||
case 6: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage6; break;
|
||||
case 7: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage7; break;
|
||||
case 8: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage8; break;
|
||||
case 9: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage9; break;
|
||||
case 10: currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.HotbarPage10; break;
|
||||
default: break;
|
||||
}
|
||||
if (quickSave) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.QuickSave;
|
||||
if (paste) currentInput.guiMask |= RobocraftX.Common.Input.GuiInput.PasteSelection;
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
GameEngineManager.AddGameEngine(inputEngine);
|
||||
MenuEngineManager.AddMenuEngine(inputEngine);
|
||||
}
|
||||
}
|
||||
}
|
62
GamecraftModdingAPI/Input/FakeInputEngine.cs
Normal file
62
GamecraftModdingAPI/Input/FakeInputEngine.cs
Normal file
|
@ -0,0 +1,62 @@
|
|||
using System;
|
||||
|
||||
using RobocraftX.Common.Input;
|
||||
using RobocraftX.Players;
|
||||
using Svelto.ECS;
|
||||
|
||||
using GamecraftModdingAPI.Utility;
|
||||
|
||||
namespace GamecraftModdingAPI.Input
|
||||
{
|
||||
public class FakeInputEngine : IApiEngine
|
||||
{
|
||||
public string Name { get; } = "GamecraftModdingAPIFakeInputEngine";
|
||||
|
||||
public EntitiesDB entitiesDB { set; private get; }
|
||||
|
||||
public bool IsReady = false;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
IsReady = false;
|
||||
}
|
||||
|
||||
public void Ready()
|
||||
{
|
||||
IsReady = true;
|
||||
}
|
||||
|
||||
public bool SendCustomInput(InputEntityStruct input, uint playerID, bool remote = false)
|
||||
{
|
||||
EGID egid = new EGID(playerID, remote ? InputExclusiveGroups.RemotePlayers : InputExclusiveGroups.LocalPlayers);
|
||||
if (entitiesDB.Exists<InputEntityStruct>(egid))
|
||||
{
|
||||
ref InputEntityStruct ies = ref entitiesDB.QueryEntity<InputEntityStruct>(egid);
|
||||
ies = input;
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public InputEntityStruct GetInput(uint playerID, bool remote = false)
|
||||
{
|
||||
EGID egid = new EGID(playerID, remote ? InputExclusiveGroups.RemotePlayers : InputExclusiveGroups.LocalPlayers);
|
||||
if (entitiesDB.Exists<InputEntityStruct>(egid))
|
||||
{
|
||||
return entitiesDB.QueryEntity<InputEntityStruct>(egid);
|
||||
}
|
||||
else return default(InputEntityStruct);
|
||||
}
|
||||
|
||||
public ref InputEntityStruct GetInputRef(uint playerID, bool remote = false)
|
||||
{
|
||||
EGID egid = new EGID(playerID, remote ? InputExclusiveGroups.RemotePlayers : InputExclusiveGroups.LocalPlayers);
|
||||
return ref entitiesDB.QueryEntity<InputEntityStruct>(egid);
|
||||
}
|
||||
|
||||
public uint GetLocalPlayerID()
|
||||
{
|
||||
return LocalPlayerIDUtility.GetLocalPlayerID(entitiesDB);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,7 +11,7 @@ namespace GamecraftModdingAPI.Inventory
|
|||
{
|
||||
public static class Hotbar
|
||||
{
|
||||
private static HotbarEngine hotbarEngine = new HotbarEngine();
|
||||
private static readonly HotbarEngine hotbarEngine = new HotbarEngine();
|
||||
|
||||
/// <summary>
|
||||
/// Switch the block in the player's hand
|
||||
|
|
|
@ -67,6 +67,8 @@ namespace GamecraftModdingAPI
|
|||
Blocks.Tweakable.Init();
|
||||
// init inventory
|
||||
Inventory.Hotbar.Init();
|
||||
// init input
|
||||
Input.FakeInput.Init();
|
||||
Logging.MetaLog($"{currentAssembly.GetName().Name} v{currentAssembly.GetName().Version} initialized");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue