Implemented room blocking in game.

This commit is contained in:
Max 2025-02-24 13:59:06 +01:00
parent 18908b2ae7
commit 1e95378bb1
24 changed files with 25172 additions and 65 deletions

View file

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using UnityEngine;
using DungeonMapGenerator;
using DungeonMapGenerator.Rooms;
using Unity.VisualScripting;
using UnityEditor;
using Object = UnityEngine.Object;
@ -25,25 +26,32 @@ namespace DungeonGenerator
GameObject bossRoomPrefab = Resources.Load<GameObject>(BOSS_ROOM);
GameObject monsterRoomPrefab = Resources.Load<GameObject>(MONSTER_ROOM);
GameObject normalRoomPrefab = Resources.Load<GameObject>(NORMAL_ROOM);
Dictionary<GameObject, DungeonMapGenerator.Rooms.Room> gameObjectRoomPairs = new Dictionary<GameObject, DungeonMapGenerator.Rooms.Room>();
GameObject bossRoomGO = PrefabUtility.InstantiatePrefab(bossRoomPrefab, gameObject.transform) as GameObject;
bossRoomGO.transform.position = ConvertToUnityPosition(map.GetBossRoom().GetCenterOfRoom(), map.Width, map.Height);
AddLockToRoomObject(bossRoomGO, map.GetBossRoom().Lock.GetLock());
foreach (DungeonMapGenerator.Lock extraLock in map.GetBossRoom().ExtraLocks)
BossRoom bossRoom = map.GetBossRoom();
gameObjectRoomPairs[bossRoomGO] = bossRoom;
AddLockToRoomObject(bossRoomGO, bossRoom.Lock.GetLock());
foreach (DungeonMapGenerator.Lock extraLock in bossRoom.ExtraLocks)
{
AddLockToRoomObject(bossRoomGO, extraLock.GetLock());
}
_roomIdToGameObject[map.GetBossRoom().Id] = bossRoomGO;
AddRewardsToRoomObject(bossRoomGO, bossRoom.GetLoot());
_roomIdToGameObject[bossRoom.Id] = bossRoomGO;
foreach (var monsterRoom in map.GetMonsterRooms())
{
GameObject monsterRoomGO = PrefabUtility.InstantiatePrefab(monsterRoomPrefab, gameObject.transform) as GameObject;
monsterRoomGO.transform.position = ConvertToUnityPosition(monsterRoom.GetCenterOfRoom(), map.Width, map.Height);
gameObjectRoomPairs[monsterRoomGO] = monsterRoom;
AddLockToRoomObject(monsterRoomGO, monsterRoom.Lock.GetLock());
foreach (DungeonMapGenerator.Lock extraLock in monsterRoom.ExtraLocks)
{
AddLockToRoomObject(monsterRoomGO, extraLock.GetLock());
}
AddRewardsToRoomObject(monsterRoomGO, monsterRoom.GetLoot());
_roomIdToGameObject[monsterRoom.Id] = monsterRoomGO;
}
@ -51,7 +59,9 @@ namespace DungeonGenerator
{
GameObject normalRoomGO = PrefabUtility.InstantiatePrefab(normalRoomPrefab, gameObject.transform) as GameObject;
normalRoomGO.transform.position = ConvertToUnityPosition(normalRoom.GetCenterOfRoom(), map.Width, map.Height);
gameObjectRoomPairs[normalRoomGO] = normalRoom;
AddLockToRoomObject(normalRoomGO, normalRoom.Lock.GetLock());
AddRewardsToRoomObject(normalRoomGO, normalRoom.GetLoot());
_roomIdToGameObject[normalRoom.Id] = normalRoomGO;
}
@ -59,8 +69,10 @@ namespace DungeonGenerator
{
GameObject entranceRoomGO = PrefabUtility.InstantiatePrefab(normalRoomPrefab, gameObject.transform) as GameObject;
entranceRoomGO.transform.position = ConvertToUnityPosition(entranceRoom.GetCenterOfRoom(), map.Width, map.Height);
gameObjectRoomPairs[entranceRoomGO] = entranceRoom;
entranceRoomGO.GetComponent<Room>().IsEntrance = true;
AddLockToRoomObject(entranceRoomGO, entranceRoom.Lock.GetLock());
AddRewardsToRoomObject(entranceRoomGO, entranceRoom.GetLoot());
_roomIdToGameObject[entranceRoom.Id] = entranceRoomGO;
}
@ -73,6 +85,14 @@ namespace DungeonGenerator
roomComponent.AdjacentRooms.Add(_roomIdToGameObject[id]);
}
}
foreach (var kvp in gameObjectRoomPairs)
{
if (kvp.Value.GetType() == typeof(DungeonMapGenerator.Rooms.MonsterRoom) || kvp.Value.GetType() == typeof(DungeonMapGenerator.Rooms.BossRoom))
{
AddBlockingRooms(kvp.Key.GetComponent<Room>(), (DungeonMapGenerator.Rooms.MonsterRoom)kvp.Value);
}
}
}
private Vector3 ConvertToUnityPosition(Point dungeonPosition, int mapWidth, int mapHeight)
@ -112,5 +132,34 @@ namespace DungeonGenerator
break;
}
}
private void AddRewardsToRoomObject(GameObject roomGO, List<LootType> loot)
{
RoomRewards rewards = roomGO.AddComponent<RoomRewards>();
foreach (LootType type in loot)
{
switch (type)
{
case LootType.Chest:
rewards.Chest = true;
break;
case LootType.Diamond:
rewards.Diamonds++;
break;
case LootType.Damage:
rewards.Damage++;
break;
}
}
}
private void AddBlockingRooms(Room roomComponent, DungeonMapGenerator.Rooms.MonsterRoom room)
{
foreach (var blockingRoomId in room.GetBlockingRoomIds())
{
roomComponent.AddBlockingRoom(_roomIdToGameObject[blockingRoomId].GetComponent<Room>());
}
}
}
}