diff --git a/game/Assets/Data/Variables/Safe Time.asset b/game/Assets/Data/Variables/Safe Time.asset new file mode 100644 index 0000000..03c1800 --- /dev/null +++ b/game/Assets/Data/Variables/Safe Time.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 76553ada4233edc458c3fed9b69e128f, type: 3} + m_Name: Safe Time + m_EditorClassIdentifier: + _initialValue: 0 + _readOnly: 0 diff --git a/game/Assets/Data/Variables/Safe Time.asset.meta b/game/Assets/Data/Variables/Safe Time.asset.meta new file mode 100644 index 0000000..3d5d0f8 --- /dev/null +++ b/game/Assets/Data/Variables/Safe Time.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 27c10a061baeec8469e96d4f995c1445 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Traps/FallawayFloor.prefab b/game/Assets/Prefabs/Traps/FallawayFloor.prefab index 00d2b5e..c03f951 100644 --- a/game/Assets/Prefabs/Traps/FallawayFloor.prefab +++ b/game/Assets/Prefabs/Traps/FallawayFloor.prefab @@ -84,9 +84,9 @@ MonoBehaviour: m_EditorClassIdentifier: speed: 10 fallAwayTime: 1 - destroyObjectTime: 0 dissolve: {fileID: 2100000, guid: 98767dd77414bad44b23ef5332c1d8f1, type: 2} _renderer: {fileID: 6378198502367496824} + _settings: {fileID: 11400000, guid: 36275776eda5c8249bf45e01721afe36, type: 2} --- !u!54 &980120856895548943 Rigidbody: m_ObjectHideFlags: 0 diff --git a/game/Assets/Prefabs/Zones/Safe Zone.prefab b/game/Assets/Prefabs/Zones/Safe Zone.prefab index 0ea0ce1..587f109 100644 --- a/game/Assets/Prefabs/Zones/Safe Zone.prefab +++ b/game/Assets/Prefabs/Zones/Safe Zone.prefab @@ -124,3 +124,4 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _respawnPosition: {fileID: 11400000, guid: 20fad56702134eb469a652ba680b48b2, type: 2} + _safeTime: {fileID: 11400000, guid: 27c10a061baeec8469e96d4f995c1445, type: 2} diff --git a/game/Assets/Scripts/Checkpoint/SafeZone.cs b/game/Assets/Scripts/Checkpoint/SafeZone.cs index a83e92d..cb35084 100644 --- a/game/Assets/Scripts/Checkpoint/SafeZone.cs +++ b/game/Assets/Scripts/Checkpoint/SafeZone.cs @@ -8,13 +8,37 @@ using Ktyl.Util; public class SafeZone : MonoBehaviour { [SerializeField] private SerialVector3 _respawnPosition; + [SerializeField] private SerialFloat _safeTime; + + private const string PLAYER = "Player"; + + private void OnTriggerEnter(Collider other) + { + if (other.gameObject.CompareTag(PLAYER)) + { + // start counting safe time when we enter a safe zone + _safeTime.Value = 0; + } + } private void OnTriggerStay(Collider other) { // Check if other game object is Player. - if (other.gameObject.CompareTag("Player")) + if (other.gameObject.CompareTag(PLAYER)) { _respawnPosition.Value = other.gameObject.transform.position; + + // TODO: does this have implications for the time freeze ability? + _safeTime.Value += Time.deltaTime; + } + } + + private void OnTriggerExit(Collider other) + { + if (other.gameObject.CompareTag(PLAYER)) + { + // reset safe time when we leave safe zone + _safeTime.Value = -1; } } } \ No newline at end of file diff --git a/game/Assets/Scripts/Traps/FallawayFloor.cs b/game/Assets/Scripts/Traps/FallawayFloor.cs index cdd83a6..dc8221a 100644 --- a/game/Assets/Scripts/Traps/FallawayFloor.cs +++ b/game/Assets/Scripts/Traps/FallawayFloor.cs @@ -1,7 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; -using UnityEditor; +using Ktyl.Util; using UnityEngine; [RequireComponent(typeof(Rigidbody))] @@ -14,9 +14,11 @@ public class FallawayFloor : MonoBehaviour public Material dissolve; [SerializeField] private Renderer _renderer; + [SerializeField] private TrapSettings _settings; private Rigidbody rb; private Vector3 initialPosition; + private bool _triggered = false; private void Start() { @@ -26,18 +28,30 @@ public class FallawayFloor : MonoBehaviour rb = GetComponent(); } + private void LateUpdate() + { + if (!_triggered) return; + + if (_settings.FallawayFloor.CanRespawn) + { + Reset(); + } + } + private void OnTriggerEnter(Collider other) { - if (other.CompareTag("Player")) + if (!_triggered && other.CompareTag("Player")) { - // Start the Destroy floor coroutine and switch to the dissolve material. StartCoroutine(Fall()); - _renderer.material = dissolve; } } private IEnumerator Fall() { + // TODO: trigger shake, maybe particle effect? + + _triggered = true; + // wait a moment yield return new WaitForSeconds(fallAwayTime); @@ -47,6 +61,7 @@ public class FallawayFloor : MonoBehaviour public void Reset() { + _triggered = false; transform.position = initialPosition; rb.velocity = Vector3.zero; } diff --git a/game/Assets/Scripts/Traps/TrapSettings.cs b/game/Assets/Scripts/Traps/TrapSettings.cs new file mode 100644 index 0000000..f004873 --- /dev/null +++ b/game/Assets/Scripts/Traps/TrapSettings.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Ktyl.Util; +using UnityEngine; + +[CreateAssetMenu(menuName = "KernelPanic/Traps/Settings")] +public class TrapSettings : ScriptableObject +{ + [Serializable] + public struct FallawayFloorSettings + { + // how long it takes for falling platforms to respawn while the player is safe + [SerializeField] private SerialFloat _respawnTime; + // how long the player has currently been safe for. -1 while the player is not + // in a safe zone + [SerializeField] private SerialFloat _safeTime; + + public bool CanRespawn => _safeTime > _respawnTime; + } + public FallawayFloorSettings FallawayFloor => _fallawayFloor; + [SerializeField] private FallawayFloorSettings _fallawayFloor; +} diff --git a/game/Assets/Scripts/Traps/TrapSettings.cs.meta b/game/Assets/Scripts/Traps/TrapSettings.cs.meta new file mode 100644 index 0000000..bfed198 --- /dev/null +++ b/game/Assets/Scripts/Traps/TrapSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93dc605253d04fe45a05492fb3feacc2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Settings/Traps.meta b/game/Assets/Settings/Traps.meta new file mode 100644 index 0000000..e9be7a7 --- /dev/null +++ b/game/Assets/Settings/Traps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 773d36b78cd573445ad9932b0894fd99 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset b/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset new file mode 100644 index 0000000..41aaadb --- /dev/null +++ b/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 76553ada4233edc458c3fed9b69e128f, type: 3} + m_Name: Fallaway Floor Respawn Time + m_EditorClassIdentifier: + _initialValue: 5 + _readOnly: 1 diff --git a/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset.meta b/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset.meta new file mode 100644 index 0000000..0646523 --- /dev/null +++ b/game/Assets/Settings/Traps/Fallaway Floor Respawn Time.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d2951ab5083d4d48a319ff00a9eb8bd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Settings/Traps/Trap Settings.asset b/game/Assets/Settings/Traps/Trap Settings.asset new file mode 100644 index 0000000..e5f6969 --- /dev/null +++ b/game/Assets/Settings/Traps/Trap Settings.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 93dc605253d04fe45a05492fb3feacc2, type: 3} + m_Name: Trap Settings + m_EditorClassIdentifier: + _fallawayFloor: + _respawnTime: {fileID: 11400000, guid: 1d2951ab5083d4d48a319ff00a9eb8bd, type: 2} + _safeTime: {fileID: 11400000, guid: 27c10a061baeec8469e96d4f995c1445, type: 2} diff --git a/game/Assets/Settings/Traps/Trap Settings.asset.meta b/game/Assets/Settings/Traps/Trap Settings.asset.meta new file mode 100644 index 0000000..0bc0aca --- /dev/null +++ b/game/Assets/Settings/Traps/Trap Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36275776eda5c8249bf45e01721afe36 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: