FirstNotGoodWorkUI
This commit is contained in:
parent
a1adb49918
commit
de702b6a8e
2 changed files with 138 additions and 1 deletions
|
@ -1,8 +1,13 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Xml;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Content;
|
using Microsoft.Xna.Framework.Content;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using Microsoft.Xna.Framework.Input;
|
||||||
using MonogameLibrary.UI.Base;
|
using MonogameLibrary.UI.Base;
|
||||||
|
using MonogameLibrary.UI.Elements;
|
||||||
|
|
||||||
namespace DangerousD.GameCore.GUI;
|
namespace DangerousD.GameCore.GUI;
|
||||||
|
|
||||||
|
@ -10,6 +15,9 @@ public abstract class AbstractGui : IDrawableObject
|
||||||
{
|
{
|
||||||
protected UIManager Manager = new();
|
protected UIManager Manager = new();
|
||||||
protected List<DrawableUIElement> Elements = new();
|
protected List<DrawableUIElement> Elements = new();
|
||||||
|
private List<DrawableUIElement> ActiveElements;
|
||||||
|
protected DrawableUIElement SelectedElement;
|
||||||
|
private bool isPressed = false;
|
||||||
|
|
||||||
public AbstractGui()
|
public AbstractGui()
|
||||||
{
|
{
|
||||||
|
@ -22,6 +30,16 @@ public abstract class AbstractGui : IDrawableObject
|
||||||
Manager.Initialize(AppManager.Instance.GraphicsDevice);
|
Manager.Initialize(AppManager.Instance.GraphicsDevice);
|
||||||
this.graphicsDevice = graphicsDevice;
|
this.graphicsDevice = graphicsDevice;
|
||||||
CreateUI();
|
CreateUI();
|
||||||
|
ActiveElements = new List<DrawableUIElement>();
|
||||||
|
foreach (var element in Elements)
|
||||||
|
{
|
||||||
|
if (CheckOnBadElements(element))
|
||||||
|
{
|
||||||
|
ActiveElements.Add(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ActiveElements.Count > 0) { SelectedElement = ActiveElements.First(); }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void LoadContent()
|
public virtual void LoadContent()
|
||||||
|
@ -31,6 +49,25 @@ public abstract class AbstractGui : IDrawableObject
|
||||||
|
|
||||||
public virtual void Update(GameTime gameTime)
|
public virtual void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
|
string state = AppManager.Instance.InputManager.currentControlsState;
|
||||||
|
|
||||||
|
if (ActiveElements.Count != 0)
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case "Gamepad":
|
||||||
|
GamePadState gamePadState = GamePad.GetState(0);
|
||||||
|
GamepadInput(gamePadState);
|
||||||
|
break;
|
||||||
|
case "Keyboard":
|
||||||
|
KeyboardState keyBoardState = Keyboard.GetState(0);
|
||||||
|
KeyBoardInput(keyBoardState);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Manager.Update();
|
Manager.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,4 +75,100 @@ public abstract class AbstractGui : IDrawableObject
|
||||||
{
|
{
|
||||||
Manager.Draw(spriteBatch);
|
Manager.Draw(spriteBatch);
|
||||||
}
|
}
|
||||||
|
protected virtual void GamepadInput(GamePadState gamePadState)
|
||||||
|
{
|
||||||
|
if (gamePadState.DPad.Up == ButtonState.Pressed && !isPressed)
|
||||||
|
{
|
||||||
|
isPressed = true;
|
||||||
|
ChangeSelectedElement(-1);
|
||||||
|
}
|
||||||
|
else if (gamePadState.DPad.Down == ButtonState.Pressed && !isPressed)
|
||||||
|
{
|
||||||
|
isPressed = true;
|
||||||
|
ChangeSelectedElement(1);
|
||||||
|
}
|
||||||
|
else if (gamePadState.Buttons.A == ButtonState.Pressed && !isPressed)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("ssss");
|
||||||
|
isPressed = true;
|
||||||
|
if (SelectedElement is ButtonText)
|
||||||
|
{
|
||||||
|
Button button = SelectedElement as ButtonText;
|
||||||
|
button.CallLeftBtnEvent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isPressed)
|
||||||
|
{
|
||||||
|
isPressed = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected virtual void KeyBoardInput(KeyboardState keyboardState)
|
||||||
|
{
|
||||||
|
if (keyboardState.IsKeyDown(Keys.Up) && !isPressed)
|
||||||
|
{
|
||||||
|
isPressed = true;
|
||||||
|
ChangeSelectedElement(-1);
|
||||||
|
}
|
||||||
|
else if (keyboardState.IsKeyDown(Keys.Down) && !isPressed)
|
||||||
|
{
|
||||||
|
isPressed = true;
|
||||||
|
ChangeSelectedElement(1);
|
||||||
|
}
|
||||||
|
else if (keyboardState.IsKeyDown(Keys.Enter) && !isPressed)
|
||||||
|
{
|
||||||
|
isPressed = true;
|
||||||
|
if (SelectedElement is Button)
|
||||||
|
{
|
||||||
|
Button button = SelectedElement as Button;
|
||||||
|
button.CallLeftBtnEvent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isPressed)
|
||||||
|
{
|
||||||
|
isPressed = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void ChangeSelectedElement(int x) // Меняет выбранный элемент
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ActiveElements.Count; i++)
|
||||||
|
{
|
||||||
|
if (ActiveElements[i] == SelectedElement)
|
||||||
|
{
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
SelectedElement = ActiveElements.Last();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (i == ActiveElements.Count - 1 && x >= 1)
|
||||||
|
{
|
||||||
|
SelectedElement = ActiveElements.First();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SelectedElement = ActiveElements[i + x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private bool CheckOnBadElements(DrawableUIElement element)
|
||||||
|
{
|
||||||
|
if (element is Button)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (element is ButtonText)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (element is CheckBox)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -40,7 +40,7 @@ namespace MonogameLibrary.UI.Elements
|
||||||
if (mouseState.LeftButton != prevmouseState.LeftButton)
|
if (mouseState.LeftButton != prevmouseState.LeftButton)
|
||||||
{
|
{
|
||||||
hoverState = HoverState.Pressing;
|
hoverState = HoverState.Pressing;
|
||||||
LeftButtonPressed?.Invoke();
|
CallLeftBtnEvent();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,5 +77,9 @@ namespace MonogameLibrary.UI.Elements
|
||||||
|
|
||||||
DrawText(_spriteBatch);
|
DrawText(_spriteBatch);
|
||||||
}
|
}
|
||||||
|
public void CallLeftBtnEvent()
|
||||||
|
{
|
||||||
|
LeftButtonPressed?.Invoke();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue