Implemented room blocking in game.
This commit is contained in:
parent
18908b2ae7
commit
1e95378bb1
24 changed files with 25172 additions and 65 deletions
|
|
@ -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>());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue