fix crashing when respawning with no save
parent
755817e81a
commit
1824cb94cf
|
@ -0,0 +1,25 @@
|
|||
[gd_resource type="Resource" load_steps=8 format=3 uid="uid://betjy08c65fp1"]
|
||||
|
||||
[ext_resource type="Script" path="res://State/Global/MapState.cs" id="1_aydul"]
|
||||
[ext_resource type="Script" path="res://State/Global/Progression.cs" id="2_y82md"]
|
||||
[ext_resource type="Script" path="res://State/Global/Stats.cs" id="3_rktrk"]
|
||||
[ext_resource type="Script" path="res://Utils/Save.cs" id="4_n4440"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_nf41v"]
|
||||
script = ExtResource("1_aydul")
|
||||
_state = {}
|
||||
|
||||
[sub_resource type="Resource" id="Resource_7l14i"]
|
||||
script = ExtResource("2_y82md")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_e5qnf"]
|
||||
script = ExtResource("3_rktrk")
|
||||
SaveLocation = Vector2(252, 0)
|
||||
SaveMapKey = "res://Scenes/Maps/ArenaExterior.tscn"
|
||||
DeathCount = 0
|
||||
|
||||
[resource]
|
||||
script = ExtResource("4_n4440")
|
||||
Progression = SubResource("Resource_7l14i")
|
||||
MapState = SubResource("Resource_nf41v")
|
||||
Stats = SubResource("Resource_e5qnf")
|
|
@ -20,6 +20,7 @@ public abstract partial class Boss : Enemy
|
|||
public abstract int Intensity { get; }
|
||||
|
||||
private bool _isActive;
|
||||
private Events.EventBus _eventBus;
|
||||
|
||||
[Export]
|
||||
public virtual bool IsActive
|
||||
|
@ -30,7 +31,10 @@ public abstract partial class Boss : Enemy
|
|||
_isActive = value;
|
||||
|
||||
// register or deregister ourselves when we are active/inactive
|
||||
this.GetWorld().RegisterBoss(_isActive ? this : null);
|
||||
_eventBus.EmitSignal(
|
||||
Events.EventBus.SignalName.RegisteredBoss,
|
||||
_isActive ? this : null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,6 +51,8 @@ public abstract partial class Boss : Enemy
|
|||
{
|
||||
Reset();
|
||||
};
|
||||
|
||||
_eventBus = this.GetEventBus();
|
||||
}
|
||||
|
||||
protected void UpdateBossStatus(bool status)
|
||||
|
|
|
@ -331,7 +331,7 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
if (Health <= 0)
|
||||
{
|
||||
EmitSignal(SignalName.Death, args);
|
||||
GetNode<GpuParticles2D>("DeathParticles")
|
||||
GetNode<GpuParticles2D>("DeathParticles")?
|
||||
.CloneOnWorld<GpuParticles2D>()
|
||||
.EmitOneShot();
|
||||
}
|
||||
|
|
|
@ -315,7 +315,6 @@ MaxDistanceToTarget = 128.0
|
|||
UseItemDistance = 48.0
|
||||
PassiveState = NodePath("../Idle")
|
||||
PursueState = NodePath("../Idle")
|
||||
PursueOnLineOfSight = false
|
||||
NPC = NodePath("../..")
|
||||
|
||||
[node name="Idle" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PursueState", "NavigationAgent", "NPC")]
|
||||
|
|
|
@ -18,4 +18,10 @@ public partial class EventBus : Node
|
|||
|
||||
[Signal]
|
||||
public delegate void PlayerHealthChangedEventHandler(HealthChangedArgs args);
|
||||
|
||||
[Signal]
|
||||
public delegate void RegisteredBossEventHandler(Characters.Boss boss);
|
||||
|
||||
[Signal]
|
||||
public delegate void DeregisteredBossEventHandler(Characters.Boss boss);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
using Godot;
|
||||
using SupaLidlGame.Characters;
|
||||
using SupaLidlGame.Extensions;
|
||||
|
||||
namespace SupaLidlGame.UI;
|
||||
|
||||
public partial class BossBar : VBoxContainer
|
||||
{
|
||||
public TextureProgressBar ProgressBar { get; set; }
|
||||
|
||||
public Label BossNameLabel { get; set; }
|
||||
|
||||
private Events.EventBus _eventBus;
|
||||
private Boss _boss;
|
||||
|
||||
public Boss Boss
|
||||
|
@ -24,6 +27,19 @@ public partial class BossBar : VBoxContainer
|
|||
{
|
||||
ProgressBar = GetNode<TextureProgressBar>("BarMargin/BossBar");
|
||||
BossNameLabel = GetNode<Label>("LabelMargin/BossNameLabel");
|
||||
_eventBus = this.GetEventBus();
|
||||
_eventBus.RegisteredBoss += RegisterBoss;
|
||||
_eventBus.DeregisteredBoss += DeregisterBoss;
|
||||
}
|
||||
|
||||
private void RegisterBoss(Boss boss)
|
||||
{
|
||||
Boss = boss;
|
||||
}
|
||||
|
||||
private void DeregisterBoss(Boss boss)
|
||||
{
|
||||
Boss = null;
|
||||
}
|
||||
|
||||
private void OnBossHurt(Events.HurtArgs args)
|
||||
|
|
|
@ -67,7 +67,7 @@ public class CacheStore<TKey, TVal>
|
|||
|
||||
public bool IsItemValid(TKey key)
|
||||
{
|
||||
return !IsItemStale(key) && _store.ContainsKey(key);
|
||||
return key is not null && _store.ContainsKey(key) && !IsItemStale(key);
|
||||
}
|
||||
|
||||
public bool ContainsKey(TKey key)
|
||||
|
|
|
@ -99,6 +99,8 @@ public partial class World : Node
|
|||
{
|
||||
MoveToArea(args.Area, args.Connector);
|
||||
};
|
||||
EventBus.RegisteredBoss += RegisterBoss;
|
||||
EventBus.DeregisteredBoss += DeregisterBoss;
|
||||
|
||||
_uiViewport = GetNode<SubViewport>("CanvasLayer/SubViewportContainer/UIViewport");
|
||||
|
||||
|
@ -111,10 +113,9 @@ public partial class World : Node
|
|||
base._Ready();
|
||||
}
|
||||
|
||||
public void RegisterBoss(Boss boss)
|
||||
private void RegisterBoss(Boss boss)
|
||||
{
|
||||
CurrentBoss = boss;
|
||||
UIController.BossBar.Boss = boss;
|
||||
MusicPlayer.Stream = boss?.Music;
|
||||
// TODO: use an audio manager
|
||||
if (MusicPlayer.Stream is null)
|
||||
|
@ -127,10 +128,9 @@ public partial class World : Node
|
|||
}
|
||||
}
|
||||
|
||||
public void DeregisterBoss(Boss boss)
|
||||
private void DeregisterBoss(Boss boss)
|
||||
{
|
||||
CurrentBoss = null;
|
||||
UIController.BossBar.Boss = null;
|
||||
MusicPlayer.Stop();
|
||||
}
|
||||
|
||||
|
@ -304,7 +304,8 @@ public partial class World : Node
|
|||
}
|
||||
else
|
||||
{
|
||||
return new Save();
|
||||
return ResourceLoader.Load("res://Assets/default-save.tres")
|
||||
.Duplicate(true) as Save;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue