iFactory.Godot/BITKit/Scripts/UX/UXBasedModelViewer.cs

57 lines
1.2 KiB
C#
Raw Normal View History

2024-04-16 04:15:21 +08:00
using Godot;
using System;
namespace BITKit.UX
{
public partial class UXBasedModelViewer : Control
{
[Export] private float delta = 0.1f;
[Export] private Node3D model;
private readonly ValidHandle _isEnabled = new();
private Vector2 _velocity;
public override void _Ready()
{
base._Ready();
MouseEntered += () => _isEnabled.RemoveDisableElements(this);
MouseExited += () => _isEnabled.AddDisableElements(this);
_isEnabled.SetDisableElements(1,false);
}
public override void _Process(double delta)
{
base._Process(delta);
_isEnabled.SetDisableElements(1,!Visible);
if (_velocity == default) return;
var rotate = _velocity * this.delta * (float)delta;
model.RotateX(Mathf.DegToRad(rotate.Y));
model.RotateY(Mathf.DegToRad(rotate.X));
_velocity = Vector2.Zero;
}
public override void _Input(InputEvent @event)
{
base._Input(@event);
switch (@event)
{
case InputEventMouseButton button:
_isEnabled.SetElements(this,button.Pressed);
break;
case InputEventMouseMotion motion when _isEnabled:
_velocity += motion.Relative;
break;
}
}
public void Reset()
{
model.RotationDegrees = Vector3.Zero;
}
}
}