From 9bdf434a10d38f0fc9958c541bf9a76c01de79d5 Mon Sep 17 00:00:00 2001 From: Joshua Reason Date: Sun, 31 Jan 2021 15:26:57 +1100 Subject: [PATCH] Working Credits --- Assets/Scenes/CreditScreen.unity | 3 + Assets/Scenes/CreditScreen.unity.meta | 7 + Assets/Scenes/PlayerJoinScene.unity | 4 +- Assets/Scripts/Player Scripts/PlayerData.cs | 3 + Assets/Scripts/Player Scripts/PlayerList.cs | 4 + Assets/Scripts/UI/CreditScreen.meta | 8 ++ .../UI/CreditScreen/CreditUIController.cs | 133 ++++++++++++++++++ .../CreditScreen/CreditUIController.cs.meta | 11 ++ .../Scripts/UI/StartScreen/PlayerJoinIcon.cs | 9 ++ .../LiberationSans SDF - Outline.mat | 7 +- Assets/World Assets/Materials/Score_Text.mat | 125 ++++++++++++++++ .../Materials/Score_Text.mat.meta | 8 ++ ProjectSettings/EditorBuildSettings.asset | 4 +- 13 files changed, 319 insertions(+), 7 deletions(-) create mode 100644 Assets/Scenes/CreditScreen.unity create mode 100644 Assets/Scenes/CreditScreen.unity.meta create mode 100644 Assets/Scripts/UI/CreditScreen.meta create mode 100644 Assets/Scripts/UI/CreditScreen/CreditUIController.cs create mode 100644 Assets/Scripts/UI/CreditScreen/CreditUIController.cs.meta create mode 100644 Assets/World Assets/Materials/Score_Text.mat create mode 100644 Assets/World Assets/Materials/Score_Text.mat.meta diff --git a/Assets/Scenes/CreditScreen.unity b/Assets/Scenes/CreditScreen.unity new file mode 100644 index 0000000..9547f94 --- /dev/null +++ b/Assets/Scenes/CreditScreen.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45cbb35f73bef260e35c7801bca1014fc73152ebf848d768c861f34392e8c4ae +size 43062 diff --git a/Assets/Scenes/CreditScreen.unity.meta b/Assets/Scenes/CreditScreen.unity.meta new file mode 100644 index 0000000..11dba3d --- /dev/null +++ b/Assets/Scenes/CreditScreen.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a85bd4296d5a1684fa42dc31c88b08d4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/PlayerJoinScene.unity b/Assets/Scenes/PlayerJoinScene.unity index d5da38f..c6718f0 100644 --- a/Assets/Scenes/PlayerJoinScene.unity +++ b/Assets/Scenes/PlayerJoinScene.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bbf138ceeb4fa2cf0afbe0709f0cd128e6f2199a5e6e909864e15c6ffec0a46 -size 40588 +oid sha256:253030a0b0592237197a0b0a2ca583ad5935a8a545a476cbd3d2aaa3d6931f9e +size 40672 diff --git a/Assets/Scripts/Player Scripts/PlayerData.cs b/Assets/Scripts/Player Scripts/PlayerData.cs index 58c6dc8..9418449 100644 --- a/Assets/Scripts/Player Scripts/PlayerData.cs +++ b/Assets/Scripts/Player Scripts/PlayerData.cs @@ -10,6 +10,9 @@ public class PlayerData : ScriptableObject public uint ID { get; private set; } public Color Color { get; private set; } + + public int Score; + public UnityEngine.InputSystem.PlayerInput Input { get; private set; } public static PlayerData Initialise(uint ID, Color color, UnityEngine.InputSystem.PlayerInput input) diff --git a/Assets/Scripts/Player Scripts/PlayerList.cs b/Assets/Scripts/Player Scripts/PlayerList.cs index 388544b..3abf563 100644 --- a/Assets/Scripts/Player Scripts/PlayerList.cs +++ b/Assets/Scripts/Player Scripts/PlayerList.cs @@ -30,10 +30,14 @@ public class PlayerList : ScriptableObject PlayerData data = PlayerData.Initialise(ID, color, input); + data.Score = Random.Range(2, 10); + Players.Add(input, data); OnPlayerJoin?.Invoke(this,data); + + return data; } diff --git a/Assets/Scripts/UI/CreditScreen.meta b/Assets/Scripts/UI/CreditScreen.meta new file mode 100644 index 0000000..0ce3ce3 --- /dev/null +++ b/Assets/Scripts/UI/CreditScreen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0d43d896ffeafd41a94c6952b8193e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/CreditScreen/CreditUIController.cs b/Assets/Scripts/UI/CreditScreen/CreditUIController.cs new file mode 100644 index 0000000..621c822 --- /dev/null +++ b/Assets/Scripts/UI/CreditScreen/CreditUIController.cs @@ -0,0 +1,133 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class CreditUIController : MonoBehaviour +{ + + [SerializeField] + private PlayerList m_allPlayers; + + [SerializeField] + private GameObject m_playerPrefab; + + [SerializeField] + private RectTransform winnerPos; + [SerializeField] + private RectTransform losePos; + + [SerializeField] + private float waitTime = 1; + + [SerializeField] + private float creditDisplayTime = 1; + + [SerializeField] + public List m_CreditReferences; + + [SerializeField] + public List m_Credits; + + private int Count; + + + private void Start() + { + StartCoroutine(DisplaySlow(waitTime)); + StartCoroutine(DisplayCredits(creditDisplayTime)); + } + + [ContextMenu("display All players")] + private void DisplayAllPlayers() + { + int max = m_allPlayers.AllPlayers.Select(p => p.Score).Max(); + int min = m_allPlayers.AllPlayers.Select(p => p.Score).Min(); + + foreach (var data in m_allPlayers.AllPlayers) + { + DisplayScore(data, max, min); + } + } + + + private IEnumerator DisplaySlow(float timebetween = 1) + { + int max = m_allPlayers.AllPlayers.Select(p => p.Score).Max(); + int min = m_allPlayers.AllPlayers.Select(p => p.Score).Min(); + + foreach (var data in m_allPlayers.AllPlayers.OrderBy(p => p.Score)) + { + yield return new WaitForSeconds(timebetween); + DisplayScore(data, max, min); + } + } + + private IEnumerator DisplayCredits(float displayTime) + { + + float totalTime = displayTime / m_CreditReferences.Count; + + + while (true) + { + CreditReferences reference = m_CreditReferences[Count%m_CreditReferences.Count]; + CreditData data = m_Credits[Count % m_Credits.Count]; + Count++; + + reference.Title.text = data.Title; + reference.Credit.text = data.Credit; + + yield return new WaitForSeconds(totalTime); + } + } + + + private void DisplayScore(PlayerData player, int maxScore, int minScore) + { + + player.Input.SwitchCurrentActionMap("JoinMenu"); + + float ratio = 0.5f; + if (maxScore != minScore) + ratio = (float)(player.Score - minScore) / (maxScore - minScore); + + Vector3 pos = Vector3.Lerp(losePos.position, winnerPos.position, ratio); + pos.x = Random.Range((Screen.width / 4f), Screen.width); + + GameObject newPlayer = Instantiate(m_playerPrefab); + newPlayer.transform.parent = (m_playerPrefab.transform.parent); + + newPlayer.transform.position = pos; + newPlayer.transform.Rotate(Vector3.forward, Random.Range(-20.0f, 20.0f)); + + if (Random.Range(0, 2) > 0) + { + newPlayer.transform.localScale.Scale(new Vector3(-1, 1, 1)); + newPlayer.GetComponentInChildren().transform.localScale.Scale(new Vector3(-1, 1, 1)); + } + + + + newPlayer.GetComponent().Initialise(player); + newPlayer.GetComponentInChildren().text = player.Score.ToString(); + + newPlayer.SetActive(true); + } + + [System.Serializable] + public struct CreditReferences + { + public TMPro.TextMeshProUGUI Title; + public TMPro.TextMeshProUGUI Credit; + } + + + [System.Serializable] + public struct CreditData + { + public string Title; + public string Credit; + } + +} diff --git a/Assets/Scripts/UI/CreditScreen/CreditUIController.cs.meta b/Assets/Scripts/UI/CreditScreen/CreditUIController.cs.meta new file mode 100644 index 0000000..08000d0 --- /dev/null +++ b/Assets/Scripts/UI/CreditScreen/CreditUIController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc723bcaa734e8646a99f2415e540ff0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/StartScreen/PlayerJoinIcon.cs b/Assets/Scripts/UI/StartScreen/PlayerJoinIcon.cs index b4dcf67..e004bba 100644 --- a/Assets/Scripts/UI/StartScreen/PlayerJoinIcon.cs +++ b/Assets/Scripts/UI/StartScreen/PlayerJoinIcon.cs @@ -27,6 +27,15 @@ public class PlayerJoinIcon : MonoBehaviour } + private void OnDisable() + { + if (m_data != null) + { + m_data.Input.currentActionMap.FindAction("Ping").started -= OnPlayerPing; + m_data.Input.currentActionMap.FindAction("Ping").canceled -= OnPlayerPing; + } + } + public void Initialise(PlayerData data) { Debug.Log("Initialised new Player"); diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat index cca8ce8..33b7221 100644 --- a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat @@ -32,8 +32,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, - type: 2} + m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineTex: @@ -50,6 +49,7 @@ Material: - _BumpFace: 0 - _BumpOutline: 0 - _ColorMask: 15 + - _CullMode: 0 - _Diffuse: 0.5 - _FaceDilate: 0.1 - _FaceUVSpeedX: 0 @@ -65,7 +65,7 @@ Material: - _OutlineSoftness: 0 - _OutlineUVSpeedX: 0 - _OutlineUVSpeedY: 0 - - _OutlineWidth: 0.1 + - _OutlineWidth: 0.343 - _PerspectiveFilter: 0.875 - _Reflectivity: 10 - _ScaleRatioA: 0.9 @@ -102,3 +102,4 @@ Material: - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/World Assets/Materials/Score_Text.mat b/Assets/World Assets/Materials/Score_Text.mat new file mode 100644 index 0000000..fc445c1 --- /dev/null +++ b/Assets/World Assets/Materials/Score_Text.mat @@ -0,0 +1,125 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Score_Text + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cull: 2 + - _CullMode: 0 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _FaceDilate: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _GradientScale: 5 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _OutlineSoftness: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _Surface: 0 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.5 + - _WeightNormal: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] +--- !u!114 &3715928537810302973 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 diff --git a/Assets/World Assets/Materials/Score_Text.mat.meta b/Assets/World Assets/Materials/Score_Text.mat.meta new file mode 100644 index 0000000..c434a24 --- /dev/null +++ b/Assets/World Assets/Materials/Score_Text.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a67ea2466379b44f913e57a770b8d35 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 2676c4a..b3cfec0 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edd4fcab3ab45f6bd4bbc4193ce3e12e36123e183ac011a15afb24b3f70433e5 -size 569 +oid sha256:0a68e17c72ce703e0218008d0b23a6efad1cd6c5705c84197ce94a0f88f1022f +size 670