droppable items and win
This commit is contained in:
parent
0f6445d677
commit
5bdbfa4d82
47 changed files with 820 additions and 85 deletions
|
|
@ -13,9 +13,12 @@ public partial class LevelRunner : Node
|
|||
public float waveHealth = 0;
|
||||
public float waveHealthMax = 0;
|
||||
public List<RuntimeZombieData> zombies = [];
|
||||
[Export] private MoneyReward defaultReward;
|
||||
[Export] private RowSpawner rowSpawner;
|
||||
[Export] private Timer waveTimer;
|
||||
[Export] private float approachNotificationTime;
|
||||
[Export] private AnimationPlayer player;
|
||||
[Export] private Node rewardParent;
|
||||
[Signal] public delegate void ResourceChangedEventHandler(AdventureLevelResource resource);
|
||||
[Signal] public delegate void WaveChangedEventHandler(int to);
|
||||
[Signal] public delegate void HugeWaveApproachingCallbackEventHandler();
|
||||
|
|
@ -59,7 +62,7 @@ public partial class LevelRunner : Node
|
|||
rowSpawner.Add(resource.waves[waveIndex].zombiesOrdered);
|
||||
|
||||
ClearZombies();
|
||||
|
||||
|
||||
if (waveIndex == resource.waves.Count - 1)
|
||||
{
|
||||
EmitSignal(SignalName.FinalWaveInitiated);
|
||||
|
|
@ -110,18 +113,46 @@ public partial class LevelRunner : Node
|
|||
waveHealthMax += zombie.GetMaxHPMixed();
|
||||
waveHealth = waveHealthMax;
|
||||
zombie.HPChangedMixed += OnHPChanged;
|
||||
|
||||
|
||||
|
||||
|
||||
if (waveIndex == resource.waves.Count - 1)
|
||||
{
|
||||
zombie.HasBeenKilled += (who) =>
|
||||
{
|
||||
if (waveHealth <= 0)
|
||||
{
|
||||
RuntimeLevelData.Instance.SetLevelState(RuntimeLevelData.LevelStates.Win);
|
||||
}
|
||||
};
|
||||
zombie.HasBeenKilled += OnLastZombieKilled;
|
||||
}
|
||||
}
|
||||
private void OnLastZombieKilled(RuntimeZombieData who)
|
||||
{
|
||||
if (waveHealth > 0) return;
|
||||
|
||||
RuntimeLevelData.Instance.SetLevelState(RuntimeLevelData.LevelStates.Win);
|
||||
|
||||
var reward = resource.reward.Scene.Instantiate<DroppableItem>();
|
||||
if (reward is DroppableSeedpacket seedpacket && resource.reward is PlantReward plantReward)
|
||||
{
|
||||
seedpacket.plant = plantReward.Plant;
|
||||
}
|
||||
LevelController.Instance.SetReward(resource.reward);
|
||||
player.Play("win");
|
||||
Callable.From(() =>
|
||||
{
|
||||
rewardParent.AddChild(reward);
|
||||
|
||||
reward.GlobalPosition = who.GlobalPosition + Vector2.Up * FieldParams.TileHeight * 0.5f;
|
||||
|
||||
var dropmover = new DropMover();
|
||||
reward.AddChild(dropmover);
|
||||
}).CallDeferred();
|
||||
reward.PickedUp += () =>
|
||||
{
|
||||
var tween = CreateTween();
|
||||
var camera = GetViewport().GetCamera2D();
|
||||
tween.TweenProperty(reward, "global_position", camera.GlobalPosition, 4.0);
|
||||
tween.Parallel().TweenProperty(reward, "global_scale", new Vector2(3.0f, 3.0f), 4.0);
|
||||
tween.TweenInterval(1.0);
|
||||
tween.TweenCallback(Callable.From(LevelController.Instance.EndLevel));
|
||||
|
||||
reward.InputPickable = false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue