Реализация окончания дня по приходу в каюту.
This commit is contained in:
parent
de683399fa
commit
4222af1896
8 changed files with 111 additions and 81 deletions
|
@ -4,83 +4,87 @@ using System;
|
|||
[Tool]
|
||||
public partial class Interactable : Node2D
|
||||
{
|
||||
private const double Tolerance = 1e-6;
|
||||
private const double Tolerance = 1e-6;
|
||||
|
||||
[Signal]
|
||||
public delegate void PlayerNearByEventHandler(Player player);
|
||||
[Signal]
|
||||
public delegate void PlayerNearByEventHandler(Player player);
|
||||
|
||||
[Signal]
|
||||
public delegate void PlayerLeftEventHandler(Player player);
|
||||
[Signal]
|
||||
public delegate void PlayerLeftEventHandler(Player player);
|
||||
|
||||
[Signal]
|
||||
public delegate void OnInteractEventHandler();
|
||||
[Signal]
|
||||
public delegate void OnInteractEventHandler();
|
||||
|
||||
[Export] public Vector2 SpriteOffset;
|
||||
[Export] public float AreaRadius;
|
||||
[Export] public bool IsEnabled;
|
||||
private AnimatedSprite2D _sprite;
|
||||
[Export] public Vector2 SpriteOffset;
|
||||
[Export] public float AreaRadius;
|
||||
|
||||
private CollisionShape2D _areaMesh;
|
||||
private AnimatedSprite2D _sprite;
|
||||
|
||||
private CircleShape2D _collisionCircle;
|
||||
private CollisionShape2D _areaMesh;
|
||||
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
_sprite = (AnimatedSprite2D)FindChild("AnimatedSprite2D");
|
||||
_areaMesh = (CollisionShape2D)FindChild("CollisionShape2D");
|
||||
_sprite.Position = SpriteOffset;
|
||||
_collisionCircle = (CircleShape2D)_areaMesh.Shape;
|
||||
_collisionCircle.Radius = AreaRadius;
|
||||
if (Engine.IsEditorHint())
|
||||
{
|
||||
_sprite.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_sprite.Visible = false;
|
||||
}
|
||||
}
|
||||
private CircleShape2D _collisionCircle;
|
||||
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (Engine.IsEditorHint())
|
||||
{
|
||||
if (_sprite.Position != SpriteOffset) _sprite.Position = SpriteOffset;
|
||||
if (Math.Abs(_collisionCircle.Radius - AreaRadius) > Tolerance) _collisionCircle.Radius = AreaRadius;
|
||||
}
|
||||
private bool _isEnabled = true;
|
||||
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
_sprite = (AnimatedSprite2D)FindChild("AnimatedSprite2D");
|
||||
_areaMesh = (CollisionShape2D)FindChild("CollisionShape2D");
|
||||
_sprite.Position = SpriteOffset;
|
||||
_collisionCircle = (CircleShape2D)_areaMesh.Shape;
|
||||
_collisionCircle.Radius = AreaRadius;
|
||||
if (Engine.IsEditorHint())
|
||||
{
|
||||
_sprite.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_sprite.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsEnabled)
|
||||
{
|
||||
_sprite.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_sprite.Visible = false;
|
||||
}
|
||||
}
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (Engine.IsEditorHint())
|
||||
{
|
||||
if (_sprite.Position != SpriteOffset) _sprite.Position = SpriteOffset;
|
||||
if (Math.Abs(_collisionCircle.Radius - AreaRadius) > Tolerance) _collisionCircle.Radius = AreaRadius;
|
||||
}
|
||||
}
|
||||
|
||||
public void Interact()
|
||||
{
|
||||
EmitSignal(SignalName.OnInteract);
|
||||
}
|
||||
|
||||
private void _on_area_2d_body_entered(Node2D body)
|
||||
{
|
||||
if (IsEnabled && body is Player player)
|
||||
{
|
||||
_sprite.Visible = true;
|
||||
EmitSignal(SignalName.PlayerNearBy, player);
|
||||
}
|
||||
}
|
||||
public void Interact()
|
||||
{
|
||||
EmitSignal(SignalName.OnInteract);
|
||||
}
|
||||
|
||||
private void _on_area_2d_body_exited(Node2D body)
|
||||
{
|
||||
if (IsEnabled && body is Player player)
|
||||
{
|
||||
_sprite.Visible = false;
|
||||
EmitSignal(SignalName.PlayerLeft, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Enable()
|
||||
{
|
||||
_isEnabled = true;
|
||||
_sprite.Visible = true;
|
||||
}
|
||||
public void Disable()
|
||||
{
|
||||
_isEnabled = false;
|
||||
_sprite.Visible = false;
|
||||
}
|
||||
|
||||
private void _on_area_2d_body_entered(Node2D body)
|
||||
{
|
||||
if (_isEnabled && body is Player player)
|
||||
{
|
||||
_sprite.Visible = true;
|
||||
EmitSignal(SignalName.PlayerNearBy, player);
|
||||
}
|
||||
}
|
||||
|
||||
private void _on_area_2d_body_exited(Node2D body)
|
||||
{
|
||||
if (_isEnabled && body is Player player)
|
||||
{
|
||||
_sprite.Visible = false;
|
||||
EmitSignal(SignalName.PlayerLeft, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue