Finish Puzzle C

This commit is contained in:
2022-12-01 15:13:00 +01:00
parent ae3c6a50f5
commit 26602d3dbc
79 changed files with 4041 additions and 124 deletions

View File

@@ -4,12 +4,11 @@ using UnityEngine;
namespace EscapeRoomEngine.Desert.Runtime
{
public class SymbolButton : Button
public class HoloButton : Button
{
private static readonly int FresnelColor = Shader.PropertyToID("_FresnelColor");
private static readonly int Color = Shader.PropertyToID("_Color");
public int symbolNumber;
[BoxGroup("Internal")] [Required] public MeshRenderer holoRenderer;
private Material _material;

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 352860bb2c6549d0b3e84104afef3f54
timeCreated: 1670019940

View File

@@ -0,0 +1,7 @@
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
{
public class SymbolButton : HoloButton
{
public int symbolNumber;
}
}

View File

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

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using EscapeRoomEngine.Desert.Runtime.Puzzle_A;
using EscapeRoomEngine.Engine.Runtime;
using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Utilities;

View File

@@ -0,0 +1,100 @@
using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Utilities;
using NaughtyAttributes;
using UnityEngine;
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
{
[SelectionBase]
[RequireComponent(typeof(Animator), typeof(Emission))]
public class Dispenser : ModuleState
{
private static readonly int Open = Animator.StringToHash("Open");
public Transform dispensable;
[SerializeField] [Min(0)]
private float cooldown;
[BoxGroup("Internal")] [SerializeField]
private Transform dispenseOrigin;
[BoxGroup("Internal")] [SerializeField]
private Button dispenseButton;
public bool Solved
{
set
{
if (value)
{
CloseHatch();
dispenseButton.Disable();
_light.color = _solvedColor.hdr;
}
else
{
dispenseButton.Enable();
_light.color = _puzzleColor.hdr;
}
}
}
private float _previousDispense = -1;
private Animator _animator;
private Emission _light;
private DynamicColor _puzzleColor, _solvedColor;
private void Awake()
{
_animator = GetComponent<Animator>();
_light = GetComponent<Emission>();
_puzzleColor = Engine.Runtime.Engine.DefaultEngine.theme.puzzleColor;
_solvedColor = Engine.Runtime.Engine.DefaultEngine.theme.solvedColor;
}
private void Start()
{
dispenseButton.ButtonEvent += (_, type) =>
{
if (type == ButtonEventType.Pressed)
{
Dispense();
}
};
_light.active = true;
}
#region Debug Buttons
[Button(enabledMode: EButtonEnableMode.Playmode)]
public void Dispense()
{
if (_previousDispense + cooldown <= Time.time)
{
Logger.Log($"{this} dispensing {dispensable.gameObject}", LogType.PuzzleDetail);
_animator.SetBool(Open, true);
Instantiate(dispensable, dispenseOrigin.position, dispenseOrigin.rotation);
_previousDispense = Time.time;
}
}
[Button(enabledMode: EButtonEnableMode.Playmode)]
public void CloseHatch()
{
_animator.SetBool(Open, false);
}
[Button(enabledMode: EButtonEnableMode.Playmode)]
public void Solve() => Solved = true;
[Button(enabledMode: EButtonEnableMode.Playmode)]
public void Reset() => Solved = false;
#endregion
public override void SetModule(Module module) {}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3ca2acc9138242c59fbba68a62435318
timeCreated: 1669991155

View File

@@ -0,0 +1,39 @@
using System;
using NaughtyAttributes;
using UnityEngine;
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
{
[Serializable]
public struct DispenserLightRow
{
public bool[] lights;
}
public class DispenserLights : MonoBehaviour
{
[SerializeField]
private DispenserLightRow[] lights;
[BoxGroup("Internal")] [SerializeField]
private GameObject lightPrefab;
[BoxGroup("Internal")] [SerializeField]
private Vector2Int gridDimensions;
[BoxGroup("Internal")] [SerializeField]
private Vector2 lightOffset;
private void Start()
{
var position = transform.localPosition;
for (var y = 0; y < gridDimensions.y; y++)
{
var row = lights[y].lights;
for (var x = 0; x < gridDimensions.x; x++)
{
var instance = Instantiate(lightPrefab, transform, false);
instance.transform.localPosition = new Vector3(-x * lightOffset.x, 0, y * lightOffset.y);
instance.GetComponent<Emission>().active = row[x];
}
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1b796efe5676490b81fe24366d556b18
timeCreated: 1670273719

View File

@@ -35,8 +35,9 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
{
if (Active)
{
Press();
orb.Color = _activeColor.hdr;
Emission.color = _activeColor.hdr;
Press();
}
}
}
@@ -51,6 +52,7 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
Release();
Emission.color = _puzzleColor.hdr;
}
orb.Color = _puzzleColor.hdr;
}
}
}

View File

@@ -2,9 +2,24 @@
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
{
[RequireComponent(typeof(Rigidbody), typeof(Collider))]
[RequireComponent(typeof(Rigidbody), typeof(Collider), typeof(Emission))]
public class HoleOrb : MonoBehaviour
{
public Color Color
{
set => _emission.color = value;
}
private Emission _emission;
private void Awake()
{
_emission = GetComponent<Emission>();
}
private void Start()
{
_emission.active = true;
}
}
}

View File

@@ -12,6 +12,7 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
private Emission frameLight;
private List<Hole> _holes;
private Dispenser _dispenser;
private DynamicColor _puzzleColor, _solvedColor, _activeColor;
protected override void Awake()
@@ -40,6 +41,7 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
hole.Emission.color = _puzzleColor.hdr;
});
frameLight.color = _puzzleColor.hdr;
_dispenser.Solved = false;
break;
case PuzzleEventType.Solved:
_holes.ForEach(hole =>
@@ -48,6 +50,7 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
hole.Emission.color = solution[hole.number] == 1 ? _activeColor.hdr : _solvedColor.hdr;
});
frameLight.color = _solvedColor.hdr;
_dispenser.Solved = true;
break;
}
};
@@ -68,5 +71,20 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
frameLight.active = true;
}
public override void SetModule(Module module)
{
base.SetModule(module);
var firstRelatedModule = Module.relatedModules[0];
if (firstRelatedModule.State is Dispenser dispenser)
{
_dispenser = dispenser;
}
else
{
throw new EngineException("Terminal was not assigned a related Ball.");
}
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 3d6620bee0f14224b11a19808d537cbd
timeCreated: 1668813872