Add more floors, light refactoring

This commit is contained in:
2025-02-12 00:49:16 -08:00
parent 9352e4c0fd
commit a1c66df038
31 changed files with 422 additions and 186 deletions

View File

@@ -5,3 +5,6 @@ dotnet_diagnostic.CS8632.severity = silent
# CS1998: Async method lacks 'await' operators and will run synchronously
dotnet_diagnostic.CS1998.severity = silent
# IDE1006: Naming Styles
dotnet_diagnostic.IDE1006.severity = none

View File

@@ -14,6 +14,8 @@ public partial class InGameAudio : Node
[Dependency] public IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
#region BGM Nodes
[Node] public IDimmableAudioStreamPlayer MenuBgm { get; set; } = default!;
@@ -54,6 +56,7 @@ public partial class InGameAudio : Node
{
InGameAudioLogic.Set(AppRepo);
InGameAudioLogic.Set(GameEventDepot);
InGameAudioLogic.Set(Player);
InGameAudioBinding = InGameAudioLogic.Bind();

View File

@@ -11,15 +11,16 @@ public partial class InGameAudioLogic
{
OnAttach(() =>
{
var player = Get<IPlayer>();
OnOverworldEntered();
var gameEventDepot = Get<IGameEventDepot>();
gameEventDepot.OverworldEntered += OnOverworldEntered;
gameEventDepot.DungeonAThemeAreaEntered += OnDungeonAThemeEntered;
gameEventDepot.MenuScrolled += OnMenuScrolled;
gameEventDepot.MenuBackedOut += OnMenuBackedOut;
gameEventDepot.EquippedWeapon += OnEquippedItem;
gameEventDepot.EquippedArmor += OnEquippedItem;
gameEventDepot.EquippedAccessory += OnEquippedItem;
player.Inventory.EquippedWeapon.Changed += OnEquippedItem;
player.Inventory.EquippedArmor.Changed += OnEquippedItem;
player.Inventory.EquippedAccessory.Changed += OnEquippedItem;
gameEventDepot.InventorySorted += OnInventorySorted;
gameEventDepot.HealingItemConsumed += OnHealingItemConsumed;
gameEventDepot.RestorativePickedUp += OnRestorativePickedUp;
@@ -28,13 +29,14 @@ public partial class InGameAudioLogic
OnDetach(() =>
{
var gameEventDepot = Get<IGameEventDepot>();
var player = Get<IPlayer>();
gameEventDepot.OverworldEntered -= OnOverworldEntered;
gameEventDepot.DungeonAThemeAreaEntered -= OnDungeonAThemeEntered;
gameEventDepot.MenuScrolled -= OnMenuScrolled;
gameEventDepot.MenuBackedOut -= OnMenuBackedOut;
gameEventDepot.EquippedWeapon -= OnEquippedItem;
gameEventDepot.EquippedArmor -= OnEquippedItem;
gameEventDepot.EquippedAccessory -= OnEquippedItem;
player.Inventory.EquippedWeapon.Changed -= OnEquippedItem;
player.Inventory.EquippedArmor.Changed -= OnEquippedItem;
player.Inventory.EquippedAccessory.Changed -= OnEquippedItem;
gameEventDepot.InventorySorted -= OnInventorySorted;
gameEventDepot.TeleportEntered -= OnTeleportEntered;
});

View File

@@ -5,5 +5,9 @@ public enum WeaponTag
SelfDamage,
IgnoreAffinity,
Knockback,
}
public enum ItemTag
{
BreaksOnChange
}

View File

@@ -19,7 +19,6 @@ GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Idle :
GameJamDungeon_EnemyLogic_State_Attacking --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_FollowPlayer : PhysicsTick
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_Idle : LostPlayer
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_Idle --> GameJamDungeon_EnemyLogic_State_Patrolling : StartPatrol
GameJamDungeon_EnemyLogic_State_Patrolling --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_Patrolling --> GameJamDungeon_EnemyLogic_State_Patrolling : PatrolToRandomSpot

View File

@@ -7,7 +7,7 @@ public partial class EnemyLogic
public partial record State
{
[Meta, Id("enemy_logic_state_followplayer")]
public partial record FollowPlayer : Activated, IGet<Input.PhysicsTick>, IGet<Input.LostPlayer>, IGet<Input.StopMoving>
public partial record FollowPlayer : Activated, IGet<Input.PhysicsTick>, IGet<Input.LostPlayer>
{
public Transition On(in Input.PhysicsTick input)
{
@@ -23,11 +23,6 @@ public partial class EnemyLogic
{
return To<Idle>();
}
public Transition On(in Input.StopMoving _)
{
return To<Idle>();
}
}
}
}

View File

@@ -35,21 +35,21 @@ public partial class Game : Node3D, IGame
[Dependency] public IAppRepo AppRepo => this.DependOn<IAppRepo>();
#region Nodes
[Node] public IMap Map { get; set; } = default!;
[Node] private IMap Map { get; set; } = default!;
[Node] public IPlayer Player { get; set; } = default!;
[Node] private InGameUI InGameUI { get; set; } = default!;
[Node] public InGameUI InGameUI { get; set; } = default!;
[Node] private IFloorClearMenu FloorClearMenu { get; set; } = default!;
[Node] public IFloorClearMenu FloorClearMenu { get; set; } = default!;
[Node] private DeathMenu DeathMenu { get; set; } = default!;
[Node] public DeathMenu DeathMenu { get; set; } = default!;
[Node] private IPauseMenu PauseMenu { get; set; } = default!;
[Node] public IPauseMenu PauseMenu { get; set; } = default!;
[Node] private InGameAudio InGameAudio { get; set; } = default!;
[Node] public InGameAudio InGameAudio { get; set; } = default!;
[Node] private Timer DoubleEXPTimer { get; set; } = default!;
[Node] public Timer DoubleEXPTimer { get; set; } = default!;
[Node] private IPlayer Player { get; set; } = default!;
#endregion
public RescuedItemDatabase RescuedItems { get; set; } = default!;
@@ -121,7 +121,6 @@ public partial class Game : Node3D, IGame
Player.Inventory.InventoryAtCapacity += PlayerInventory_InventoryAtCapacity;
Player.Inventory.PickedUpItem += Inventory_PickedUpItem;
Player.Inventory.RaiseStatRequest += Inventory_RaiseStatRequest;
FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor;
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
@@ -166,6 +165,16 @@ public partial class Game : Node3D, IGame
thrown.Throw();
}
public void AnnounceMessageOnInventoryScreen(string message)
{
InGameUI.InventoryMenu.ShowMessage(message);
}
public void AnnounceMessageOnMainScreen(string message)
{
InGameUI.PlayerInfoUI.DisplayMessage(message);
}
private void OnEnemyDefeated(Vector3 vector, EnemyStatResource resource)
{
Player.GainExp(resource.ExpFromDefeat * GameRepo.EXPRate);
@@ -209,8 +218,12 @@ public partial class Game : Node3D, IGame
private void FloorClearMenu_TransitionCompleted()
{
GameRepo.Resume();
if (Player.Inventory.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.BreaksOnChange))
if (Player.Inventory.EquippedWeapon.Value.ItemTags.Contains(ItemTag.BreaksOnChange))
Player.Inventory.Unequip(Player.Inventory.EquippedWeapon.Value);
if (Player.Inventory.EquippedArmor.Value.ItemTags.Contains(ItemTag.BreaksOnChange))
Player.Inventory.Unequip(Player.Inventory.EquippedArmor.Value);
if (Player.Inventory.EquippedAccessory.Value.ItemTags.Contains(ItemTag.BreaksOnChange))
Player.Inventory.Unequip(Player.Inventory.EquippedAccessory.Value);
}
private void FloorClearMenu_GoToNextFloor()
@@ -228,52 +241,12 @@ public partial class Game : Node3D, IGame
private void GameEventDepot_RestorativePickedUp(Restorative obj)
=> Player.Stats.SetCurrentVT(Player.Stats.CurrentVT.Value + obj.VTRestoreAmount);
private void Inventory_RaiseStatRequest(InventoryItemStats itemStats)
{
HealHP(itemStats.HealHPAmount);
HealVT(itemStats.HealVTAmount);
}
private void SetPauseMode(bool isPaused)
{
if (GetTree() != null)
GetTree().Paused = isPaused;
}
public void RaiseHP(int amountToRaise)
{
if (Player.Stats.CurrentHP.Value == Player.Stats.MaximumHP.Value)
{
Player.Stats.SetMaximumHP(Player.Stats.MaximumHP.Value + amountToRaise);
Player.Stats.SetCurrentHP(Player.Stats.MaximumHP.Value);
EmitSignal(SignalName.StatRaisedAlert, $"{amountToRaise}MAXHP Up.");
}
}
public void HealHP(int amountToRestore)
{
Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value + amountToRestore);
var raiseString = amountToRestore == 1000 ? "MAX" : $"{amountToRestore}";
EmitSignal(SignalName.StatRaisedAlert, $"{raiseString}HP Restored.");
}
public void RaiseVT(int amountToRaise)
{
if (Player.Stats.CurrentVT.Value == Player.Stats.MaximumVT.Value)
{
Player.Stats.SetMaximumVT(Player.Stats.MaximumVT.Value + amountToRaise);
Player.Stats.SetCurrentVT(Player.Stats.MaximumVT.Value);
EmitSignal(SignalName.StatRaisedAlert, $"{amountToRaise}MAXVT Up.");
}
}
public void HealVT(int amountToRestore)
{
Player.Stats.SetCurrentVT(Player.Stats.CurrentVT.Value + amountToRestore);
var raiseString = amountToRestore == 1000 ? "MAX" : $"{amountToRestore}";
EmitSignal(SignalName.StatRaisedAlert, $"{raiseString}VT Restored.");
}
public async void DoubleEXP(TimeSpan lengthOfEffect)
{
InventoryMenu_CloseInventory();

View File

@@ -26,24 +26,6 @@ public interface IGameEventDepot : IDisposable
event Action? MenuBackedOut;
public void OnMenuBackedOut();
event Action<Weapon>? EquippedWeapon;
public void OnEquippedWeapon(Weapon equippedWeapon);
event Action? UnequippedWeapon;
public void OnUnequippedWeapon();
event Action<Armor>? EquippedArmor;
public void OnEquippedArmor(Armor equippedArmor);
event Action? UnequippedArmor;
public void OnUnequippedArmor();
event Action<Accessory>? EquippedAccessory;
public void OnEquippedAccessory(Accessory equippedAccessory);
event Action? UnequippedAccessory;
public void OnUnequippedAccessory();
event Action? InventorySorted;
public void OnInventorySorted();
@@ -69,12 +51,6 @@ public class GameEventDepot : IGameEventDepot
public event Action? MenuScrolled;
public event Action? MenuBackedOut;
public event Action<Weapon>? EquippedWeapon;
public event Action? UnequippedWeapon;
public event Action<Armor>? EquippedArmor;
public event Action? UnequippedArmor;
public event Action<Accessory>? EquippedAccessory;
public event Action? UnequippedAccessory;
public event Action? InventorySorted;
public event Action<ConsumableItemStats>? HealingItemConsumed;
public event Action<Restorative>? RestorativePickedUp;
@@ -91,15 +67,6 @@ public class GameEventDepot : IGameEventDepot
public void OnMenuScrolled() => MenuScrolled?.Invoke();
public void OnMenuBackedOut() => MenuBackedOut?.Invoke();
public void OnEquippedWeapon(Weapon equippedWeapon) => EquippedWeapon?.Invoke(equippedWeapon);
public void OnUnequippedWeapon() => UnequippedWeapon?.Invoke();
public void OnEquippedArmor(Armor equippedArmor) => EquippedArmor?.Invoke(equippedArmor);
public void OnUnequippedArmor() => UnequippedArmor?.Invoke();
public void OnEquippedAccessory(Accessory equippedAccessory) => EquippedAccessory?.Invoke(equippedAccessory);
public void OnUnequippedAccessory() => UnequippedAccessory?.Invoke();
public void OnInventorySorted() => InventorySorted?.Invoke();
public void OnHealingItemConsumed(ConsumableItemStats item) => HealingItemConsumed?.Invoke(item);
public void OnRestorativePickedUp(Restorative restorative) => RestorativePickedUp?.Invoke(restorative);

View File

@@ -9,23 +9,19 @@ public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvid
{
event Game.StatRaisedAlertEventHandler StatRaisedAlert;
public IPlayer Player { get; }
public RescuedItemDatabase RescuedItems { get; }
public void DropItem(IInventoryItem item);
public void ThrowItem(IInventoryItem item);
public void HealHP(int amountToRaise);
public void RaiseHP(int amountToRaise);
public void HealVT(int amountToRaise);
public void RaiseVT(int amountToRaise);
public void DoubleEXP(TimeSpan lengthOfEffect);
public void ToggleInventory();
public void ToggleMinimap();
public void AnnounceMessageOnInventoryScreen(string message);
public void AnnounceMessageOnMainScreen(string message);
}

View File

@@ -11,6 +11,8 @@ public interface IInventoryMenu : IControl
{
public Task RedrawInventory();
public Task ShowMessage(string message);
event InventoryMenu.ClosedMenuEventHandler ClosedMenu;
}
@@ -93,16 +95,15 @@ public partial class InventoryMenu : Control, IInventoryMenu
Player.Inventory.EquippedArmor.Sync += EquippedArmor_Sync;
Player.Inventory.EquippedAccessory.Sync += EquippedAccessory_Sync;
Game.StatRaisedAlert += Game_StatRaisedAlert;
SetProcessInput(false);
}
private async void Game_StatRaisedAlert(string statRaisedAlert)
public async Task ShowMessage(string message)
{
SetProcessInput(false);
await HideUserActionPrompt();
await ShowInventoryInfo();
ItemEffectLabel.Text = statRaisedAlert;
ItemEffectLabel.Text = message;
await ToSignal(GetTree().CreateTimer(1f), "timeout");
await RedrawInventory();
SetProcessInput(true);

View File

@@ -1,8 +1,8 @@
namespace GameJamDungeon;
using System.Collections.Immutable;
namespace GameJamDungeon;
public interface IEquipableItem : IInventoryItem
{
public void Equip();
public void Unequip();
public ImmutableList<ItemTag> ItemTags { get; }
}

View File

@@ -1,4 +1,5 @@
using Chickensoft.Collections;
using Chickensoft.AutoInject;
using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces;
using Godot;
using System;
@@ -31,24 +32,18 @@ public interface IInventory : INode
event Inventory.InventoryAtCapacityEventHandler InventoryAtCapacity;
event Inventory.PickedUpItemEventHandler PickedUpItem;
event Inventory.AccessoryUnequippedEventHandler AccessoryUnequipped;
event Inventory.RaiseStatRequestEventHandler RaiseStatRequest;
}
public partial class Inventory : Node, IInventory
{
public override void _Notification(int what) => this.Notify(what);
// TODO: Constants class with export
private const int _maxInventorySize = 20;
[Signal]
public delegate void InventoryAtCapacityEventHandler(string rejectedItemName);
[Signal]
public delegate void AccessoryUnequippedEventHandler(Accessory unequippedAccessory);
[Signal]
public delegate void RaiseStatRequestEventHandler(ConsumableItemStats consumableItemStats);
[Signal]
public delegate void PickedUpItemEventHandler(string pickedUpItemName);
public Inventory()
@@ -56,6 +51,27 @@ public partial class Inventory : Node, IInventory
Items = [];
}
public void Setup()
{
EquippedWeapon.Changed += EquippedWeapon_Changed;
EquippedArmor.Changed += EquippedArmor_Changed;
EquippedAccessory.Changed += EquippedAccessory_Changed;
}
private void EquippedAccessory_Changed(Accessory obj)
{
}
private void EquippedArmor_Changed(Armor obj)
{
throw new NotImplementedException();
}
private void EquippedWeapon_Changed(Weapon obj)
{
throw new NotImplementedException();
}
public List<IInventoryItem> Items { get; private set; }
public IAutoProp<Weapon> EquippedWeapon => _equippedWeapon;
@@ -96,21 +112,17 @@ public partial class Inventory : Node, IInventory
public void Unequip(IEquipableItem equipable)
{
if (equipable is Weapon weapon)
{
if (equipable is Weapon)
_equippedWeapon.OnNext(new Weapon());
if (weapon.WeaponTags.Contains(WeaponTag.BreaksOnChange))
Items.Remove(weapon);
}
else if (equipable is Armor armor)
else if (equipable is Armor)
_equippedArmor.OnNext(new Armor());
else if (equipable is Accessory accessory)
{
EmitSignal(SignalName.AccessoryUnequipped, _equippedAccessory.Value);
else if (equipable is Accessory)
_equippedAccessory.OnNext(new Accessory());
}
else
throw new NotImplementedException("Item type is not supported.");
if (equipable.ItemTags.Contains(ItemTag.BreaksOnChange))
Remove(equipable);
}
public bool IsEquipped(IEquipableItem equipable)

View File

@@ -26,4 +26,7 @@ public partial class InventoryItemStats : Resource
[Export(PropertyHint.Range, "0, 999, 1")]
public int ThrowDamage { get; set; } = 5;
[Export]
public Godot.Collections.Array<ItemTag> ItemTags { get; set; } = new Godot.Collections.Array<ItemTag>();
}

