public partial class Player : CharacterBody3D { /// Returns whether is the local player. public bool IsLocal => this.IsAuthority(); /// Gets the peer ID of this player. public int PeerId => GetMultiplayerAuthority(); /// Gets the workshop owned by this player. public Workshop OwnedWorkshop => Game.Workshops.ByPeerId(PeerId); /// Gets the workshop the player is physically in, if any. public Workshop EnteredWorkshop { get; private set; } public MovementController Movement { get; private set; } public CameraController Camera { get; private set; } public AnimationController Animation { get; private set; } public PickupController Pickup { get; private set; } public override void _EnterTree() { Movement = GetNode(nameof(MovementController)); Camera = GetNode(nameof(CameraController)); Animation = GetNode(nameof(AnimationController)); Pickup = GetNode(nameof(PickupController)); } public void OnWorkshopTrackerAreaEntered(Area3D area) { if (area is Workshop workshop) EnteredWorkshop = workshop; } public void OnWorkshopTrackerAreaExited(Area3D area) { if (area is Workshop) EnteredWorkshop = null; } }