Player warp item implementation
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user