Select items with scroll wheel

- Add fading effect to radial menu
- Rename place/break input to primary/secondary
main
copygirl 4 years ago
parent 77e9ed303b
commit bcdfe45cc3
  1. 30
      project.godot
  2. 8
      src/Items/CreativeBuilding.cs
  3. 3
      src/Items/Weapon.cs
  4. 59
      src/RadialMenu.cs

@ -53,12 +53,6 @@ texture={
[input] [input]
ui_menu={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
]
}
move_left={ move_left={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
@ -78,19 +72,35 @@ move_jump={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
] ]
} }
interact_primary={
"deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
]
}
interact_secondary={
"deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null)
]
}
interact_select={ interact_select={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null) "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null)
] ]
} }
interact_place={ interact_select_dec={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null)
] ]
} }
interact_break={ interact_select_inc={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null)
]
}
ui_menu={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
] ]
} }

@ -37,11 +37,11 @@ public class CreativeBuilding : Node2D
{ {
if (!Visible || !(Player is LocalPlayer)) return; if (!Visible || !(Player is LocalPlayer)) return;
if (ev.IsActionPressed("interact_place")) { if (ev.IsActionPressed("interact_primary")) {
GetTree().SetInputAsHandled(); GetTree().SetInputAsHandled();
_currentMode = (((_currentMode == null) && _canBuild) ? BuildMode.Placing : (BuildMode?)null); _currentMode = (((_currentMode == null) && _canBuild) ? BuildMode.Placing : (BuildMode?)null);
} }
if (ev.IsActionPressed("interact_break")) { if (ev.IsActionPressed("interact_secondary")) {
GetTree().SetInputAsHandled(); GetTree().SetInputAsHandled();
_currentMode = ((_currentMode == null) ? BuildMode.Breaking : (BuildMode?)null); _currentMode = ((_currentMode == null) ? BuildMode.Breaking : (BuildMode?)null);
} }
@ -56,14 +56,14 @@ public class CreativeBuilding : Node2D
if (_currentMode == BuildMode.Placing) { if (_currentMode == BuildMode.Placing) {
if (!_canBuild) _currentMode = null; if (!_canBuild) _currentMode = null;
else if (!Input.IsActionPressed("interact_place")) { else if (!Input.IsActionPressed("interact_primary")) {
RpcId(1, nameof(PlaceLine), _startPos.X, _startPos.Y, _direction, _length); RpcId(1, nameof(PlaceLine), _startPos.X, _startPos.Y, _direction, _length);
_currentMode = null; _currentMode = null;
} }
} }
if (_currentMode == BuildMode.Breaking) { if (_currentMode == BuildMode.Breaking) {
if (!Input.IsActionPressed("interact_break")) { if (!Input.IsActionPressed("interact_secondary")) {
RpcId(1, nameof(BreakLine), _startPos.X, _startPos.Y, _direction, _length); RpcId(1, nameof(BreakLine), _startPos.X, _startPos.Y, _direction, _length);
_currentMode = null; _currentMode = null;
} }

@ -35,8 +35,7 @@ public class Weapon : Sprite
{ {
if (!(Player is LocalPlayer)) return; if (!(Player is LocalPlayer)) return;
// TODO: Is not "place", is shoot! if (ev.IsActionPressed("interact_primary")) {
if (ev.IsActionPressed("interact_place")) {
GetNodeOrNull<AudioStreamPlayer2D>("Fire")?.Play(); GetNodeOrNull<AudioStreamPlayer2D>("Fire")?.Play();
// TODO: Spawn bullet or something. // TODO: Spawn bullet or something.
// TODO: Tell server (and other clients) we shot. // TODO: Tell server (and other clients) we shot.

@ -13,6 +13,7 @@ public class RadialMenu : Node2D
private float _startAngle; private float _startAngle;
private Node2D _selected; private Node2D _selected;
private DateTime? _showUntil;
public override void _Ready() public override void _Ready()
{ {
@ -29,36 +30,76 @@ public class RadialMenu : Node2D
{ {
if (ev.IsActionPressed("interact_select")) { if (ev.IsActionPressed("interact_select")) {
Position = this.GetClient().Cursor.ScreenPosition.Round(); Position = this.GetClient().Cursor.ScreenPosition.Round();
Visible = true; Visible = true;
Modulate = Colors.White;
var items = GetItems(); var items = GetItems();
_selected = items.Current; _selected = items.Current;
items.Current = null; items.Current = null;
_showUntil = null;
ActiveName.Text = _selected?.Name ?? "";
Update();
}
if (ev.IsActionPressed("interact_select_dec") || ev.IsActionPressed("interact_select_inc")) {
var diff = ev.IsActionPressed("interact_select_inc") ? 1 : -1;
var items = GetItems();
// TODO: Should current item be equipped until radial menu disappears again?
// Perhaps for balance reasons?
if (Visible && (_showUntil == null)) {
// Don't do anything if radial menu is show due to selection
// being open and the mouse is outside of the selection radius.
var cursor = ToLocal(this.GetClient().Cursor.ScreenPosition);
if (cursor.Length() > InnerRadius) return;
} else {
Position = this.GetClient().LocalPlayer.GetGlobalTransformWithCanvas().origin;
_selected = items.Current;
_showUntil = DateTime.Now + TimeSpan.FromSeconds(0.6);
Visible = true;
Modulate = Colors.White;
}
if (_selected == null) {
if (items.Count == 0) return;
_selected = items.Current = items[0];
} else {
var index = _selected.GetIndex();
_selected = items.Current = items[Mathf.PosMod(index + diff, items.Count)];
}
ActiveName.Text = _selected?.Name ?? ""; ActiveName.Text = _selected?.Name ?? "";
Update(); Update();
} }
// TODO: Add scrollwheel support.
} }
public override void _Process(float delta) public override void _Process(float delta)
{ {
if (!Visible) return; if (!Visible) return;
var items = GetItems();
var cursorPos = ToLocal(this.GetClient().Cursor.ScreenPosition); if (_showUntil != null) {
var angle = cursorPos.Angle() - _startAngle; if (DateTime.Now >= _showUntil) {
var index = (int)((angle / Mathf.Tau + 1) % 1 * MinElements); Modulate = new Color(Modulate, Modulate.a - delta * 3);
if ((cursorPos.Length() > InnerRadius) && (index < items.Count) && (items[index] != _selected)) { if (Modulate.a <= 0) {
_showUntil = null;
Visible = false;
}
}
return;
}
var items = GetItems();
var cursor = ToLocal(this.GetClient().Cursor.ScreenPosition);
var angle = cursor.Angle() - _startAngle;
var index = (int)((angle / Mathf.Tau + 1) % 1 * MinElements);
if ((cursor.Length() > InnerRadius) && (index < items.Count) && (items[index] != _selected)) {
_selected = items[index]; _selected = items[index];
ActiveName.Text = _selected?.Name ?? ""; ActiveName.Text = _selected?.Name ?? "";
Update(); Update();
} }
if (!Input.IsActionPressed("interact_select")) { if (!Input.IsActionPressed("interact_select")) {
Visible = false; _showUntil = DateTime.Now;
items.Current = _selected; items.Current = _selected;
Update();
} }
} }

Loading…
Cancel
Save