Player warp item implementation
This commit is contained in:
@@ -21,7 +21,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
|
|
||||||
#region Dependencies
|
#region Dependencies
|
||||||
|
|
||||||
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
|
[Dependency] IGame Game => this.DependOn<IGame>();
|
||||||
|
|
||||||
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
||||||
#endregion
|
#endregion
|
||||||
@@ -154,7 +154,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
var tweener = GetTree().CreateTween();
|
var tweener = GetTree().CreateTween();
|
||||||
tweener.TweenInterval(1.0f);
|
tweener.TweenInterval(1.0f);
|
||||||
tweener.TweenCallback(Callable.From(QueueFree));
|
tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
GameEventDepot.OnEnemyDefeated(GlobalPosition, _enemyStatResource);
|
Game.EnemyDefeated(GlobalPosition, _enemyStatResource);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartAttackTimer()
|
public void StartAttackTimer()
|
||||||
@@ -171,7 +171,20 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
|
|
||||||
public void SetEnemyGlobalPosition(Vector3 target)
|
public void SetEnemyGlobalPosition(Vector3 target)
|
||||||
{
|
{
|
||||||
GlobalPosition = target;
|
GlobalPosition = new Vector3(target.X, -0.5f, target.Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDungeonRoom GetCurrentRoom()
|
||||||
|
{
|
||||||
|
var currentRooms = Game.CurrentFloor.Rooms;
|
||||||
|
foreach (var room in currentRooms)
|
||||||
|
{
|
||||||
|
var enemiesInCurrentRoom = room.EnemiesInRoom;
|
||||||
|
if (enemiesInCurrentRoom.Contains(this))
|
||||||
|
return room;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAttackTimeout()
|
private void OnAttackTimeout()
|
||||||
|
|||||||
@@ -21,4 +21,6 @@ public interface IEnemy : IKillable
|
|||||||
public abstract void SetTarget(Vector3 target);
|
public abstract void SetTarget(Vector3 target);
|
||||||
|
|
||||||
public void SetEnemyGlobalPosition(Vector3 target);
|
public void SetEnemyGlobalPosition(Vector3 target);
|
||||||
|
|
||||||
|
public IDungeonRoom GetCurrentRoom();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using Chickensoft.Introspection;
|
|||||||
using Godot;
|
using Godot;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
|
using static GameJamDungeon.GameLogic.State;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class Game : Node3D, IGame
|
public partial class Game : Node3D, IGame
|
||||||
@@ -124,7 +125,6 @@ public partial class Game : Node3D, IGame
|
|||||||
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
||||||
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
||||||
|
|
||||||
GameEventDepot.EnemyDefeated += OnEnemyDefeated;
|
|
||||||
GameEventDepot.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
GameEventDepot.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
||||||
|
|
||||||
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
||||||
@@ -132,7 +132,10 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
public void ToggleInventory()
|
public void ToggleInventory()
|
||||||
{
|
{
|
||||||
GameLogic.Input(new GameLogic.Input.OpenInventory());
|
if (GameLogic.Value is InventoryOpened)
|
||||||
|
GameLogic.Input(new GameLogic.Input.CloseInventory());
|
||||||
|
else
|
||||||
|
GameLogic.Input(new GameLogic.Input.OpenInventory());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ToggleMinimap()
|
public void ToggleMinimap()
|
||||||
@@ -182,10 +185,10 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
public IDungeonFloor CurrentFloor => Map.CurrentFloor;
|
public IDungeonFloor CurrentFloor => Map.CurrentFloor;
|
||||||
|
|
||||||
private void OnEnemyDefeated(Vector3 vector, EnemyStatResource resource)
|
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource)
|
||||||
{
|
{
|
||||||
Player.GainExp(resource.ExpFromDefeat * GameRepo.EXPRate);
|
Player.GainExp(resource.ExpFromDefeat * GameRepo.EXPRate);
|
||||||
DropRestorative(vector);
|
DropRestorative(defeatedLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DropRestorative(Vector3 vector)
|
private void DropRestorative(Vector3 vector)
|
||||||
@@ -256,7 +259,7 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
public async void DoubleEXP(TimeSpan lengthOfEffect)
|
public async void DoubleEXP(TimeSpan lengthOfEffect)
|
||||||
{
|
{
|
||||||
InventoryMenu_CloseInventory();
|
ToggleInventory();
|
||||||
InGameUI.PlayerInfoUI.DisplayMessage("Experience points temporarily doubled.");
|
InGameUI.PlayerInfoUI.DisplayMessage("Experience points temporarily doubled.");
|
||||||
DoubleEXPTimer.Start(lengthOfEffect.Seconds);
|
DoubleEXPTimer.Start(lengthOfEffect.Seconds);
|
||||||
GameRepo.EXPRate = 2;
|
GameRepo.EXPRate = 2;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ namespace GameJamDungeon;
|
|||||||
|
|
||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.GodotNodeInterfaces;
|
using Chickensoft.GodotNodeInterfaces;
|
||||||
|
using Godot;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvide<IGame>, IProvide<IPlayer>, INode3D
|
public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvide<IGame>, IProvide<IPlayer>, INode3D
|
||||||
@@ -30,4 +31,6 @@ public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvid
|
|||||||
public void FloorExitReached();
|
public void FloorExitReached();
|
||||||
|
|
||||||
public void NextFloorLoaded();
|
public void NextFloorLoaded();
|
||||||
|
|
||||||
|
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource enemyStatResource);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -395,10 +395,11 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
if (currentItem is IEquipableItem)
|
if (currentItem is IEquipableItem)
|
||||||
await EquipOrUnequipItem();
|
await EquipOrUnequipItem();
|
||||||
else if (currentItem is IUsableItem usableItem)
|
else if (currentItem is IUsableItem usableItem)
|
||||||
|
{
|
||||||
usableItem.Use();
|
usableItem.Use();
|
||||||
|
DestroyItem(usableItem);
|
||||||
if (currentItem is ConsumableItem consumableItem)
|
EmitSignal(SignalName.ClosedMenu);
|
||||||
DestroyItem(consumableItem);
|
}
|
||||||
|
|
||||||
RefreshUIAfterUserSelection();
|
RefreshUIAfterUserSelection();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ public partial class ThrowableItem : Node3D, IUsableItem
|
|||||||
|
|
||||||
if (_throwableItemStats.UsableItemTags.Contains(UsableItemTag.DoubleEXP))
|
if (_throwableItemStats.UsableItemTags.Contains(UsableItemTag.DoubleEXP))
|
||||||
Game.DoubleEXP(TimeSpan.FromSeconds(30));
|
Game.DoubleEXP(TimeSpan.FromSeconds(30));
|
||||||
|
if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.TeleportToRandomLocation))
|
||||||
|
TeleportToRandomRoom(Player);
|
||||||
|
|
||||||
if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.CanChangeAffinity))
|
if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.CanChangeAffinity))
|
||||||
ChangeAffinity();
|
ChangeAffinity();
|
||||||
@@ -79,26 +81,41 @@ public partial class ThrowableItem : Node3D, IUsableItem
|
|||||||
{
|
{
|
||||||
var currentFloor = Game.CurrentFloor;
|
var currentFloor = Game.CurrentFloor;
|
||||||
var rooms = currentFloor.Rooms;
|
var rooms = currentFloor.Rooms;
|
||||||
|
var currentRoom = enemy.GetCurrentRoom();
|
||||||
|
var validRooms = rooms.OfType<MonsterRoom>().ToList();
|
||||||
|
if (currentRoom is MonsterRoom currentMonsterRoom)
|
||||||
|
validRooms.Remove(currentMonsterRoom);
|
||||||
|
|
||||||
var rng = new RandomNumberGenerator();
|
if (validRooms.Count == 0)
|
||||||
rng.Randomize();
|
return;
|
||||||
var randomRoom = rooms[rng.RandiRange(0, rooms.Count - 1)];
|
|
||||||
|
var roomsGodotCollection = new Godot.Collections.Array<MonsterRoom>(validRooms);
|
||||||
|
var randomRoom = roomsGodotCollection.PickRandom();
|
||||||
var spawnPoints = randomRoom.EnemySpawnPoints.GetChildren().OfType<Marker3D>().ToList();
|
var spawnPoints = randomRoom.EnemySpawnPoints.GetChildren().OfType<Marker3D>().ToList();
|
||||||
|
var spawnPointsGodotCollection = new Godot.Collections.Array<Marker3D>(spawnPoints);
|
||||||
var randomSpawnPoint = spawnPoints[rng.RandiRange(0, spawnPoints.Count - 1)];
|
var randomSpawnPoint = spawnPointsGodotCollection.PickRandom();
|
||||||
|
|
||||||
enemy.SetEnemyGlobalPosition(randomSpawnPoint.GlobalPosition);
|
enemy.SetEnemyGlobalPosition(randomSpawnPoint.GlobalPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TeleportToRandomRoom(IPlayer player)
|
private void TeleportToRandomRoom(IPlayer player)
|
||||||
{
|
{
|
||||||
var currentFloor = Game.CurrentFloor;
|
var currentFloor = Game.CurrentFloor;
|
||||||
var rooms = currentFloor.Rooms;
|
var rooms = currentFloor.Rooms;
|
||||||
|
|
||||||
var rng = new RandomNumberGenerator();
|
var currentRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||||
rng.Randomize();
|
|
||||||
var randomRoom = rooms[rng.RandiRange(0, rooms.Count - 1)];
|
var validRooms = rooms.OfType<MonsterRoom>().ToList();
|
||||||
|
if (currentRoom is MonsterRoom currentMonsterRoom)
|
||||||
|
validRooms.Remove(currentMonsterRoom);
|
||||||
|
|
||||||
|
if (validRooms.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var roomsGodotCollection = new Godot.Collections.Array<MonsterRoom>(validRooms);
|
||||||
|
var randomRoom = roomsGodotCollection.PickRandom();
|
||||||
var spawnPoint = randomRoom.PlayerSpawn;
|
var spawnPoint = randomRoom.PlayerSpawn;
|
||||||
|
Game.ToggleInventory();
|
||||||
player.TeleportPlayer(spawnPoint.GlobalPosition);
|
player.TeleportPlayer(spawnPoint.GlobalPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,16 +4,15 @@ public enum ThrowableItemTag
|
|||||||
{
|
{
|
||||||
LowerTargetTo1HP,
|
LowerTargetTo1HP,
|
||||||
CanChangeAffinity,
|
CanChangeAffinity,
|
||||||
TeleportToRandomLocation
|
TeleportToRandomLocation,
|
||||||
|
WarpToExitIfFound
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum UsableItemTag
|
public enum UsableItemTag
|
||||||
{
|
{
|
||||||
DoubleEXP,
|
DoubleEXP,
|
||||||
RandomWarp,
|
|
||||||
IdentifyAllItemsCostHP,
|
IdentifyAllItemsCostHP,
|
||||||
BriefImmunity,
|
BriefImmunity,
|
||||||
WarpToExitIfFound,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum EnhancingItemTag
|
public enum EnhancingItemTag
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public partial class BossFloor : Node3D, IDungeonFloor
|
|||||||
|
|
||||||
private BossRoomA BossRoom;
|
private BossRoomA BossRoom;
|
||||||
|
|
||||||
public ImmutableList<MonsterRoom> Rooms => [];
|
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||||
|
|
||||||
public void InitializeDungeon()
|
public void InitializeDungeon()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,14 +18,15 @@ namespace GameJamDungeon
|
|||||||
|
|
||||||
private Transform3D _playerSpawnPoint;
|
private Transform3D _playerSpawnPoint;
|
||||||
|
|
||||||
public ImmutableList<MonsterRoom> Rooms { get; private set; }
|
public ImmutableList<IDungeonRoom> Rooms { get; private set; }
|
||||||
|
|
||||||
public void InitializeDungeon()
|
public void InitializeDungeon()
|
||||||
{
|
{
|
||||||
Rooms = [];
|
Rooms = [];
|
||||||
Rooms = FindAllDungeonRooms([.. GetChildren()], Rooms);
|
Rooms = FindAllDungeonRooms([.. GetChildren()], Rooms);
|
||||||
_playerSpawnPoint = RandomizePlayerSpawnPoint();
|
_playerSpawnPoint = RandomizePlayerSpawnPoint();
|
||||||
foreach (var room in Rooms)
|
var monsterRooms = Rooms.OfType<MonsterRoom>();
|
||||||
|
foreach (var room in monsterRooms)
|
||||||
room.SpawnEnemies(EnemyDatabase);
|
room.SpawnEnemies(EnemyDatabase);
|
||||||
DungeonGenerator.EmitSignal("done_generating");
|
DungeonGenerator.EmitSignal("done_generating");
|
||||||
}
|
}
|
||||||
@@ -34,24 +35,22 @@ namespace GameJamDungeon
|
|||||||
|
|
||||||
private Transform3D RandomizePlayerSpawnPoint()
|
private Transform3D RandomizePlayerSpawnPoint()
|
||||||
{
|
{
|
||||||
var rng = new RandomNumberGenerator();
|
|
||||||
rng.Randomize();
|
|
||||||
var rngDistribution = new List<float>();
|
|
||||||
var randomSpawnLocations = Rooms
|
var randomSpawnLocations = Rooms
|
||||||
|
.OfType<MonsterRoom>()
|
||||||
.Select(x => x.PlayerSpawn);
|
.Select(x => x.PlayerSpawn);
|
||||||
var godotCollection = new Godot.Collections.Array<Marker3D>(randomSpawnLocations);
|
var godotCollection = new Godot.Collections.Array<Marker3D>(randomSpawnLocations);
|
||||||
var result = godotCollection.PickRandom();
|
var result = godotCollection.PickRandom();
|
||||||
return result.GlobalTransform;
|
return result.GlobalTransform;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ImmutableList<MonsterRoom> FindAllDungeonRooms(List<Node> nodesToSearch, ImmutableList<MonsterRoom> roomsFound)
|
private static ImmutableList<IDungeonRoom> FindAllDungeonRooms(List<Node> nodesToSearch, ImmutableList<IDungeonRoom> roomsFound)
|
||||||
{
|
{
|
||||||
if (nodesToSearch.Count == 0)
|
if (nodesToSearch.Count == 0)
|
||||||
return roomsFound;
|
return roomsFound;
|
||||||
|
|
||||||
foreach (var node in nodesToSearch)
|
foreach (var node in nodesToSearch)
|
||||||
{
|
{
|
||||||
if (node is MonsterRoom dungeonRoom)
|
if (node is IDungeonRoom dungeonRoom)
|
||||||
roomsFound = roomsFound.Add(dungeonRoom);
|
roomsFound = roomsFound.Add(dungeonRoom);
|
||||||
|
|
||||||
if (node.HasSignal("dungeon_done_generating"))
|
if (node.HasSignal("dungeon_done_generating"))
|
||||||
|
|||||||
50
src/map/dungeon/code/DungeonRoom.cs
Normal file
50
src/map/dungeon/code/DungeonRoom.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Godot;
|
||||||
|
using System.Collections.Immutable;
|
||||||
|
|
||||||
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
|
[Meta(typeof(IAutoNode))]
|
||||||
|
public abstract partial class DungeonRoom : Node3D, IDungeonRoom
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
[Node] public Marker3D PlayerSpawn { get; set; } = default!;
|
||||||
|
|
||||||
|
public bool IsPlayerInRoom => _isPlayerInRoom;
|
||||||
|
|
||||||
|
public ImmutableList<IEnemy> EnemiesInRoom => _enemiesInRoom;
|
||||||
|
|
||||||
|
[Node] private Area3D _room { get; set; } = default!;
|
||||||
|
|
||||||
|
private ImmutableList<IEnemy> _enemiesInRoom;
|
||||||
|
private bool _isPlayerInRoom = false;
|
||||||
|
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
_enemiesInRoom = [];
|
||||||
|
_room.BodyEntered += Room_BodyEntered;
|
||||||
|
_room.BodyExited += Room_BodyExited;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Room_BodyExited(Node3D body)
|
||||||
|
{
|
||||||
|
if (body is IEnemy enemy)
|
||||||
|
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
|
||||||
|
if (body is IPlayer)
|
||||||
|
_isPlayerInRoom = false;
|
||||||
|
}
|
||||||
|
private void Room_BodyEntered(Node3D body)
|
||||||
|
{
|
||||||
|
if (body is IEnemy enemy)
|
||||||
|
_enemiesInRoom = _enemiesInRoom.Add(enemy);
|
||||||
|
if (body is IPlayer)
|
||||||
|
_isPlayerInRoom = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImmutableList<IEnemy> GetEnemiesInCurrentRoom()
|
||||||
|
{
|
||||||
|
return _enemiesInRoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,24 +5,22 @@ using Godot;
|
|||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class ExitRoom : Node3D, IExitRoom
|
public partial class ExitRoom : DungeonRoom
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Dependency] public IGame Game => this.DependOn<IGame>();
|
[Dependency] public IGame Game => this.DependOn<IGame>();
|
||||||
|
|
||||||
[Node] public Area3D Exit { get; set; } = default!;
|
[Node] private Area3D _exit { get; set; } = default!;
|
||||||
|
[Node] private Area3D _room { get; set; } = default!;
|
||||||
|
|
||||||
public Marker3D PlayerSpawn { get; set; }
|
public override void _Ready()
|
||||||
|
|
||||||
public void Setup()
|
|
||||||
{
|
{
|
||||||
Exit.AreaEntered += Exit_AreaEntered;
|
_exit.AreaEntered += Exit_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExitReached()
|
public void ExitReached()
|
||||||
=> Game.FloorExitReached();
|
=> Game.FloorExitReached();
|
||||||
|
|
||||||
private void Exit_AreaEntered(Area3D area) => ExitReached();
|
private void Exit_AreaEntered(Area3D area) => ExitReached();
|
||||||
public void SpawnEnemies(EnemyDatabase enemyDatabase) => throw new System.NotImplementedException();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Collections.Immutable;
|
|||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class Floor0 : Node3D, IDungeonFloor, IExitRoom
|
public partial class Floor0 : Node3D, IDungeonFloor
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
@@ -16,9 +16,9 @@ public partial class Floor0 : Node3D, IDungeonFloor, IExitRoom
|
|||||||
|
|
||||||
[Node] private Marker3D PlayerSpawnPoint { get; set; } = default!;
|
[Node] private Marker3D PlayerSpawnPoint { get; set; } = default!;
|
||||||
|
|
||||||
public ImmutableList<MonsterRoom> Rooms => [];
|
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||||
|
|
||||||
public void Setup()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
Show();
|
Show();
|
||||||
Exit.AreaEntered += Exit_AreaEntered;
|
Exit.AreaEntered += Exit_AreaEntered;
|
||||||
@@ -27,10 +27,6 @@ public partial class Floor0 : Node3D, IDungeonFloor, IExitRoom
|
|||||||
private void Exit_AreaEntered(Area3D area) => ExitReached();
|
private void Exit_AreaEntered(Area3D area) => ExitReached();
|
||||||
|
|
||||||
public void ExitReached() => Game.FloorExitReached();
|
public void ExitReached() => Game.FloorExitReached();
|
||||||
public void InitializeDungeon()
|
public void InitializeDungeon() => throw new System.NotImplementedException();
|
||||||
{
|
public Transform3D GetPlayerSpawnPoint() => throw new System.NotImplementedException();
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Transform3D GetPlayerSpawnPoint() => PlayerSpawnPoint.GlobalTransform;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ public interface IDungeonFloor : INode3D
|
|||||||
|
|
||||||
public Transform3D GetPlayerSpawnPoint();
|
public Transform3D GetPlayerSpawnPoint();
|
||||||
|
|
||||||
public ImmutableList<MonsterRoom> Rooms { get; }
|
public ImmutableList<IDungeonRoom> Rooms { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
using Chickensoft.GodotNodeInterfaces;
|
using Chickensoft.GodotNodeInterfaces;
|
||||||
|
using Godot;
|
||||||
|
using System.Collections.Immutable;
|
||||||
|
|
||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
public interface IDungeonRoom : INode3D
|
public interface IDungeonRoom : INode3D
|
||||||
{
|
{
|
||||||
|
Marker3D PlayerSpawn { get; }
|
||||||
|
|
||||||
|
bool IsPlayerInRoom { get; }
|
||||||
|
|
||||||
|
ImmutableList<IEnemy> EnemiesInRoom { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,24 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Collections.Immutable;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class MonsterRoom : Node3D, IDungeonRoom
|
public partial class MonsterRoom : DungeonRoom
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Node] public Marker3D PlayerSpawn { get; set; } = default!;
|
|
||||||
|
|
||||||
[Node] public Node3D ItemSpawnPoints { get; set; } = default!;
|
[Node] public Node3D ItemSpawnPoints { get; set; } = default!;
|
||||||
|
|
||||||
[Node] public Node3D EnemySpawnPoints { get; set; } = default!;
|
[Node] public Node3D EnemySpawnPoints { get; set; } = default!;
|
||||||
|
|
||||||
[Node] public ItemDatabase ItemDatabase { get; set; } = default!;
|
[Node] public ItemDatabase ItemDatabase { get; set; } = default!;
|
||||||
|
|
||||||
[Node] private Area3D _room { get; set; } = default!;
|
public override void _Ready()
|
||||||
|
|
||||||
private ImmutableList<IEnemy> _enemiesInRoom;
|
|
||||||
|
|
||||||
public void Setup()
|
|
||||||
{
|
{
|
||||||
SpawnItems();
|
SpawnItems();
|
||||||
_enemiesInRoom = [];
|
|
||||||
_room.BodyEntered += _room_BodyEntered;
|
|
||||||
_room.BodyExited += _room_BodyExited;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void _room_BodyExited(Node3D body)
|
|
||||||
{
|
|
||||||
if (body is IEnemy enemy)
|
|
||||||
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
|
|
||||||
}
|
|
||||||
private void _room_BodyEntered(Node3D body)
|
|
||||||
{
|
|
||||||
if (body is IEnemy enemy)
|
|
||||||
_enemiesInRoom = _enemiesInRoom.Add(enemy);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImmutableList<IEnemy> GetEnemiesInCurrentRoom()
|
|
||||||
{
|
|
||||||
return _enemiesInRoom;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SpawnEnemies(EnemyDatabase enemyDatabase)
|
public void SpawnEnemies(EnemyDatabase enemyDatabase)
|
||||||
@@ -54,7 +28,7 @@ public partial class MonsterRoom : Node3D, IDungeonRoom
|
|||||||
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
|
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
|
||||||
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
|
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
|
||||||
|
|
||||||
foreach (Marker3D spawnPoint in enemySpawnPoints)
|
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
|
||||||
{
|
{
|
||||||
if (numberOfEnemiesToSpawn <= 0)
|
if (numberOfEnemiesToSpawn <= 0)
|
||||||
break;
|
break;
|
||||||
@@ -75,7 +49,7 @@ public partial class MonsterRoom : Node3D, IDungeonRoom
|
|||||||
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
|
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
|
||||||
itemSpawnPoints.Shuffle();
|
itemSpawnPoints.Shuffle();
|
||||||
var database = ItemDatabase.Initialize();
|
var database = ItemDatabase.Initialize();
|
||||||
foreach (Marker3D spawnPoint in itemSpawnPoints)
|
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
|
||||||
{
|
{
|
||||||
if (numberOfItemsToSpawn <= 0)
|
if (numberOfItemsToSpawn <= 0)
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public partial class Overworld : Node3D, IDungeonFloor
|
|||||||
|
|
||||||
[Node] public Marker3D ExitSpawnPoint { get; set; } = default!;
|
[Node] public Marker3D ExitSpawnPoint { get; set; } = default!;
|
||||||
|
|
||||||
public ImmutableList<MonsterRoom> Rooms => [];
|
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||||
|
|
||||||
public void InitializeDungeon()
|
public void InitializeDungeon()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=61 format=4 uid="uid://dl6h1djc27ddl"]
|
[gd_scene load_steps=62 format=4 uid="uid://dl6h1djc27ddl"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://c1nhqlem1ew3m" path="res://src/map/dungeon/code/Floor0.cs" id="1_db2o3"]
|
[ext_resource type="Script" uid="uid://c1nhqlem1ew3m" path="res://src/map/dungeon/code/Floor0.cs" id="1_db2o3"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b27ksiyfefb33" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_outside_desert.png" id="2_xh2ej"]
|
[ext_resource type="Texture2D" uid="uid://b27ksiyfefb33" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_outside_desert.png" id="2_xh2ej"]
|
||||||
@@ -739,6 +739,9 @@ size = Vector3(1.53375, 1.46143, 3.13956)
|
|||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_db2o3"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_db2o3"]
|
||||||
size = Vector3(2.97754, 2.34912, 3.79205)
|
size = Vector3(2.97754, 2.34912, 3.79205)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_ntxe5"]
|
||||||
|
size = Vector3(369.423, 20, 47.9875)
|
||||||
|
|
||||||
[node name="Floor0" type="Node3D"]
|
[node name="Floor0" type="Node3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.63488, -5.13176)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.63488, -5.13176)
|
||||||
script = ExtResource("1_db2o3")
|
script = ExtResource("1_db2o3")
|
||||||
@@ -870,3 +873,21 @@ collision_mask = 256
|
|||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Exit"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Exit"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.1171, -2.1779, -0.0887146)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.1171, -2.1779, -0.0887146)
|
||||||
shape = SubResource("BoxShape3D_db2o3")
|
shape = SubResource("BoxShape3D_db2o3")
|
||||||
|
|
||||||
|
[node name="Model" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Collision" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Spawn Points" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Room" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 8
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 149.05, -4.02862, -1.76389)
|
||||||
|
shape = SubResource("BoxShape3D_ntxe5")
|
||||||
|
|||||||
@@ -831,8 +831,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1280,8 +1280,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.27566, -0.246464, -3.5794)
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1405,8 +1405,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.76788, -1.76654, -10.247)
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 15.689, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 15.689, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -13.6094, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -13.6094, 0)
|
||||||
|
|||||||
@@ -1273,8 +1273,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 5.65958, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 5.65958, 0)
|
||||||
|
|||||||
@@ -1852,8 +1852,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -884,8 +884,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0361805, -0.0723581, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0361805, -0.0723581, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1729,8 +1729,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 2.00828, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 2.00828, 0)
|
||||||
|
|||||||
@@ -2580,8 +2580,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -967,8 +967,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 3.93401, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 3.93401, 0)
|
||||||
|
|||||||
@@ -1177,8 +1177,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1306,8 +1306,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1906,8 +1906,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1263,8 +1263,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 1.9843, 0)
|
||||||
|
|||||||
@@ -1021,8 +1021,8 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 0.894945, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, 0.894945, 0)
|
||||||
|
|||||||
@@ -603,8 +603,8 @@ shape = SubResource("BoxShape3D_mg5bq")
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -4.02862, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -4.02862, -1.19209e-07)
|
||||||
|
|||||||
@@ -780,8 +780,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -1034,8 +1034,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -851,8 +851,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.76788, -1.76654, -10.247)
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -540,8 +540,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -981,8 +981,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -11.8126, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -11.8126, -1.19209e-07)
|
||||||
|
|||||||
@@ -886,8 +886,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -879,8 +879,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -1038,8 +1038,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -901,8 +901,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -529,8 +529,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -902,8 +902,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -3.8538, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -3.8538, -1.19209e-07)
|
||||||
|
|||||||
@@ -1598,8 +1598,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -1282,8 +1282,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -10.6408, -1.19209e-07)
|
||||||
|
|||||||
@@ -684,8 +684,8 @@ unique_name_in_owner = true
|
|||||||
[node name="Room" type="Area3D" parent="Room"]
|
[node name="Room" type="Area3D" parent="Room"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||||
collision_layer = 8
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 10
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -3.99197, -1.19209e-07)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04566, -3.99197, -1.19209e-07)
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ public interface IPlayer : IKillable
|
|||||||
|
|
||||||
public void TeleportPlayer(Vector3 newPosition);
|
public void TeleportPlayer(Vector3 newPosition);
|
||||||
|
|
||||||
|
public IDungeonRoom GetCurrentRoom();
|
||||||
|
|
||||||
public void HealHP(int amount);
|
public void HealHP(int amount);
|
||||||
|
|
||||||
public void RaiseHP(int amount);
|
public void RaiseHP(int amount);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using Chickensoft.SaveFileBuilder;
|
|||||||
using Godot;
|
using Godot;
|
||||||
using Godot.Collections;
|
using Godot.Collections;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
@@ -201,6 +202,13 @@ public partial class Player : CharacterBody3D, IPlayer
|
|||||||
EmitSignal(SignalName.PauseButtonPressed);
|
EmitSignal(SignalName.PauseButtonPressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IDungeonRoom GetCurrentRoom()
|
||||||
|
{
|
||||||
|
var rooms = Game.CurrentFloor.Rooms;
|
||||||
|
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||||
|
return playersRoom;
|
||||||
|
}
|
||||||
|
|
||||||
public void RaiseHP(int amountToRaise)
|
public void RaiseHP(int amountToRaise)
|
||||||
{
|
{
|
||||||
Stats.SetMaximumHP(Stats.MaximumHP.Value + amountToRaise);
|
Stats.SetMaximumHP(Stats.MaximumHP.Value + amountToRaise);
|
||||||
|
|||||||
Reference in New Issue
Block a user