View File

@@ -43,6 +43,8 @@ public partial class Accessory : Node3D, IEquipableItem
public ImmutableList<AccessoryTag> AccessoryTags => [.. _accessoryStats.AccessoryTags];
public ImmutableList<ItemTag> ItemTags => [.. _accessoryStats.ItemTags];
public void OnReady()
{
Pickup.BodyEntered += OnEntered;
@@ -54,16 +56,6 @@ public partial class Accessory : Node3D, IEquipableItem
_accessoryStats = (AccessoryStats)inventoryItemStats;
}
public void Equip()
{
GameEventDepot.OnEquippedAccessory(this);
}
public void Unequip()
{
GameEventDepot.OnUnequippedAccessory();
}
public void Throw()
{
Player.Inventory.Remove(this);

View File

@@ -2,6 +2,7 @@ using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System;
using System.Collections.Immutable;
namespace GameJamDungeon;
@@ -10,8 +11,6 @@ public partial class Armor : Node3D, IEquipableItem
{
public override void _Notification(int what) => this.Notify(what);
[Dependency] public IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
[Export] private ArmorStats _armorStats { get; set; } = new ArmorStats();
@@ -36,6 +35,8 @@ public partial class Armor : Node3D, IEquipableItem
public int Defense => _armorStats.Defense;
public ImmutableList<ItemTag> ItemTags => [.. _armorStats.ItemTags];
public void OnReady()
{
Pickup.BodyEntered += OnEntered;
@@ -47,16 +48,6 @@ public partial class Armor : Node3D, IEquipableItem
_armorStats = (ArmorStats)inventoryItemStats;
}
public void Equip()
{
GameEventDepot.OnEquippedArmor(this);
}
public void Unequip()
{
GameEventDepot.OnUnequippedArmor();
}
public void Throw()
{
Player.Inventory.Remove(this);

View File

@@ -10,9 +10,6 @@ public partial class ConsumableItem : Node3D, IUsableItem
{
public override void _Notification(int what) => this.Notify(what);
[Signal]
public delegate void RaiseStatRequestEventHandler(ConsumableItemStats consumableItemStats);
[Dependency] public IGame Game => this.DependOn<IGame>();
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
@@ -40,15 +37,15 @@ public partial class ConsumableItem : Node3D, IUsableItem
public void Use()
{
if (_consumableItemStats.RaiseHPAmount > 0)
Game.RaiseHP(_consumableItemStats.RaiseHPAmount);
if (_consumableItemStats.RaiseVTAmount > 0)
Game.RaiseVT(_consumableItemStats.RaiseVTAmount);
if (Player.Stats.CurrentHP.Value == Player.Stats.MaximumHP.Value && _consumableItemStats.RaiseHPAmount > 0)
Player.RaiseHP(_consumableItemStats.RaiseHPAmount);
if (Player.Stats.CurrentVT.Value == Player.Stats.MaximumVT.Value && _consumableItemStats.RaiseVTAmount > 0)
Player.RaiseVT(_consumableItemStats.RaiseVTAmount);
if (_consumableItemStats.HealHPAmount > 0 && Player.Stats.CurrentHP.Value != Player.Stats.MaximumHP.Value)
Game.HealHP(_consumableItemStats.HealHPAmount);
Player.HealHP(_consumableItemStats.HealHPAmount);
if (_consumableItemStats.HealVTAmount > 0 && Player.Stats.CurrentVT.Value != Player.Stats.MaximumVT.Value)
Game.HealVT(_consumableItemStats.HealVTAmount);
Player.HealVT(_consumableItemStats.HealVTAmount);
}
public void SetItemStats(InventoryItemStats inventoryItemStats)

View File

@@ -32,11 +32,11 @@ public partial class DroppedItem : RigidBody3D, IDroppedItem
public async void Drop()
{
AddCollisionExceptionWith((Node)Game.Player);
AddCollisionExceptionWith((Node)Player);
GlobalPosition = Player.CurrentPosition + Vector3.Up;
ApplyCentralImpulse(-Player.CurrentBasis.Z.Normalized() * 5.0f);
await ToSignal(GetTree().CreateTimer(1.5), "timeout");
RemoveCollisionExceptionWith((Node)Game.Player);
RemoveCollisionExceptionWith((Node)Player);
}
public void RescueItem()

View File

@@ -63,9 +63,9 @@ public partial class ThrowableItem : Node3D, IUsableItem
public void Use()
{
if (_throwableItemStats.HealHPAmount > 0)
Game.HealHP(_throwableItemStats.HealHPAmount);
Player.HealHP(_throwableItemStats.HealHPAmount);
if (_throwableItemStats.HealVTAmount > 0)
Game.HealVT(_throwableItemStats.HealVTAmount);
Player.HealVT(_throwableItemStats.HealVTAmount);
if (_throwableItemStats.UsableItemTags.Contains(UsableItemTag.DoubleEXP))
Game.DoubleEXP(TimeSpan.FromSeconds(30));

View File

@@ -45,6 +45,8 @@ public partial class Weapon : Node3D, IInventoryItem, IEquipableItem
public ImmutableList<WeaponTag> WeaponTags => [.. _weaponStats.WeaponTags];
public ImmutableList<ItemTag> ItemTags => [.. _weaponStats.ItemTags];
public ElementType WeaponElement => _weaponStats.WeaponElement;
public double ElementalDamageBonus => _weaponStats.ElementalDamageBonus;
@@ -62,16 +64,6 @@ public partial class Weapon : Node3D, IInventoryItem, IEquipableItem
Sprite.Texture = texture;
}
public void Equip()
{
EmitSignal(SignalName.EquippedItem, this);
}
public void Unequip()
{
}
public void Throw()
{
Player.Inventory.Remove(this);

View File

@@ -750,7 +750,6 @@ mesh = SubResource("ArrayMesh_xh2ej")
[node name="StaticBody3D" type="StaticBody3D" parent="02_ALTAR_FLOOR_ZER0_VER_1/COLLISION"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="02_ALTAR_FLOOR_ZER0_VER_1/COLLISION/StaticBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
shape = SubResource("ConcavePolygonShape3D_aqomv")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="02_ALTAR_FLOOR_ZER0_VER_1/COLLISION/StaticBody3D"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=17 format=3 uid="uid://bc1sp6xwe0j65"]
[gd_scene load_steps=16 format=3 uid="uid://bc1sp6xwe0j65"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_0ecnn"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_cxmwa"]
@@ -14,13 +14,12 @@
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="12_aw26s"]
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/1. sproingy/Sproingy.tscn" id="13_kwaga"]
[ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/2. michael/Michael.tscn" id="14_gkkr3"]
[ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/3. filth_eater/FilthEater.tscn" id="15_kwaga"]
[sub_resource type="NavigationMesh" id="NavigationMesh_4d8mx"]
sample_partition_type = 2
geometry_parsed_geometry_type = 0
[node name="Floor1" type="Node3D"]
[node name="Floor01" type="Node3D"]
script = ExtResource("1_0ecnn")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
@@ -41,5 +40,4 @@ hide_debug_visuals_for_all_generated_rooms = false
[node name="EnemyDatabase" parent="." instance=ExtResource("12_aw26s")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("13_kwaga"), ExtResource("14_gkkr3"), ExtResource("15_kwaga")])
SpawnRate = PackedFloat32Array(1, 1, 10)
EnemyList = Array[PackedScene]([ExtResource("13_kwaga"), ExtResource("14_gkkr3")])

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=15 format=3 uid="uid://dmiqwmivkjgmq"]
[gd_scene load_steps=16 format=3 uid="uid://dmiqwmivkjgmq"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="1_afeds"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_7txs6"]
@@ -13,13 +13,14 @@
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_yvj8v"]
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/1. sproingy/Sproingy.tscn" id="12_pmbic"]
[ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/2. michael/Michael.tscn" id="13_eyrkc"]
[ext_resource type="PackedScene" uid="uid://bkj1kyqu7reul" path="res://src/enemy/enemy_types/13. gold sproingy/GoldSproingy.tscn" id="14_pmbic"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor1" type="Node3D"]
[node name="Floor02" type="Node3D"]
script = ExtResource("5_ld0kt")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
@@ -37,4 +38,5 @@ generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_yvj8v")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("12_pmbic"), ExtResource("13_eyrkc")])
EnemyList = Array[PackedScene]([ExtResource("12_pmbic"), ExtResource("13_eyrkc"), ExtResource("14_pmbic")])
SpawnRate = PackedFloat32Array(1, 1, 0.05)

View File

@@ -20,7 +20,7 @@ border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor1" type="Node3D"]
[node name="Floor03" type="Node3D"]
script = ExtResource("5_mo2td")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]

View File

@@ -0,0 +1,41 @@
[gd_scene load_steps=15 format=3 uid="uid://cikq7vuorlpbl"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_8amoj"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_p7nwd"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_te0rp"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_i5hjj"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_katpr"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_8pmtc"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_5wyu4"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_36gcj"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_gn1yf"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_he2ag"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_f4225"]
[ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/2. michael/Michael.tscn" id="13_5kttw"]
[ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/3. filth_eater/FilthEater.tscn" id="14_h5hhw"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor04" type="Node3D"]
script = ExtResource("1_8amoj")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_p7nwd")
room_scenes = Array[PackedScene]([ExtResource("3_te0rp"), ExtResource("4_i5hjj"), ExtResource("5_katpr"), ExtResource("6_8pmtc"), ExtResource("7_5wyu4"), ExtResource("8_36gcj"), ExtResource("9_gn1yf")])
corridor_room_scene = ExtResource("10_he2ag")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_f4225")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("13_5kttw"), ExtResource("14_h5hhw")])
SpawnRate = PackedFloat32Array(0.5, 1)

View File

@@ -0,0 +1,42 @@
[gd_scene load_steps=16 format=3 uid="uid://t7cac7801bnk"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_8l7r7"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_ksplq"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_b3rou"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_duhq4"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_ut4ij"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_lposy"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_mb8sd"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_573ke"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_puq45"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_slkpn"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_l2dei"]
[ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/2. michael/Michael.tscn" id="12_uv3l4"]
[ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/3. filth_eater/FilthEater.tscn" id="13_v44hk"]
[ext_resource type="PackedScene" uid="uid://bkj1kyqu7reul" path="res://src/enemy/enemy_types/13. gold sproingy/GoldSproingy.tscn" id="14_ksplq"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor05" type="Node3D"]
script = ExtResource("1_8l7r7")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_ksplq")
room_scenes = Array[PackedScene]([ExtResource("3_b3rou"), ExtResource("4_duhq4"), ExtResource("5_ut4ij"), ExtResource("6_lposy"), ExtResource("7_mb8sd"), ExtResource("8_573ke"), ExtResource("9_puq45")])
corridor_room_scene = ExtResource("10_slkpn")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_l2dei")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("12_uv3l4"), ExtResource("13_v44hk"), ExtResource("14_ksplq")])
SpawnRate = PackedFloat32Array(0.5, 1, 0.05)

View File

@@ -0,0 +1,41 @@
[gd_scene load_steps=15 format=3 uid="uid://da107mywg18x1"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_51vs0"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_ixj2e"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_rgrkc"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_ltey6"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_xalbn"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_yfjr1"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_wnhhx"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_7s220"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_twkiu"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_xh2mp"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_vn8cd"]
[ext_resource type="PackedScene" uid="uid://feegakykn3fv" path="res://src/enemy/enemy_types/5. ballos/Ballos.tscn" id="13_0tmnj"]
[ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/3. filth_eater/FilthEater.tscn" id="13_gb3sg"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor06" type="Node3D"]
script = ExtResource("1_51vs0")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_ixj2e")
room_scenes = Array[PackedScene]([ExtResource("3_rgrkc"), ExtResource("4_ltey6"), ExtResource("5_xalbn"), ExtResource("6_yfjr1"), ExtResource("7_wnhhx"), ExtResource("8_7s220"), ExtResource("9_twkiu")])
corridor_room_scene = ExtResource("10_xh2mp")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_vn8cd")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("13_gb3sg"), ExtResource("13_0tmnj")])
SpawnRate = PackedFloat32Array(1, 0.5)

View File

@@ -0,0 +1,42 @@
[gd_scene load_steps=16 format=3 uid="uid://cgtqjgh1f5fqi"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_un5rc"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_purgj"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_67qnt"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_ogmgc"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_fjqnq"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_bji1g"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_sqvag"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_c5i81"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_lo82o"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_xvcp8"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_xast8"]
[ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/3. filth_eater/FilthEater.tscn" id="12_tr8km"]
[ext_resource type="PackedScene" uid="uid://feegakykn3fv" path="res://src/enemy/enemy_types/5. ballos/Ballos.tscn" id="13_43euk"]
[ext_resource type="PackedScene" uid="uid://dlw5cvutvypxn" path="res://src/enemy/enemy_types/6. chariot/Chariot.tscn" id="14_purgj"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor07" type="Node3D"]
script = ExtResource("1_un5rc")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_purgj")
room_scenes = Array[PackedScene]([ExtResource("3_67qnt"), ExtResource("4_ogmgc"), ExtResource("5_fjqnq"), ExtResource("6_bji1g"), ExtResource("7_sqvag"), ExtResource("8_c5i81"), ExtResource("9_lo82o")])
corridor_room_scene = ExtResource("10_xvcp8")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_xast8")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("12_tr8km"), ExtResource("13_43euk"), ExtResource("14_purgj")])
SpawnRate = PackedFloat32Array(0.5, 1, 0.25)

View File

@@ -0,0 +1,40 @@
[gd_scene load_steps=15 format=3 uid="uid://dg20ovvj2m2lp"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_qs20c"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_6ps7u"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_pn3nc"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_esh22"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_mir7f"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_1elux"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_c68jx"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_3lecr"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_dtrr3"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_vtwmp"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_uflod"]
[ext_resource type="PackedScene" uid="uid://feegakykn3fv" path="res://src/enemy/enemy_types/5. ballos/Ballos.tscn" id="13_c8dl5"]
[ext_resource type="PackedScene" uid="uid://dlw5cvutvypxn" path="res://src/enemy/enemy_types/6. chariot/Chariot.tscn" id="13_qs20c"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor08" type="Node3D"]
script = ExtResource("1_qs20c")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_6ps7u")
room_scenes = Array[PackedScene]([ExtResource("3_pn3nc"), ExtResource("4_esh22"), ExtResource("5_mir7f"), ExtResource("6_1elux"), ExtResource("7_c68jx"), ExtResource("8_3lecr"), ExtResource("9_dtrr3")])
corridor_room_scene = ExtResource("10_vtwmp")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_uflod")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("13_c8dl5"), ExtResource("13_qs20c")])

View File

@@ -0,0 +1,42 @@
[gd_scene load_steps=16 format=3 uid="uid://b5jk743ng6fqg"]
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_ah6eb"]
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_2l5nt"]
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Antechamber.tscn" id="3_f55jb"]
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/BasinRoom.tscn" id="4_iljqd"]
[ext_resource type="PackedScene" uid="uid://b7111krf365x0" path="res://src/map/dungeon/scenes/InnerBalcony.tscn" id="5_2admg"]
[ext_resource type="PackedScene" uid="uid://c1qicmrcg6q6x" path="res://src/map/dungeon/scenes/ColumnRoom.tscn" id="6_fuh3g"]
[ext_resource type="PackedScene" uid="uid://dfpyfpnya0f4u" path="res://src/map/dungeon/scenes/WaterRoom.tscn" id="7_lk05i"]
[ext_resource type="PackedScene" uid="uid://vdhl32je6hq2" path="res://src/map/dungeon/scenes/Antechamber_2.tscn" id="8_b81ow"]
[ext_resource type="PackedScene" uid="uid://cam640h4euewx" path="res://src/map/dungeon/scenes/PitRoom2.tscn" id="9_tl40f"]
[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="10_glh5y"]
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_xxd5b"]
[ext_resource type="PackedScene" uid="uid://feegakykn3fv" path="res://src/enemy/enemy_types/5. ballos/Ballos.tscn" id="12_mhyau"]
[ext_resource type="PackedScene" uid="uid://dlw5cvutvypxn" path="res://src/enemy/enemy_types/6. chariot/Chariot.tscn" id="13_v2ihw"]
[ext_resource type="PackedScene" uid="uid://bkj1kyqu7reul" path="res://src/enemy/enemy_types/13. gold sproingy/GoldSproingy.tscn" id="14_2l5nt"]
[sub_resource type="NavigationMesh" id="NavigationMesh_gqi8w"]
border_size = 1.0
agent_height = 3.0
agent_radius = 0.1
[node name="Floor09" type="Node3D"]
script = ExtResource("1_ah6eb")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
unique_name_in_owner = true
navigation_mesh = SubResource("NavigationMesh_gqi8w")
[node name="DungeonGenerator" type="Node3D" parent="NavigationRegion3D"]
unique_name_in_owner = true
script = ExtResource("2_2l5nt")
room_scenes = Array[PackedScene]([ExtResource("3_f55jb"), ExtResource("4_iljqd"), ExtResource("5_2admg"), ExtResource("6_fuh3g"), ExtResource("7_lk05i"), ExtResource("8_b81ow"), ExtResource("9_tl40f")])
corridor_room_scene = ExtResource("10_glh5y")
dungeon_size = Vector3i(60, 1, 60)
voxel_scale = Vector3(4, 4, 4)
generate_on_ready = false
[node name="EnemyDatabase" parent="." instance=ExtResource("11_xxd5b")]
unique_name_in_owner = true
EnemyList = Array[PackedScene]([ExtResource("12_mhyau"), ExtResource("13_v2ihw"), ExtResource("14_2l5nt")])
SpawnRate = PackedFloat32Array(1, 1, 0.05)

View File

@@ -24,6 +24,20 @@ public interface IPlayer : IKillable
public void TeleportPlayer(Vector3 newPosition);
public void HealHP(int amount);
public void RaiseHP(int amount);
public void HealVT(int amount);
public void RaiseVT(int amount);
public void RaiseBonusAttack(int amount);
public void RaiseBonusDefense(int amount);
public void RaiseBonusLuck(int amount);
public IInventory Inventory { get; }
public PlayerStats Stats { get; }

View File

@@ -162,7 +162,6 @@ public partial class Player : CharacterBody3D, IPlayer
this.Provide();
PlayerLogic.Start();
HealthTimer.Timeout += OnHealthTimerTimeout;
Inventory.AccessoryUnequipped += Inventory_AccessoryUnequipped;
Hitbox.AreaEntered += Hitbox_AreaEntered;
}
@@ -193,6 +192,52 @@ public partial class Player : CharacterBody3D, IPlayer
EmitSignal(SignalName.PauseButtonPressed);
}
public void RaiseHP(int amountToRaise)
{
Stats.SetMaximumHP(Stats.MaximumHP.Value + amountToRaise);
Stats.SetCurrentHP(Stats.MaximumHP.Value);
Game.AnnounceMessageOnInventoryScreen($"{amountToRaise}MAXHP Up.");
}
public void HealHP(int amountToRestore)
{
Stats.SetCurrentHP(Stats.CurrentHP.Value + amountToRestore);
var raiseString = amountToRestore == 1000 ? "MAX" : $"{amountToRestore}";
Game.AnnounceMessageOnInventoryScreen($"{raiseString}HP Restored.");
}
public void RaiseVT(int amountToRaise)
{
if (Stats.CurrentVT.Value == Stats.MaximumVT.Value)
{
Stats.SetMaximumVT(Stats.MaximumVT.Value + amountToRaise);
Stats.SetCurrentVT(Stats.MaximumVT.Value);
Game.AnnounceMessageOnInventoryScreen($"{amountToRaise}MAXVT Up.");
}
}
public void HealVT(int amountToRestore)
{
Stats.SetCurrentVT(Stats.CurrentVT.Value + amountToRestore);
var raiseString = amountToRestore == 1000 ? "MAX" : $"{amountToRestore}";
Game.AnnounceMessageOnInventoryScreen($"{raiseString}VT Restored.");
}
public void RaiseBonusAttack(int amount)
{
Stats.SetBonusAttack(Stats.BonusAttack.Value + amount);
}
public void RaiseBonusDefense(int amount)
{
Stats.SetBonusDefense(Stats.BonusDefense.Value + amount);
}
public void RaiseBonusLuck(int amount)
{
Stats.SetLuck(amount);
}
public void Move(float delta)
{
var rawInput = GlobalInputVector;