Player warp item implementation
This commit is contained in:
@@ -21,7 +21,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
|
||||
#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());
|
||||
#endregion
|
||||
@@ -154,7 +154,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
var tweener = GetTree().CreateTween();
|
||||
tweener.TweenInterval(1.0f);
|
||||
tweener.TweenCallback(Callable.From(QueueFree));
|
||||
GameEventDepot.OnEnemyDefeated(GlobalPosition, _enemyStatResource);
|
||||
Game.EnemyDefeated(GlobalPosition, _enemyStatResource);
|
||||
}
|
||||
|
||||
public void StartAttackTimer()
|
||||
@@ -171,7 +171,20 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
|
||||
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()
|
||||
|
||||
@@ -21,4 +21,6 @@ public interface IEnemy : IKillable
|
||||
public abstract void SetTarget(Vector3 target);
|
||||
|
||||
public void SetEnemyGlobalPosition(Vector3 target);
|
||||
|
||||
public IDungeonRoom GetCurrentRoom();
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Immutable;
|
||||
using static GameJamDungeon.GameLogic.State;
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
public partial class Game : Node3D, IGame
|
||||
@@ -124,7 +125,6 @@ public partial class Game : Node3D, IGame
|
||||
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
||||
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
||||
|
||||
GameEventDepot.EnemyDefeated += OnEnemyDefeated;
|
||||
GameEventDepot.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
||||
|
||||
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
||||
@@ -132,7 +132,10 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
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()
|
||||
@@ -182,10 +185,10 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
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);
|
||||
DropRestorative(vector);
|
||||
DropRestorative(defeatedLocation);
|
||||
}
|
||||
|
||||
private void DropRestorative(Vector3 vector)
|
||||
@@ -256,7 +259,7 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
public async void DoubleEXP(TimeSpan lengthOfEffect)
|
||||
{
|
||||
InventoryMenu_CloseInventory();
|
||||
ToggleInventory();
|
||||
InGameUI.PlayerInfoUI.DisplayMessage("Experience points temporarily doubled.");
|
||||
DoubleEXPTimer.Start(lengthOfEffect.Seconds);
|
||||
GameRepo.EXPRate = 2;
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace GameJamDungeon;
|
||||
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.GodotNodeInterfaces;
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
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 NextFloorLoaded();
|
||||
|
||||
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource enemyStatResource);
|
||||
}
|
||||
|
||||
@@ -395,10 +395,11 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
||||
if (currentItem is IEquipableItem)
|
||||
await EquipOrUnequipItem();
|
||||
else if (currentItem is IUsableItem usableItem)
|
||||
{
|
||||
usableItem.Use();
|
||||
|
||||
if (currentItem is ConsumableItem consumableItem)
|
||||
DestroyItem(consumableItem);
|
||||
DestroyItem(usableItem);
|
||||
EmitSignal(SignalName.ClosedMenu);
|
||||
}
|
||||
|
||||
RefreshUIAfterUserSelection();
|
||||
}
|
||||
|
||||
@@ -70,6 +70,8 @@ public partial class ThrowableItem : Node3D, IUsableItem
|
||||
|
||||
if (_throwableItemStats.UsableItemTags.Contains(UsableItemTag.DoubleEXP))
|
||||
Game.DoubleEXP(TimeSpan.FromSeconds(30));
|
||||
if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.TeleportToRandomLocation))
|
||||
TeleportToRandomRoom(Player);
|
||||
|
||||
if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.CanChangeAffinity))
|
||||
ChangeAffinity();
|
||||
@@ -79,26 +81,41 @@ public partial class ThrowableItem : Node3D, IUsableItem
|
||||
{
|
||||
var currentFloor = Game.CurrentFloor;
|
||||
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();
|
||||
rng.Randomize();
|
||||
var randomRoom = rooms[rng.RandiRange(0, rooms.Count - 1)];
|
||||
if (validRooms.Count == 0)
|
||||
return;
|
||||
|
||||
var roomsGodotCollection = new Godot.Collections.Array<MonsterRoom>(validRooms);
|
||||
var randomRoom = roomsGodotCollection.PickRandom();
|
||||
var spawnPoints = randomRoom.EnemySpawnPoints.GetChildren().OfType<Marker3D>().ToList();
|
||||
|
||||
var randomSpawnPoint = spawnPoints[rng.RandiRange(0, spawnPoints.Count - 1)];
|
||||
var spawnPointsGodotCollection = new Godot.Collections.Array<Marker3D>(spawnPoints);
|
||||
var randomSpawnPoint = spawnPointsGodotCollection.PickRandom();
|
||||
|
||||
enemy.SetEnemyGlobalPosition(randomSpawnPoint.GlobalPosition);
|
||||
}
|
||||
|
||||
public void TeleportToRandomRoom(IPlayer player)
|
||||
private void TeleportToRandomRoom(IPlayer player)
|
||||
{
|
||||
var currentFloor = Game.CurrentFloor;
|
||||
var rooms = currentFloor.Rooms;
|
||||
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var randomRoom = rooms[rng.RandiRange(0, rooms.Count - 1)];
|
||||
var currentRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||
|
||||
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;
|
||||
Game.ToggleInventory();
|
||||
player.TeleportPlayer(spawnPoint.GlobalPosition);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,16 +4,15 @@ public enum ThrowableItemTag
|
||||
{
|
||||
LowerTargetTo1HP,
|
||||
CanChangeAffinity,
|
||||
TeleportToRandomLocation
|
||||
TeleportToRandomLocation,
|
||||
WarpToExitIfFound
|
||||
}
|
||||
|
||||
public enum UsableItemTag
|
||||
{
|
||||
DoubleEXP,
|
||||
RandomWarp,
|
||||
IdentifyAllItemsCostHP,
|
||||
BriefImmunity,
|
||||
WarpToExitIfFound,
|
||||
}
|
||||
|
||||
public enum EnhancingItemTag
|
||||
|
||||
@@ -12,7 +12,7 @@ public partial class BossFloor : Node3D, IDungeonFloor
|
||||
|
||||
private BossRoomA BossRoom;
|
||||
|
||||
public ImmutableList<MonsterRoom> Rooms => [];
|
||||
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||
|
||||
public void InitializeDungeon()
|
||||
{
|
||||
|
||||
@@ -18,14 +18,15 @@ namespace GameJamDungeon
|
||||
|
||||
private Transform3D _playerSpawnPoint;
|
||||
|
||||
public ImmutableList<MonsterRoom> Rooms { get; private set; }
|
||||
public ImmutableList<IDungeonRoom> Rooms { get; private set; }
|
||||
|
||||
public void InitializeDungeon()
|
||||
{
|
||||
Rooms = [];
|
||||
Rooms = FindAllDungeonRooms([.. GetChildren()], Rooms);
|
||||
_playerSpawnPoint = RandomizePlayerSpawnPoint();
|
||||
foreach (var room in Rooms)
|
||||
var monsterRooms = Rooms.OfType<MonsterRoom>();
|
||||
foreach (var room in monsterRooms)
|
||||
room.SpawnEnemies(EnemyDatabase);
|
||||
DungeonGenerator.EmitSignal("done_generating");
|
||||
}
|
||||
@@ -34,24 +35,22 @@ namespace GameJamDungeon
|
||||
|
||||
private Transform3D RandomizePlayerSpawnPoint()
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var rngDistribution = new List<float>();
|
||||
var randomSpawnLocations = Rooms
|
||||
.OfType<MonsterRoom>()
|
||||
.Select(x => x.PlayerSpawn);
|
||||
var godotCollection = new Godot.Collections.Array<Marker3D>(randomSpawnLocations);
|
||||
var result = godotCollection.PickRandom();
|
||||
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)
|
||||
return roomsFound;
|
||||
|
||||
foreach (var node in nodesToSearch)
|
||||
{
|
||||
if (node is MonsterRoom dungeonRoom)
|
||||
if (node is IDungeonRoom dungeonRoom)
|
||||
roomsFound = roomsFound.Add(dungeonRoom);
|
||||
|
||||
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;
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
public partial class ExitRoom : Node3D, IExitRoom
|
||||
public partial class ExitRoom : DungeonRoom
|
||||
{
|
||||
public override void _Notification(int what) => this.Notify(what);
|
||||
|
||||
[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 void Setup()
|
||||
public override void _Ready()
|
||||
{
|
||||
Exit.AreaEntered += Exit_AreaEntered;
|
||||
_exit.AreaEntered += Exit_AreaEntered;
|
||||
}
|
||||
|
||||
public void ExitReached()
|
||||
=> Game.FloorExitReached();
|
||||
|
||||
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;
|
||||
|
||||
[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);
|
||||
|
||||
@@ -16,9 +16,9 @@ public partial class Floor0 : Node3D, IDungeonFloor, IExitRoom
|
||||
|
||||
[Node] private Marker3D PlayerSpawnPoint { get; set; } = default!;
|
||||
|
||||
public ImmutableList<MonsterRoom> Rooms => [];
|
||||
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||
|
||||
public void Setup()
|
||||
public override void _Ready()
|
||||
{
|
||||
Show();
|
||||
Exit.AreaEntered += Exit_AreaEntered;
|
||||
@@ -27,10 +27,6 @@ public partial class Floor0 : Node3D, IDungeonFloor, IExitRoom
|
||||
private void Exit_AreaEntered(Area3D area) => ExitReached();
|
||||
|
||||
public void ExitReached() => Game.FloorExitReached();
|
||||
public void InitializeDungeon()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public Transform3D GetPlayerSpawnPoint() => PlayerSpawnPoint.GlobalTransform;
|
||||
public void InitializeDungeon() => throw new System.NotImplementedException();
|
||||
public Transform3D GetPlayerSpawnPoint() => throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -9,5 +9,5 @@ public interface IDungeonFloor : INode3D
|
||||
|
||||
public Transform3D GetPlayerSpawnPoint();
|
||||
|
||||
public ImmutableList<MonsterRoom> Rooms { get; }
|
||||
public ImmutableList<IDungeonRoom> Rooms { get; }
|
||||
}
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
using Chickensoft.GodotNodeInterfaces;
|
||||
using Godot;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace GameJamDungeon;
|
||||
public interface IDungeonRoom : INode3D
|
||||
{
|
||||
Marker3D PlayerSpawn { get; }
|
||||
|
||||
bool IsPlayerInRoom { get; }
|
||||
|
||||
ImmutableList<IEnemy> EnemiesInRoom { get; }
|
||||
}
|
||||
|
||||
@@ -1,50 +1,24 @@
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
|
||||
namespace GameJamDungeon;
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
public partial class MonsterRoom : Node3D, IDungeonRoom
|
||||
public partial class MonsterRoom : DungeonRoom
|
||||
{
|
||||
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 EnemySpawnPoints { get; set; } = default!;
|
||||
|
||||
[Node] public ItemDatabase ItemDatabase { get; set; } = default!;
|
||||
|
||||
[Node] private Area3D _room { get; set; } = default!;
|
||||
|
||||
private ImmutableList<IEnemy> _enemiesInRoom;
|
||||
|
||||
public void Setup()
|
||||
public override void _Ready()
|
||||
{
|
||||
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)
|
||||
@@ -54,7 +28,7 @@ public partial class MonsterRoom : Node3D, IDungeonRoom
|
||||
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
|
||||
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
|
||||
|
||||
foreach (Marker3D spawnPoint in enemySpawnPoints)
|
||||
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfEnemiesToSpawn <= 0)
|
||||
break;
|
||||
@@ -75,7 +49,7 @@ public partial class MonsterRoom : Node3D, IDungeonRoom
|
||||
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
|
||||
itemSpawnPoints.Shuffle();
|
||||
var database = ItemDatabase.Initialize();
|
||||
foreach (Marker3D spawnPoint in itemSpawnPoints)
|
||||
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfItemsToSpawn <= 0)
|
||||
break;
|
||||
|
||||
@@ -13,7 +13,7 @@ public partial class Overworld : Node3D, IDungeonFloor
|
||||
|
||||
[Node] public Marker3D ExitSpawnPoint { get; set; } = default!;
|
||||
|
||||
public ImmutableList<MonsterRoom> Rooms => [];
|
||||
public ImmutableList<IDungeonRoom> Rooms => [];
|
||||
|
||||
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="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"]
|
||||
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"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.63488, -5.13176)
|
||||
script = ExtResource("1_db2o3")
|
||||
@@ -870,3 +873,21 @@ collision_mask = 256
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Exit"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.1171, -2.1779, -0.0887146)
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 15.689, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0361805, -0.0723581, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -780,8 +780,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -1034,8 +1034,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -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"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.8436, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -540,8 +540,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -981,8 +981,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -886,8 +886,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -879,8 +879,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -1038,8 +1038,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -901,8 +901,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -529,8 +529,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -902,8 +902,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -1598,8 +1598,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -1282,8 +1282,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -684,8 +684,8 @@ unique_name_in_owner = true
|
||||
[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 = 8
|
||||
collision_mask = 8
|
||||
collision_layer = 0
|
||||
collision_mask = 10
|
||||
|
||||
[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)
|
||||
|
||||
@@ -25,6 +25,8 @@ public interface IPlayer : IKillable
|
||||
|
||||
public void TeleportPlayer(Vector3 newPosition);
|
||||
|
||||
public IDungeonRoom GetCurrentRoom();
|
||||
|
||||
public void HealHP(int amount);
|
||||
|
||||
public void RaiseHP(int amount);
|
||||
|
||||
@@ -6,6 +6,7 @@ using Chickensoft.SaveFileBuilder;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace GameJamDungeon;
|
||||
|
||||
@@ -201,6 +202,13 @@ public partial class Player : CharacterBody3D, IPlayer
|
||||
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)
|
||||
{
|
||||
Stats.SetMaximumHP(Stats.MaximumHP.Value + amountToRaise);
|
||||
|
||||
Reference in New Issue
Block a user