using System.Collections.Generic; using UnityEngine; namespace Escape_Room_Engine.Engine.Scripts { public class Space { // public DoorModule Entrance => (DoorModule)_modules.Find(module => module.IsType((ModuleType)DoorType.Entrance)); // public DoorModule Exit => (DoorModule)_modules.Find(module => module.IsType((ModuleType)DoorType.Exit)); private readonly Dimensions _dimensions; private GameObject _spaceObject; private List _modules = new(2); internal Space(Dimensions dimensions, Passage entrance, Passage exit) { _dimensions = dimensions; // connect the space to its passages entrance.ConnectTo(new DoorModule(DoorType.Entrance)); AddModule(entrance.toIn); exit.ConnectFrom(new DoorModule(DoorType.Exit)); AddModule(exit.fromOut); } internal void AddModule(Module module) { _modules.Add(module); } internal void InstantiateSpace(Transform parent, string name) { _spaceObject = new GameObject($"Space {name}", typeof(MeshFilter), typeof(MeshRenderer)); _spaceObject.transform.SetParent(parent, false); _spaceObject.transform.localPosition = new Vector3(_dimensions.X, 0, _dimensions.Y); var meshFilter = _spaceObject.GetComponent(); meshFilter.mesh = GenerateMesh(); var meshRenderer = _spaceObject.GetComponent(); meshRenderer.material = Engine.DefaultEngine.roomMaterial; } private Mesh GenerateMesh() { var mesh = new Mesh(); mesh.vertices = new[] { new Vector3(0, 0, 0), new Vector3(_dimensions.Width, 0, 0), new Vector3(0, 0, _dimensions.Length), new Vector3(_dimensions.Width, 0, _dimensions.Length) }; mesh.triangles = new[] { 0, 2, 1, 2, 3, 1 }; var normal = Vector3.up; mesh.normals = new[] { normal, normal, normal, normal }; mesh.uv = new[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1) }; return mesh; } internal void Destroy() { Object.Destroy(_spaceObject); } } }