127 lines
2.8 KiB
C#
127 lines
2.8 KiB
C#
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;
|
|
};
|
|
}
|
|
}
|
|
|
|
} |