diff --git a/Assets/JustSign/Scenes/Game.unity b/Assets/JustSign/Scenes/Game.unity index e4b5899..8f49b66 100644 --- a/Assets/JustSign/Scenes/Game.unity +++ b/Assets/JustSign/Scenes/Game.unity @@ -637,6 +637,11 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &245326894 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8299246693487308514, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} + m_PrefabInstance: {fileID: 667202412} + m_PrefabAsset: {fileID: 0} --- !u!1 &281479528 GameObject: m_ObjectHideFlags: 0 @@ -793,6 +798,80 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &496523652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 496523653} + - component: {fileID: 496523655} + - component: {fileID: 496523654} + m_Layer: 5 + m_Name: Webcam-bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &496523653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496523652} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 711818225} + m_Father: {fileID: 906197777} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -612, y: 187} + m_SizeDelta: {x: 464.2643, y: 449.3374} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &496523654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496523652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 8400000, guid: 60bb0835fc4bbb043b9b3d8ef48f96a8, type: 2} + m_UVRect: + serializedVersion: 2 + x: 1 + y: 0 + width: -1 + height: 1 +--- !u!222 &496523655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496523652} + m_CullTransparentMesh: 1 --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -1509,14 +1588,14 @@ PrefabInstance: - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: - objectReference: {fileID: 0} + objectReference: {fileID: 667202414} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: GotoThemeSelection + value: Back objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: SpellingBeeWebcam, Assembly-CSharp + value: BackButton, CommonScripts objectReference: {fileID: 0} - target: {fileID: 8299246693487308512, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument @@ -1610,13 +1689,26 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: [] + m_RemovedComponents: + - {fileID: 4518652150503380115, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} --- !u!224 &667202413 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 8299246693487308515, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} m_PrefabInstance: {fileID: 667202412} m_PrefabAsset: {fileID: 0} +--- !u!114 &667202414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245326894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3dd279b546423e4a8a1b28819a6c4a1, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &691634122 GameObject: m_ObjectHideFlags: 0 @@ -1701,6 +1793,51 @@ SpriteRenderer: m_WasSpriteAssigned: 0 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &711818224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 711818225} + - component: {fileID: 711818226} + m_Layer: 0 + m_Name: Webcam-controller + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &711818225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711818224} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -271, y: -622, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 496523653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &711818226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711818224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98f2ddd1188ed310e8733106251729b6, type: 3} + m_Name: + m_EditorClassIdentifier: + display: {fileID: 496523654} --- !u!1 &757133117 GameObject: m_ObjectHideFlags: 0 @@ -2266,6 +2403,7 @@ RectTransform: - {fileID: 114026903} - {fileID: 128049075} - {fileID: 1627575592} + - {fileID: 496523653} m_Father: {fileID: 1768150806} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/JustSign/Scripts/JustSignController.cs b/Assets/JustSign/Scripts/JustSignController.cs index ac671f8..fd6d704 100644 --- a/Assets/JustSign/Scripts/JustSignController.cs +++ b/Assets/JustSign/Scripts/JustSignController.cs @@ -145,17 +145,27 @@ public class JustSignController : MonoBehaviour currentTheme = FindThemeByName(PlayerPrefs.GetString("themeName")); words = currentTheme.words; lastSpawn = Time.time; + Debug.Log("BEFORE"); SpawnNewSymbol(); + Debug.Log("AFTER"); } /// /// Update is called once per frame /// void Update() - { + { + int matchedSymbolIndex = -1; + for (int i = 0; i < activeWords.Count; i++) { + if (activeWords[i] == answerField.text.ToLower()) { + matchedSymbolIndex = i; + } + } + // Destroy the oldest symbol if the current input matches it - if (answerField.text.ToLower() == activeWords[0]) { - int difference = Math.Abs((int) (activeSymbols[0].transform.position.x - hitZone.transform.position.x)); + if (matchedSymbolIndex >= 0) { + int difference = Math.Abs((int) (activeSymbols[matchedSymbolIndex].transform.position.x - hitZone.transform.position.x)); + Debug.Log("HERE"); if (difference < perfectBoundary) { feedBack.text = "Perfect!"; score += perfectScore; @@ -170,14 +180,16 @@ public class JustSignController : MonoBehaviour score += terribleScore; } - DestroyRightmostSymbol(); + DestroySymbolAt(matchedSymbolIndex); answerField.text = ""; } // Destroy the oldest symbol if it leaves the screen - if (activeSymbols[0].GetComponent().localPosition.x > -trackX) { - DestroyRightmostSymbol(); - score += offscreenScore; + if (activeSymbols.Count > 0) { + if (activeSymbols[0].GetComponent().localPosition.x > -trackX) { + DestroySymbolAt(0); + score += offscreenScore; + } } // Spawn new symbol every spawn period @@ -197,12 +209,13 @@ public class JustSignController : MonoBehaviour } /// - /// Destroy the oldest symbol on the track + /// Destroy the symbol at the given index /// - void DestroyRightmostSymbol() { - activeWords.RemoveAt(0); - GameObject symbol = activeSymbols[0]; - activeSymbols.RemoveAt(0); + /// The index of the symbol to destroy + void DestroySymbolAt(int index) { + activeWords.RemoveAt(index); + GameObject symbol = activeSymbols[index]; + activeSymbols.RemoveAt(index); Destroy(symbol); } @@ -233,21 +246,106 @@ public class JustSignController : MonoBehaviour /// Create a new symbol at the start of the track /// void SpawnNewSymbol() { - string nextSymbol = words[UnityEngine.Random.Range(0, words.Length)]; + List unusedWordIndices = new List(); + + for (int i = 0; i < words.Length; i++) { + if (!activeWords.Contains(words[i])) { + unusedWordIndices.Add(i); + } + } + + string nextSymbol = words[unusedWordIndices[UnityEngine.Random.Range(0, unusedWordIndices.Count)]]; GameObject newSymbolObject = new GameObject("Symbol"); - Image newImage = newSymbolObject.AddComponent(); - RectTransform rectTransform = newSymbolObject.GetComponent(); + + RectTransform rectTransform = newSymbolObject.AddComponent(); + + // Add the Image component as a child of the RectTransform + Image image = new GameObject("Image").AddComponent(); + image.transform.SetParent(rectTransform); + + // Add the Text component as a child of the RectTransform + Text text = new GameObject("Text").AddComponent(); + text.transform.SetParent(rectTransform); + + // Set the font size of the text component + text.fontSize = 100; + text.text = "AAAAAAA"; + text.color = Color.white; + rectTransform.SetParent(canvas.transform, false); // Set the parent to the Canvas rectTransform.localPosition = new Vector3(trackX, trackY, 0); - rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize); + rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize + 200f); Sprite sprite = Resources.Load("Common/Images/" + nextSymbol); + image.sprite = sprite; + image.rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize); - // Set the new sprite as the Image component's source image - newImage.sprite = sprite; + // Set the position and size of the RectTransform of the text component to match the RectTransform of the image component + text.rectTransform.localPosition = new Vector3(0, -50, 0); + text.rectTransform.sizeDelta = rectTransform.sizeDelta; + activeWords.Add(nextSymbol); activeSymbols.Add(newSymbolObject); } + + /* + GameObject newSymbolObject = new GameObject("Symbol"); + Image image = newSymbolObject.AddComponent(); + Sprite sprite = Resources.Load("Common/Images/" + nextSymbol); + image.sprite = sprite; + //Text text = newSymbolObject.AddComponent(); + //text.text = "METTN"; + RectTransform rectTransform = newSymbolObject.GetComponent(); + rectTransform.SetParent(canvas.transform, false); // Set the parent to the Canvas + rectTransform.localPosition = new Vector3(trackX, trackY, 0); + rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize); + */ + + + /* + GameObject newSymbolObject = new GameObject("Symbol"); + Image newImage = newSymbolObject.AddComponent(); + Text text = newSymbolObject.AddComponent(); + RectTransform rectTransform = newSymbolObject.GetComponent(); + rectTransform.SetParent(canvas.transform, false); // Set the parent to the Canvas + rectTransform.localPosition = new Vector3(trackX, trackY, 0); + rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize); + */ + + /* + GameObject newSymbolObject = new GameObject("Symbol"); + + RectTransform rectTransform = newSymbolObject.AddComponent(); + + // Add the Image component as a child of the RectTransform + Image image = new GameObject("Image").AddComponent(); + image.transform.SetParent(rectTransform); + + // Add the Text component as a child of the RectTransform + Text text = new GameObject("Text").AddComponent(); + text.transform.SetParent(rectTransform); + + // Set the font size of the text component + text.fontSize = 30; + text.text = "AAAAAAA"; + text.color = Color.black; + + Sprite sprite = Resources.Load("Common/Images/" + nextSymbol); + + + + rectTransform.SetParent(canvas.transform, false); // Set the parent to the Canvas + rectTransform.localPosition = new Vector3(trackX, trackY, 0); + rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize + 200f); + + Sprite sprite = Resources.Load("Common/Images/" + nextSymbol); + image.sprite = sprite; + image.rectTransform.sizeDelta = new Vector2(symbolSize, symbolSize); + + // Set the position and size of the RectTransform of the text component to match the RectTransform of the image component + text.rectTransform.localPosition = new Vector3(0, -50, 0); + text.rectTransform.sizeDelta = rectTransform.sizeDelta; + */ } diff --git a/Assets/JustSign/Scripts/JustSignWebcam.cs b/Assets/JustSign/Scripts/JustSignWebcam.cs new file mode 100644 index 0000000..54df1ea --- /dev/null +++ b/Assets/JustSign/Scripts/JustSignWebcam.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using UnityEngine.UI; + +/// +/// Class to manage all webcam stuff inside the SpellingBee minigame +/// +public class JustSignWebcam : MonoBehaviour +{ + /// + /// Index of the current camera + /// + int camdex = 0; + + /// + /// Texture to paste on the display + /// + WebCamTexture tex; + + /// + /// Display for the video feed + /// + public RawImage display; + + /// + /// Setup the webcam correctly + /// + void Awake() + { + WebCamDevice device = WebCamTexture.devices[camdex]; + tex = new WebCamTexture(device.name); + display.texture = tex; + + tex.Play(); + } + + /// + /// Swap webcam by cycling through the `WebCamTexture.devices` list + /// + public void SwapCam() + { + if (WebCamTexture.devices.Length > 0) + { + // Stop the old camera + display.texture = null; + tex.Stop(); + tex = null; + + // Find the new camera + camdex += 1; + camdex %= WebCamTexture.devices.Length; + + // Start the new camera + WebCamDevice device = WebCamTexture.devices[camdex]; + tex = new WebCamTexture(device.name); + display.texture = tex; + + tex.Play(); + } + } + + /// + /// Scene changing is implemented here to avoid problems with webcam + /// + public void GotoThemeSelection() + { + display.texture = null; + tex.Stop(); + tex = null; + + SystemController.GetInstance().BackToPreviousScene(); + } +} diff --git a/Assets/JustSign/Scripts/JustSignWebcam.cs.meta b/Assets/JustSign/Scripts/JustSignWebcam.cs.meta new file mode 100644 index 0000000..bd47cff --- /dev/null +++ b/Assets/JustSign/Scripts/JustSignWebcam.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9291edb7593521fbb7e0a486724fd3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: