finish puzzle a logic
This commit is contained in:
@@ -24,7 +24,6 @@ MonoBehaviour:
|
|||||||
spawnDoor: {fileID: 11400000, guid: 6e937b2e9f774999b5962c4b40947165, type: 2}
|
spawnDoor: {fileID: 11400000, guid: 6e937b2e9f774999b5962c4b40947165, type: 2}
|
||||||
exitDoorTypes:
|
exitDoorTypes:
|
||||||
- {fileID: 11400000, guid: 29e2ae36585f4e65966bc9ea2f95ac4a, type: 2}
|
- {fileID: 11400000, guid: 29e2ae36585f4e65966bc9ea2f95ac4a, type: 2}
|
||||||
puzzleCount: {x: 2, y: 4}
|
puzzleCount: {x: 2, y: 3}
|
||||||
puzzleTypes:
|
puzzleTypes:
|
||||||
- {fileID: 11400000, guid: 2a6dd6683bdc4db9b200ccfab1dd4bed, type: 2}
|
|
||||||
- {fileID: 11400000, guid: 3f79d37154e44ca47b54bb43bbe8d9aa, type: 2}
|
- {fileID: 11400000, guid: 3f79d37154e44ca47b54bb43bbe8d9aa, type: 2}
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 7902f6a7fa0fd844f8ed93e3debd7778, type: 3}
|
m_Script: {fileID: 11500000, guid: 7902f6a7fa0fd844f8ed93e3debd7778, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
rotating: 1
|
||||||
rotationAngle: 0
|
rotationAngle: 0
|
||||||
activeRange: {x: -20, y: 20}
|
activeRange: {x: -20, y: 20}
|
||||||
crystal: {fileID: 5479821360340449616}
|
crystal: {fileID: 5479821360340449616}
|
||||||
@@ -216,6 +217,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 1
|
||||||
anglePosition: 120
|
anglePosition: 120
|
||||||
--- !u!1 &3032249595895728242
|
--- !u!1 &3032249595895728242
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -327,6 +329,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 0
|
||||||
anglePosition: 0
|
anglePosition: 0
|
||||||
--- !u!1 &3501693287014819891
|
--- !u!1 &3501693287014819891
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -646,6 +649,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
m_Script: {fileID: 11500000, guid: 1e099fd852792c34188dcf102aa895e4, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 2
|
||||||
anglePosition: 240
|
anglePosition: 240
|
||||||
--- !u!1 &3858759582118357347
|
--- !u!1 &3858759582118357347
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -927,7 +931,8 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: b9b2d31478f94735a2e19e7c07a27f05, type: 3}
|
m_Script: {fileID: 11500000, guid: b9b2d31478f94735a2e19e7c07a27f05, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
ringLight: {fileID: 1320470883464003968}
|
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
||||||
|
statusLight: {fileID: 1320470883464003968}
|
||||||
ring: {fileID: 5086091638728871387}
|
ring: {fileID: 5086091638728871387}
|
||||||
--- !u!95 &2153737246840746917
|
--- !u!95 &2153737246840746917
|
||||||
Animator:
|
Animator:
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Transform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 3400578974218326136}
|
- {fileID: 143671197139830240}
|
||||||
m_Father: {fileID: 5383329221585827904}
|
m_Father: {fileID: 5383329221585827904}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
@@ -157,7 +157,7 @@ Transform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 143671197139830240}
|
- {fileID: 3400578974218326136}
|
||||||
m_Father: {fileID: 5383329221585827904}
|
m_Father: {fileID: 5383329221585827904}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
@@ -192,7 +192,7 @@ Transform:
|
|||||||
m_LocalScale: {x: 1.5, y: 1.5000001, z: 1.5000001}
|
m_LocalScale: {x: 1.5, y: 1.5000001, z: 1.5000001}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1715039903437992233}
|
m_Father: {fileID: 6522234565953195748}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
||||||
--- !u!33 &4858124499749322729
|
--- !u!33 &4858124499749322729
|
||||||
@@ -257,6 +257,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 0
|
||||||
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
||||||
--- !u!1 &5383329221585827911
|
--- !u!1 &5383329221585827911
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -328,6 +329,8 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
||||||
|
totalSteps: 3
|
||||||
|
currentStep: 0
|
||||||
terminalLight: {fileID: 7019057833946340774}
|
terminalLight: {fileID: 7019057833946340774}
|
||||||
symbols:
|
symbols:
|
||||||
- {fileID: 7205539446313206328}
|
- {fileID: 7205539446313206328}
|
||||||
@@ -429,6 +432,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 2
|
||||||
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
||||||
--- !u!1 &8214146423999858347
|
--- !u!1 &8214146423999858347
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -457,11 +461,11 @@ Transform:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 8214146423999858347}
|
m_GameObject: {fileID: 8214146423999858347}
|
||||||
m_LocalRotation: {x: -0.70710653, y: 5.123641e-14, z: 3.992727e-16, w: 0.70710707}
|
m_LocalRotation: {x: -0.70710653, y: 5.123641e-14, z: 3.992727e-16, w: 0.70710707}
|
||||||
m_LocalPosition: {x: -0, y: -0, z: 0.0004}
|
m_LocalPosition: {x: 0, y: 0, z: 0.0004}
|
||||||
m_LocalScale: {x: 1.5, y: 1.5000001, z: 1.5000001}
|
m_LocalScale: {x: 1.5, y: 1.5000001, z: 1.5000001}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 6522234565953195748}
|
m_Father: {fileID: 1715039903437992233}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
||||||
--- !u!33 &4045135655228650100
|
--- !u!33 &4045135655228650100
|
||||||
@@ -526,6 +530,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
m_Script: {fileID: 11500000, guid: 3d6620bee0f14224b11a19808d537cbd, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
symbolNumber: 1
|
||||||
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2}
|
||||||
--- !u!1 &8471610280302804497
|
--- !u!1 &8471610280302804497
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|||||||
@@ -1,13 +1,39 @@
|
|||||||
using EscapeRoomEngine.Engine.Runtime.Modules;
|
using EscapeRoomEngine.Engine.Runtime;
|
||||||
|
using EscapeRoomEngine.Engine.Runtime.Modules;
|
||||||
using NaughtyAttributes;
|
using NaughtyAttributes;
|
||||||
|
|
||||||
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
||||||
{
|
{
|
||||||
public class Ball : ModuleState
|
public class Ball : ModuleState
|
||||||
{
|
{
|
||||||
[BoxGroup("Internal")] [Required] public Emission ringLight;
|
public EngineTheme theme;
|
||||||
|
[BoxGroup("Internal")] [Required] public Emission statusLight;
|
||||||
[BoxGroup("Internal")] [Required] public Ring ring;
|
[BoxGroup("Internal")] [Required] public Ring ring;
|
||||||
|
|
||||||
|
public bool StatusLight
|
||||||
|
{
|
||||||
|
set => statusLight.active = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Active
|
||||||
|
{
|
||||||
|
get => _active;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_active = value;
|
||||||
|
|
||||||
|
statusLight.color = _active ? theme.puzzleColor : theme.solvedColor;
|
||||||
|
ring.rotating = _active;
|
||||||
|
if (!_active)
|
||||||
|
{
|
||||||
|
ring.crystal.Active = false;
|
||||||
|
ring.symbols.ForEach(symbol => symbol.Active = false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _active;
|
||||||
|
|
||||||
public override void SetModule(Module module) {}
|
public override void SetModule(Module module) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,26 +6,15 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
|||||||
{
|
{
|
||||||
public class Ring : MonoBehaviour
|
public class Ring : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
public bool rotating = true;
|
||||||
public float rotationAngle;
|
public float rotationAngle;
|
||||||
[MinMaxSlider(-180, 180)] public Vector2 activeRange;
|
[MinMaxSlider(-180, 180)] public Vector2 activeRange;
|
||||||
[Required] public Crystal crystal;
|
[Required] public Crystal crystal;
|
||||||
public List<Symbol> symbols;
|
public List<Symbol> symbols;
|
||||||
|
|
||||||
public bool Solved
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_solved = value;
|
|
||||||
crystal.Active = !_solved;
|
|
||||||
symbols.ForEach(symbol => symbol.Active = !_solved);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool _solved;
|
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if(!_solved)
|
if(rotating)
|
||||||
{
|
{
|
||||||
transform.localRotation = Quaternion.AngleAxis(rotationAngle, Vector3.forward);
|
transform.localRotation = Quaternion.AngleAxis(rotationAngle, Vector3.forward);
|
||||||
|
|
||||||
|
|||||||
@@ -4,17 +4,20 @@ using EscapeRoomEngine.Engine.Runtime.Modules;
|
|||||||
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
||||||
using NaughtyAttributes;
|
using NaughtyAttributes;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
|
||||||
|
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
|
||||||
|
|
||||||
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
||||||
{
|
{
|
||||||
[RequireComponent(typeof(Animator))]
|
[RequireComponent(typeof(Animator))]
|
||||||
public class Terminal : PuzzleState
|
public class Terminal : CyclicStepPuzzle
|
||||||
{
|
{
|
||||||
private static readonly int LightFlash = Animator.StringToHash("Light Flash");
|
private static readonly int LightFlash = Animator.StringToHash("Light Flash");
|
||||||
|
|
||||||
[BoxGroup("Internal")] [Required] public Emission terminalLight;
|
[BoxGroup("Internal")] [Required] public Emission terminalLight;
|
||||||
[BoxGroup("Internal")] public List<SymbolButton> symbols;
|
[BoxGroup("Internal")] public List<SymbolButton> symbols;
|
||||||
|
|
||||||
|
private int _activeSymbol, _lastPressedSymbol;
|
||||||
private Animator _animator;
|
private Animator _animator;
|
||||||
private Ball _ball;
|
private Ball _ball;
|
||||||
|
|
||||||
@@ -23,23 +26,23 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
|||||||
_animator = GetComponent<Animator>();
|
_animator = GetComponent<Animator>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Start()
|
protected override void Start()
|
||||||
{
|
{
|
||||||
|
base.Start();
|
||||||
|
|
||||||
PuzzleEvent += (_, type) =>
|
PuzzleEvent += (_, type) =>
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case PuzzleEventType.Restarted:
|
case PuzzleEventType.Restarted:
|
||||||
_ball.ringLight.color = theme.puzzleColor;
|
_ball.Active = true;
|
||||||
terminalLight.color = theme.puzzleColor;
|
terminalLight.color = theme.puzzleColor;
|
||||||
symbols.ForEach(symbol => symbol.Enable());
|
symbols.ForEach(symbol => symbol.Enable());
|
||||||
_ball.ring.Solved = false;
|
|
||||||
break;
|
break;
|
||||||
case PuzzleEventType.Solved:
|
case PuzzleEventType.Solved:
|
||||||
_ball.ringLight.color = theme.solvedColor;
|
_ball.Active = false;
|
||||||
terminalLight.color = theme.solvedColor;
|
terminalLight.color = theme.solvedColor;
|
||||||
symbols.ForEach(symbol => symbol.Disable());
|
symbols.ForEach(symbol => symbol.Disable());
|
||||||
_ball.ring.Solved = true;
|
|
||||||
break;
|
break;
|
||||||
case PuzzleEventType.WrongInput:
|
case PuzzleEventType.WrongInput:
|
||||||
_animator.SetTrigger(LightFlash);
|
_animator.SetTrigger(LightFlash);
|
||||||
@@ -48,6 +51,23 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
|||||||
throw new ArgumentOutOfRangeException(nameof(type), type, null);
|
throw new ArgumentOutOfRangeException(nameof(type), type, null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
symbols.ForEach(symbol =>
|
||||||
|
{
|
||||||
|
symbol.ButtonEvent += (_, type) =>
|
||||||
|
{
|
||||||
|
if (type == ButtonEventType.Pressed)
|
||||||
|
{
|
||||||
|
PressedSymbol(symbol.symbolNumber);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
_ball.ring.symbols.ForEach(symbol =>
|
||||||
|
{
|
||||||
|
symbol.SymbolEvent += type =>
|
||||||
|
_activeSymbol = type == SymbolEventType.Activated ? symbol.symbolNumber : -1;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetModule(Module module)
|
public override void SetModule(Module module)
|
||||||
@@ -71,14 +91,39 @@ namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A
|
|||||||
internal void TurnOnLights()
|
internal void TurnOnLights()
|
||||||
{
|
{
|
||||||
terminalLight.active = true;
|
terminalLight.active = true;
|
||||||
_ball.ringLight.active = true;
|
_ball.StatusLight = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// required in animation
|
// required in animation
|
||||||
internal void TurnOffLights()
|
internal void TurnOffLights()
|
||||||
{
|
{
|
||||||
terminalLight.active = false;
|
terminalLight.active = false;
|
||||||
_ball.ringLight.active = false;
|
_ball.StatusLight = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void PressedSymbol(int number)
|
||||||
|
{
|
||||||
|
if (!Solved)
|
||||||
|
{
|
||||||
|
Logger.Log($"Pressed symbol {number} on {this}", LogType.PuzzleDetail);
|
||||||
|
|
||||||
|
if (number == _activeSymbol)
|
||||||
|
{
|
||||||
|
CheckStep(number);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WrongInput();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Debug Buttons
|
||||||
|
|
||||||
|
[Button(enabledMode: EButtonEnableMode.Playmode)] public void PressSymbol0() => PressedSymbol(0);
|
||||||
|
[Button(enabledMode: EButtonEnableMode.Playmode)] public void PressSymbol1() => PressedSymbol(1);
|
||||||
|
[Button(enabledMode: EButtonEnableMode.Playmode)] public void PressSymbol2() => PressedSymbol(2);
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user