45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
using System;
|
|
using Godot;
|
|
|
|
namespace Hellswipers.Game;
|
|
|
|
public partial class Game {
|
|
private Vector2? _swipeStart;
|
|
|
|
private void CalcSwipe(Vector2 end) {
|
|
if (!_swipeStart.HasValue)
|
|
return;
|
|
var delta = end - _swipeStart.Value;
|
|
_swipeStart = null;
|
|
|
|
var deltaAbs = delta.Abs();
|
|
var biggest = Math.Max(deltaAbs.X, deltaAbs.Y);
|
|
if (biggest < 50)
|
|
return;
|
|
|
|
HandleInput(deltaAbs.X > deltaAbs.Y
|
|
? (delta.X > 0 ? Arrow.Dirs.Right : Arrow.Dirs.Left)
|
|
: (delta.Y > 0 ? Arrow.Dirs.Down : Arrow.Dirs.Up)
|
|
);
|
|
}
|
|
|
|
public override void _Input(InputEvent ev) {
|
|
if (ev is InputEventMouseButton evm) {
|
|
if (ev.IsPressed())
|
|
_swipeStart = evm.Position;
|
|
else
|
|
CalcSwipe(evm.Position);
|
|
} else {
|
|
if (ev.IsActionPressed("key_up"))
|
|
HandleInput(Arrow.Dirs.Up);
|
|
else if (ev.IsActionPressed("key_down"))
|
|
HandleInput(Arrow.Dirs.Down);
|
|
else if (ev.IsActionPressed("key_left"))
|
|
HandleInput(Arrow.Dirs.Left);
|
|
else if (ev.IsActionPressed("key_right"))
|
|
HandleInput(Arrow.Dirs.Right);
|
|
else if (ev.IsActionPressed("escape"))
|
|
GetTree().ChangeSceneToPacked(ResourceLoader.Load<PackedScene>("res://main_menu/main_menu.tscn"));
|
|
}
|
|
}
|
|
} |