1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-22 17:48:01 +02:00
Beef/IDE/src/ui/LocatorAnim.bf

97 lines
2.1 KiB
Beef

using System;
using System.Collections;
using System.Text;
using System.Threading.Tasks;
using Beefy;
using Beefy.gfx;
using Beefy.widgets;
using Beefy.theme.dark;
namespace IDE.ui
{
public enum LocatorType
{
None,
Smart,
Always,
Extra
}
public class LocatorAnim : Widget
{
LocatorType mType;
float mPct;
public this()
{
}
public override void Draw(Graphics g)
{
base.Draw(g);
bool isExtra = mType == .Extra;
int32 circleCount = 2;
for (int32 i = 0; i < circleCount; i++)
{
float sepPct = 0.3f;
float maxSep = (circleCount - 2) * sepPct;
float pct = (mPct - maxSep + (i * 0.3f)) / (1.0f - maxSep);
if (isExtra)
pct *= 1.2f;
if ((pct < 0.0f) || (pct > 1.0f))
continue;
float scale = (float)Math.Sin(pct * Math.PI_f / 2) * 0.5f;
float alpha = Math.Min(0.3f, (1.0f - (float)Math.Sin(pct * Math.PI_f / 2)) * 1.0f);
if (isExtra)
{
scale *= 1.2f;
alpha *= 1.2f;
}
using (g.PushColor(Color.Get(alpha)))
{
using (g.PushScale(scale, scale, GS!(32), GS!(32)))
g.Draw(IDEApp.sApp.mCircleImage);
}
}
}
public override void Update()
{
base.Update();
mPct += (mType == .Extra) ? 0.02f : 0.03f;
if (mPct >= 1.0f)
{
RemoveSelf();
//DeferDelete();
gApp.DeferDelete(this);
}
MarkDirty();
}
public static void Show(LocatorType locatorType, Widget refWidget, float x, float y)
{
if (!gApp.mSettings.mEditorSettings.mShowLocatorAnim)
return;
float xOfs = GS!(-32.0f);
float yOfs = GS!(-32.0f);
LocatorAnim anim = new LocatorAnim();
anim.mType = locatorType;
anim.mX = x + xOfs;
anim.mY = y + yOfs;
refWidget.AddWidget(anim);
}
}
}