Add quick interactions locally
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
using Barotrauma;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
|
||||
namespace QICrabUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Just a tick box
|
||||
/// </summary>
|
||||
public class CUITickBox : CUIComponent
|
||||
{
|
||||
public GUISoundType ClickSound { get; set; } = GUISoundType.TickBox;
|
||||
|
||||
public event Action<bool> OnStateChange;
|
||||
public void AddOnStateChange(Action<bool> callback) => OnStateChange += callback;
|
||||
|
||||
public CUISprite OnSprite { get; set; }
|
||||
public CUISprite OffSprite { get; set; }
|
||||
public CUISprite HoverOffSprite { get; set; }
|
||||
public CUISprite HoverOnSprite { get; set; }
|
||||
public CUISprite DisabledSprite { get; set; }
|
||||
|
||||
private bool state; public bool State
|
||||
{
|
||||
get => state;
|
||||
set
|
||||
{
|
||||
if (state == value) return;
|
||||
state = value;
|
||||
ChangeSprite();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Disabled
|
||||
{
|
||||
get => disabled;
|
||||
set
|
||||
{
|
||||
disabled = value;
|
||||
ChangeSprite();
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ChangeSprite()
|
||||
{
|
||||
if (Disabled)
|
||||
{
|
||||
BackgroundSprite = DisabledSprite;
|
||||
return;
|
||||
}
|
||||
|
||||
if (State)
|
||||
{
|
||||
BackgroundSprite = OnSprite;
|
||||
if (MouseOver) BackgroundSprite = HoverOnSprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
BackgroundSprite = OffSprite;
|
||||
if (MouseOver) BackgroundSprite = HoverOffSprite;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public CUITickBox() : base()
|
||||
{
|
||||
Absolute = new CUINullRect(w: 20, h: 20);
|
||||
BackgroundColor = Color.Cyan;
|
||||
Border.Color = Color.Transparent;
|
||||
ConsumeMouseClicks = true;
|
||||
ConsumeDragAndDrop = true;
|
||||
ConsumeSwipe = true;
|
||||
|
||||
|
||||
OffSprite = new CUISprite(CUI.CUITexturePath)
|
||||
{
|
||||
SourceRect = new Rectangle(0, 0, 32, 32),
|
||||
};
|
||||
|
||||
OnSprite = new CUISprite(CUI.CUITexturePath)
|
||||
{
|
||||
SourceRect = new Rectangle(32, 0, 32, 32),
|
||||
};
|
||||
|
||||
HoverOffSprite = new CUISprite(CUI.CUITexturePath)
|
||||
{
|
||||
SourceRect = new Rectangle(64, 0, 32, 32),
|
||||
};
|
||||
HoverOnSprite = new CUISprite(CUI.CUITexturePath)
|
||||
{
|
||||
SourceRect = new Rectangle(96, 0, 32, 32),
|
||||
};
|
||||
|
||||
DisabledSprite = new CUISprite(CUI.CUITexturePath)
|
||||
{
|
||||
SourceRect = new Rectangle(128, 0, 32, 32),
|
||||
};
|
||||
|
||||
ChangeSprite();
|
||||
|
||||
OnMouseDown += (e) =>
|
||||
{
|
||||
if (Disabled) return;
|
||||
|
||||
SoundPlayer.PlayUISound(ClickSound);
|
||||
State = !State;
|
||||
OnStateChange?.Invoke(State);
|
||||
if (Command != null) DispatchUp(new CUICommand(Command, State));
|
||||
};
|
||||
|
||||
OnMouseEnter += (e) => ChangeSprite();
|
||||
OnMouseLeave += (e) => ChangeSprite();
|
||||
|
||||
OnConsume += (o) =>
|
||||
{
|
||||
if (o is bool b) State = b;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user