57 lines
1.2 KiB
C#
57 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|