using Godot; using System; public partial class BaseEntity : Area2D { [Signal] public delegate BaseEntity EntitySelectedEventHandler(); [Signal] public delegate BaseEntity EntityDeselectedEventHandler(); protected Vector2 ScreenSize; protected AnimationPlayer animationPlayer; protected Sprite2D sprite; protected CollisionShape2D collisionShape; protected bool selected; public override void _Ready() { ScreenSize = GetViewportRect().Size; sprite = GetNode("Sprite2D"); collisionShape = GetNode("CollisionShape2D"); animationPlayer = sprite.GetNode("AnimationPlayer"); } public override void _UnhandledInput(InputEvent @event) { if (@event is InputEventMouseButton mouseEvent) { if (mouseEvent.IsPressed() && !mouseEvent.IsEcho()) { switch (mouseEvent.ButtonIndex) { case MouseButton.Left: if (collisionShape.Shape.GetRect().HasPoint(GetLocalMousePosition())) entitySelected(); else if (selected) entityDeselected(); break; default: break; } } } } protected void entitySelected() { selected = true; GD.Print("Selected"); GetNode("SelectedSprite2D").Visible = true; EmitSignalEntitySelected(); ShowInfo(); } protected void entityDeselected() { selected = false; GD.Print("Unselected"); GetNode("SelectedSprite2D").Visible = false; EmitSignalEntityDeselected(); HideInfo(); } protected void ShowInfo() { MarginContainer marginContainer = GetNode("MarginContainer"); Label nameLabel = GetNode