refactor modules

This commit is contained in:
2023-03-22 17:03:55 +01:00
parent 52cf3a7fbd
commit 128ab216d2
503 changed files with 1835 additions and 379 deletions

View File

@@ -0,0 +1,63 @@
using Station46.Dispenser.Scripts;
using Station46.Runtime;
using UnityEngine;
namespace Station46.Holes.Scripts
{
/// <summary>
/// A hole used in the <see cref="Holes"/> module.
/// </summary>
[RequireComponent(typeof(Emission), typeof(Collider))]
public class Hole : Button
{
[Tooltip("The number of this hole, starting from the bottom left.")]
[Min(0)]
public int number;
public Emission Emission { get; private set; }
private void Awake()
{
Emission = GetComponent<Emission>();
}
protected override void Start()
{
base.Start();
Emission.active = true;
}
private void OnTriggerEnter(Collider other)
{
var orb = other.GetComponent<DispenserOrb>();
if (orb != null)
{
if (Active)
{
var color = EscapeRoomEngine.Engine.Runtime.Engine.Theme.activeColor;
orb.Color = color.hdr;
Emission.color = color.hdr;
Press();
}
}
}
private void OnTriggerExit(Collider other)
{
var orb = other.GetComponent<DispenserOrb>();
if (orb != null)
{
var color = EscapeRoomEngine.Engine.Runtime.Engine.Theme.puzzleColor;
if (Active)
{
Release();
Emission.color = color.hdr;
}
orb.Color = color.hdr;
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 05ccb586cbc54f9e8c46ade911449f7f
timeCreated: 1669815357

View File

@@ -0,0 +1,95 @@
using System.Collections.Generic;
using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Modules.State;
using EscapeRoomEngine.Engine.Runtime.Utilities;
using NaughtyAttributes;
using Station46.Runtime;
using UnityEngine;
namespace Station46.Holes.Scripts
{
/// <summary>
/// The main component for the orb grid module.
/// </summary>
public class Holes : StatePuzzle
{
[BoxGroup("Internal")] [SerializeField]
private Emission frameLight;
private List<Hole> _holes;
private Dispenser.Scripts.Dispenser _dispenser;
protected override void Awake()
{
base.Awake();
_holes = new List<Hole>(GetComponentsInChildren<Hole>());
}
protected override void Start()
{
base.Start();
PuzzleEvent += (_, type) =>
{
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (type)
{
case PuzzleEventType.Restarted:
var color = EscapeRoomEngine.Engine.Runtime.Engine.Theme.puzzleColor;
_holes.ForEach(hole =>
{
hole.Enable();
hole.Emission.color = color.hdr;
});
frameLight.color = color.hdr;
_dispenser.Reset();
break;
case PuzzleEventType.Solved:
var solvedColor = EscapeRoomEngine.Engine.Runtime.Engine.Theme.solvedColor;
var activeColor = EscapeRoomEngine.Engine.Runtime.Engine.Theme.activeColor;
_holes.ForEach(hole =>
{
hole.Disable();
hole.Emission.color = solution[hole.number] == 1 ? activeColor.hdr : solvedColor.hdr;
});
frameLight.color = solvedColor.hdr;
_dispenser.Solve();
break;
}
};
_holes.ForEach(hole => hole.ButtonEvent += (_, type) =>
{
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (type)
{
case ButtonEventType.Pressed:
SetState(hole.number, 1, true);
break;
case ButtonEventType.Released:
SetState(hole.number, 0, true);
break;
}
});
frameLight.active = true;
}
public override void SetModule(Module module)
{
base.SetModule(module);
// The holes require a related dispenser module
var firstRelatedModule = Module.relatedModules[0];
if (firstRelatedModule.State is Dispenser.Scripts.Dispenser dispenser)
{
_dispenser = dispenser;
}
else
{
throw new EngineException("Holes were not assigned a related Dispenser.");
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ce1763e3c7644933af2ff398ba6355b9
timeCreated: 1669815316