From 1f55a68b1735d0fd20bb62a8f11f65b656bec1e8 Mon Sep 17 00:00:00 2001 From: Maximilian Wagner Date: Sun, 11 Jun 2023 23:31:54 +0200 Subject: [PATCH] Neues DimShift Skript welches Block-Zonen haben kann --- .../AssetsFORELLE/Script/DimShiftBlockable.cs | 60 +++++++++++++++++++ .../Script/DimShiftBlockable.cs.meta | 3 + 2 files changed, 63 insertions(+) create mode 100644 Assets/AssetsFORELLE/Script/DimShiftBlockable.cs create mode 100644 Assets/AssetsFORELLE/Script/DimShiftBlockable.cs.meta diff --git a/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs b/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs new file mode 100644 index 0000000..f668895 --- /dev/null +++ b/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using UnityEngine; + +// Kann sein das das nur für statische Objekte funktioniert +public class DimShiftBlockable : MonoBehaviour +{ + private GameObject dim1; + private GameObject dim2; + + private LinkedList collisions = new LinkedList(); + + void Start() + { + dim1 = GameObject.Find("Dim1"); + dim2 = GameObject.Find("Dim2"); + + dim1.SetActive(true); + dim2.SetActive(false); + } + + void Update() + { + if (Input.GetKeyDown(KeyCode.LeftShift) && CanSwitchDims()) + { // CanSwitchDims ist rel. "teuer", wird aber nur ausgeführt wenn die erste condition true ergibt + ChangeDim(); + } + } + + bool CanSwitchDims() + { + // eine "günstigere" methode ist mir nicht eingefallen + // sollte aber in betracht der länge der liste kein problem sein + foreach (var collision in collisions) + { + if (collision.tag.Equals("DimShiftBlocker")) { return false; } + } + + // falls kein dimension shift blocker unter den kollisionen ist, dann yallah abfahrt + return true; + } + + void ChangeDim() + { + // invertiert den aktuellen active state der dimensionen + // spart die ganzen if statements + dim1.SetActive(!dim1.activeSelf); + dim2.SetActive(!dim2.activeSelf); + } + + private void OnTriggerEnter2D(Collider2D other) + { + // addFirst weil on exit die verlassene collision im average case schneller gefunden wird + collisions.AddFirst(other.gameObject); + } + + private void OnTriggerExit2D(Collider2D other) + { + collisions.Remove(other.gameObject); + } +} diff --git a/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs.meta b/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs.meta new file mode 100644 index 0000000..0876600 --- /dev/null +++ b/Assets/AssetsFORELLE/Script/DimShiftBlockable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7f029a553bbe434cac37e668d41d7ea9 +timeCreated: 1686511019 \ No newline at end of file