environment management

This commit is contained in:
2023-05-15 14:04:09 +02:00
parent fd705d46e8
commit d486a1cf6e
58 changed files with 674 additions and 435 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using EscapeRoomEngine.Engine.Runtime.Environment;
using EscapeRoomEngine.Engine.Runtime.Measurements;
using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Modules.Description;
@@ -48,6 +49,7 @@ namespace EscapeRoomEngine.Engine.Runtime
private readonly List<Room> _rooms = new();
private List<PuzzleModuleDescription> _availablePuzzles, _plannedPuzzles;
private List<RoomEnvironment> _availableEnvironments;
private GameObject _playSpaceOrigin;
private void Awake()
@@ -58,6 +60,7 @@ namespace EscapeRoomEngine.Engine.Runtime
_availablePuzzles = new List<PuzzleModuleDescription>(theme.puzzleTypes);
_plannedPuzzles = new List<PuzzleModuleDescription>(_availablePuzzles);
ResetAvailableEnvironments();
}
private void Start()
@@ -67,6 +70,11 @@ namespace EscapeRoomEngine.Engine.Runtime
_playSpaceOrigin.transform.localPosition = new Vector3(-GameControl.Instance.RoomSize.x / 2f, 0, -GameControl.Instance.RoomSize.y / 2f);
}
private void ResetAvailableEnvironments()
{
_availableEnvironments = new List<RoomEnvironment>(theme.environments);
}
#region Generation
public void GenerateRoom()
@@ -75,10 +83,23 @@ namespace EscapeRoomEngine.Engine.Runtime
var intro = NumberOfRooms == 0;
// get the last entrance from the newest room or create a spawn passage with no entrance door for where the player will start
var entrance = intro ? new Passage(new DoorModule(null, theme.spawnDoor)) : _rooms.Last().exit;
var room = new Room(entrance);
Passage entrance;
RoomEnvironment environment;
if (intro)
{
entrance = new Passage(new DoorModule(null, theme.spawnDoor));
environment = theme.intro.introEnvironment;
}
else
{
entrance = _rooms.Last().exit;
if (_availableEnvironments.Count == 0)
{
ResetAvailableEnvironments();
}
environment = _availableEnvironments.PopRandomElement();
}
var room = new Room(entrance, environment);
_rooms.Add(room);
if (intro)
@@ -98,15 +119,11 @@ namespace EscapeRoomEngine.Engine.Runtime
var roomId = _rooms.Count - 1;
room.InstantiateRoom(_playSpaceOrigin.transform, roomId * roomOffset, roomId.ToString());
Instantiate(room.environment.environment, room.roomObject.transform, false);
if (intro)
{
Instantiate(theme.intro, room.roomObject.transform, false);
FindObjectOfType<Intro>().Place(room.exit.fromOut.DoorState.transform);
}
else if (theme.environment)
{
Instantiate(theme.environment, room.roomObject.transform, false);
}
GameControl.Instance.TimeInRoom = 0;
UpdateUI();