44 lines
1.1 KiB
C#
44 lines
1.1 KiB
C#
using Godot;
|
|
|
|
namespace CodingLand.Scripts.Logic;
|
|
|
|
public partial class PlayerInput : MultiplayerSynchronizer
|
|
{
|
|
[Export] public bool IsDashing;
|
|
|
|
[Export] public Vector2 BuildingAt;
|
|
|
|
[Export] public Vector2 MovementDirection;
|
|
|
|
private bool IsCurrentPlayer => GetMultiplayerAuthority() == Multiplayer.GetUniqueId();
|
|
|
|
public override void _Ready()
|
|
{
|
|
if (IsCurrentPlayer) return;
|
|
SetProcess(false);
|
|
SetPhysicsProcess(false);
|
|
}
|
|
|
|
[Rpc(CallLocal = true)]
|
|
private void Dash()
|
|
=> IsDashing = true;
|
|
|
|
[Rpc(CallLocal = true)]
|
|
private void Build(Vector2 pos)
|
|
=> BuildingAt = pos;
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
MovementDirection = Input.GetVector("move_left", "move_right", "move_up", "move_down");
|
|
|
|
if (Input.IsActionJustPressed("move_dash"))
|
|
Rpc(nameof(Dash));
|
|
}
|
|
|
|
public override void _Input(InputEvent evt)
|
|
{
|
|
if (!IsCurrentPlayer) return;
|
|
if (evt is InputEventMouseButton { Pressed: true })
|
|
Rpc(nameof(Build), GetViewport().GetMousePosition());
|
|
}
|
|
} |