mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-10 04:55:54 +00:00
Boss teleporter
This commit is contained in:
parent
d5eda3c7b4
commit
a1e87af061
10 changed files with 178 additions and 13 deletions
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cirno.Scripts.Actors;
|
||||
using Cirno.Scripts.Enums;
|
||||
using Cirno.Scripts.Resources;
|
||||
using Cirno.Scripts.Resources.Roguelite;
|
||||
|
|
@ -41,8 +42,10 @@ public partial class RogueliteRoomManager : Node2D
|
|||
[Export] public int MaxTreasures = 2;
|
||||
[Export] public int MinShops = 1;
|
||||
[Export] public int MaxShops = 1;
|
||||
[Export] public ulong Seed = 0;
|
||||
[Export] public string ManualSeed { get; private set; }
|
||||
|
||||
private ulong _seed;
|
||||
|
||||
[Export] public Vector2I TileSize { get; set; } = new Vector2I(16, 16);
|
||||
[Export] public Vector2I RoomSizeInTiles { get; set; } = new Vector2I(20, 10);
|
||||
|
||||
|
|
@ -93,12 +96,27 @@ public partial class RogueliteRoomManager : Node2D
|
|||
|
||||
public List<RoomConnection> Connections => _connections;
|
||||
|
||||
private void SetSeed()
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(ManualSeed) && ulong.TryParse(ManualSeed, out var seed))
|
||||
{
|
||||
_seed = seed;
|
||||
}
|
||||
else
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
_seed = rng.GetSeed();
|
||||
rng.Dispose();
|
||||
}
|
||||
GD.Print($"Seed: {_seed}");
|
||||
}
|
||||
|
||||
private void GenerateStraightLineDungeon()
|
||||
{
|
||||
if (Seed > 0)
|
||||
{
|
||||
GD.Seed(Seed);
|
||||
}
|
||||
SetSeed();
|
||||
|
||||
MapTheme.MakeChestLootQueue();
|
||||
MapTheme.TeleportersList = [];
|
||||
|
||||
Vector2I origin = Vector2I.Zero;
|
||||
var starterRoom = MapTheme.Rooms.Where(r => r.Type == RoomType.Starter).PickRandom();
|
||||
|
|
@ -121,7 +139,7 @@ public partial class RogueliteRoomManager : Node2D
|
|||
|
||||
var shuffledOffshoots = offshoots.Shuffle().ToList();
|
||||
|
||||
MapTheme.MakeChestLootQueue();
|
||||
|
||||
|
||||
// var offshootsQueue = new Queue<RoomType>();
|
||||
// offshootsQueue.EnqueueRange(shuffledOffshoots);
|
||||
|
|
@ -235,12 +253,34 @@ public partial class RogueliteRoomManager : Node2D
|
|||
//return _roomGrid.ContainsKey(neighborPos);
|
||||
});
|
||||
}
|
||||
|
||||
// Debug teleporter matching
|
||||
MatchBossTeleporter();
|
||||
|
||||
EmitSignalMapCreated();
|
||||
|
||||
//CallDeferred(MethodName.OpenStartDoorsDeferred, spawnedBeginRoom);
|
||||
}
|
||||
|
||||
private void MatchBossTeleporter()
|
||||
{
|
||||
var bossTeleporters = MapTheme.TeleportersList.Where(x => x.Type is TeleporterMarkerType.Boss);
|
||||
|
||||
foreach (var teleporterMarker in bossTeleporters)
|
||||
{
|
||||
var bossRoom = SpawnedRooms.FirstOrDefault(x => x.RoomResource.Type is RoomType.Boss);
|
||||
|
||||
if (bossRoom is null) return;
|
||||
|
||||
var teleporter = bossRoom.Teleporters.FirstOrDefault(x =>
|
||||
x.Type is TeleporterMarkerType.Receiver or TeleporterMarkerType.InvisibleReceiver);
|
||||
|
||||
if (teleporter is null) return;
|
||||
|
||||
teleporterMarker.SpawnedTeleporter.Target = teleporter.SpawnedTeleporter;
|
||||
}
|
||||
}
|
||||
|
||||
private RogueliteRoom TrySpawnRoom(List<RogueliteRoomResource> roomsList, RogueliteRoom lastRoom,
|
||||
Direction direction)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue