diff --git a/3d Prototyp/Assets/Scripts/ValueStack.cs b/3d Prototyp/Assets/Scripts/ValueStack.cs
new file mode 100644
index 00000000..bde1241f
--- /dev/null
+++ b/3d Prototyp/Assets/Scripts/ValueStack.cs
@@ -0,0 +1,54 @@
+using System.Collections.Generic;
+
+///
+/// Ermöglicht das erstellen einer Variable mit gestapeltem Wert, sodass überschreiben und zurücksetzen möglich ist.
+///
+public class ValueStack : Stack
+{
+ ///
+ /// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem Standardwert.
+ ///
+ public ValueStack()
+ {
+ Push(default);
+ }
+
+ ///
+ /// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem gegebenen Wert.
+ ///
+ /// Der Wert, mit dem der Stack initialisiert werden soll.
+ public ValueStack(T initialValue)
+ {
+ Push(initialValue);
+ }
+
+ ///
+ /// Setzt den Wert des Stacks auf den gegebenen Wert.
+ ///
+ /// Der Wert, auf den der Stack gesetzt werden soll.
+ /// Der gegebene Wert um Verkettung von Expression zu ermöglichen.
+ public new T Push(T value)
+ {
+ base.Push(value);
+
+ return value;
+ }
+
+ ///
+ /// Popt den obersten Wert des Stacks, wenn der Stack nur noch einen Wert enthält, wird nicht gepopt und dieser zurückgegeben.
+ ///
+ public new T Pop()
+ {
+ if (Count == 1)
+ return Peek();
+
+ return base.Pop();
+ }
+
+ ///
+ /// Gibt den aktuellen Wert des ValueStacks zurück.
+ ///
+ public T CurrentValue() => Peek();
+
+ public static implicit operator T(ValueStack stack) => stack.CurrentValue();
+}
\ No newline at end of file
diff --git a/3d Prototyp/Assets/Scripts/ValueStack.cs.meta b/3d Prototyp/Assets/Scripts/ValueStack.cs.meta
new file mode 100644
index 00000000..958a0c55
--- /dev/null
+++ b/3d Prototyp/Assets/Scripts/ValueStack.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c7221cc10b464cef9d2e892b110099d5
+timeCreated: 1712243859
\ No newline at end of file