Files
3DBlobici-WorkingTitle/3D blobici/Assets/Prefabs/Scripts/RoomHandler.cs

96 lines
2.7 KiB
C#
Raw Normal View History

2025-06-30 16:28:30 +02:00
using System.Collections.Generic;
2025-06-25 13:19:20 +02:00
using UnityEngine;
2025-06-25 23:54:00 +02:00
///<summary>
/// Object handling Room logic
///</summary>
///
public class RoomHandler : MonoBehaviour
2025-06-25 13:19:20 +02:00
{
2025-06-30 16:28:30 +02:00
[Header("Doors")]
2025-06-25 13:19:20 +02:00
[SerializeField] private GameObject wallNorth;
[SerializeField] private GameObject wallSouth;
[SerializeField] private GameObject wallEast;
[SerializeField] private GameObject wallWest;
2025-06-25 23:54:00 +02:00
2025-06-30 16:28:30 +02:00
public enum Side
{
North,
South,
East,
West
}
2025-08-02 09:11:23 +02:00
// Room Spawn Points
[Header("Spawn Points")]
[SerializeField] private List<GameObject> spawnPoints;
[SerializeField] private GameObject test;
2025-06-30 16:28:30 +02:00
private readonly Dictionary<Side, DoorAnimation> doors = new();
public void RegisterDoor(Side dir, DoorAnimation doorAnim) => doors[dir] = doorAnim;
2025-06-25 23:54:00 +02:00
/// <summary>
/// Creates entrances to corridors leading to other rooms
/// </summary>
/// <param name="northOpen"></param>
/// <param name="southOpen"></param>
/// <param name="eastOpen"></param>
/// <param name="westOpen"></param>
2025-06-25 13:19:20 +02:00
public void SetEntrances(bool northOpen, bool southOpen, bool eastOpen, bool westOpen)
{
wallNorth.SetActive(!northOpen);
wallSouth.SetActive(!southOpen);
wallEast.SetActive(!eastOpen);
wallWest.SetActive(!westOpen);
}
2025-06-30 16:28:30 +02:00
public void ToggleAllDoors()
{
foreach (DoorAnimation door in doors.Values)
{
door.ToggleDoor();
}
}
public void SetDoorState(Side dir, bool open)
{
if (doors.TryGetValue(dir, out DoorAnimation da))
{
da.ToggleDoor();
Debug.Log("Door " + dir + " is now " + (open ? "open" : "closed"));
}
}
2025-08-02 09:11:23 +02:00
public void SpawnEnemies(List<GameObject> enemyPrefabs)
{
int i = 0;
List<GameObject> enemyPrefabsLocal = new List<GameObject>(enemyPrefabs);
while (enemyPrefabsLocal.Count > 0)
{
// Spawns enemy and removes it from the list
GameObject enemyPrefab = enemyPrefabsLocal[0];
enemyPrefabsLocal.RemoveAt(0);
// Select a spawn point with round-robin
GameObject spawnPoint = spawnPoints[i % spawnPoints.Count];
Instantiate(enemyPrefab, spawnPoint.transform.position + new Vector3(0, 1, 0), Quaternion.identity);
Debug.Log("Spawned enemy: " + enemyPrefab.name + " at " + spawnPoint.transform.position);
i++;
}
}
void Start()
{
int enemyCount = Random.Range(1, 4);
List<GameObject> enemyPrefabs = new List<GameObject>();
for (int i = 0; i < enemyCount; i++)
{
enemyPrefabs.Add(test);
}
SpawnEnemies(enemyPrefabs);
}
2025-06-25 13:19:20 +02:00
}