connect multiple rooms with doors

This commit is contained in:
2022-11-03 21:20:00 +01:00
parent bce88d0504
commit 807eae1c62
24 changed files with 391 additions and 88 deletions

View File

@@ -0,0 +1,26 @@
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Modules
{
public enum DoorType
{
Entrance = ModuleType.DoorEntrance, Exit = ModuleType.DoorExit
}
public class DoorModule : Module
{
public bool IsEntrance => IsType((ModuleType)DoorType.Entrance);
public bool IsExit => IsType((ModuleType)DoorType.Exit);
internal DoorModule(DoorType type, Space space) : base(space)
{
types.Add((ModuleType)type);
srDimensions.Size = Vector2Int.one; // door always has size 1x1
}
public override string ToString()
{
return $"{(IsEntrance ? "Entrance" : IsExit ? "Exit" : "Unknown")} door";
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 05af827f50ab469f952abbb62109877d
timeCreated: 1667226128

View File

@@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Utilities;
using UnityEngine;
using Logger = Escape_Room_Engine.Engine.Scripts.Utilities.Logger;
using LogType = Escape_Room_Engine.Engine.Scripts.Utilities.LogType;
namespace Escape_Room_Engine.Engine.Scripts.Modules
{
public class Module
{
/// <summary>
/// Get the space relative (<i>SR</i>) position of this module.
/// </summary>
internal Vector2Int SrPosition => srDimensions.Position;
/// <summary>
/// Get the room relative (<i>RR</i>) position of this module.
/// </summary>
internal Vector2Int RrPosition => space.ToRoomRelative(SrPosition);
internal readonly Space space;
protected GameObject _moduleObject;
protected readonly List<ModuleType> types = new();
/// <summary>
/// The space relative (<i>SR</i>) dimensions of this module.
/// </summary>
protected Dimensions srDimensions;
internal Module(Space space)
{
this.space = space;
}
internal bool IsType(ModuleType type)
{
return types.Contains(type);
}
/// <summary>
/// Place this module with a position relative to the room.
/// </summary>
/// <param name="rrPosition">The room relative (<i>RR</i>) position of this module. Must be inside the space dimensions.</param>
/// <exception cref="Exception">If the position is not inside the space dimensions.</exception>
internal void PlaceRoomRelative(Vector2Int rrPosition) => Place(space.ToSpaceRelative(rrPosition));
/// <summary>
/// Place this module with a position relative to the space it is in.
/// </summary>
/// <param name="srPosition">The space relative (<i>SR</i>) position of this module. Must be inside the space dimensions.</param>
/// <exception cref="Exception">If the position is not inside the space dimensions.</exception>
internal void Place(Vector2Int srPosition) {
if (space != null && !srPosition.IsInsideRelative(space.rrDimensions))
{
throw new Exception($"Trying to place {this} at {srPosition}, which is outside space dimensions {space.rrDimensions}.");
}
srDimensions.Position = srPosition;
Logger.Log($"{this} has been placed at {srPosition} (SR)", LogType.ModulePlacement);
}
public override string ToString()
{
return $"Module ({string.Join(',', types.ConvertAll(type => type.ToString()))})";
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bef95c0b6e3be5847939fffa4294f99f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
namespace Escape_Room_Engine.Engine.Scripts.Modules
{
public enum ModuleType
{
DoorEntrance, DoorExit, // door types
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 602fa211234b4068bca5ff38a2f9593f
timeCreated: 1667230405