From 6528d1050f623f26b43c94c9472055186d678d23 Mon Sep 17 00:00:00 2001 From: RochesterX Date: Fri, 7 Mar 2025 10:03:16 -0500 Subject: [PATCH] Make lives work --- Assets/EventSystemizer.cs | 10 +++++++++ Assets/EventSystemizer.cs.meta | 2 ++ Assets/Prefabs/Healthbar.prefab | 30 +++++++++++-------------- Assets/Scenes/Title Screen.unity | 13 +++++++++++ Assets/Scripts/Damageable.cs | 23 ++++++++++++++----- Assets/Scripts/GameManager.cs | 29 +++++++++++++++++++----- Assets/Scripts/HealthBarManager.cs | 10 ++++----- Assets/Scripts/PlayerCameraMovement.cs | 20 +++++++++++++++++ Assets/Scripts/RespawnOnTriggerEnter.cs | 6 ++++- 9 files changed, 108 insertions(+), 35 deletions(-) create mode 100644 Assets/EventSystemizer.cs create mode 100644 Assets/EventSystemizer.cs.meta diff --git a/Assets/EventSystemizer.cs b/Assets/EventSystemizer.cs new file mode 100644 index 0000000..0fcfb86 --- /dev/null +++ b/Assets/EventSystemizer.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +public class EventSystemizer : MonoBehaviour +{ + private void Update() + { + //foreach (EventSystem system in FindObjectsByType(FindObjectsSortMode.None)) + } +} diff --git a/Assets/EventSystemizer.cs.meta b/Assets/EventSystemizer.cs.meta new file mode 100644 index 0000000..506f7f0 --- /dev/null +++ b/Assets/EventSystemizer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 305a0eb0ddc9f88438e978efa8dd6f69 \ No newline at end of file diff --git a/Assets/Prefabs/Healthbar.prefab b/Assets/Prefabs/Healthbar.prefab index 0e2147a..78166de 100644 --- a/Assets/Prefabs/Healthbar.prefab +++ b/Assets/Prefabs/Healthbar.prefab @@ -26,8 +26,8 @@ Transform: m_GameObject: {fileID: 210773656378718008} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.566, z: 0} - m_LocalScale: {x: 1, y: 0.2075, z: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.95357, y: 0.16300578, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 210773657359985456} @@ -113,8 +113,8 @@ Transform: m_GameObject: {fileID: 210773656934484425} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.566, z: 0} - m_LocalScale: {x: 1, y: 0.2075, z: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.95357, y: 0.16300578, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 210773657359985456} @@ -191,13 +191,14 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &210773657359985456 -RectTransform: +--- !u!4 &210773657359985456 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 210773657359985459} + serializedVersion: 2 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} @@ -210,11 +211,6 @@ RectTransform: - {fileID: 210773657761048651} m_Father: {fileID: 0} 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: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &7422290698914274434 MonoBehaviour: m_ObjectHideFlags: 0 @@ -233,7 +229,7 @@ MonoBehaviour: healthVisual: {fileID: 210773656934484425} actualHealthVisual: {fileID: 904379579236604940} deathVisual: {fileID: 210773656378718008} - smoothSpeed: 0.1 + smoothSpeed: 0.05 text: {fileID: 210773657480500664} player: {fileID: 0} --- !u!1 &210773657480500666 @@ -253,7 +249,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &210773657480500667 RectTransform: m_ObjectHideFlags: 0 @@ -398,7 +394,7 @@ Transform: m_GameObject: {fileID: 210773657645469774} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.566, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1.0231425, y: 0.22951573, z: 1.1061} m_ConstrainProportionsScale: 0 m_Children: [] @@ -477,7 +473,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &210773657761048651 RectTransform: m_ObjectHideFlags: 0 @@ -587,8 +583,8 @@ Transform: m_GameObject: {fileID: 904379579236604940} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.566, z: 0} - m_LocalScale: {x: 1, y: 0.2075, z: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.95357, y: 0.16300578, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 210773657359985456} diff --git a/Assets/Scenes/Title Screen.unity b/Assets/Scenes/Title Screen.unity index fe7bf28..c24214e 100644 --- a/Assets/Scenes/Title Screen.unity +++ b/Assets/Scenes/Title Screen.unity @@ -650,6 +650,7 @@ GameObject: - component: {fileID: 241118428} - component: {fileID: 241118427} - component: {fileID: 241118426} + - component: {fileID: 241118429} m_Layer: 0 m_Name: EventSystem m_TagString: Untagged @@ -718,6 +719,18 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &241118429 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241118425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 305a0eb0ddc9f88438e978efa8dd6f69, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &330396139 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Damageable.cs b/Assets/Scripts/Damageable.cs index 9098c7f..e0ab628 100644 --- a/Assets/Scripts/Damageable.cs +++ b/Assets/Scripts/Damageable.cs @@ -10,12 +10,13 @@ public class Damageable : MonoBehaviour public float force = 50f; public float damage = 0f; public float maxDamage = 1000f; - private GameManager gameManager; + public int lives = 3; + //private GameManager gameManager; private Animator animator; private void Start() { - gameManager = GameManager.Instance; + //gameManager = GameManager.Instance; animator = GetComponent(); } @@ -57,6 +58,15 @@ public class Damageable : MonoBehaviour } } + public void Damage(float damage) + { + this.damage += damage; + if (damage >= maxDamage) + { + Die(); + } + } + private void SuccessfulParry(GameObject damageSource, float force) { GetComponent().AddForce(((transform.position - damageSource.transform.position).normalized + Vector3.up * 2) * force, ForceMode2D.Force); @@ -70,8 +80,8 @@ public class Damageable : MonoBehaviour private void Die() { - Debug.Log($"{name}: MAKE THIS WORK."); - if (gameManager != null) + //Debug.Log($"{name}: MAKE THIS WORK."); + if (GameManager.Instance != null) { animator.SetTrigger("Die"); StartCoroutine(HandleDeath()); @@ -80,8 +90,9 @@ public class Damageable : MonoBehaviour private IEnumerator HandleDeath() { - yield return new WaitForSeconds(animator.GetCurrentAnimatorStateInfo(0).length); - gameManager.PlayerDied(gameObject); + //yield return new WaitForSeconds(animator.GetCurrentAnimatorStateInfo(0).length); + yield return new WaitForSeconds(0.5f); + GameManager.Instance.PlayerDied(this); } public void Respawn() diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 9f115c3..fcc2970 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -69,18 +69,18 @@ public class GameManager : MonoBehaviour public static string map = "Platformer With Headroom"; // loads a default map as a safety net public Vector2 spawnPosition; - public void PlayerDied(GameObject player) + public void PlayerDied(Damageable player) { if (gameMode == GameMode.freeForAll) { - currentLives--; - if (currentLives <= 0) + player.lives--; + if (player.lives <= 0) { - GameOver(player); + GameOver(player.gameObject); } else { - RespawnPlayer(player); + RespawnPlayer(player.gameObject); } } if (gameMode == GameMode.keepAway) @@ -100,6 +100,7 @@ public class GameManager : MonoBehaviour { player.transform.position = respawnScript.spawnPoint; player.GetComponent().ResetDamage(); + player.GetComponent().Respawn(); } } @@ -107,6 +108,22 @@ public class GameManager : MonoBehaviour { // Add game over screen player.SetActive(false); - EndGameEvent?.Invoke(); + if (AlivePlayers().Count <= 1) + { + EndGameEvent?.Invoke(); + print(AlivePlayers()[0].name + " is the winner"); + } + } + + private List AlivePlayers() + { + List alivePlayers = new(); + + foreach (GameObject player in players) + { + if (player.activeInHierarchy) alivePlayers.Add(player); + } + + return alivePlayers; } } diff --git a/Assets/Scripts/HealthBarManager.cs b/Assets/Scripts/HealthBarManager.cs index abf2e04..aa66051 100644 --- a/Assets/Scripts/HealthBarManager.cs +++ b/Assets/Scripts/HealthBarManager.cs @@ -24,11 +24,10 @@ public class HealthBarManager : MonoBehaviour { GameObject player = kvp.Key; GameObject healthBar = kvp.Value; - Vector3 screenPosition = Camera.main.WorldToScreenPoint(player.transform.position); - screenPosition.y += 15; - Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition); - healthBar.transform.position = worldPosition; - healthBar.transform.rotation = Quaternion.identity; + //Vector3 screenPosition = Camera.main.WorldToScreenPoint(player.transform.position); + //screenPosition.y += 15; + //Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition); + healthBar.transform.SetPositionAndRotation(new Vector3(player.transform.position.x, player.transform.position.y + 1.5f, player.transform.position.z), Quaternion.identity); } } @@ -39,6 +38,7 @@ public class HealthBarManager : MonoBehaviour if (!playerHealthBars.ContainsKey(player)) { GameObject healthBar = Instantiate(healthBarPrefab); + healthBar.transform.localScale *= 1.5f; healthBar.GetComponent().SetPlayer(player); playerHealthBars[player] = healthBar; } diff --git a/Assets/Scripts/PlayerCameraMovement.cs b/Assets/Scripts/PlayerCameraMovement.cs index 3cf0222..ed1635c 100644 --- a/Assets/Scripts/PlayerCameraMovement.cs +++ b/Assets/Scripts/PlayerCameraMovement.cs @@ -1,12 +1,17 @@ using System.Collections.Generic; using UnityEngine; +// This won scene thing is just duct taped on for the presentation. + public class PlayerCameraMovement : MonoBehaviour { private Vector3 start; private Vector3 target; public float weight; public float speed; + private GameObject playerThatWon; + + public bool winScene = false; private void Start() { @@ -15,6 +20,15 @@ public class PlayerCameraMovement : MonoBehaviour private void Update() { + if (winScene) + { + if (playerThatWon == null) playerThatWon = GameManager.players[0]; + target = playerThatWon.transform.position; + transform.position = Vector3.Lerp(transform.position, new Vector3(target.x, target.y, target.z - 10), speed * Time.deltaTime); + + return; + } + List players = GameManager.players; if (players.Count == 0) return; @@ -30,4 +44,10 @@ public class PlayerCameraMovement : MonoBehaviour transform.position = Vector3.Lerp(transform.position, new Vector3(target.x, target.y, transform.position.z), speed * Time.deltaTime); transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z); } + + public void WinScene(GameObject player) + { + winScene = true; + playerThatWon = player; + } } diff --git a/Assets/Scripts/RespawnOnTriggerEnter.cs b/Assets/Scripts/RespawnOnTriggerEnter.cs index 5e5f4b9..550f8c3 100644 --- a/Assets/Scripts/RespawnOnTriggerEnter.cs +++ b/Assets/Scripts/RespawnOnTriggerEnter.cs @@ -18,7 +18,11 @@ public class RespawnOnTriggerEnter : MonoBehaviour { if (other.CompareTag(respawnTag)) { - GetComponent().Respawn(); + //GetComponent().Respawn(); + if (TryGetComponent(out Damageable damageable)) + { + damageable.Damage(9999f); + } } } } \ No newline at end of file