Player warp item implementation

This commit is contained in:
2025-03-03 01:17:30 -08:00
parent 05295f535a
commit 4ac70b1ca7
48 changed files with 231 additions and 138 deletions

View File

@@ -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);
}

View File

@@ -4,16 +4,15 @@ public enum ThrowableItemTag
{
LowerTargetTo1HP,
CanChangeAffinity,
TeleportToRandomLocation
TeleportToRandomLocation,
WarpToExitIfFound
}
public enum UsableItemTag
{
DoubleEXP,
RandomWarp,
IdentifyAllItemsCostHP,
BriefImmunity,
WarpToExitIfFound,
}
public enum EnhancingItemTag