environment management
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user