Возможность отключать интерактивные объекты

This commit is contained in:
Евгений Титаренко 2024-08-25 13:31:50 +03:00
parent 26db1ea66d
commit 872d650b3d
4 changed files with 29 additions and 5 deletions

View file

@ -4,10 +4,11 @@
[ext_resource type="SpriteFrames" uid="uid://bvnfvjn7am8tc" path="res://resources/sprites/key.tres" id="2_0s1fq"]
[sub_resource type="CircleShape2D" id="CircleShape2D_w4p6k"]
radius = 60.0
radius = 0.0
[node name="Interactable" type="Node2D"]
script = ExtResource("1_4ni08")
IsEnabled = true
[node name="Area2D" type="Area2D" parent="."]

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=3 uid="uid://c1abgp6quvo3o"]
[gd_scene load_steps=20 format=3 uid="uid://c1abgp6quvo3o"]
[ext_resource type="Texture2D" uid="uid://b5baxx5o21qy1" path="res://resources/sprites/Sub/Sub.png" id="1_a6v5r"]
[ext_resource type="Script" path="res://scripts/Day.cs" id="1_cko08"]
@ -10,6 +10,7 @@
[ext_resource type="SpriteFrames" uid="uid://532buo56y4q2" path="res://resources/sprites/npcs/crewmate.tres" id="7_j5wfn"]
[ext_resource type="PackedScene" uid="uid://dfdsnwub212o6" path="res://prefabs/Player.tscn" id="8_csxln"]
[ext_resource type="AudioStream" uid="uid://be35iuapayv0u" path="res://resources/music/Day1.wav" id="9_43nb0"]
[ext_resource type="PackedScene" uid="uid://x6pqolxtgwvy" path="res://prefabs/Interactable.tscn" id="12_p32yk"]
[ext_resource type="SpriteFrames" uid="uid://wu7pmuvjw5qm" path="res://resources/sprites/npcs/Empty.tres" id="10_medl6"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_h0540"]
@ -255,4 +256,10 @@ stream = SubResource("AudioStreamPlaylist_7838k")
autoplay = true
bus = &"Music"
[node name="EndDay" parent="." instance=ExtResource("12_p32yk")]
position = Vector2(985, 245)
SpriteOffset = Vector2(0, -30)
AreaRadius = 20.0
IsEnabled = false
[connection signal="DialogEnded" from="NPCs/Ivan" to="." method="ChangeDay"]

View file

@ -17,6 +17,7 @@ public partial class Day : Node2D
private Player _player;
private ColorRect _colorRect;
private AudioStreamPlayer _music;
private Interactable _endDay;
private double _transitionTimeout = 0;
@ -26,6 +27,7 @@ public partial class Day : Node2D
_player = (Player)FindChild("Player");
_colorRect = _player.CRect;
_music = (AudioStreamPlayer)FindChild("Music");
_endDay = (Interactable)FindChild("EndDay");
_colorRect.Color = new Color(0, 0, 0, 1f);
_music.VolumeDb = -40;
_player.CurrentState = Player.State.Wait;
@ -36,6 +38,11 @@ public partial class Day : Node2D
{
_state = State.TransitionOut;
}
public void EnableEndDay()
{
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)

View file

@ -13,7 +13,7 @@ public partial class Interactable : Node2D
[Export] public Vector2 SpriteOffset;
[Export] public float AreaRadius;
[Export] public bool IsEnabled;
private AnimatedSprite2D _sprite;
private CollisionShape2D _areaMesh;
@ -46,11 +46,20 @@ public partial class Interactable : Node2D
if (_sprite.Position != SpriteOffset) _sprite.Position = SpriteOffset;
if (Math.Abs(_collisionCircle.Radius - AreaRadius) > Tolerance) _collisionCircle.Radius = AreaRadius;
}
if (IsEnabled)
{
_sprite.Visible = true;
}
else
{
_sprite.Visible = false;
}
}
private void _on_area_2d_body_entered(Node2D body)
{
if (body is Player player)
if (IsEnabled && body is Player player)
{
_sprite.Visible = true;
EmitSignal(SignalName.PlayerNearBy, player);
@ -59,7 +68,7 @@ public partial class Interactable : Node2D
private void _on_area_2d_body_exited(Node2D body)
{
if (body is Player player)
if (IsEnabled && body is Player player)
{
_sprite.Visible = false;
EmitSignal(SignalName.PlayerLeft, player);