Added 2 minigames
This commit is contained in:
97
Assets/Scripts/insertkeys.cs
Normal file
97
Assets/Scripts/insertkeys.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class DraggableKey : MonoBehaviour,
|
||||
IBeginDragHandler, IDragHandler, IEndDragHandler, ITask
|
||||
{
|
||||
[Header("Key Settings")]
|
||||
public string keyID;
|
||||
public string correctSlotID;
|
||||
public string previousSceneName;
|
||||
|
||||
[Header("Visual")]
|
||||
public Color wrongAttemptColor = Color.red;
|
||||
public float blinkDuration = 0.2f;
|
||||
|
||||
private RectTransform rectTransform;
|
||||
private CanvasGroup canvasGroup;
|
||||
private Vector2 startPosition;
|
||||
|
||||
private bool isOverCorrectSlot = false;
|
||||
|
||||
|
||||
public string TaskID { get; set; }
|
||||
public TaskType TaskType { get; set; }
|
||||
public string TaskName { get; set; }
|
||||
public (double, double) TaskLocation { get; set; }
|
||||
public bool IsCompleted { get; private set; }
|
||||
|
||||
private Action<ITask> _onCompleted;
|
||||
private Action<ITask> _onExit;
|
||||
|
||||
public void Initialize(Action<ITask> onCompleted)
|
||||
{
|
||||
IsCompleted = false;
|
||||
_onCompleted = onCompleted;
|
||||
}
|
||||
|
||||
public void Complete()
|
||||
{
|
||||
if (IsCompleted) return;
|
||||
|
||||
IsCompleted = true;
|
||||
_onCompleted?.Invoke(this);
|
||||
ExitTask(_onExit);
|
||||
}
|
||||
|
||||
public void ExitTask(Action<ITask> onExit)
|
||||
{
|
||||
onExit?.Invoke(this);
|
||||
}
|
||||
|
||||
// ===== UNITY =====
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
rectTransform = GetComponent<RectTransform>();
|
||||
canvasGroup = GetComponent<CanvasGroup>();
|
||||
}
|
||||
|
||||
public void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
startPosition = rectTransform.anchoredPosition;
|
||||
canvasGroup.blocksRaycasts = false;
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
rectTransform.anchoredPosition += eventData.delta;
|
||||
}
|
||||
|
||||
public void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
canvasGroup.blocksRaycasts = true;
|
||||
|
||||
if (isOverCorrectSlot)
|
||||
{
|
||||
Complete();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void SetSlotMatch(bool value)
|
||||
{
|
||||
isOverCorrectSlot = value;
|
||||
}
|
||||
|
||||
|
||||
void ResetPosition()
|
||||
{
|
||||
rectTransform.anchoredPosition = startPosition;
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/insertkeys.cs.meta
Normal file
2
Assets/Scripts/insertkeys.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21dc5fa96a2ceec428d7b0332e55cbe5
|
||||
137
Assets/Scripts/kabely.cs
Normal file
137
Assets/Scripts/kabely.cs
Normal file
@@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class CableMiniGame : MonoBehaviour, ITask
|
||||
{
|
||||
[System.Serializable]
|
||||
public class Cable
|
||||
{
|
||||
public string colorName;
|
||||
public Button sourceButton;
|
||||
public Button targetButton;
|
||||
public Image cableImage;
|
||||
|
||||
[HideInInspector] public bool connected;
|
||||
}
|
||||
|
||||
|
||||
public string TaskID { get; set; }
|
||||
public TaskType TaskType { get; set; }
|
||||
public string TaskName { get; set; }
|
||||
public (double, double) TaskLocation { get; set; }
|
||||
public bool IsCompleted { get; private set; }
|
||||
|
||||
private Action<ITask> _onCompleted;
|
||||
private Action<ITask> _onExit;
|
||||
|
||||
[Header("MiniGame Settings")]
|
||||
public Cable[] cables;
|
||||
public string previousSceneName;
|
||||
public Color wrongAttemptColor = Color.white;
|
||||
public float blinkDuration = 0.2f;
|
||||
|
||||
private string selectedColor = null;
|
||||
|
||||
|
||||
public void Initialize(Action<ITask> onCompleted)
|
||||
{
|
||||
IsCompleted = false;
|
||||
_onCompleted = onCompleted;
|
||||
|
||||
foreach (var cable in cables)
|
||||
cable.connected = false;
|
||||
}
|
||||
|
||||
public void Complete()
|
||||
{
|
||||
if (IsCompleted) return;
|
||||
|
||||
IsCompleted = true;
|
||||
_onCompleted?.Invoke(this);
|
||||
ExitTask(_onExit);
|
||||
}
|
||||
|
||||
public void ExitTask(Action<ITask> onExit)
|
||||
{
|
||||
onExit?.Invoke(this);
|
||||
}
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
foreach (var cable in cables)
|
||||
{
|
||||
Cable localCable = cable;
|
||||
|
||||
cable.sourceButton.onClick.AddListener(() => OnSourceClicked(localCable));
|
||||
cable.targetButton.onClick.AddListener(() => OnTargetClicked(localCable));
|
||||
}
|
||||
}
|
||||
|
||||
void OnSourceClicked(Cable cable)
|
||||
{
|
||||
if (cable.connected) return;
|
||||
|
||||
selectedColor = cable.colorName;
|
||||
}
|
||||
|
||||
void OnTargetClicked(Cable cable)
|
||||
{
|
||||
if (selectedColor == null || cable.connected)
|
||||
return;
|
||||
|
||||
if (selectedColor == cable.colorName)
|
||||
{
|
||||
cable.cableImage.color = GetColorFromName(selectedColor);
|
||||
cable.connected = true;
|
||||
|
||||
CheckCompletion();
|
||||
}
|
||||
else
|
||||
{
|
||||
StartCoroutine(BlinkAndExit(cable.cableImage));
|
||||
}
|
||||
|
||||
selectedColor = null;
|
||||
}
|
||||
|
||||
void CheckCompletion()
|
||||
{
|
||||
foreach (var cable in cables)
|
||||
{
|
||||
if (!cable.connected)
|
||||
return;
|
||||
}
|
||||
|
||||
Complete();
|
||||
}
|
||||
|
||||
Color GetColorFromName(string name)
|
||||
{
|
||||
switch (name.ToLower())
|
||||
{
|
||||
case "red": return Color.red;
|
||||
case "blue": return Color.blue;
|
||||
case "green": return Color.green;
|
||||
case "yellow": return Color.yellow;
|
||||
case "purple": return new Color(0.5f, 0, 0.5f);
|
||||
default: return Color.white;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator BlinkAndExit(Image img)
|
||||
{
|
||||
Color original = img.color;
|
||||
img.color = wrongAttemptColor;
|
||||
|
||||
yield return new WaitForSeconds(blinkDuration);
|
||||
|
||||
img.color = original;
|
||||
|
||||
ExitTask(_onExit);
|
||||
SceneManager.LoadScene(previousSceneName);
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/kabely.cs.meta
Normal file
2
Assets/Scripts/kabely.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3fa58532362d2547ab6cd0ab17d7bde
|
||||
28
Assets/Scripts/keyslot.cs
Normal file
28
Assets/Scripts/keyslot.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class KeySlot : MonoBehaviour, IDropHandler
|
||||
{
|
||||
public string correctKeyID;
|
||||
|
||||
public void OnDrop(PointerEventData eventData)
|
||||
{
|
||||
DraggableKey key = eventData.pointerDrag.GetComponent<DraggableKey>();
|
||||
|
||||
if (key != null)
|
||||
{
|
||||
if (key.keyID == correctKeyID)
|
||||
{
|
||||
key.transform.position = transform.position;
|
||||
key.enabled = false;
|
||||
|
||||
KeyminigameManager.Instance.CheckWin();
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyminigameManager.Instance.Fail();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/keyslot.cs.meta
Normal file
2
Assets/Scripts/keyslot.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f5eef97f16bb6b47ba88f96f9d051e9
|
||||
30
Assets/Scripts/keysminiigamemanager.cs
Normal file
30
Assets/Scripts/keysminiigamemanager.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class KeyminigameManager : MonoBehaviour
|
||||
{
|
||||
public static KeyminigameManager Instance;
|
||||
|
||||
private int correctCount = 0;
|
||||
public int totalKeys = 3;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public void CheckWin()
|
||||
{
|
||||
correctCount++;
|
||||
|
||||
if (correctCount >= totalKeys)
|
||||
{
|
||||
Debug.Log("WIN");
|
||||
}
|
||||
}
|
||||
|
||||
public void Fail()
|
||||
{
|
||||
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/keysminiigamemanager.cs.meta
Normal file
2
Assets/Scripts/keysminiigamemanager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ef083a6749a8ce459b724dafa1eb08f
|
||||
Reference in New Issue
Block a user