Skip to content

Commit

Permalink
☠️ Implement game over
Browse files Browse the repository at this point in the history
  • Loading branch information
tomrijnbeek committed Oct 1, 2023
1 parent 31b8b23 commit 81052b9
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 7 deletions.
7 changes: 6 additions & 1 deletion entities/Character.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,15 @@ public void TakeDamage(int amountOfDamage)
var oldHealth = CurrentHealth;
CurrentHealth = Math.Max(CurrentHealth - amountOfDamage, 0);
redness = 1;
// TODO: handle death
EmitSignal(nameof(HealthChanged), CurrentHealth, MaxHealth, CurrentHealth - oldHealth);
if (CurrentHealth <= 0)
{
OnDeath();
}
}

protected virtual void OnDeath() {}

public void Heal(int amountToHeal)
{
if (CurrentHealth == MaxHealth)
Expand Down
4 changes: 2 additions & 2 deletions entities/hazard/HazardLibrary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public static class HazardTypeExtensions

public static int AttackDamage(this HazardType hazardType) => hazardType switch
{
Spider => 2,
Slime => 1,
Spider => 100,
Slime => 100,
OvergrownVines => 0,
_ => throw new ArgumentOutOfRangeException(nameof(hazardType), hazardType, null)
};
Expand Down
9 changes: 8 additions & 1 deletion entities/player/Player.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
using Godot;

public class Player : Character
public sealed class Player : Character
{
[Signal] public delegate void PlayerDied();

protected override Vector2 Forward => Vector2.Down;

protected override void OnDeath()
{
EmitSignal(nameof(PlayerDied));
}
}
4 changes: 2 additions & 2 deletions scenes/main/GameOver.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

[ext_resource path="res://assets/Minimal4.tres" type="DynamicFont" id=1]

[node name="Control" type="Control"]
[node name="GameOver" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0

[node name="ColorRect" type="ColorRect" parent="."]
margin_right = 192.0
margin_bottom = 107.0
margin_bottom = 108.0
color = Color( 0, 0, 0, 0.152941 )

[node name="Label" type="Label" parent="."]
Expand Down
11 changes: 11 additions & 0 deletions scenes/main/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ public sealed class Main : Node
private AnimationPlayer animations = null!;
private ShakeCamera shakeCamera = null!;

private bool gameOver;

public override void _Ready()
{
GD.Randomize();
Expand Down Expand Up @@ -41,6 +43,7 @@ private void onDialogueFinished()

private void onRoomExited()
{
if (gameOver) return;
dungeonTraverser.MoveForward();
GetNode<Room>("Room").FillRoom(dungeonTraverser.CurrentRoom);
}
Expand All @@ -55,6 +58,14 @@ private void onPlayerHealthChanged(int newHealth, int maxHealth, int healthChang
}
}

private void onPlayerDied()
{
gameOver = true;
var room = GetNode<Room>("Room");
room.Clear();
GetNode<CanvasItem>("GameOverOverlay").Visible = true;
}

private bool currentInventoryVisibility = true;
private void ToggleInventory(bool? forceState = null, bool skipAnimation = false)
{
Expand Down
10 changes: 9 additions & 1 deletion scenes/main/main.tscn
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[gd_scene load_steps=10 format=2]
[gd_scene load_steps=11 format=2]

[ext_resource path="res://scenes/inventory/inventory.tscn" type="PackedScene" id=1]
[ext_resource path="res://scenes/story/Dialogue.tscn" type="PackedScene" id=2]
Expand All @@ -7,6 +7,7 @@
[ext_resource path="res://scenes/main/TopHud.tscn" type="PackedScene" id=5]
[ext_resource path="res://entities/player/player.tscn" type="PackedScene" id=6]
[ext_resource path="res://scenes/main/ShakeCamera.cs" type="Script" id=7]
[ext_resource path="res://scenes/main/GameOver.tscn" type="PackedScene" id=8]

[sub_resource type="Animation" id=1]
resource_name = "InventoryClose"
Expand Down Expand Up @@ -71,6 +72,13 @@ current = true
editor_draw_screen = false
script = ExtResource( 7 )

[node name="GameOverOverlay" type="Node2D" parent="."]
visible = false
z_index = 100

[node name="GameOver" parent="GameOverOverlay" instance=ExtResource( 8 )]

[connection signal="RoomExited" from="Room" to="." method="onRoomExited"]
[connection signal="HealthChanged" from="Player" to="." method="onPlayerHealthChanged"]
[connection signal="PlayerDied" from="Player" to="." method="onPlayerDied"]
[connection signal="DialogueFinished" from="Dialogue" to="." method="onDialogueFinished"]
6 changes: 6 additions & 0 deletions scenes/room/Room.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ public void FillRoom(RoomContents contents)
enterRoom();
}

public void Clear()
{
Player.Position = new Vector2(Player.Position.x, finalY);
finishRoom();
}

private void enterRoom()
{
Player.Position = new Vector2(96, initialY);
Expand Down
7 changes: 7 additions & 0 deletions scenes/room/steps/EncounterStep.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public void Do(Node roomNode, Player player, Templates templates, Action complet
roomNode.AddChild(runner);
runner.AddChild(hazardObj);
runner.AddChild(cursor);

roomNode.Connect(nameof(Room.RoomExited), runner, nameof(runner.Quit));
}

private sealed class EncounterRunner : Node
Expand Down Expand Up @@ -80,5 +82,10 @@ private void startHazardTurn()
{
hazard.DoTurn(encounter, startPlayerTurn);
}

public void Quit()
{
QueueFree();
}
}
}
7 changes: 7 additions & 0 deletions scenes/room/steps/ItemDropStep.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public void Do(Node roomNode, Player player, Templates templates, Action complet
hover.Connect(nameof(HoveringItem.ItemPlaced), listener, nameof(listener.OnItemPlaced));
roomNode.AddChild(listener);
listener.AddChild(drop);

roomNode.Connect(nameof(Room.RoomExited), listener, nameof(listener.Quit));
}

private sealed class SignalListener : Node
Expand All @@ -36,5 +38,10 @@ public void OnItemPlaced(HoveringItem item)
QueueFree();
complete();
}

public void Quit()
{
QueueFree();
}
}
}

0 comments on commit 81052b9

Please sign in to comment.