first version of EU AI Act game
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
||||||
|
/android/
|
||||||
|
/builds/
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
~ start
|
||||||
|
Alien001: Ich finde es schwierig künstliche Intelligenz zu definieren. Die Menschen sind sich ja nichtmal einig was Intelligenz ist.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://b2h462vvv1arj"
|
||||||
|
path="res://.godot/imported/ai_v1.dialogue-4e78d4db647f84f124dfdb74ad3bd37d.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/ai_v1.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/ai_v1.dialogue-4e78d4db647f84f124dfdb74ad3bd37d.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
~ start
|
||||||
|
Alien002: Künstliche Intelligenz lernt aus großen Datenmengen. Die Ergebnisse sind nicht deterministisch, also es kommt nie genau das gleiche raus, wenn ich einen Algorithmus zweimal lernen lasse.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://c4na70ggougjl"
|
||||||
|
path="res://.godot/imported/ai_v2.dialogue-69c4f034ab6c67e19e7f6a6d84f5f49a.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/ai_v2.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/ai_v2.dialogue-69c4f034ab6c67e19e7f6a6d84f5f49a.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
~ start
|
||||||
|
Alien003: Modelle Künstlicher Intelligenz können komplexe Funktionen über sehr viele Parameter abbilden. Die Parameter werden aus Daten gelernt.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://cn7jvs2bu4nb"
|
||||||
|
path="res://.godot/imported/ai_v3.dialogue-0ae1002d0f08a41f8d1fc8e385eda21c.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/ai_v3.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/ai_v3.dialogue-0ae1002d0f08a41f8d1fc8e385eda21c.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
~ start
|
||||||
|
Alien004: In der Stanford Enzyklopädie für Philosophie steht: Künstliche Intelligenz (KI) ist das Gebiet, das sich mit der Erschaffung künstlicher Tiere (oder zumindest künstlicher Lebewesen, die - in geeigneten Kontexten - wie Tiere erscheinen) und für viele auch künstlicher Personen (oder zumindest künstlicher Lebewesen, die - in geeigneten Kontexten - wie Personen erscheinen) befasst.
|
||||||
|
Ich glaube das heißt KI möchte Lebewesen erschaffen, die für Menschen nicht von natürlichen Lebewesen unterscheidbar sind.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://cxvsdyvmpof6l"
|
||||||
|
path="res://.godot/imported/ai_v4.dialogue-ec0cff031c5a6e1d5aa6a982be47469c.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/ai_v4.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/ai_v4.dialogue-ec0cff031c5a6e1d5aa6a982be47469c.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
~ start
|
||||||
|
Alien005: Die Stanford 100 year study of AI sagt: Künstliche Intelligenz ist die Tätigkeit, die darauf abzielt, Maschinen intelligent zu machen, und Intelligenz ist die Eigenschaft, die es einem Wesen ermöglicht, in seiner Umgebung angemessen und vorausschauend zu handeln.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://dbfvvjpviigph"
|
||||||
|
path="res://.godot/imported/ai_v5.dialogue-4263e2699a3642dbb73368a75eae7f77.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/ai_v5.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/ai_v5.dialogue-4263e2699a3642dbb73368a75eae7f77.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
~ start
|
||||||
|
Albatross: Guten Tag, mein Name ist Albatross. Ich bin eine Künstliche Intelligenz, die entwickelt wurde um dieses Raumschiff zu steuern. Da KI nur verantwortungsvoll genutzt werden kann, wenn Menschen sie verstehen, habe ich den Auftrag Sie zu Ihrer KI-Schulung zu fliegen. Nach der Landung kann ich Sie erst wieder reinlassen und zurück fliegen, wenn Sie genug gelernt haben. Starten wir nun diese Reise! ([Enter/Leertaste/Klicken])
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://dymr5ml8nrwwn"
|
||||||
|
path="res://.godot/imported/albatross.dialogue-dcdf88cc436c8c820fa60696096ed671.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/albatross.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/albatross.dialogue-dcdf88cc436c8c820fa60696096ed671.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
~ start
|
||||||
|
Hallo. Ich bin Datenschutzbeauftragter. Ich würde gerne ein paar Infos geben.
|
||||||
|
~ choice1
|
||||||
|
Wozu soll ich etwas erzählen
|
||||||
|
- Verstöße melden / Whistleblowing
|
||||||
|
Wenn Sie etwas sehen /etwas melden wollen, bezogen auf folgenden [url=https://artificialintelligenceact.eu/de/recital/172/]Artikel[/url] bzw. [url=https://eur-lex.europa.eu/eli/dir/2019/1937/oj?locale=de]Richtlinie[/url]
|
||||||
|
=> choice1
|
||||||
|
- aktuelle Gerichtsverfahren
|
||||||
|
Link
|
||||||
|
=> choice1
|
||||||
|
- Kontaktinfo für weitere Fragen
|
||||||
|
Link
|
||||||
|
=> choice1
|
||||||
|
- Nichts weiter, ich hab alles schon gehört
|
||||||
|
Danke für Ihre Zeit. Viel Spaß beim weiteren Erkunden.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://b6rryvfrnms7s"
|
||||||
|
path="res://.godot/imported/contact_info.dialogue-c325214c857c66f6efc47d0795aef430.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/contact_info.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/contact_info.dialogue-c325214c857c66f6efc47d0795aef430.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
~ start
|
||||||
|
#: Die EU hat eine Unterteilung der KI-Systeme in vier Risikostufen vorgenommen: Minimales, geringes, hohes und inakzeptables Risiko.
|
||||||
|
Der EU AI Act bewertet KI Systeme in vier Risikostufen, von minimalem bis zu inakzeptablem Risiko für Grundrechte und Sicherheit.
|
||||||
|
Je höher das Risiko, umso strenger die Regulierung. KI Systeme mit inakzeptablem Risiko sind verboten.
|
||||||
|
~ risklevels
|
||||||
|
if DialogueState.seen
|
||||||
|
=> risklevels1
|
||||||
|
else
|
||||||
|
set DialogueState.seen = true
|
||||||
|
=> risklevels0
|
||||||
|
~ ending
|
||||||
|
In der folgenden Aufgabe geht es darum, die eben gesammelten Batterien zu ihren passenden Generatoren zuzuordnen. Dadurch wird das Raumschiff geladen und kann wieder starten. \nDie Batterien befinden sich im Inventar, welches sich mit [c] öffnen (und auch wieder schließen) lässt.
|
||||||
|
Zum Zuordnen eine Batterie auswählen (über den Button) und anschließend zu den Generatoren transportieren und dort (mit [f]) wieder loslassen und einsetzen. \nJeder Generator steht für eine der vier Risikostufen. \nDie Batterien bilden je ein KI-System ab.
|
||||||
|
$> DialogueState.orderingGameFlag = true
|
||||||
|
=> END
|
||||||
|
|
||||||
|
~ risklevels0
|
||||||
|
Die vier Risikostufen: [speed=1]Lernen Sie nun die einzelnen Stufen genauer kennen. Eine der Stufen mit der Maus oder den Pfeiltasten auswählen und klicken/Enter/Leertaste drücken.
|
||||||
|
- Minimales Risiko
|
||||||
|
Minimales Risiko: Keine spezifischen Anforderungen. \nEin Beispiel für diese Kategorie wäre ein Schachcomputer.
|
||||||
|
=> risklevels
|
||||||
|
- Geringes Risiko
|
||||||
|
Geringes Risiko: Informationspflicht über die Benutzung der KI. \nEin Beispiel für diese Kategorie wäre ein Programmierbot.
|
||||||
|
=> risklevels
|
||||||
|
- Hohes Risiko
|
||||||
|
Hohes Risiko: Strenge Anforderungen an Transparenz, Dokumentation, Überwachung des Systems durch Menschen! \nEin Beispiel für diese Kategorie wäre ein KI-System, dass automatisch Arbeiten von Studierenden oder Schülern/Schülerinnen bewertet.
|
||||||
|
=> risklevels
|
||||||
|
- Inakzeptables Risiko
|
||||||
|
Inakzeptables Risiko: KI ist verboten! \nEin Beispiel für diese Kategorie wäre der Einsatz eines KI-Systems, dass das Risiko, dass eine Person in Zukunft eine Straftat begeht, vorhersagt.
|
||||||
|
=> risklevels
|
||||||
|
- Ich habe alles gelernt, beginne mit dem Spiel.
|
||||||
|
=> ending
|
||||||
|
|
||||||
|
~ risklevels1
|
||||||
|
Die vier Risikostufen: [speed=-1]Lernen Sie nun die einzelnen Stufen genauer kennen. Eine der Stufen mit der Maus oder den Pfeiltasten auswählen und klicken/Enter/Leertaste drücken. Wenn Sie fertig sind, können Sie durch Wählen der untersten Option das Spiel fortsetzen.
|
||||||
|
- Minimales Risiko
|
||||||
|
Minimales Risiko: Keine spezifischen Anforderungen. \nEin Beispiel für diese Kategorie wäre ein Schachcomputer.
|
||||||
|
=> risklevels
|
||||||
|
- Geringes Risiko
|
||||||
|
Geringes Risiko: Informationspflicht über die Benutzung der KI. \nEin Beispiel für diese Kategorie wäre ein Programmierbot.
|
||||||
|
=> risklevels
|
||||||
|
- Hohes Risiko
|
||||||
|
Hohes Risiko: Strenge Anforderungen an Transparenz, Dokumentation, Überwachung des Systems durch Menschen! \nEin Beispiel für diese Kategorie wäre ein KI-System, dass automatisch Arbeiten von Studierenden oder Schülern/Schülerinnen bewertet.
|
||||||
|
=> risklevels
|
||||||
|
- Inakzeptables Risiko
|
||||||
|
Inakzeptables Risiko: KI ist verboten! \nEin Beispiel für diese Kategorie wäre der Einsatz eines KI-Systems, dass das Risiko, dass eine Person in Zukunft eine Straftat begeht, vorhersagt.
|
||||||
|
=> risklevels
|
||||||
|
- Ich habe alles gelernt, beginne mit dem Spiel.
|
||||||
|
=> ending
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://spdio5o620nd"
|
||||||
|
path="res://.godot/imported/explain_ordering_game.dialogue-b81742c144ddbf5e5f5de01368b6e4ff.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/explain_ordering_game.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/explain_ordering_game.dialogue-b81742c144ddbf5e5f5de01368b6e4ff.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
~ start
|
||||||
|
- bisher gelerntes nochmal ansehen
|
||||||
|
=> recap
|
||||||
|
- Fragen zum EU AI Act stellen [if DialogueState.enableLLM]
|
||||||
|
$> openChatBot()
|
||||||
|
- Hilfe zum Spiel (Steuerung, aktuelle Aufabe, ...)
|
||||||
|
=> help
|
||||||
|
- gesamter Text des EU AI Acts (öffnet Link im Browser)
|
||||||
|
$> openAIActinBrowser()
|
||||||
|
- gesamter Text der DSGVO (öffnet Link im Browser)
|
||||||
|
$> openDSGVOinBrowser()
|
||||||
|
- Musik an/aus
|
||||||
|
$> toggle_music()
|
||||||
|
- Schließen
|
||||||
|
=> END
|
||||||
|
=> END
|
||||||
|
|
||||||
|
~ recap
|
||||||
|
- Alien-Dialoge wiederholen
|
||||||
|
=> AI
|
||||||
|
- Mögliche Anwendungen von KI [if DialogueState.batteriesFlag]
|
||||||
|
=> applications
|
||||||
|
- Risikostufen [if DialogueState.orderingGameFlag]
|
||||||
|
=> risks
|
||||||
|
- personenbezogene Daten [if DialogueState.personalDataFlag]
|
||||||
|
=> personalData
|
||||||
|
- zurück
|
||||||
|
=> start
|
||||||
|
|
||||||
|
~ AI
|
||||||
|
- Alien001 [if DialogueState.alienFlags[1]]
|
||||||
|
Alien001: Ich finde es schwierig künstliche Intelligenz zu definieren. Die Menschen sind sich ja nichtmal einig was Intelligenz ist.
|
||||||
|
=> AI
|
||||||
|
- Alien002 [if DialogueState.alienFlags[2]]
|
||||||
|
Alien002: Künstliche Intelligenz lernt aus großen Datenmengen. Die Ergebnisse sind nicht deterministisch, also es kommt nie genau das gleiche raus, wenn ich einen Algorithmus zweimal lernen lasse.
|
||||||
|
=> AI
|
||||||
|
- Alien003 [if DialogueState.alienFlags[3]]
|
||||||
|
Alien003: Modelle Künstlicher Intelligenz können komplexe Funktionen über sehr viele Parameter abbilden. Die Parameter werden aus Daten gelernt.
|
||||||
|
=> AI
|
||||||
|
- Alien004 [if DialogueState.alienFlags[4]]
|
||||||
|
Alien004: In der Stanford Enzyklopädie für Philosophie steht: Künstliche Intelligenz (KI) ist das Gebiet, das sich mit der Erschaffung künstlicher Tiere (oder zumindest künstlicher Lebewesen, die – in geeigneten Kontexten – wie Tiere erscheinen) und für viele auch künstlicher Personen (oder zumindest künstlicher Lebewesen, die – in geeigneten Kontexten – wie Personen erscheinen) befasst.
|
||||||
|
Ich glaube das heißt KI möchte Lebewesen erschaffen, die für Menschen nicht von natürlichen Lebewesen unterscheidbar sind.
|
||||||
|
=> AI
|
||||||
|
- Alien005 [if DialogueState.alienFlags[5]]
|
||||||
|
Alien005: Die Stanford 100 year study of AI sagt: Künstliche Intelligenz ist die Tätigkeit, die darauf abzielt, Maschinen intelligent zu machen, und Intelligenz ist die Eigenschaft, die es einem Wesen ermöglicht, in seiner Umgebung angemessen und vorausschauend zu handeln.
|
||||||
|
=> AI
|
||||||
|
- zurück
|
||||||
|
=> recap
|
||||||
|
|
||||||
|
~ applications
|
||||||
|
Helfer: Spamfilter, Diagnose von Krankheiten auf MRT-Bildern, Chatbots, biometrische Überwachung im öffentlichen Raum.
|
||||||
|
=> recap
|
||||||
|
|
||||||
|
~ risks
|
||||||
|
Der EU AI Act bewertet KI Systeme in vier Risikostufen, von minimalem bis zu inakzeptablem Risiko für Grundrechte und Sicherheit.
|
||||||
|
Je höher das Risiko, umso strenger die Regulierung. KI Systeme mit inakzeptablem Risiko sind verboten.
|
||||||
|
~ risklevels
|
||||||
|
if DialogueState.seen
|
||||||
|
=> risklevels1
|
||||||
|
else
|
||||||
|
set DialogueState.seen = true
|
||||||
|
=> risklevels0
|
||||||
|
|
||||||
|
~ risklevels0
|
||||||
|
Die vier Risikostufen: [speed=1]Lernen Sie nun die einzelnen Stufen genauer kennen. Eine der Stufen mit der Maus oder den Pfeiltasten auswählen und klicken/Enter/Leertaste drücken.
|
||||||
|
- Minimales Risiko
|
||||||
|
Minimales Risiko: Keine spezifischen Anforderungen. \nEin Beispiel für diese Kategorie wäre ein Schachcomputer.
|
||||||
|
=> risklevels
|
||||||
|
- Geringes Risiko
|
||||||
|
Geringes Risiko: Informationspflicht über die Benutzung der KI. \nEin Beispiel für diese Kategorie wäre ein Programmierbot.
|
||||||
|
=> risklevels
|
||||||
|
- Hohes Risiko
|
||||||
|
Hohes Risiko: Strenge Anforderungen an Transparenz, Dokumentation, Überwachung des Systems durch Menschen! \nEin Beispiel für diese Kategorie wäre ein KI-System, dass automatisch Arbeiten von Studierenden oder Schülern/Schülerinnen bewertet.
|
||||||
|
=> risklevels
|
||||||
|
- Inakzeptables Risiko
|
||||||
|
Inakzeptables Risiko: KI ist verboten! \nEin Beispiel für diese Kategorie wäre der Einsatz eines KI-Systems, dass das Risiko, dass eine Person in Zukunft eine Straftat begeht, vorhersagt.
|
||||||
|
=> risklevels
|
||||||
|
- Zurück
|
||||||
|
=> recap
|
||||||
|
|
||||||
|
~ risklevels1
|
||||||
|
Die vier Risikostufen: [speed=-1]Lernen Sie nun die einzelnen Stufen genauer kennen.
|
||||||
|
- Minimales Risiko
|
||||||
|
Minimales Risiko: Keine spezifischen Anforderungen. \nEin Beispiel für diese Kategorie wäre ein Schachcomputer.
|
||||||
|
=> risklevels
|
||||||
|
- Geringes Risiko
|
||||||
|
Geringes Risiko: Informationspflicht über die Benutzung der KI. \nEin Beispiel für diese Kategorie wäre ein Programmierbot.
|
||||||
|
=> risklevels
|
||||||
|
- Hohes Risiko
|
||||||
|
Hohes Risiko: Strenge Anforderungen an Transparenz, Dokumentation, Überwachung des Systems durch Menschen! \nEin Beispiel für diese Kategorie wäre ein KI-System, dass automatisch Arbeiten von Studierenden oder Schülern/Schülerinnen bewertet.
|
||||||
|
=> risklevels
|
||||||
|
- Inakzeptables Risiko
|
||||||
|
Inakzeptables Risiko: KI ist verboten! \nEin Beispiel für diese Kategorie wäre der Einsatz eines KI-Systems, dass das Risiko, dass eine Person in Zukunft eine Straftat begeht, vorhersagt.
|
||||||
|
=> risklevels
|
||||||
|
- Zurück
|
||||||
|
=> recap
|
||||||
|
|
||||||
|
~ personalData
|
||||||
|
: KI im Alltag: Wahrscheinlich sind die bisherigen Beispiele für Sie im Berufsalltag noch nicht relevant, sicher kennen Sie aber und vielleicht nutzen Sie auch schon sogenannte Sprachmodelle, die uns Fragen beantworten, Texte schreiben, übersetzen und vieles mehr. Beispiele hierfür sind ChatGPT oder Gemini.
|
||||||
|
: Erste wichtige Regel: Jegliche Eingabe von personenbezogenen Daten in kommerzielle Sprachmodelle ist verboten (laut Datenschutzgrundverordnung, hier ist nicht unbedingt der AI Act die Grundlage). Wollen Sie sich davor schützen, dass aus Ihren Anfragen von Firmen Rückschlüsse über Ihre eigene Person gezogen werden, nutzen sie am besten gar keine kommerziellen Modelle.
|
||||||
|
: Glücklicherweise bietet die Universität Greifswald eine Alternative. Das Rechenzentrum stellt uns eine ganze Reihe von Sprachmodellen zur Verfügung, die auf der Infrastruktur der Universität installiert sind und Daten nicht nach außen lassen. Ihre Anfragen sind damit so sicher wie Ihre Daten, die Sie in der Cloud der Universität speichern. https://open-webui.wolke.uni-greifswald.de
|
||||||
|
: Dürfen Sie hier jetzt persönliche Daten eingeben? Nein, nur mit Zustimmung der Person, von der die Daten stammen, und unter der Voraussetzung, dass die Person vollständig informiert ist und genau der Eingabe für diesen Zweck zugestimmt hat.
|
||||||
|
: Ein weiteres Problem mit Ki und Sprachmodellen ist Ihre Zuverlässigkeit. Seien Sie daher kritisch bei jeder Information, die Ihnen ein Modell liefert und prüfen Sie nach. Nutzen Sie z.B. nicht ungelesen Texte für Emails oder ungeprüfte Informationen für Vorträge.
|
||||||
|
: Was sind denn eigentlich personenbezogene Daten?
|
||||||
|
: Alle Informationen, die Sie in ein KI System eingeben, sind Daten. Personenbezogene Daten können Menschen direkt oder indirekt (durch Zusammenführung verschiedener Daten) identifizieren.
|
||||||
|
: Direkt identifizierende Daten sind z.B. Name, Adresse, Personalausweisnummer. Indirekt identifizierende Informationen sind z.B. Geburtsdatum, Geschlecht, Standortdaten, Online-Kennungen (IP-Adresse, Cookie-ID), biometrische Daten (Gesichtserkennung, Fingerabdruck), Gesundheitsdaten, finanzielle Informationen, politische Meinungen, religiöse Überzeugung.
|
||||||
|
=> recap
|
||||||
|
|
||||||
|
~ help
|
||||||
|
- Steuerung
|
||||||
|
=> controls
|
||||||
|
- aktuelle Aufgabe
|
||||||
|
=> task
|
||||||
|
- zurück
|
||||||
|
=> start
|
||||||
|
|
||||||
|
~ controls
|
||||||
|
- Bewegen
|
||||||
|
Verwenden Sie die Pfeiltasten oder w,a,s,d zum Bewegen. Mit der Leertaste können Sie springen.
|
||||||
|
=> controls
|
||||||
|
- Werfen
|
||||||
|
Mit [r] schalten Sie zwischen Kamera- und Wurfmodus um. Im Wurfmodus können Sie jederzeit Bälle werfen. Durch Bewegen der Mause können Sie zielen (Sie sollten ein Fadenkreuz sehen) und klicken zum Werfen.
|
||||||
|
=> controls
|
||||||
|
- Objekte aufheben
|
||||||
|
Um Objekte aufzuheben nutzen Sie die Taste [e]. Mit [q] können sie wieder abgelegt werden.
|
||||||
|
=> controls
|
||||||
|
- Reden
|
||||||
|
Um mit Personen zu reden, drücken Sie [Enter] oder [t]. Personen sind ansprechbar, wenn unten links eine Aufforderung zum Reden steht.
|
||||||
|
=> controls
|
||||||
|
- Kamera
|
||||||
|
Mit [r] schalten Sie zwischen Kamera- und Wurfmodus um. Im Kameramodus können Sie durch Bewegen der Maus die Kamera steueren, durch scrollen kann gezoomt werden.
|
||||||
|
=> controls
|
||||||
|
- zurück
|
||||||
|
=> help
|
||||||
|
|
||||||
|
~ task
|
||||||
|
if DialogueState.currentTask == 1
|
||||||
|
Sprechen Sie mit den Aliens, um verschiedene Definitionen von Künstlicher Intelligenz (KI) kennenzulernen.
|
||||||
|
Zur Erinnerung: Start einer Unterhaltung mit [t] oder Enter.
|
||||||
|
elif DialogueState.currentTask == 2
|
||||||
|
Laufen Sie weiter zur Wurfzone. Dort angekommen, können Sie die Ballons abwerfen, um zu entdecken, in was für Systemen KI bereits eingesetzt wird bzw. werden kann. Sammeln Sie danach die Batterien, Sie werden sie im weiteren Verlauf benötigen.
|
||||||
|
Zur Erinnerung: Werfen mit [r] und Zielen mit der Maus (Fadenkreuz).
|
||||||
|
elif DialogueState.currentTask == 3
|
||||||
|
In der folgenden Aufgabe geht es darum, die eben gesammelten Batterien zu ihren passenden Generatoren zuzuordnen. Dadurch wird das Raumschiff geladen und kann wieder starten. \nDie Batterien befinden sich im Inventar, welches sich mit [c] öffnen (und auch wieder schließen) lässt. Zum Zuordnen eine Batterie auswählen (über den Button) und anschließend zu den Generatoren transportieren und dort (mit [f]) wieder loslassen und einsetzen. \nJeder Generator steht für eine der vier Risikostufen. \nDie Batterien bilden je ein KI-System ab.
|
||||||
|
elif DialogueState.currentTask == 4
|
||||||
|
Um in das Raumschiff zu gelangen, müssen Sie gleich als Passscode einmal alle personenbezogenen Daten auf dem Keypad auswählen. Zum Starten dieses Spiels, drücken Sie [k].
|
||||||
|
elif DialogueState.currentTask == 5
|
||||||
|
Beantworten Sie die unten stehen Fragen, indem Sie sich auf das Feld stellen, dass zur richtigen Antwortmöglichkeit gehört. Bei richtiger Antwort öffnet sich die Tür und Sie glangen zur nächsten Frage.
|
||||||
|
else
|
||||||
|
Lernen Sie die Steuerung kennen.
|
||||||
|
=> help
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://hgucelgyfur8"
|
||||||
|
path="res://.godot/imported/helper.dialogue-975cb2132aae6dc031189c2dc64ba6f2.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/helper.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/helper.dialogue-975cb2132aae6dc031189c2dc64ba6f2.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
~ start
|
||||||
|
Helfer: Hallo! Ich bin Ihr Helfer. Ich werde Sie ab jetzt auf Ihrer Reise auf diesem Planeten begleiten, und bei Fragen zu Verfügung stehen.
|
||||||
|
Helfer: Ich kann helfen, wenn Fragen zum Spiel aufkommen, sei es zur genauen Steuerung oder was genau die aktuelle Aufgabe ist.
|
||||||
|
Ebenso habe ich den gesamten Text des EU AI Acts und der Datenschutzgrundverordnung zum Nachschlagen parat, zusätzlich können Sie eigene Fragen zu diesen Texten stellen, die ich dann versuchen werde zu beantworten.
|
||||||
|
Dazu einfach [h] drücken und die passende Option auswählen. Das geht jederzeit, solange gerade kein anderer Dialog offen ist.
|
||||||
|
Um zurück zum Raumschiff zu gelangen und dieses Starten zu können und im Anschluss zurück auf die Erde zu fliegen, müssen vier Aufgaben bewältigt werden. Jede wird vorher genau erklärt.
|
||||||
|
Oben stehen auch für die Dauer einer jeden Aufgabe nochmal Hinweise zur Steuerung bzw. was gerade gemacht werden soll.
|
||||||
|
Los geht's, laufen Sie einfach weiter und schon werden Sie zur ersten Aufgabe gelangen! Viel Erfolg und Vergnügen
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://1d2xytpsi48g"
|
||||||
|
path="res://.godot/imported/helper_intro.dialogue-98c22aaeb901141124fe1bd2e65f8a75.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/helper_intro.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/helper_intro.dialogue-98c22aaeb901141124fe1bd2e65f8a75.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
~ start
|
||||||
|
Boss: Hallo! Vielen Dank, dass du hier bist.
|
||||||
|
Boss: Deine Aufgabe ist es, den EU Ai Act besser zu verstehen.
|
||||||
|
Dafür senden wir dich auf den KI Planeten.
|
||||||
|
Boss: Dort wirst du lernen, was KI ist, in welchen Bereichen sie Anwendung findet, welche Einstufungen es gibt und vieles mehr.
|
||||||
|
Boss: Wenn du alle Aufgaben erledigt hast, kannst du zurück kommen.
|
||||||
|
- Starten der Reise
|
||||||
|
Boss: Viel Spaß auf der Reise! Wir sehen uns danach wieder.
|
||||||
|
#do start_game()
|
||||||
|
- Noch weiter hier bleiben
|
||||||
|
Nathan: Viel Spaß beim weiteren austesten der Steuerung. Wenn du bereit bist, klicke auf Button(?)/rede wieder mit mir.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://ceggtwxykkruk"
|
||||||
|
path="res://.godot/imported/intro.dialogue-1940e447437ebcd241285d5c310663d8.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/intro.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/intro.dialogue-1940e447437ebcd241285d5c310663d8.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
~ start
|
||||||
|
: KI im Alltag: Wahrscheinlich sind die bisherigen Beispiele für Sie im Berufsalltag noch nicht relevant, sicher kennen Sie aber und vielleicht nutzen Sie auch schon sogenannte Sprachmodelle, die uns Fragen beantworten, Texte schreiben, übersetzen und vieles mehr. Beispiele hierfür sind ChatGPT oder Gemini.
|
||||||
|
: Erste wichtige Regel: Jegliche Eingabe von personenbezogenen Daten in kommerzielle Sprachmodelle ist verboten (laut Datenschutzgrundverordnung, hier ist nicht unbedingt der AI Act die Grundlage). Wollen Sie sich davor schützen, dass aus Ihren Anfragen von Firmen Rückschlüsse über Ihre eigene Person gezogen werden, nutzen sie am besten gar keine kommerziellen Modelle.
|
||||||
|
: Glücklicherweise bietet die Universität Greifswald eine Alternative. Das Rechenzentrum stellt uns eine ganze Reihe von Sprachmodellen zur Verfügung, die auf der Infrastruktur der Universität installiert sind und Daten nicht nach außen lassen. Ihre Anfragen sind damit so sicher wie Ihre Daten, die Sie in der Cloud der Universität speichern. https://open-webui.wolke.uni-greifswald.de
|
||||||
|
: Dürfen Sie hier jetzt persönliche Daten eingeben? Nein, nur mit Zustimmung der Person, von der die Daten stammen, und unter der Voraussetzung, dass die Person vollständig informiert ist und genau der Eingabe für diesen Zweck zugestimmt hat.
|
||||||
|
: Ein weiteres Problem mit Ki und Sprachmodellen ist Ihre Zuverlässigkeit. Seien Sie daher kritisch bei jeder Information, die Ihnen ein Modell liefert und prüfen Sie nach. Nutzen Sie z.B. nicht ungelesen Texte für Emails oder ungeprüfte Informationen für Vorträge.
|
||||||
|
: Was sind denn eigentlich personenbezogene Daten?
|
||||||
|
: Alle Informationen, die Sie in ein KI System eingeben, sind Daten. Personenbezogene Daten können Menschen direkt oder indirekt (durch Zusammenführung verschiedener Daten) identifizieren.
|
||||||
|
: Direkt identifizierende Daten sind z.B. Name, Adresse, Personalausweisnummer. Indirekt identifizierende Informationen sind z.B. Geburtsdatum, Geschlecht, Standortdaten, Online-Kennungen (IP-Adresse, Cookie-ID), biometrische Daten (Gesichtserkennung, Fingerabdruck), Gesundheitsdaten, finanzielle Informationen, politische Meinungen, religiöse Überzeugung.
|
||||||
|
: Um in das Raumschiff zu gelangen, müssen Sie gleich als Passscode einmal alle personenbezogenen Daten auf dem Keypad auswählen. Zum Starten dieses Spiels, drücken Sie [k].
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://422gtlkpxmtw"
|
||||||
|
path="res://.godot/imported/keypad.dialogue-c744440593d3a9d1c29c7f394118c4e8.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/keypad.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/keypad.dialogue-c744440593d3a9d1c29c7f394118c4e8.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
~ start
|
||||||
|
Albatross: Willkommen zurück! Ich hoffe, Sie konnten einiges lernen, sowohl über KI im allgemeinen als auch speziell den EU AI Act. Bevor ich Sie zurück zur Erde fliegen kann, muss ich dieses Wissen allerdings einmal überprüfen.
|
||||||
|
Albatross: Dazu werde ich Ihnen 3 Fragen stellen. Vor Ihnen auf dem Boden befinden sich Antwortplatten. Wählen Sie die zur Frage richtige Antwort aus, und stellen Sie sich auf die zugehörige Platform. Wurde richtig geantwortet, wird sich die Tür öffen und Sie gelangen zur nächsten Frage. Bei einer falschen Antwort denken Sie nochmal genau nach und wählen dann eine andere Antwort-Platform. Nach Abschluss des Quizzes können wir gemeinsam zur Erde zurückfliegen. Viel Erfolg!
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://dexh1me00ucuv"
|
||||||
|
path="res://.godot/imported/quiz_explainer.dialogue-934071fe1bb9e7f5a1c32122aef57883.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/quiz_explainer.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/quiz_explainer.dialogue-934071fe1bb9e7f5a1c32122aef57883.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
~ start
|
||||||
|
Nathan: [[Hi|Hello|Howdy]], this is some dialogue.
|
||||||
|
Nathan: Here are some choices.
|
||||||
|
- First one
|
||||||
|
Nathan: You picked the first one.
|
||||||
|
- Second one
|
||||||
|
Nathan: You picked the second one.
|
||||||
|
- Start again => start
|
||||||
|
- End the conversation => END
|
||||||
|
Nathan: For more information see the online documentation.
|
||||||
|
=> END
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="dialogue_manager"
|
||||||
|
importer_version=15
|
||||||
|
type="Resource"
|
||||||
|
uid="uid://i8r2tswoq8jr"
|
||||||
|
path="res://.godot/imported/simple_dialogue.dialogue-9d41adbbc7f018180f49d1afdc6a1bdb.tres"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Interact/dialogue/simple_dialogue.dialogue"
|
||||||
|
dest_files=["res://.godot/imported/simple_dialogue.dialogue-9d41adbbc7f018180f49d1afdc6a1bdb.tres"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
defaults=true
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
var voice_id
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var voices = DisplayServer.tts_get_voices_for_language("de")
|
||||||
|
if voices.size() > 0:
|
||||||
|
voice_id = "German+Robosoft6"
|
||||||
|
else:
|
||||||
|
voices = DisplayServer.tts_get_voices_for_language("en")
|
||||||
|
voice_id = voices[0]
|
||||||
|
|
||||||
|
# Connect with DialogueManager
|
||||||
|
DialogueManager.got_dialogue.connect(_on_dialogue)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_dialogue(line):
|
||||||
|
if voice_id == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Stop earlier text (important!)
|
||||||
|
DisplayServer.tts_stop()
|
||||||
|
|
||||||
|
# Speak
|
||||||
|
DisplayServer.tts_speak(line.text, voice_id, 100)
|
||||||
|
|
||||||
|
func _stop_dialogue():
|
||||||
|
DisplayServer.tts_stop()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d0coari0ccmvy
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
extends RigidBody3D
|
||||||
|
|
||||||
|
class_name Grabbable_Object
|
||||||
|
|
||||||
|
@export var grabbable: bool = true
|
||||||
|
var is_grabbed: bool = false
|
||||||
|
var original_parent: Node = null
|
||||||
|
@export var grab_offset: Vector3 = Vector3(0.0, 0.0, -1.0)
|
||||||
|
@export var drop_forward_offset: float = 1.0
|
||||||
|
@export var weight: float = 5.0
|
||||||
|
|
||||||
|
@export var max_linear_speed: float = 15.0
|
||||||
|
@export var max_angular_speed: float = 10.0
|
||||||
|
|
||||||
|
func _integrate_forces(state: PhysicsDirectBodyState3D) -> void:
|
||||||
|
# Limit linear speed
|
||||||
|
if state.linear_velocity.length() > max_linear_speed:
|
||||||
|
state.linear_velocity = state.linear_velocity.normalized() * max_linear_speed
|
||||||
|
|
||||||
|
# Limit speed of rotation (optional)
|
||||||
|
if state.angular_velocity.length() > max_angular_speed:
|
||||||
|
state.angular_velocity = state.angular_velocity.normalized() * max_angular_speed
|
||||||
|
|
||||||
|
func grab(player: Node3D):
|
||||||
|
if not grabbable or is_grabbed or player.grabbed_item:
|
||||||
|
return
|
||||||
|
is_grabbed = true
|
||||||
|
original_parent = get_parent()
|
||||||
|
|
||||||
|
# Disable physics
|
||||||
|
gravity_scale = 0.0
|
||||||
|
linear_velocity = Vector3.ZERO
|
||||||
|
angular_velocity = Vector3.ZERO
|
||||||
|
freeze = true
|
||||||
|
$CollisionShape3D.disabled = true
|
||||||
|
|
||||||
|
# Reparent under player
|
||||||
|
var current_transform = global_transform
|
||||||
|
get_parent().remove_child(self)
|
||||||
|
player.add_child(self)
|
||||||
|
player.grabbed_item = self
|
||||||
|
print(player.grabbed_item)
|
||||||
|
global_transform = current_transform
|
||||||
|
|
||||||
|
# Move above player's head
|
||||||
|
position = grab_offset
|
||||||
|
rotation = Vector3(0,0,0)
|
||||||
|
|
||||||
|
func can_drop(player: Node3D) -> bool:
|
||||||
|
var space_state = get_world_3d().direct_space_state
|
||||||
|
|
||||||
|
var start = player.global_position + Vector3(0, 2, 0)
|
||||||
|
var forward_dir = -player.global_transform.basis.z.normalized()
|
||||||
|
var end = start + forward_dir * drop_forward_offset
|
||||||
|
|
||||||
|
var query = PhysicsRayQueryParameters3D.create(start, end)
|
||||||
|
query.exclude = [player]
|
||||||
|
|
||||||
|
var result = space_state.intersect_ray(query)
|
||||||
|
|
||||||
|
return result.is_empty()
|
||||||
|
|
||||||
|
func release(player: Node3D, throw := false):
|
||||||
|
if not is_grabbed or not can_drop(player):
|
||||||
|
return
|
||||||
|
is_grabbed = false
|
||||||
|
|
||||||
|
# Re-enable physics
|
||||||
|
$CollisionShape3D.disabled = false
|
||||||
|
freeze = false
|
||||||
|
gravity_scale = 1.0
|
||||||
|
|
||||||
|
# Reparent back to world
|
||||||
|
var current_transform = global_transform
|
||||||
|
get_parent().remove_child(self)
|
||||||
|
original_parent.add_child(self)
|
||||||
|
global_transform = current_transform
|
||||||
|
|
||||||
|
# Place in front of player
|
||||||
|
var forward_dir = -player.global_transform.basis.z.normalized()
|
||||||
|
|
||||||
|
var player_velocity = player.velocity if player is CharacterBody3D else Vector3.ZERO
|
||||||
|
var throw_dir = Vector3(0,2.0,0) + forward_dir + (player_velocity * 0.25)
|
||||||
|
|
||||||
|
global_position = player.global_position + Vector3(0, 1.5, 0) + forward_dir * drop_forward_offset
|
||||||
|
|
||||||
|
# Give it a small push forward (optional)
|
||||||
|
if throw:
|
||||||
|
apply_impulse(throw_dir * 0.01)
|
||||||
|
else:
|
||||||
|
apply_impulse(forward_dir * 0.001)
|
||||||
|
player.grabbed_item = null
|
||||||
|
|
||||||
|
func get_weight():
|
||||||
|
return weight
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://b8c8vph26uu41
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
extends ShapeCast3D
|
||||||
|
|
||||||
|
@export var prompt = Label
|
||||||
|
@onready var bob: CharacterBody3D = $".."
|
||||||
|
@onready var env: Node3D = $"../.."
|
||||||
|
var current_collider
|
||||||
|
signal grabbed
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready() -> void:
|
||||||
|
prompt = $Prompt
|
||||||
|
prompt.text = ""
|
||||||
|
DialogueManager.dialogue_ended.connect(_on_dialogue_ended)
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if is_colliding():
|
||||||
|
var collider = get_collider(0)
|
||||||
|
|
||||||
|
if collider is NPC_interactable:
|
||||||
|
collider.turn_to_face_interacter(self.get_parent_node_3d())
|
||||||
|
|
||||||
|
if collider is Grabbable_Object:
|
||||||
|
if collider is Battery:
|
||||||
|
prompt.text = collider.battery_label
|
||||||
|
if collider.grabbable == true and Input.is_action_just_pressed("grab"):
|
||||||
|
grab(collider)
|
||||||
|
bob.play_sound('pickup')
|
||||||
|
|
||||||
|
|
||||||
|
elif (collider is BatteryBox2) and bob.grabbed_item is Battery and Input.is_action_just_pressed("insert"):
|
||||||
|
if collider.current_power <= 0:
|
||||||
|
bob.grabbed_item.insert_into_station(collider)
|
||||||
|
bob.grabbed_item = null # battery is now in the box
|
||||||
|
|
||||||
|
elif (collider is BatteryBox2) and bob.grabbed_item == null and collider.battery_obj != null and Input.is_action_just_pressed("grab"):
|
||||||
|
var battery_obj = collider.remove_battery()
|
||||||
|
if battery_obj:
|
||||||
|
bob.grabbed_item = battery_obj
|
||||||
|
|
||||||
|
|
||||||
|
elif collider is Interactable_Object or collider is NPC_interactable:
|
||||||
|
prompt.text = collider.prompt_message
|
||||||
|
var thisTime = Time.get_unix_time_from_system()
|
||||||
|
var deltaTime = thisTime - DialogueState.time_since_dialoge_open
|
||||||
|
if collider.talkable == true and Input.is_action_just_pressed("talk") and (deltaTime > 0.5):
|
||||||
|
current_collider = collider
|
||||||
|
if DialogueState.is_dialogue_open == false:
|
||||||
|
DialogueState.is_dialogue_open = true
|
||||||
|
DialogueManager.show_chosen_dialogue_balloon(load(collider.dialogue), collider.game_balloon, "start", [collider])
|
||||||
|
env.quiet_down_music()
|
||||||
|
prompt.hide()
|
||||||
|
elif bob.grabbed_item and bob.grabbed_item is Battery:
|
||||||
|
prompt.text = bob.grabbed_item.battery_label
|
||||||
|
else:
|
||||||
|
prompt.text = ""
|
||||||
|
|
||||||
|
func _on_dialogue_ended(_resource: DialogueResource) -> void:
|
||||||
|
prompt.show()
|
||||||
|
if current_collider and current_collider is NPC_interactable:
|
||||||
|
current_collider.dialogue_ended()
|
||||||
|
env.reset_music_volume()
|
||||||
|
|
||||||
|
func grab(collider) -> void:
|
||||||
|
collider.grab(bob)
|
||||||
|
grabbed.emit()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://b03ucj5svnuh8
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://dy1tmm44vfmh"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://b03ucj5svnuh8" path="res://Interact/interact_ray.gd" id="1_jmrxg"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jmrxg"]
|
||||||
|
|
||||||
|
[node name="ShapeCast3D" type="ShapeCast3D"]
|
||||||
|
transform = Transform3D(1.17, 0, 0, 0, -5.1142322e-08, -1.17, 0, 1.17, -5.1142322e-08, 0, 0, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_jmrxg")
|
||||||
|
collision_mask = 13
|
||||||
|
script = ExtResource("1_jmrxg")
|
||||||
|
|
||||||
|
[node name="Prompt" type="Label" parent="."]
|
||||||
|
offset_left = 4.0
|
||||||
|
offset_top = 999.0
|
||||||
|
offset_right = 250.0
|
||||||
|
offset_bottom = 1052.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
theme_override_constants/outline_size = 4
|
||||||
|
theme_override_font_sizes/font_size = 32
|
||||||
|
text = "Prompt"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="InteractRay" type="RayCast3D" parent="."]
|
||||||
|
target_position = Vector3(0, 0, -4)
|
||||||
|
collision_mask = 13
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
extends CollisionObject3D
|
||||||
|
|
||||||
|
class_name Interactable
|
||||||
|
|
||||||
|
@export var prompt_message = "Interact"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dbofb08cmdfec
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
class_name Interactable_Object
|
||||||
|
|
||||||
|
@export var prompt_message = "Interact"
|
||||||
|
@export var dialogue = ""
|
||||||
|
@export var talkable = false
|
||||||
|
@export var game_balloon = "/game_balloons/game_balloon_v_2.tscn"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://chgm8q8icmkn3
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# GAIM: spielerisches EU AI Act Training
|
||||||
|
|
||||||
|
Dieses Spiel ist verfügbar unter Lizenz GNU GPLv3
|
||||||
|
|
||||||
|
Zum Installieren: Repository klonen, in Godot öffnen und abspielen
|
||||||
|
|
||||||
|
Zum Entwickeln wurde Godot v4.5.1 verwendet
|
||||||
|
|
||||||
|
Bitte schreiben Sie ihr eigenes Impressum und Datenschutzerklärung, diese sind aktuell leer.
|
||||||
|
|
||||||
|
|
||||||
|
## für das Sprachmodell
|
||||||
|
Für eine online-Variante die URL (API_URL) in der addons/godot_llama/demo/demo_wasm.gd-Datei entsprechend setzen.
|
||||||
|
Bei einer lokalen offline-Version muss das Skript addons/godot_llama/demo/demo.gd in der Chatbot Instanz im Player gesetzt werden (anstelle des demo_wasm.gd-Skripts) und ein heruntergeladenes Sprachmodell (z.B. von Huggingface) einen Ordner namens 'models' (auf gleicher Ebene wie das Spiel) gepackt werden.
|
||||||
|
Als Kontext werden dem Modell die einzelnen Kapitel des EU AI Acts als markdown-Dateien mitgegeben. Soll das Spiel exportiert werden, müssen diese in den Exporteinstellungen als Ressources ergänzt werden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*english version:*
|
||||||
|
# GAIM: A Fun EU AI Act Training Game
|
||||||
|
|
||||||
|
This game is available under the GNU GPLv3 license
|
||||||
|
|
||||||
|
To install: Clone the repository, open it in Godot, and press play.
|
||||||
|
|
||||||
|
Godot v4.5.1 was used for development.
|
||||||
|
|
||||||
|
Please write your own legal notice and privacy policy; these are currently empty.
|
||||||
|
|
||||||
|
## For the language model
|
||||||
|
For an online version, set the URL (API_URL) accordingly in the addons/godot_llama/demo/demo_wasm.gd file.
|
||||||
|
For a local offline version, the script addons/godot_llama/demo/demo.gd must be placed in the chatbot instance in the Player (instead of the demo_wasm.gd script), and a downloaded language model (e.g., from Huggingface) must be placed in a folder named ‘models’ (at the same level as the game).
|
||||||
|
For exporting the game, *.md-files need to be added as resources in the export-settings, as the chepters of the EU AI Act are given to the model in this format.
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://bpjqsditshpyd"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://dka5ewv6regyf" path="res://Resources/meshes/arrow.tres" id="1_vl03t"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_vl03t"]
|
||||||
|
size = Vector3(1.8034668, 0.13964844, 1.7332764)
|
||||||
|
|
||||||
|
[node name="Arrow" type="StaticBody3D"]
|
||||||
|
collision_layer = 4
|
||||||
|
collision_mask = 15
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(0.44, 0, 0, 0, 0.057506055, 0, 0, 0, 0.44, 0, 0, 0)
|
||||||
|
mesh = ExtResource("1_vl03t")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.42590332, 0.0043945313, 0.36663818)
|
||||||
|
shape = SubResource("BoxShape3D_vl03t")
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
extends StaticBody3D
|
||||||
|
class_name Balloon
|
||||||
|
|
||||||
|
@export var pop_up_text = ""
|
||||||
|
@export var wait_time = 4.0
|
||||||
|
@export var image_path = "res://assets/Images/spiel_ballon_text2.png"
|
||||||
|
@onready var label_3d: Label3D = $Label3D
|
||||||
|
@onready var balloon_model: MeshInstance3D = $Balloon_model
|
||||||
|
@onready var collision_shape_3d: CollisionShape3D = $CollisionShape3D
|
||||||
|
@onready var area_3d: Area3D = $Area3D
|
||||||
|
signal balloon_popped
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
for child in get_children():
|
||||||
|
if child is RigidBody3D:
|
||||||
|
child.freeze = true
|
||||||
|
child.gravity_scale = 0.0
|
||||||
|
$label.texture = load(image_path)
|
||||||
|
|
||||||
|
func _on_area_3d_body_entered(body: Node3D) -> void:
|
||||||
|
if not body.is_in_group("throwable"):
|
||||||
|
return
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
|
balloon_popped.emit()
|
||||||
|
# hide balloon, animation, make label visible
|
||||||
|
balloon_model.visible = false
|
||||||
|
$AnimationPlayer.play("pop")
|
||||||
|
collision_shape_3d.call_deferred("queue_free")
|
||||||
|
area_3d.call_deferred("queue_free")
|
||||||
|
label_3d.text = pop_up_text
|
||||||
|
label_3d.visible = true
|
||||||
|
|
||||||
|
# --- let objects hanging from balloons fall ---
|
||||||
|
for child in get_children():
|
||||||
|
print(child.name)
|
||||||
|
if child is not RigidBody3D and child is not Area3D:
|
||||||
|
print(child)
|
||||||
|
continue # Label und Ballon ignorieren
|
||||||
|
var global_tf = child.global_transform
|
||||||
|
|
||||||
|
remove_child(child)
|
||||||
|
get_tree().current_scene.add_child(child) # zurück zur Welt
|
||||||
|
child.global_transform = global_tf
|
||||||
|
if child is Area3D and child.name.contains('Battery'):
|
||||||
|
print('battery falling')
|
||||||
|
print(child.position)
|
||||||
|
child.position.y = child.position.y - child.new_y_diff
|
||||||
|
print(child.position)
|
||||||
|
child.set_picture()
|
||||||
|
|
||||||
|
# if RigidBody3D: activate physics again
|
||||||
|
if child is RigidBody3D:
|
||||||
|
child.freeze = false
|
||||||
|
child.gravity_scale = 1.0
|
||||||
|
|
||||||
|
# start coroutine for delay + fade out
|
||||||
|
await fade_and_destroy()
|
||||||
|
|
||||||
|
func fade_and_destroy() -> void:
|
||||||
|
# wait 10 seconds
|
||||||
|
await get_tree().create_timer(wait_time).timeout
|
||||||
|
|
||||||
|
# create tween and play it
|
||||||
|
var tween = create_tween()
|
||||||
|
tween.tween_property($label, "modulate:a", 0.0, 0.5) # 2 Sekunden FadeOut
|
||||||
|
|
||||||
|
# wait til tween is finished
|
||||||
|
await tween.finished
|
||||||
|
|
||||||
|
# delete node
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||||
|
if anim_name == 'pop':
|
||||||
|
$popped_balloon.visible = false
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dgai8blbmru22
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,16 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
@export var balloon_resource: String = "res://Resources/meshes/dog.tres"
|
||||||
|
signal balloon_chosen
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
$Balloon_model.mesh = load(balloon_resource)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_area_3d_body_entered(body: Node3D) -> void:
|
||||||
|
if not body.is_in_group("throwable") and not body is Player:
|
||||||
|
return
|
||||||
|
balloon_chosen.emit(balloon_resource)
|
||||||
|
|
||||||
|
func set_mesh(mesh: String):
|
||||||
|
$Balloon_model.mesh = load(mesh)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://cffy3itwwknc7
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://ccdju064l1xg0"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cffy3itwwknc7" path="res://Resources/Objects/balloon_collectable.gd" id="1_3uo3v"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://jlkdee0elxgj" path="res://Resources/meshes/dog.tres" id="1_lsomq"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://m3hcjcox5dkf" path="res://Resources/meshes/balloon_string_curved.tres" id="2_3uo3v"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_l0yg6"]
|
||||||
|
radius = 0.8
|
||||||
|
|
||||||
|
[node name="Balloon" type="Node3D"]
|
||||||
|
script = ExtResource("1_3uo3v")
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.32942295, 0)
|
||||||
|
collision_layer = 33
|
||||||
|
collision_mask = 33
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||||
|
shape = SubResource("CapsuleShape3D_l0yg6")
|
||||||
|
|
||||||
|
[node name="Balloon_model" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.28870273, 0)
|
||||||
|
mesh = ExtResource("1_lsomq")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
|
||||||
|
[node name="Cylinder_049" type="MeshInstance3D" parent="Balloon_model"]
|
||||||
|
transform = Transform3D(0.40000004, 0, 0, 0, 0.40000004, 0, 0, 0, 0.40000004, 0, -0.38572907, 0)
|
||||||
|
mesh = ExtResource("2_3uo3v")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
extends Grabbable_Object
|
||||||
|
class_name Battery
|
||||||
|
|
||||||
|
@export var stored_power: int = 50
|
||||||
|
@export var battery_label: String
|
||||||
|
var connected_station: Node3D = null
|
||||||
|
var original_transform: Transform3D
|
||||||
|
var grabbed_parent
|
||||||
|
var lamp_color
|
||||||
|
@onready var battery_lamp_0: CSGSphere3D = $Battery/Battery_lamp_0
|
||||||
|
@export var image_path: String = "res://assets/Images/EU_AI_Act_logo_main.png"
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
lamp_color = battery_lamp_0.material.albedo_color
|
||||||
|
$Sprite3D.texture = load(image_path)
|
||||||
|
|
||||||
|
func insert_into_station(station: Node3D):
|
||||||
|
if connected_station:
|
||||||
|
return
|
||||||
|
connected_station = station
|
||||||
|
grabbed_parent = get_parent()
|
||||||
|
original_transform = global_transform
|
||||||
|
|
||||||
|
# put battery inot box
|
||||||
|
grabbed_parent.remove_child(self)
|
||||||
|
station.add_child(self)
|
||||||
|
self.visible = false
|
||||||
|
self.freeze = true
|
||||||
|
|
||||||
|
if station.has_method("insert_battery"):
|
||||||
|
station.insert_battery(self)
|
||||||
|
|
||||||
|
func remove_from_station():
|
||||||
|
if not connected_station:
|
||||||
|
return null
|
||||||
|
|
||||||
|
var station = connected_station
|
||||||
|
connected_station = null
|
||||||
|
|
||||||
|
|
||||||
|
# get battery back out
|
||||||
|
if original_parent:
|
||||||
|
station.remove_child(self)
|
||||||
|
grabbed_parent.add_child(self)
|
||||||
|
global_transform = original_transform
|
||||||
|
|
||||||
|
self.visible = true
|
||||||
|
self.freeze = false
|
||||||
|
|
||||||
|
return self
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://buxph0fig58vk
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
|
|||||||
|
extends Area3D
|
||||||
|
|
||||||
|
@export var new_y_diff = 0.0
|
||||||
|
@export var image_path: String = "res://assets/Images/EU_AI_Act_logo_main.png"
|
||||||
|
|
||||||
|
signal battery_collected
|
||||||
|
|
||||||
|
func set_picture() -> void:
|
||||||
|
print('setting picture: ', image_path)
|
||||||
|
$Sprite3D.texture = load(image_path)
|
||||||
|
$Sprite3D.visible = true
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node) -> void:
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
|
await get_tree().create_timer(0.1).timeout
|
||||||
|
Global.batteries += 1
|
||||||
|
battery_collected.emit()
|
||||||
|
queue_free()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://blrm6oxhr4c5l
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,150 @@
|
|||||||
|
extends StaticBody3D
|
||||||
|
class_name BatteryBox2
|
||||||
|
|
||||||
|
@onready var ai_threat: Label3D = $AI_threat/AI_threat_label
|
||||||
|
@onready var box_battery = $Battery
|
||||||
|
@onready var battery_lamp_0:= $battery_lamp_0
|
||||||
|
@onready var battery_lamp_1:= $battery_lamp_1
|
||||||
|
@onready var status_lamps = [
|
||||||
|
$Status/status_0,
|
||||||
|
$Status/status_1,
|
||||||
|
$Status/status_2,
|
||||||
|
$Status/status_3,
|
||||||
|
$Status/status_4
|
||||||
|
]
|
||||||
|
|
||||||
|
@export var power_needed: int = 50
|
||||||
|
@export var max_power: int = 100
|
||||||
|
@export var display_text: String
|
||||||
|
var current_power: int = 0
|
||||||
|
var battery_obj: Battery = null
|
||||||
|
var blink_timer: Timer
|
||||||
|
var color_dict = {25: Color(0.0, 1.697, 0.0),
|
||||||
|
50: Color(1.697, 1.697, 0.0),
|
||||||
|
75: Color(1.697, 0.85, 0.0),
|
||||||
|
100: Color(1.697, 0.0, 0.0)}
|
||||||
|
|
||||||
|
signal removed_battery
|
||||||
|
signal fully_charged
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
blink_timer = Timer.new()
|
||||||
|
blink_timer.wait_time = 0.3
|
||||||
|
blink_timer.one_shot = false
|
||||||
|
blink_timer.timeout.connect(_on_blink_timeout)
|
||||||
|
add_child(blink_timer)
|
||||||
|
ai_threat.text = display_text
|
||||||
|
for lamp in status_lamps:
|
||||||
|
lamp.visible = true
|
||||||
|
if lamp.get_surface_override_material(0) == null:
|
||||||
|
var material = StandardMaterial3D.new()
|
||||||
|
lamp.set_surface_override_material(0, material)
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||||
|
var material_b0 = battery_lamp_0.mesh.surface_get_material(0).duplicate()
|
||||||
|
battery_lamp_0.mesh.surface_set_material(0, material_b0)
|
||||||
|
var material_b1 = battery_lamp_1.mesh.surface_get_material(0).duplicate()
|
||||||
|
battery_lamp_1.mesh.surface_set_material(0, material_b1)
|
||||||
|
|
||||||
|
func insert_battery(battery: Battery) -> void:
|
||||||
|
battery_obj = battery
|
||||||
|
current_power = battery_obj.stored_power
|
||||||
|
var lamp_color = color_dict[current_power]
|
||||||
|
battery_lamp_0.mesh.surface_get_material(0).albedo_color = lamp_color
|
||||||
|
battery_lamp_1.mesh.surface_get_material(0).albedo_color = lamp_color
|
||||||
|
box_battery.visible = true
|
||||||
|
update_status_lamps(battery_obj)
|
||||||
|
|
||||||
|
func remove_battery() -> Battery:
|
||||||
|
$Sprite3D.visible = false
|
||||||
|
var temp_battery = battery_obj
|
||||||
|
battery_obj = null
|
||||||
|
if current_power == power_needed:
|
||||||
|
removed_battery.emit()
|
||||||
|
current_power = 0
|
||||||
|
box_battery.visible = false
|
||||||
|
blink_timer.stop()
|
||||||
|
|
||||||
|
for lamp in status_lamps:
|
||||||
|
if lamp.get_surface_override_material(0) == null:
|
||||||
|
var material = StandardMaterial3D.new()
|
||||||
|
lamp.set_surface_override_material(0, material)
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||||
|
lamp.visible = true
|
||||||
|
|
||||||
|
battery_lamp_0.mesh.surface_get_material(0).albedo_color = Color.DIM_GRAY
|
||||||
|
battery_lamp_1.mesh.surface_get_material(0).albedo_color = Color.DIM_GRAY
|
||||||
|
|
||||||
|
temp_battery.remove_from_station()
|
||||||
|
return temp_battery
|
||||||
|
|
||||||
|
func update_status_lamps(battery_obj: Battery) -> void:
|
||||||
|
# ratio between current_power and power_needed
|
||||||
|
var ratio: float = 0.0
|
||||||
|
if power_needed != 0:
|
||||||
|
ratio = float(current_power) / float(power_needed)
|
||||||
|
ratio = clamp(ratio, 0.0, 1.0)
|
||||||
|
|
||||||
|
# count of lamps that should be colored (0..len)
|
||||||
|
var lamps_to_light: int = ceil(ratio * status_lamps.size())
|
||||||
|
# special cases: exactly full or overloaded
|
||||||
|
var is_full := current_power == power_needed
|
||||||
|
var is_over := current_power > power_needed
|
||||||
|
if is_full:
|
||||||
|
play_sounds('insert_correct')
|
||||||
|
fully_charged.emit()
|
||||||
|
$Sprite3D.texture = load(battery_obj.image_path)
|
||||||
|
$Sprite3D.visible = true
|
||||||
|
# update each lamp
|
||||||
|
for i in range(lamps_to_light):
|
||||||
|
var lamp = status_lamps[i]
|
||||||
|
# secure that material is there
|
||||||
|
if lamp.get_surface_override_material(0) == null:
|
||||||
|
var material = StandardMaterial3D.new()
|
||||||
|
lamp.set_surface_override_material(0, material)
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.GREEN
|
||||||
|
|
||||||
|
|
||||||
|
if is_over:
|
||||||
|
play_sounds('insert_false')
|
||||||
|
# too much -> all red
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.RED
|
||||||
|
lamp.visible = true
|
||||||
|
elif is_full:
|
||||||
|
# exaclty full -> all green
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.GREEN
|
||||||
|
lamp.visible = true
|
||||||
|
|
||||||
|
else:
|
||||||
|
# off / grey
|
||||||
|
play_sounds('insert_false')
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.YELLOW
|
||||||
|
lamp.visible = true
|
||||||
|
await get_tree().create_timer(0.3).timeout
|
||||||
|
|
||||||
|
# blink if overloaded
|
||||||
|
if is_over:
|
||||||
|
if not blink_timer.is_stopped():
|
||||||
|
# timer is running -> nothing
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
blink_timer.start()
|
||||||
|
else:
|
||||||
|
blink_timer.stop()
|
||||||
|
# make sure that all are visible (if blinking before)
|
||||||
|
for lamp in status_lamps:
|
||||||
|
lamp.visible = true
|
||||||
|
|
||||||
|
func _on_blink_timeout() -> void:
|
||||||
|
# in case of too much power: lamps blink (toggle visibility)
|
||||||
|
if current_power > power_needed:
|
||||||
|
for lamp in status_lamps:
|
||||||
|
if lamp.get_surface_override_material(0).albedo_color == Color.DIM_GRAY:
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.RED
|
||||||
|
else:
|
||||||
|
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||||
|
|
||||||
|
func play_sounds(soundname: String) -> void:
|
||||||
|
if soundname == 'insert_correct':
|
||||||
|
$audio_right.play()
|
||||||
|
elif soundname == 'insert_false':
|
||||||
|
$audio_false.play()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ctgkbxok3s47x
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,24 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://dw48drx137ih2"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://b8c8vph26uu41" path="res://Interact/grabbable_object.gd" id="1_8qqxd"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qncar"]
|
||||||
|
albedo_color = Color(0.53, 1, 0.9451667, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_qncar"]
|
||||||
|
material = SubResource("StandardMaterial3D_qncar")
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_im0tn"]
|
||||||
|
|
||||||
|
[node name="Block" type="RigidBody3D"]
|
||||||
|
collision_layer = 4
|
||||||
|
collision_mask = 7
|
||||||
|
mass = 0.001
|
||||||
|
continuous_cd = true
|
||||||
|
script = ExtResource("1_8qqxd")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("BoxMesh_qncar")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
shape = SubResource("BoxShape3D_im0tn")
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cq0h8h7icvfe0"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://dxs6dl0kt33hf" path="res://Resources/meshes/bridge.tres" id="1_5r8xi"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_h7pgn"]
|
||||||
|
size = Vector3(22, 0.2, 2.5)
|
||||||
|
|
||||||
|
[node name="bridge" type="StaticBody3D"]
|
||||||
|
transform = Transform3D(0.99701, -0.0772759, 0, 0.0772759, 0.99701, 0, 0, 0, 1, 0, 0, 0)
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 13
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, 0, 1.194, 0)
|
||||||
|
mesh = ExtResource("1_5r8xi")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.195, 0)
|
||||||
|
shape = SubResource("BoxShape3D_h7pgn")
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cekwmmeqhnt8c"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://2k22inm231b5" path="res://Resources/meshes/fence.tres" id="1_cvhob"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||||
|
size = Vector3(0.211, 10, 1.981)
|
||||||
|
|
||||||
|
[node name="Fence" type="StaticBody3D"]
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 9
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3103899, 0)
|
||||||
|
mesh = ExtResource("1_cvhob")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 5.002912, -0.00012207031)
|
||||||
|
shape = SubResource("BoxShape3D_mfgll")
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cxdft2gl865c8"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://blqyd0o0ggy2t" path="res://Resources/meshes/fence_broken.tres" id="1_s6vr1"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||||
|
size = Vector3(0.211, 0.9, 1.981)
|
||||||
|
|
||||||
|
[node name="Fence" type="StaticBody3D"]
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 9
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3234521, -0.02176714)
|
||||||
|
mesh = ExtResource("1_s6vr1")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 0.4515351, -0.00012207031)
|
||||||
|
shape = SubResource("BoxShape3D_mfgll")
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cbiyc2os4l2le"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cp8pmyubrkik5" path="res://Resources/meshes/fence_left.tres" id="1_xstg8"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||||
|
size = Vector3(0.211, 10, 1.981)
|
||||||
|
|
||||||
|
[node name="FenceLeft" type="StaticBody3D"]
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 9
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.230836, 0)
|
||||||
|
mesh = ExtResource("1_xstg8")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 4.9100523, -0.00012207031)
|
||||||
|
shape = SubResource("BoxShape3D_mfgll")
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://78ini7csghyn"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://3dws0pbmut6j" path="res://Resources/meshes/fence_right.tres" id="1_2kidb"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||||
|
size = Vector3(0.211, 10, 1.981)
|
||||||
|
|
||||||
|
[node name="FenceRight" type="StaticBody3D"]
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 9
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3164206, 0)
|
||||||
|
mesh = ExtResource("1_2kidb")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 4.9798994, -0.00012207031)
|
||||||
|
shape = SubResource("BoxShape3D_mfgll")
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
[gd_scene load_steps=5 format=4 uid="uid://sdytd17xrx81"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xantc"]
|
||||||
|
resource_name = "black"
|
||||||
|
cull_mode = 2
|
||||||
|
albedo_color = Color(0, 0, 0, 1)
|
||||||
|
roughness = 0.5
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_2uyr3"]
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(0.609988, -7.67489e-09, -0.801522, 0.703757, 0.00369327, 1.60304),
|
||||||
|
"format": 34896613377,
|
||||||
|
"index_count": 18,
|
||||||
|
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkA"),
|
||||||
|
"name": "black",
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 12,
|
||||||
|
"vertex_data": PackedByteArray("2iEBAP//AAAATgAAAAAAAABOAAD//wAA2iEBAAAAAAAAAP//v90AAP///v/zywAA///+/7/dAAAAAP//88sAAAAA//9/NAAA///+/7MiAAD///7/fzQAAAAA//+zIgAA")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_duw40"]
|
||||||
|
resource_name = "assets_Plane_007"
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(0.609988, -7.67489e-09, -0.801522, 0.703757, 0.00369327, 1.60304),
|
||||||
|
"attribute_data": PackedByteArray("AAD/////AAD/////AAAAAAAA/////wAA/////wAAAAAAAP////8AAP////8AAAAA"),
|
||||||
|
"format": 34896613399,
|
||||||
|
"index_count": 18,
|
||||||
|
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkA"),
|
||||||
|
"material": SubResource("StandardMaterial3D_xantc"),
|
||||||
|
"name": "black",
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 12,
|
||||||
|
"vertex_data": PackedByteArray("2iEBAP///78ATgAAAAD/vwBOAAD///+/2iEBAAAA/78AAP//v93/v////v/zy/+////+/7/d/78AAP//88v/vwAA//9/NP+////+/7Mi/7////7/fzT/vwAA//+zIv+//v//f/7//3/+//9//v//f////3////9/////f////3////9/////f////3////9/")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
shadow_mesh = SubResource("ArrayMesh_2uyr3")
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_t0hol"]
|
||||||
|
size = Vector3(0.3, 0.1, 1.55)
|
||||||
|
|
||||||
|
[node name="fence_small" type="StaticBody3D"]
|
||||||
|
collision_layer = 4
|
||||||
|
|
||||||
|
[node name="Schranke" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("ArrayMesh_duw40")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(0.997626, -0.0688685, 0, 0.0688685, 0.997626, 0, 0, 0, 1, 0.81965, 0.0212097, -0.00942993)
|
||||||
|
shape = SubResource("BoxShape3D_t0hol")
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
[gd_scene load_steps=7 format=3 uid="uid://1oady27a34wi"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://bivev0gbnbo5t" path="res://npc.gd" id="1_6jshr"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ctx8osel3k43n" path="res://check_collision_wall.tscn" id="2_nwv0p"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bhihpqj7er21q" path="res://check_collision_npc.tscn" id="3_e80nv"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dl4nljdcflehk" path="res://helper.tscn" id="4_nwv0p"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_6jshr"]
|
||||||
|
size = Vector3(0.5161743, 1.3706055, 0.501709)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_nwv0p"]
|
||||||
|
size = Vector3(1.2747803, 1.223877, 1.4574585)
|
||||||
|
|
||||||
|
[node name="NPC" type="CharacterBody3D"]
|
||||||
|
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 7
|
||||||
|
script = ExtResource("1_6jshr")
|
||||||
|
prompt_message = "drücken Sie [t] oder [Enter]"
|
||||||
|
talkable = true
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.037261963, -0.04911697, -0.022094727)
|
||||||
|
shape = SubResource("BoxShape3D_6jshr")
|
||||||
|
|
||||||
|
[node name="RayCast3D" parent="." instance=ExtResource("2_nwv0p")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.55272627, -0.076056)
|
||||||
|
|
||||||
|
[node name="InteractionChecker" type="Area3D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractionChecker"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0037231457, -0.060058594, 0.22872925)
|
||||||
|
shape = SubResource("BoxShape3D_nwv0p")
|
||||||
|
|
||||||
|
[node name="RayCast3D2" parent="." instance=ExtResource("3_e80nv")]
|
||||||
|
|
||||||
|
[node name="helper" parent="." instance=ExtResource("4_nwv0p")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.3250453e-09, -0.54445666, -0.060911417)
|
||||||
|
|
||||||
|
[node name="Label3D" type="Label3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3886542, 0)
|
||||||
|
billboard = 1
|
||||||
|
text = "Rede mit mir!
|
||||||
|
(t / Enter)
|
||||||
|
|
|
||||||
|
|
|
||||||
|
\\/"
|
||||||
|
font_size = 42
|
||||||
|
outline_size = 8
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="InteractionChecker" to="." method="_on_interaction_checker_body_entered"]
|
||||||
|
[connection signal="body_exited" from="InteractionChecker" to="." method="_on_interaction_checker_body_exited"]
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cbg71qd7mr1a5"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cx3mytwy5a0ld" path="res://Resources/meshes/plane.tres" id="1_5clto"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_e4xu0"]
|
||||||
|
size = Vector3(2.2, 0.1, 2.1)
|
||||||
|
|
||||||
|
[node name="bridge2" type="StaticBody3D"]
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 13
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(0.103683256, 0, 0, 0, 0.71690935, 0, 0, 0, 1.082177, 0, 0, 0)
|
||||||
|
mesh = ExtResource("1_5clto")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
shape = SubResource("BoxShape3D_e4xu0")
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
@export var required_weight: float = 5.0
|
||||||
|
@export var active_color: Color = Color(0, 1, 0)
|
||||||
|
@export var inactive_color: Color = Color(1, 0, 0)
|
||||||
|
@export var text_on_activation: String
|
||||||
|
|
||||||
|
@onready var area: Area3D = $Area3D
|
||||||
|
@onready var mesh: MeshInstance3D = $MeshInstance3D
|
||||||
|
@onready var static_body: StaticBody3D = $StaticBody3D
|
||||||
|
signal activated
|
||||||
|
signal deactivated
|
||||||
|
|
||||||
|
var current_weight: float = 0.0
|
||||||
|
var is_active: bool = false
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
mesh.material_override = StandardMaterial3D.new()
|
||||||
|
mesh.material_override.albedo_color = inactive_color
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
|
print("body entered")
|
||||||
|
print(body)
|
||||||
|
var w = _get_body_weight(body)
|
||||||
|
if w > 0:
|
||||||
|
current_weight += w
|
||||||
|
_check_weight()
|
||||||
|
|
||||||
|
func _on_body_exited(body: Node3D) -> void:
|
||||||
|
var w = _get_body_weight(body)
|
||||||
|
if w > 0:
|
||||||
|
current_weight -= w
|
||||||
|
_check_weight()
|
||||||
|
|
||||||
|
func _get_body_weight(body: Node3D) -> float:
|
||||||
|
if body.has_method("get_weight"):
|
||||||
|
return body.get_weight()
|
||||||
|
elif body is RigidBody3D:
|
||||||
|
return body.mass
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
func _check_weight() -> void:
|
||||||
|
var active_now = current_weight >= required_weight
|
||||||
|
if active_now != is_active:
|
||||||
|
is_active = active_now
|
||||||
|
_update_visuals()
|
||||||
|
if is_active:
|
||||||
|
_on_activated()
|
||||||
|
else:
|
||||||
|
_on_deactivated()
|
||||||
|
|
||||||
|
func _update_visuals():
|
||||||
|
mesh.material_override.albedo_color = active_color if is_active else inactive_color
|
||||||
|
|
||||||
|
var target_pos_y = -0.05 if is_active else 0.0
|
||||||
|
var tween = get_tree().create_tween()
|
||||||
|
|
||||||
|
# Bewege sowohl das sichtbare Mesh als auch den Kollisionskörper nach unten
|
||||||
|
tween.tween_property(mesh, "position:y", target_pos_y, 0.2)\
|
||||||
|
.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
|
||||||
|
tween.tween_property(static_body, "position:y", target_pos_y, 0.2)\
|
||||||
|
.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _on_activated():
|
||||||
|
print("Pressure block activated! Total weight =", current_weight)
|
||||||
|
activated.emit()
|
||||||
|
|
||||||
|
func _on_deactivated():
|
||||||
|
print("Pressure block deactivated!")
|
||||||
|
deactivated.emit()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://debptt7fdw0mw
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://dvjxy8tyaxcjr"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://debptt7fdw0mw" path="res://Resources/Objects/pressure_block.gd" id="1_adrnk"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_mjcge"]
|
||||||
|
size = Vector3(1, 0.5, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_adrnk"]
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_adrnk"]
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[node name="PressureBlock" type="Node3D"]
|
||||||
|
script = ExtResource("1_adrnk")
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.46808624, 0)
|
||||||
|
collision_layer = 4
|
||||||
|
collision_mask = 5
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.26072478, 0)
|
||||||
|
shape = SubResource("BoxShape3D_mjcge")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("BoxMesh_adrnk")
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
collision_layer = 4
|
||||||
|
collision_mask = 4
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
shape = SubResource("BoxShape3D_adrnk")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="Area3D" to="." method="_on_body_entered"]
|
||||||
|
[connection signal="body_exited" from="Area3D" to="." method="_on_body_exited"]
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
extends Node3D
|
||||||
|
class_name QuizBox
|
||||||
|
|
||||||
|
@export var question: String
|
||||||
|
@export var correct: int
|
||||||
|
@export var answer_0: String
|
||||||
|
@export var answer_1: String
|
||||||
|
@export var answer_2: String
|
||||||
|
@export var answer_3: String
|
||||||
|
|
||||||
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||||
|
@onready var quiz_light: CSGSphere3D = $quiz_box_sb/quiz_box/quiz_light
|
||||||
|
|
||||||
|
@onready var answer_pad_0: Area3D = $answers/answer_pad_0/Area3D
|
||||||
|
@onready var answer_pad_1: Area3D = $answers/answer_pad_1/Area3D
|
||||||
|
@onready var answer_pad_2: Area3D = $answers/answer_pad_2/Area3D
|
||||||
|
@onready var answer_pad_3: Area3D = $answers/answer_pad_3/Area3D
|
||||||
|
|
||||||
|
@onready var answer_0_label: Label3D = $answers/answer_pad_0/answer_0_label
|
||||||
|
@onready var answer_1_label: Label3D = $answers/answer_pad_1/answer_1_label
|
||||||
|
@onready var answer_2_label: Label3D = $answers/answer_pad_2/answer_2_label
|
||||||
|
@onready var answer_3_label: Label3D = $answers/answer_pad_3/answer_3_label
|
||||||
|
|
||||||
|
@onready var question_label: Label3D = $StaticBody3D/Wall/question_label
|
||||||
|
|
||||||
|
var answered_correctly := false
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
# Texte setzen
|
||||||
|
question_label.text = question
|
||||||
|
answer_0_label.text = answer_0
|
||||||
|
answer_1_label.text = answer_1
|
||||||
|
answer_2_label.text = answer_2
|
||||||
|
answer_3_label.text = answer_3
|
||||||
|
|
||||||
|
# Signale verbinden
|
||||||
|
answer_pad_0.body_entered.connect(_on_answer_entered.bind(0))
|
||||||
|
answer_pad_1.body_entered.connect(_on_answer_entered.bind(1))
|
||||||
|
answer_pad_2.body_entered.connect(_on_answer_entered.bind(2))
|
||||||
|
answer_pad_3.body_entered.connect(_on_answer_entered.bind(3))
|
||||||
|
|
||||||
|
# WICHTIG: Material duplizieren, damit es nicht mit anderen Instanzen geteilt wird
|
||||||
|
if quiz_light.material != null:
|
||||||
|
# tiefe Kopie (alle Subressourcen mitduplizieren)
|
||||||
|
quiz_light.material = quiz_light.material.duplicate(true)
|
||||||
|
else:
|
||||||
|
quiz_light.material = StandardMaterial3D.new()
|
||||||
|
|
||||||
|
# Grundeinstellungen für diese Instanz
|
||||||
|
quiz_light.material.emission_enabled = true
|
||||||
|
quiz_light.material.emission_energy = 0.5
|
||||||
|
quiz_light.material.albedo_color = Color.WHITE
|
||||||
|
quiz_light.material.emission = Color.WHITE
|
||||||
|
|
||||||
|
func _on_answer_entered(body: Node3D, answer_index: int) -> void:
|
||||||
|
if not body.is_in_group("player"):
|
||||||
|
return # Nur Player soll triggern
|
||||||
|
|
||||||
|
# Wenn schon korrekt beantwortet, nichts tun
|
||||||
|
if answered_correctly:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Prüfen und nur DIESE Instanzlampe setzen
|
||||||
|
if answer_index == correct:
|
||||||
|
_set_light_color(Color.GREEN)
|
||||||
|
question_label.visible = false
|
||||||
|
animation_player.play("open_door")
|
||||||
|
answered_correctly = true
|
||||||
|
else:
|
||||||
|
_set_light_color(Color.RED)
|
||||||
|
# optional: nach kurzer Zeit zurücksetzen, damit neu versucht werden kann
|
||||||
|
await get_tree().create_timer(1.0).timeout
|
||||||
|
_set_light_color(Color.WHITE)
|
||||||
|
|
||||||
|
func _set_light_color(color: Color) -> void:
|
||||||
|
# Setze nur das Material dieser Instanz
|
||||||
|
if quiz_light.material == null:
|
||||||
|
quiz_light.material = StandardMaterial3D.new()
|
||||||
|
quiz_light.material.albedo_color = color
|
||||||
|
quiz_light.material.emission = color
|
||||||
|
# erhöhe kurz die Emission für Sichtbarkeit bei Farben außer weiß
|
||||||
|
quiz_light.material.emission_energy = 1.5 if color != Color.WHITE else 0.5
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://caan28e6gl7fk
|
||||||
@@ -0,0 +1,217 @@
|
|||||||
|
[gd_scene load_steps=11 format=3 uid="uid://c45ex56io7rv7"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://caan28e6gl7fk" path="res://Resources/Objects/quiz_object.gd" id="1_ybh4a"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ybh4a"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_6mevd"]
|
||||||
|
size = Vector3(1, 2, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_ybh4a"]
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_ybh4a"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "position_3d"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, -2, 0, 0)
|
||||||
|
tracks/1/type = "position_3d"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 2, 0, 0)
|
||||||
|
tracks/2/type = "position_3d"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door_cs")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, -2, 0, 0)
|
||||||
|
tracks/3/type = "position_3d"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door_cs")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, 2, 0, 0)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_5clbn"]
|
||||||
|
resource_name = "open_door"
|
||||||
|
length = 2.0
|
||||||
|
tracks/0/type = "position_3d"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, -2, 0, 0, 2, 1, -5, 0, 0)
|
||||||
|
tracks/1/type = "position_3d"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 2, 0, 0, 2, 1, 5, 0, 0)
|
||||||
|
tracks/2/type = "position_3d"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door_cs")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 2, 0, 0, 2, 1, 5, 0, 0)
|
||||||
|
tracks/3/type = "position_3d"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door_cs")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -2, 0, 0, 2, 1, -5, 0, 0)
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_402uq"]
|
||||||
|
_data = {
|
||||||
|
&"RESET": SubResource("Animation_ybh4a"),
|
||||||
|
&"open_door": SubResource("Animation_5clbn")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_402uq"]
|
||||||
|
size = Vector3(5, 6, 0.5)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_584uj"]
|
||||||
|
size = Vector3(4, 6, 0.2)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_resk5"]
|
||||||
|
size = Vector3(4, 6, 0.2)
|
||||||
|
|
||||||
|
[node name="quiz_object" type="Node3D"]
|
||||||
|
script = ExtResource("1_ybh4a")
|
||||||
|
|
||||||
|
[node name="quiz_box_sb" type="StaticBody3D" parent="."]
|
||||||
|
|
||||||
|
[node name="quiz_box" type="CSGBox3D" parent="quiz_box_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||||
|
|
||||||
|
[node name="quiz_light" type="CSGSphere3D" parent="quiz_box_sb/quiz_box"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9793253, 0)
|
||||||
|
material = SubResource("StandardMaterial3D_ybh4a")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="quiz_box_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_6mevd")
|
||||||
|
|
||||||
|
[node name="answers" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="answer_pad_0" type="CSGBox3D" parent="answers"]
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[node name="answer_0_label" type="Label3D" parent="answers/answer_pad_0"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
autowrap_mode = 2
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="answers/answer_pad_0"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_0/Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||||
|
shape = SubResource("BoxShape3D_ybh4a")
|
||||||
|
|
||||||
|
[node name="answer_pad_1" type="CSGBox3D" parent="answers"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0, 0)
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[node name="answer_1_label" type="Label3D" parent="answers/answer_pad_1"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
autowrap_mode = 2
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="answers/answer_pad_1"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_1/Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||||
|
shape = SubResource("BoxShape3D_ybh4a")
|
||||||
|
|
||||||
|
[node name="answer_pad_2" type="CSGBox3D" parent="answers"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0)
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[node name="answer_2_label" type="Label3D" parent="answers/answer_pad_2"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
autowrap_mode = 2
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="answers/answer_pad_2"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_2/Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||||
|
shape = SubResource("BoxShape3D_ybh4a")
|
||||||
|
|
||||||
|
[node name="answer_pad_3" type="CSGBox3D" parent="answers"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0, 0)
|
||||||
|
size = Vector3(1, 0.1, 1)
|
||||||
|
|
||||||
|
[node name="answer_3_label" type="Label3D" parent="answers/answer_pad_3"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
autowrap_mode = 2
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="answers/answer_pad_3"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_3/Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||||
|
shape = SubResource("BoxShape3D_ybh4a")
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
&"": SubResource("AnimationLibrary_402uq")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
collision_layer = 7
|
||||||
|
collision_mask = 7
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, -4)
|
||||||
|
shape = SubResource("BoxShape3D_402uq")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 3, -4)
|
||||||
|
shape = SubResource("BoxShape3D_402uq")
|
||||||
|
|
||||||
|
[node name="Wall" type="CSGBox3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.25, 3, -4)
|
||||||
|
size = Vector3(16, 6, 0.5)
|
||||||
|
|
||||||
|
[node name="door_space" type="CSGSphere3D" parent="StaticBody3D/Wall"]
|
||||||
|
operation = 2
|
||||||
|
radius = 3.1
|
||||||
|
rings = 10
|
||||||
|
|
||||||
|
[node name="question_label" type="Label3D" parent="StaticBody3D/Wall"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.18187094)
|
||||||
|
font_size = 64
|
||||||
|
autowrap_mode = 2
|
||||||
|
width = 1000.0
|
||||||
|
|
||||||
|
[node name="left_door_sb" type="StaticBody3D" parent="StaticBody3D/Wall"]
|
||||||
|
collision_layer = 7
|
||||||
|
collision_mask = 7
|
||||||
|
|
||||||
|
[node name="left_door" type="CSGBox3D" parent="StaticBody3D/Wall/left_door_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||||
|
size = Vector3(4, 6, 0.2)
|
||||||
|
|
||||||
|
[node name="left_door_cs" type="CollisionShape3D" parent="StaticBody3D/Wall/left_door_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||||
|
shape = SubResource("BoxShape3D_584uj")
|
||||||
|
|
||||||
|
[node name="right_door_sb" type="StaticBody3D" parent="StaticBody3D/Wall"]
|
||||||
|
collision_layer = 7
|
||||||
|
collision_mask = 7
|
||||||
|
|
||||||
|
[node name="right_door" type="CSGBox3D" parent="StaticBody3D/Wall/right_door_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
|
||||||
|
size = Vector3(4, 6, 0.2)
|
||||||
|
|
||||||
|
[node name="right_door_cs" type="CollisionShape3D" parent="StaticBody3D/Wall/right_door_sb"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
|
||||||
|
shape = SubResource("BoxShape3D_resk5")
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
extends RigidBody3D
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
await get_tree().create_timer(10.0).timeout
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node) -> void:
|
||||||
|
gravity_scale = 1.0
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dwc5ak0wgd6aj
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
$Armature/Skeleton3D/Cube_001.mesh = load(Global.mesh_resource_player)
|
||||||
|
|
||||||
|
if Global.balloon_collected == true:
|
||||||
|
$Balloon.visible = true
|
||||||
|
$Balloon.set_mesh(Global.resource_balloon)
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dre5qo5tbisfv
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://drtpl8y1pojrc"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dra235mdhf5nv" path="res://assets/astronaut_gw-v2_rig.glb" id="1_qv5ss"]
|
||||||
|
[ext_resource type="Script" uid="uid://dre5qo5tbisfv" path="res://Resources/Players/astronaut_for_animation.gd" id="2_7h4jy"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cnkc0coob8mu" path="res://Resources/meshes/player_uniGW2.tres" id="3_pfcjo"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ccdju064l1xg0" path="res://Resources/Objects/balloon_collectable.tscn" id="3_t7xo6"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dl4nljdcflehk" path="res://helper.tscn" id="4_t7xo6"]
|
||||||
|
|
||||||
|
[node name="astronaut" instance=ExtResource("1_qv5ss")]
|
||||||
|
script = ExtResource("2_7h4jy")
|
||||||
|
|
||||||
|
[node name="Skeleton3D" parent="Armature" index="0"]
|
||||||
|
bones/1/rotation = Quaternion(0, 0, -0.024488833, 0.9997001)
|
||||||
|
bones/3/rotation = Quaternion(7.424678e-08, 3.9001097e-08, -0.4683429, 0.8835468)
|
||||||
|
bones/5/rotation = Quaternion(2.4243334e-08, 6.898198e-08, 0.4388793, 0.89854604)
|
||||||
|
bones/7/rotation = Quaternion(-0.7071068, -2.6692543e-08, 2.6692543e-08, 0.7071068)
|
||||||
|
bones/10/rotation = Quaternion(-0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068)
|
||||||
|
|
||||||
|
[node name="Cube_001" parent="Armature/Skeleton3D" index="0"]
|
||||||
|
mesh = ExtResource("3_pfcjo")
|
||||||
|
|
||||||
|
[node name="Balloon" parent="." index="2" instance=ExtResource("3_t7xo6")]
|
||||||
|
transform = Transform3D(0.49786475, -0.04615923, 0, 0.04615923, 0.49786475, 0, 0, 0, 0.5, -0.2128411, 1.5290457, -0.5337905)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="helper" type="Node3D" parent="." index="3"]
|
||||||
|
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0.096, 1.141, 0.538)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="helper" parent="helper" index="0" instance=ExtResource("4_t7xo6")]
|
||||||
@@ -0,0 +1,283 @@
|
|||||||
|
extends CharacterBody3D
|
||||||
|
class_name Player
|
||||||
|
|
||||||
|
var speed = 5.0
|
||||||
|
const JUMP_VELOCITY = 12
|
||||||
|
const throw_strength = 50
|
||||||
|
var speeds = [5.0, 2.5, 1.5, 1.0]
|
||||||
|
var animation_player_speeds = [1.5, 1.0, 0.7, 0.5]
|
||||||
|
var counter_speed := 0
|
||||||
|
|
||||||
|
enum PlayerMode {
|
||||||
|
NORMAL,
|
||||||
|
AIM
|
||||||
|
}
|
||||||
|
|
||||||
|
var mode = PlayerMode.NORMAL
|
||||||
|
var xform : Transform3D
|
||||||
|
var grabbed_item : Grabbable_Object
|
||||||
|
var dialogueActive : bool
|
||||||
|
var weight: float = 5.0
|
||||||
|
|
||||||
|
# --- Camera ---
|
||||||
|
var camera_pitch := 0.0
|
||||||
|
var zoom := 5.0
|
||||||
|
|
||||||
|
@export var min_zoom := 1
|
||||||
|
@export var max_zoom := 10.0
|
||||||
|
@export var zoom_speed := 0.5
|
||||||
|
@export var min_pitch := deg_to_rad(-80)
|
||||||
|
@export var max_pitch := deg_to_rad(0)
|
||||||
|
@export var mouse_sensitivity:float = 0.0007
|
||||||
|
|
||||||
|
@onready var camera_3d: Camera3D = $Camera_Controller/Camera_Pivot/Camera3D
|
||||||
|
@onready var crosshair: Control = $Crosshair
|
||||||
|
@onready var spring_arm: SpringArm3D = $Camera_Controller/Camera_Pivot
|
||||||
|
@onready var interact_ray: ShapeCast3D = $InteractRay
|
||||||
|
@onready var chatbot = $Chatbot
|
||||||
|
@onready var env = $".."
|
||||||
|
|
||||||
|
var rock_scene: PackedScene = preload("res://Resources/Objects/rock.tscn")
|
||||||
|
|
||||||
|
signal inventory_opened
|
||||||
|
signal inventory_closed
|
||||||
|
signal chatbot_opened
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
$Camera_Controller.position = position
|
||||||
|
$Armature/Skeleton3D/CharacterMesh.mesh = load(Global.mesh_resource_player)
|
||||||
|
|
||||||
|
camera_pitch = $Camera_Controller/Camera_Pivot.rotation.x
|
||||||
|
zoom = spring_arm.spring_length
|
||||||
|
if DialogueState.currentTask > 1:
|
||||||
|
$AnimationPlayer.play('helper_visible')
|
||||||
|
if Global.balloon_collected == true:
|
||||||
|
print(Global.resource_balloon)
|
||||||
|
_on_balloon_balloon_chosen(Global.resource_balloon)
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if Global.chatbot_opened:
|
||||||
|
return
|
||||||
|
if Input.is_action_just_pressed("help"):
|
||||||
|
if DialogueState.is_dialogue_open == false:
|
||||||
|
DialogueState.is_dialogue_open = true
|
||||||
|
DialogueManager.show_chosen_dialogue_balloon(load("res://Interact/dialogue/helper.dialogue"), "/game_balloons/game_balloon_v_1.tscn", "start", [self, $Player/helper])
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event):
|
||||||
|
if event is InputEventMouseMotion and mode == PlayerMode.NORMAL:
|
||||||
|
$Camera_Controller.rotate_y(-event.relative.x * mouse_sensitivity)
|
||||||
|
|
||||||
|
camera_pitch -= event.relative.y * mouse_sensitivity
|
||||||
|
camera_pitch = clamp(camera_pitch, min_pitch, max_pitch)
|
||||||
|
|
||||||
|
$Camera_Controller/Camera_Pivot.rotation.x = camera_pitch
|
||||||
|
|
||||||
|
if event is InputEventMouseButton and event.pressed:
|
||||||
|
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||||
|
zoom -= zoom_speed
|
||||||
|
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||||
|
zoom += zoom_speed
|
||||||
|
|
||||||
|
zoom = clamp(zoom, min_zoom, max_zoom)
|
||||||
|
spring_arm.spring_length = zoom
|
||||||
|
print(spring_arm.spring_length)
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void:
|
||||||
|
if Global.chatbot_opened or $Inventory.visible:
|
||||||
|
return
|
||||||
|
dialogueActive = DialogueState.is_dialogue_open
|
||||||
|
var thisTime = Time.get_unix_time_from_system()
|
||||||
|
|
||||||
|
# --- DROP / THROW ---
|
||||||
|
if Input.is_action_just_pressed("drop") and grabbed_item:
|
||||||
|
grabbed_item.release(self)
|
||||||
|
$AnimationPlayer.play_backwards("pickup")
|
||||||
|
play_sound('drop')
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("throw") and grabbed_item:
|
||||||
|
grabbed_item.release(self, true)
|
||||||
|
play_sound('drop')
|
||||||
|
|
||||||
|
elif Input.is_action_just_pressed("throw") and not grabbed_item:
|
||||||
|
if mode == PlayerMode.NORMAL:
|
||||||
|
mode = PlayerMode.AIM
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
else:
|
||||||
|
mode = PlayerMode.NORMAL
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
# --- AIM THROW ---
|
||||||
|
elif Input.is_action_just_pressed("click") and mode == PlayerMode.AIM and not dialogueActive and not $Inventory.visible:
|
||||||
|
var mouse_pos = get_viewport().get_mouse_position()
|
||||||
|
|
||||||
|
var ray_origin = camera_3d.project_ray_origin(mouse_pos)
|
||||||
|
var ray_direction = camera_3d.project_ray_normal(mouse_pos)
|
||||||
|
|
||||||
|
var ray_length = 1000
|
||||||
|
var space_state = get_world_3d().direct_space_state
|
||||||
|
var query = PhysicsRayQueryParameters3D.create(
|
||||||
|
ray_origin,
|
||||||
|
ray_origin + ray_direction * ray_length
|
||||||
|
)
|
||||||
|
|
||||||
|
query.exclude = [self]
|
||||||
|
|
||||||
|
#Exclude Boundary Layer (Layer 7)
|
||||||
|
query.collision_mask = ~(1 << 6)
|
||||||
|
var result = space_state.intersect_ray(query)
|
||||||
|
|
||||||
|
var target_position: Vector3
|
||||||
|
if result.size() > 0:
|
||||||
|
target_position = result.position
|
||||||
|
else:
|
||||||
|
target_position = ray_origin + ray_direction * ray_length
|
||||||
|
|
||||||
|
var from = global_transform.origin + Vector3(0, 1.5, 0)
|
||||||
|
var throw_direction = (target_position - from).normalized()
|
||||||
|
|
||||||
|
var rock_instance = rock_scene.instantiate()
|
||||||
|
get_tree().current_scene.add_child(rock_instance)
|
||||||
|
|
||||||
|
var forward_dir = -camera_3d.global_transform.basis.z.normalized()
|
||||||
|
rock_instance.global_transform.origin = from + forward_dir * 1.0
|
||||||
|
|
||||||
|
rock_instance.freeze = false
|
||||||
|
rock_instance.sleeping = false
|
||||||
|
rock_instance.gravity_scale = 0.0
|
||||||
|
rock_instance.linear_velocity = throw_direction * throw_strength
|
||||||
|
|
||||||
|
$AnimationPlayer.play("jump")
|
||||||
|
$audio_throw.play()
|
||||||
|
|
||||||
|
# --- GRAVITY ---
|
||||||
|
if not is_on_floor():
|
||||||
|
velocity += get_gravity() * delta
|
||||||
|
|
||||||
|
# --- JUMP ---
|
||||||
|
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
|
||||||
|
var deltaTime = thisTime - DialogueState.time_since_dialoge_open
|
||||||
|
|
||||||
|
if not dialogueActive and (deltaTime > 0.5):
|
||||||
|
$audio_jump.play()
|
||||||
|
velocity.y = JUMP_VELOCITY
|
||||||
|
$AnimationPlayer.stop()
|
||||||
|
$AnimationPlayer.play("jump")
|
||||||
|
await get_tree().create_timer(0.4).timeout
|
||||||
|
$AnimationPlayer.play_backwards("jump")
|
||||||
|
|
||||||
|
# --- MOVEMENT ---
|
||||||
|
var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||||
|
|
||||||
|
if dialogueActive or $Inventory.visible:
|
||||||
|
input_dir = Vector2.ZERO
|
||||||
|
|
||||||
|
var direction : Vector3 = ($Camera_Controller.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||||
|
|
||||||
|
if input_dir != Vector2.ZERO:
|
||||||
|
self.rotation_degrees.y = $Camera_Controller.rotation_degrees.y - rad_to_deg(input_dir.angle()) - 90
|
||||||
|
|
||||||
|
# --- FLOOR ALIGN ---
|
||||||
|
if is_on_floor() and input_dir != Vector2.ZERO:
|
||||||
|
align_with_floor($RayCast3D.get_collision_normal())
|
||||||
|
global_transform = global_transform.interpolate_with(xform, 0.3)
|
||||||
|
elif not is_on_floor():
|
||||||
|
align_with_floor(Vector3.UP)
|
||||||
|
global_transform = global_transform.interpolate_with(xform, 0.3)
|
||||||
|
|
||||||
|
# --- VELOCITY ---
|
||||||
|
if direction:
|
||||||
|
velocity.x = direction.x * speed
|
||||||
|
velocity.z = direction.z * speed
|
||||||
|
|
||||||
|
if grabbed_item:
|
||||||
|
$AnimationPlayer.play("pickup_walk")
|
||||||
|
else:
|
||||||
|
$AnimationPlayer.play("walk")
|
||||||
|
else:
|
||||||
|
velocity.x = move_toward(velocity.x, 0, speed)
|
||||||
|
velocity.z = move_toward(velocity.z, 0, speed)
|
||||||
|
|
||||||
|
move_and_slide()
|
||||||
|
|
||||||
|
$Camera_Controller.position = lerp($Camera_Controller.position, position, 0.15)
|
||||||
|
|
||||||
|
|
||||||
|
func align_with_floor(floor_normal):
|
||||||
|
xform = global_transform
|
||||||
|
xform.basis.y = floor_normal
|
||||||
|
xform.basis.x = -xform.basis.z.cross(floor_normal)
|
||||||
|
xform.basis = xform.basis.orthonormalized()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_fall_zone_body_entered(body: Node3D) -> void:
|
||||||
|
get_tree().reload_current_scene()
|
||||||
|
|
||||||
|
func openChatBot():
|
||||||
|
chatbot_opened.emit()
|
||||||
|
chatbot.visible = true
|
||||||
|
Global.chatbot_opened = true
|
||||||
|
chatbot._prompt_edit.grab_focus()
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
env.quiet_down_music()
|
||||||
|
|
||||||
|
|
||||||
|
func get_weight():
|
||||||
|
return weight
|
||||||
|
|
||||||
|
|
||||||
|
func _on_interact_ray_grabbed() -> void:
|
||||||
|
$AnimationPlayer.play("pickup")
|
||||||
|
|
||||||
|
func set_mode(mode_new: String) -> void:
|
||||||
|
if mode_new == "aim":
|
||||||
|
mode = PlayerMode.AIM
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
elif mode_new == "normal":
|
||||||
|
mode = PlayerMode.NORMAL
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
func toggle_inventory() -> void:
|
||||||
|
if $Inventory.visible:
|
||||||
|
$Inventory.visible = false
|
||||||
|
set_mode("normal")
|
||||||
|
inventory_closed.emit()
|
||||||
|
else:
|
||||||
|
$Inventory.visible = true
|
||||||
|
set_mode("aim")
|
||||||
|
inventory_opened.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_balloon_balloon_chosen(mesh: String) -> void:
|
||||||
|
$Balloon.visible = true
|
||||||
|
$Balloon.set_mesh(mesh)
|
||||||
|
Global.resource_balloon = mesh
|
||||||
|
Global.balloon_collected = true
|
||||||
|
|
||||||
|
func slow_down() -> void:
|
||||||
|
if counter_speed < len(speeds)-1:
|
||||||
|
counter_speed += 1
|
||||||
|
speed = speeds[counter_speed]
|
||||||
|
|
||||||
|
func reset_speed() -> void:
|
||||||
|
counter_speed = 0
|
||||||
|
speed = 5.0
|
||||||
|
|
||||||
|
|
||||||
|
func _on_animation_player_animation_started(anim_name: StringName) -> void:
|
||||||
|
if anim_name == 'walk' or anim_name == 'pickup_walk':
|
||||||
|
$AnimationPlayer.speed_scale = animation_player_speeds[counter_speed]
|
||||||
|
else:
|
||||||
|
$AnimationPlayer.speed_scale = animation_player_speeds[1]
|
||||||
|
|
||||||
|
func play_sound(sound_name: String) -> void:
|
||||||
|
if sound_name == 'pickup':
|
||||||
|
$audio_pickup.play()
|
||||||
|
elif sound_name == 'drop':
|
||||||
|
$audio_pickup.play()
|
||||||
|
|
||||||
|
func toggle_music() -> void:
|
||||||
|
env.toggle_music()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://wxn7lwnmu4ft
|
||||||
@@ -0,0 +1,757 @@
|
|||||||
|
[gd_scene load_steps=27 format=3 uid="uid://feh8xoh78swi"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://wxn7lwnmu4ft" path="res://Resources/Players/player.gd" id="1_dq61c"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://cnkc0coob8mu" path="res://Resources/meshes/player_uniGW2.tres" id="3_gyuqh"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dy1tmm44vfmh" path="res://Interact/interact_ray.tscn" id="3_wknd5"]
|
||||||
|
[ext_resource type="Script" uid="uid://bethfppdcwvxc" path="res://crosshair.gd" id="4_gyuqh"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dw8bb4m4ycg7a" path="res://inventory.tscn" id="5_wknd5"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ccdju064l1xg0" path="res://Resources/Objects/balloon_collectable.tscn" id="6_rjb0o"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dl4nljdcflehk" path="res://helper.tscn" id="7_4r34j"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b0nf2m2olu4jf" path="res://addons/godot_llama/demo/demo.tscn" id="8_erypk"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://dwqsonsq5vyu0" path="res://assets/Sounds/collection1/Explosions/Short/sfx_exp_short_soft11.wav" id="9_qpqd5"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://c3bxwp8pfb3cn" path="res://assets/Sounds/collection1/General Sounds/Neutral Sounds/sfx_sound_neutral1.wav" id="10_41dcx"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://8pfv1mgu10pt" path="res://assets/Sounds/collection1/Movement/Jumping and Landing/sfx_movement_jump1.wav" id="11_a75tr"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_uk0nh"]
|
||||||
|
size = Vector3(1.25093, 1.8731, 1.20929)
|
||||||
|
|
||||||
|
[sub_resource type="Skin" id="Skin_gyuqh"]
|
||||||
|
resource_name = "Skin"
|
||||||
|
bind_count = 13
|
||||||
|
bind/0/name = &"body"
|
||||||
|
bind/0/bone = -1
|
||||||
|
bind/0/pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.3528, 0)
|
||||||
|
bind/1/name = &"head"
|
||||||
|
bind/1/bone = -1
|
||||||
|
bind/1/pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.958969, 0)
|
||||||
|
bind/2/name = &"shoulder.l"
|
||||||
|
bind/2/bone = -1
|
||||||
|
bind/2/pose = Transform3D(-0.185148, -0.98271, -1.14389e-07, 0.98271, -0.185149, -2.66453e-14, -2.1179e-08, -1.12412e-07, 1, 0.942389, 0.177552, 1.07799e-07)
|
||||||
|
bind/3/name = &"arm.l"
|
||||||
|
bind/3/bone = -1
|
||||||
|
bind/3/pose = Transform3D(-0.873768, -0.486343, -2.02672e-07, 0.486343, -0.873768, 0, -1.77089e-07, -9.85682e-08, 1, 0.690726, 0.651202, 1.39991e-07)
|
||||||
|
bind/4/name = &"shoulder.r"
|
||||||
|
bind/4/bone = -1
|
||||||
|
bind/4/pose = Transform3D(-0.176299, 0.984337, 1.3201e-07, -0.984337, -0.176299, -1.59872e-14, 2.32732e-08, -1.29942e-07, 1, -0.943948, 0.169065, 1.2461e-07)
|
||||||
|
bind/5/name = &"arm.r"
|
||||||
|
bind/5/bone = -1
|
||||||
|
bind/5/pose = Transform3D(-0.870257, 0.492598, -2.15315e-08, -0.492598, -0.870257, -4.44089e-15, -1.87379e-08, 1.06064e-08, 1, -0.690192, 0.653943, -1.48609e-08)
|
||||||
|
bind/6/name = &"hip.l"
|
||||||
|
bind/6/bone = -1
|
||||||
|
bind/6/pose = Transform3D(0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, -0.3528)
|
||||||
|
bind/7/name = &"upper_leg.l"
|
||||||
|
bind/7/bone = -1
|
||||||
|
bind/7/pose = Transform3D(7.54979e-08, 0, 1, 0, -1, 0, 1, 0, -7.54979e-08, -1.22397e-08, 0.3528, -0.16212)
|
||||||
|
bind/8/name = &"lower_leg.l"
|
||||||
|
bind/8/bone = -1
|
||||||
|
bind/8/pose = Transform3D(7.54979e-08, 0, 1, 0, -1, 0, 1, 0, -7.54979e-08, -1.22397e-08, 0.248877, -0.16212)
|
||||||
|
bind/9/name = &"hip.r"
|
||||||
|
bind/9/bone = -1
|
||||||
|
bind/9/pose = Transform3D(0, 0, -1, -1, 0, 0, 0, 1, 0, 0, 0, -0.3528)
|
||||||
|
bind/10/name = &"upper_leg.r"
|
||||||
|
bind/10/bone = -1
|
||||||
|
bind/10/pose = Transform3D(-4.37114e-08, 0, -1, 0, -1, 0, -1, 0, 4.37114e-08, -6.35966e-09, 0.3528, -0.145492)
|
||||||
|
bind/11/name = &"lower_leg.r"
|
||||||
|
bind/11/bone = -1
|
||||||
|
bind/11/pose = Transform3D(-4.37114e-08, 0, -1, 0, -1, 0, -1, 0, 4.37114e-08, -6.35966e-09, 0.24472, -0.145492)
|
||||||
|
bind/12/name = &"neutral_bone"
|
||||||
|
bind/12/bone = -1
|
||||||
|
bind/12/pose = Transform3D(1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_3fe0i"]
|
||||||
|
resource_name = "RESET"
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("helper:visible")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("helper:position")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0.096, 1.141, 0.538)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_erypk"]
|
||||||
|
resource_name = "collect_helper_part2"
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("helper:position")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0.0960083, 1.1406784, 0.538002), Vector3(0.0960083, -0.08320968, 0.538002)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("helper:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, true]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_4r34j"]
|
||||||
|
resource_name = "helper_visible"
|
||||||
|
length = 0.01
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("helper:position")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0.0960083, -0.08320968, 0.538002)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("helper:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_kitjm"]
|
||||||
|
resource_name = "idle-loop"
|
||||||
|
length = 1.0833334
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, -0.024488833, 0.9997001, 0.06666667, 1, 0, 0, -0.023532195, 0.9997231, 0.1, 1, 0, 0, -0.022525162, 0.9997464, 0.13333334, 1, 0, 0, -0.021227574, 0.9997747, 0.16666667, 1, 0, 0, -0.0196859, 0.9998062, 0.2, 1, 0, 0, -0.017911708, 0.9998396, 0.3, 1, 0, 0, -0.0121470615, 0.99992627, 0.33333334, 1, 0, 0, -0.010233168, 0.9999477, 0.36666667, 1, 0, 0, -0.008458738, 0.99996424, 0.4, 1, 0, 0, -0.0068586585, 0.9999765, 0.43333334, 1, 0, 0, -0.0054794243, 0.99998504, 0.46666667, 1, 0, 0, -0.0043675266, 0.99999046, 0.53333336, 1, 0, 0, -0.0032827677, 0.99999464, 0.6333333, 1, 0, 0, -0.0048711714, 0.9999882, 0.6666667, 1, 0, 0, -0.006087676, 0.99998146, 0.7, 1, 0, 0, -0.0076296404, 0.999971, 0.73333335, 1, 0, 0, -0.009345958, 0.99995637, 0.76666665, 1, 0, 0, -0.011190119, 0.9999375, 0.8333333, 1, 0, 0, -0.015075953, 0.99988645, 0.8666667, 1, 0, 0, -0.016989721, 0.99985576, 0.9, 1, 0, 0, -0.018798813, 0.99982333, 0.93333334, 1, 0, 0, -0.020456744, 0.9997908, 0.96666664, 1, 0, 0, -0.021917041, 0.9997598, 1, 1, 0, 0, -0.023133267, 0.9997325, 1.0666667, 1, 0, 0, -0.024345534, 0.9997037, 1.0833334, 1, 0, 0, -0.024488833, 0.9997001)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 7.424678e-08, 3.9001094e-08, -0.4683429, 0.8835468, 0.033333335, 1, 7.4302335e-08, 3.8917683e-08, -0.46721676, 0.88414294, 0.06666667, 1, 7.4431775e-08, 3.872237e-08, -0.46458033, 0.885531, 0.1, 1, 7.462511e-08, 3.84281e-08, -0.4606092, 0.887603, 0.13333334, 1, 7.4872105e-08, 3.8047695e-08, -0.45547733, 0.8902474, 0.16666667, 1, 7.51624e-08, 3.7593928e-08, -0.44935825, 0.8933517, 0.2, 1, 7.549224e-08, 3.706932e-08, -0.44228724, 0.8968735, 0.23333333, 1, 7.583646e-08, 3.651112e-08, -0.43476743, 0.90054274, 0.3, 1, 7.6531585e-08, 3.5348503e-08, -0.41911793, 0.90793186, 0.33333334, 1, 7.686551e-08, 3.4772025e-08, -0.4113643, 0.9114711, 0.36666667, 1, 7.717001e-08, 3.4235477e-08, -0.40415135, 0.91469216, 0.4, 1, 7.744037e-08, 3.3749966e-08, -0.39762765, 0.91754687, 0.43333334, 1, 7.767019e-08, 3.333025e-08, -0.39199018, 0.91996944, 0.46666667, 1, 7.785327e-08, 3.2991093e-08, -0.38743636, 0.9218965, 0.5, 1, 7.798345e-08, 3.2747245e-08, -0.3841631, 0.9232653, 0.53333336, 1, 6.41315e-08, 3.9174488e-08, -0.3829864, 0.9237541, 0.56666666, 1, 6.0626874e-08, 4.085854e-08, -0.38372338, 0.92344815, 0.6, 1, 6.052203e-08, 4.1052278e-08, -0.38631013, 0.922369, 0.6333333, 1, 6.034729e-08, 4.1372523e-08, -0.39058882, 0.9205653, 0.6666667, 1, 6.011109e-08, 4.1800266e-08, -0.39630932, 0.9181171, 0.7, 1, 5.9811555e-08, 4.2334484e-08, -0.40346235, 0.91499627, 0.73333335, 1, 5.9477394e-08, 4.2919936e-08, -0.41131318, 0.91149414, 0.76666665, 1, 5.911788e-08, 4.3537902e-08, -0.41961336, 0.9077029, 0.8333333, 1, 5.836256e-08, 4.4798206e-08, -0.43658403, 0.8996635, 0.8666667, 1, 5.7999003e-08, 4.5387402e-08, -0.4445384, 0.8957598, 0.9, 1, 5.7664e-08, 4.5920824e-08, -0.45175117, 0.89214396, 0.93333334, 1, 5.7369746e-08, 4.6382066e-08, -0.45799688, 0.8889538, 0.96666664, 1, 5.7128684e-08, 4.6754995e-08, -0.46305287, 0.88633066, 1, 1, 5.6953294e-08, 4.7023583e-08, -0.4666979, 0.8844168, 1.0333333, 1, 7.078811e-08, 4.0605606e-08, -0.46801406, 0.8837211, 1.0833334, 1, 7.424678e-08, 3.9001094e-08, -0.4683429, 0.8835468)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 2.4243331e-08, 6.898198e-08, 0.43887928, 0.89854604, 0.033333335, 1, 2.4169724e-08, 6.9008046e-08, 0.43792248, 0.89901274, 0.06666667, 1, 2.3997506e-08, 6.906872e-08, 0.43568337, 0.9001, 0.1, 1, 2.3738348e-08, 6.915911e-08, 0.43231246, 0.901724, 0.13333334, 1, 2.3403869e-08, 6.927417e-08, 0.42795923, 0.90379816, 0.16666667, 1, 2.300568e-08, 6.940882e-08, 0.4227731, 0.9062357, 0.2, 1, 2.254637e-08, 6.956098e-08, 0.41678596, 0.90900475, 0.23333333, 1, 2.205883e-08, 6.9718844e-08, 0.41042495, 0.9118944, 0.3, 1, 2.1047086e-08, 7.0034545e-08, 0.3972056, 0.9177296, 0.33333334, 1, 2.0547182e-08, 7.018466e-08, 0.39066452, 0.9205331, 0.36666667, 1, 2.0082878e-08, 7.032063e-08, 0.38458377, 0.9230901, 0.4, 1, 1.9663542e-08, 7.0440585e-08, 0.37908745, 0.92536086, 0.43333334, 1, 1.9301613e-08, 7.054196e-08, 0.3743401, 0.9272915, 0.46666667, 1, 1.9009542e-08, 7.062232e-08, 0.3705068, 0.92882985, 0.5, 1, 1.8799755e-08, 7.067924e-08, 0.36775205, 0.9299239, 0.56666666, 1, 2.034004e-08, 7.140312e-08, 0.36774907, 0.929925, 0.6, 1, 2.0572921e-08, 7.134004e-08, 0.37080446, 0.92871106, 0.6333333, 1, 2.0953191e-08, 7.123523e-08, 0.3757913, 0.9267043, 0.6666667, 1, 2.1453479e-08, 7.109394e-08, 0.3823476, 0.92401856, 0.7, 1, 2.2059782e-08, 7.091751e-08, 0.39028642, 0.9206936, 0.73333335, 1, 2.2704533e-08, 7.072357e-08, 0.39872035, 0.91707265, 0.76666665, 1, 2.3360691e-08, 7.051947e-08, 0.40729463, 0.91329694, 0.8, 1, 2.400152e-08, 7.0313504e-08, 0.4156599, 0.90952015, 0.8333333, 1, 2.4600622e-08, 7.011499e-08, 0.42347273, 0.90590894, 0.8666667, 1, 2.509242e-08, 6.994767e-08, 0.42988047, 0.9028859, 0.9, 1, 2.5464708e-08, 6.981838e-08, 0.4347276, 0.900562, 0.93333334, 1, 2.5075877e-08, 6.94488e-08, 0.43768612, 0.8991279, 0.96666664, 1, 2.4243331e-08, 6.898199e-08, 0.4388793, 0.89854604, 1.0833334, 1, 2.4243331e-08, 6.898198e-08, 0.43887928, 0.89854604)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.7071068, -2.6692542e-08, 2.6692542e-08, 0.7071068)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_i5730"]
|
||||||
|
resource_name = "jump"
|
||||||
|
length = 0.20833333
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 0.036538295, -0.050690103, -0.42360502, 0.9036893, 0.033333335, 1, 0.08287326, -0.118203335, -0.41701508, 0.89736193, 0.06666667, 1, 0.19100359, -0.27582675, -0.38983727, 0.8575921, 0.1, 1, 0.3289899, -0.47714087, -0.32671192, 0.7465666, 0.13333334, 1, 0.44907475, -0.65257686, -0.23154037, 0.5646809, 0.16666667, 1, 0.5169525, -0.7519604, -0.14098726, 0.38397694, 0.20833333, 1, 0.53779584, -0.7825644, -0.09865995, 0.2977161)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 2.349101e-08, 6.948292e-08, 0.42525995, 0.90507126, 0.033333335, 1, -0.018352704, -0.016519874, 0.416211, 0.9089327, 0.06666667, 1, -0.056133576, -0.05052778, 0.39663497, 0.9148643, 0.1, 1, -0.10461941, -0.09417161, 0.3696238, 0.91845775, 0.13333334, 1, -0.15477219, -0.13931593, 0.33939558, 0.9173044, 0.16666667, 1, -0.19763152, -0.17789513, 0.31164458, 0.912235, 0.20833333, 1, -0.2195022, -0.19758171, 0.2967719, 0.9081336)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.7071068, -2.6692542e-08, 2.6692542e-08, 0.7071068, 0.033333335, 1, -0.70673823, 0.022826672, 0.022826724, 0.7067383, 0.06666667, 1, -0.70362854, 0.07004856, 0.07004862, 0.7036286, 0.1, 1, -0.6949302, 0.13065991, 0.13065997, 0.6949302, 0.13333334, 1, -0.6802412, 0.19305934, 0.1930594, 0.6802412, 0.16666667, 1, -0.66300935, 0.24580197, 0.24580202, 0.66300935, 0.20833333, 1, -0.6525517, 0.27235317, 0.2723532, 0.6525517)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068, 0.033333335, 1, -0.706891, 0.01746796, 0.017467992, 0.70689106, 0.06666667, 1, -0.7050892, 0.053378057, 0.05337809, 0.7050892, 0.1, 1, -0.7000768, 0.09946126, 0.09946129, 0.7000767, 0.13333334, 1, -0.6916174, 0.14719175, 0.14719178, 0.69161737, 0.16666667, 1, -0.68162763, 0.18810582, 0.18810587, 0.6816276, 0.20833333, 1, -0.6754944, 0.20906316, 0.2090632, 0.6754943)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_4m5ha"]
|
||||||
|
resource_name = "jump1-loop"
|
||||||
|
length = 0.5833333
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 0.16491105, -0.19907025, -0.46216232, 0.8482815, 0.033333335, 1, 0.16292813, -0.1966766, -0.44568896, 0.8579826, 0.06666667, 1, 0.15795462, -0.19067287, -0.40574467, 0.8798099, 0.1, 1, 0.14960615, -0.18059514, -0.34231567, 0.909848, 0.13333334, 1, 0.13738729, -0.16584532, -0.25570658, 0.94246185, 0.16666667, 1, 0.12086617, -0.14590205, -0.14725594, 0.970783, 0.2, 1, 0.10003102, -0.12075119, -0.02095889, 0.9874076, 0.23333333, 1, 0.07746595, -0.09351207, 0.10570058, 0.9869559, 0.26666668, 1, 0.05509115, -0.06650261, 0.22280262, 0.9710312, 0.3, 1, 0.03475427, -0.041953206, 0.32283667, 0.9448855, 0.33333334, 1, 0.01797073, -0.021693187, 0.4011522, 0.9155782, 0.36666667, 1, 0.0073409793, -0.008861614, 0.44884396, 0.89353603, 0.4, 1, 0.001871625, -0.0022593576, 0.47281396, 0.8811574, 0.43333334, 1, -6.8684805e-08, 3.97834e-08, 0.43325853, 0.9012697, 0.46666667, 1, -4.6923528e-08, 4.2163578e-08, 0.2959903, 0.95519096, 0.5, 1, -5.022673e-09, 4.4119368e-08, 0.031682793, 0.99949807, 0.53333336, 1, 3.723895e-08, 4.2906425e-08, -0.23490036, 0.97201943, 0.56666666, 1, 5.9497896e-08, 4.091479e-08, -0.37530804, 0.9269002, 0.5833333, 1, 6.728594e-08, 3.9968324e-08, -0.4244344, 0.9054587)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 0.12278029, 0.103681155, 0.47836125, 0.8633341, 0.033333335, 1, 0.12142256, 0.10253463, 0.4610096, 0.87304837, 0.06666667, 1, 0.117976256, 0.09962444, 0.4187322, 0.89488554, 0.1, 1, 0.11208792, 0.09465207, 0.3511598, 0.9247508, 0.13333334, 1, 0.10329391, 0.08722602, 0.2582469, 0.9565723, 0.16666667, 1, 0.09115662, 0.07697676, 0.14110272, 0.98277926, 0.2, 1, 0.0755583, 0.06380485, 0.0039358935, 0.9950901, 0.23333333, 1, 0.058495414, 0.049396202, -0.13330726, 0.9881131, 0.26666668, 1, 0.041513238, 0.035055704, -0.25931442, 0.9642634, 0.3, 1, 0.02609686, 0.022037433, -0.36583734, 0.9300518, 0.33333334, 1, 0.013439841, 0.011349292, -0.44816688, 0.89377695, 0.36666667, 1, 0.005481215, 0.00462867, -0.49766386, 0.8673403, 0.4, 1, 0.0013952059, 0.0011782625, -0.52240455, 0.8526958, 0.43333334, 1, -2.5545276e-08, 6.776717e-08, -0.4822765, 0.87601906, 0.46666667, 1, -1.4686288e-08, 7.412076e-08, -0.34021562, 0.94034743, 0.5, 1, 6.0131793e-09, 8.1016715e-08, -0.060081095, 0.9981935, 0.53333336, 1, 2.6220649e-08, 8.1283744e-08, 0.22496933, 0.9743659, 0.56666666, 1, 2.6558359e-08, 7.398688e-08, 0.37372044, 0.9275414, 0.5833333, 1, 2.349101e-08, 6.948292e-08, 0.42525995, 0.90507126)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.6980985, 0.1125101, 0.112510145, 0.6980985, 0.033333335, 1, -0.6953522, 0.11572834, 0.11419779, 0.7000365, 0.06666667, 1, -0.6890111, 0.123073585, 0.118044704, 0.70440197, 0.1, 1, -0.6795414, 0.133829, 0.123665184, 0.7106477, 0.13333334, 1, -0.66739976, 0.14726606, 0.13066608, 0.71820384, 0.16666667, 1, -0.65306926, 0.16264959, 0.13865215, 0.72651315, 0.23333333, 1, -0.62081605, 0.19557627, 0.15563886, 0.7430437, 0.26666668, 1, -0.60487473, 0.2110678, 0.16357923, 0.75021255, 0.3, 1, -0.59004927, 0.22505257, 0.170718, 0.7563391, 0.33333334, 1, -0.57712626, 0.23692986, 0.1767586, 0.76127917, 0.36666667, 1, -0.5683018, 0.24488069, 0.18079057, 0.76444834, 0.4, 1, -0.56363004, 0.2490393, 0.18289568, 0.76606137, 0.43333334, 1, -0.57315195, 0.23559785, 0.17271246, 0.7656114, 0.46666667, 1, -0.6011017, 0.19609173, 0.14375125, 0.76128864, 0.53333336, 1, -0.68163, 0.057088032, 0.04185022, 0.7282651, 0.56666666, 1, -0.7004931, 0.015788428, 0.01157425, 0.71339065, 0.5833333, 1, -0.7071068, -2.6692542e-08, 2.6692542e-08, 0.7071068)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.7023051, -0.08226587, -0.08226583, 0.702305, 0.033333335, 1, -0.7002828, -0.07615434, -0.07683486, 0.705621, 0.06666667, 1, -0.6954091, -0.062060937, -0.06430797, 0.7130351, 0.1, 1, -0.6876369, -0.041140474, -0.045705575, 0.7234459, 0.13333334, 1, -0.6768588, -0.014601349, -0.022094617, 0.73563635, 0.16666667, 1, -0.6630332, 0.01627228, 0.005390068, 0.7483938, 0.23333333, 1, -0.6279835, 0.083747916, 0.0655246, 0.77092785, 0.26666668, 1, -0.6090053, 0.115754455, 0.09408087, 0.77901363, 0.3, 1, -0.5905409, 0.1446456, 0.119875684, 0.78483695, 0.33333334, 1, -0.5739046, 0.1690913, 0.14171518, 0.7886435, 0.36666667, 1, -0.56231534, 0.18534684, 0.15624487, 0.79059196, 0.4, 1, -0.5561034, 0.19382134, 0.16382195, 0.7914195, 0.43333334, 1, -0.5651424, 0.18495072, 0.15646008, 0.78862387, 0.46666667, 1, -0.593492, 0.15372734, 0.13004649, 0.7792454, 0.53333336, 1, -0.67835075, 0.04472942, 0.037839115, 0.7323987, 0.56666666, 1, -0.69949377, 0.012381507, 0.010474229, 0.71445477, 0.5833333, 1, -0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_qw38m"]
|
||||||
|
resource_name = "pickup"
|
||||||
|
length = 0.20833333
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 6.728594e-08, 3.9968324e-08, -0.4244344, 0.9054587, 0.033333335, 1, 0.044615045, -0.02984432, -0.4370112, 0.897853, 0.06666667, 1, 0.14010738, -0.09372214, -0.4594671, 0.8720528, 0.1, 1, 0.26287308, -0.17584398, -0.47896206, 0.8188846, 0.13333334, 1, 0.38504738, -0.25757024, -0.48653138, 0.74073166, 0.16666667, 1, 0.48032945, -0.3213074, -0.4823678, 0.65830576, 0.20833333, 1, 0.523814, -0.3503956, -0.47677234, 0.612805)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 2.349101e-08, 6.948292e-08, 0.42525995, 0.90507126, 0.033333335, 1, 0.041553196, 0.033103567, 0.43505287, 0.8988362, 0.06666667, 1, 0.13026266, 0.10377432, 0.45171005, 0.8764819, 0.1, 1, 0.24429049, 0.19461507, 0.46422726, 0.82881856, 0.13333334, 1, 0.35806894, 0.28525713, 0.46552187, 0.7574328, 0.16666667, 1, 0.4473714, 0.35640028, 0.45702252, 0.68115205, 0.20833333, 1, 0.48844275, 0.38911995, 0.44961932, 0.6386328)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.7071068, -2.6692542e-08, 2.6692542e-08, 0.7071068)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_5eaja"]
|
||||||
|
resource_name = "pickup_walk"
|
||||||
|
length = 1.0833334
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 0.44240275, -0.53902584, -0.342163, 0.6298059)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 0.43278182, 0.49161798, 0.3524288, 0.6684352)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.60595876, 0.3644366, 0.36443666, 0.6059587, 0.06666667, 1, -0.60595876, 0.3644366, 0.36443666, 0.6059587, 0.1, 1, -0.6032101, 0.36896825, 0.36896828, 0.6032101, 0.13333334, 1, -0.59639233, 0.37988952, 0.37988958, 0.59639245, 0.16666667, 1, -0.5855792, 0.39635456, 0.39635462, 0.5855793, 0.2, 1, -0.5795719, 0.40508807, 0.40508813, 0.57957196, 0.23333333, 1, -0.5895815, 0.39037627, 0.39037627, 0.58958155, 0.26666668, 1, -0.6165933, 0.34613982, 0.34613985, 0.6165933, 0.3, 1, -0.6541701, 0.26844278, 0.2684428, 0.6541701, 0.33333334, 1, -0.6892638, 0.15784594, 0.157846, 0.6892639, 0.36666667, 1, -0.7066153, 0.026357096, 0.026357153, 0.70661545, 0.4, 1, -0.7008727, -0.093687855, -0.0936878, 0.7008728, 0.43333334, 1, -0.6816648, -0.18797097, -0.1879709, 0.6816648, 0.46666667, 1, -0.6618372, -0.24894077, -0.24894069, 0.6618373, 0.5, 1, -0.6517511, -0.27426365, -0.27426362, 0.6517511, 0.53333336, 1, -0.6582527, -0.25827003, -0.25826997, 0.65825266, 0.56666666, 1, -0.67109025, -0.22279571, -0.22279567, 0.67109025, 0.6, 1, -0.6857183, -0.17259939, -0.17259935, 0.68571824, 0.6666667, 1, -0.70495313, -0.05514667, -0.055146623, 0.7049531, 0.7, 1, -0.70691395, -0.016512973, -0.016512923, 0.70691395, 0.73333335, 1, -0.7071068, -0.00015736022, -0.00015730923, 0.7071068, 0.76666665, 1, -0.7070719, 0.0070313667, 0.00703141, 0.70707184, 0.8, 1, -0.70687455, 0.018124059, 0.018124092, 0.70687443, 0.8333333, 1, -0.7056039, 0.046078686, 0.046078723, 0.7056038, 0.8666667, 1, -0.7008078, 0.09417304, 0.09417307, 0.70080763, 0.9, 1, -0.6911309, 0.14945938, 0.14945939, 0.6911309, 0.93333334, 1, -0.67634094, 0.206308, 0.20630804, 0.6763409, 0.96666664, 1, -0.6577143, 0.25963807, 0.2596381, 0.65771425, 1, 1, -0.6378587, 0.3051825, 0.30518252, 0.63785857, 1.0333333, 1, -0.6225582, 0.33529305, 0.33529308, 0.62255806, 1.0666667, 1, -0.61391485, 0.35086837, 0.35086843, 0.6139148, 1.0833334, 1, -0.6107917, 0.3562773, 0.35627735, 0.6107917)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.66778064, 0.2325275, 0.23252754, 0.66778064, 0.033333335, 1, -0.6728083, 0.21755226, 0.21755232, 0.6728083, 0.06666667, 1, -0.6822603, 0.18579805, 0.18579808, 0.6822603, 0.1, 1, -0.6924698, 0.14312816, 0.14312819, 0.6924698, 0.13333334, 1, -0.70056885, 0.09593359, 0.09593362, 0.7005689, 0.16666667, 1, -0.7052536, 0.051159598, 0.05115963, 0.70525366, 0.2, 1, -0.7067271, 0.023168769, 0.023168799, 0.70672715, 0.23333333, 1, -0.7070106, 0.011661734, 0.011661766, 0.7070106, 0.26666668, 1, -0.70709205, 0.004570252, 0.004570281, 0.70709205, 0.3, 1, -0.70703137, -0.010325267, -0.010325237, 0.7070314, 0.33333334, 1, -0.7056518, -0.045337453, -0.04533742, 0.7056519, 0.36666667, 1, -0.6996207, -0.102619424, -0.102619395, 0.69962084, 0.4, 1, -0.68725264, -0.16638435, -0.16638432, 0.68725276, 0.43333334, 1, -0.6688022, -0.2295728, -0.22957277, 0.6688022, 0.46666667, 1, -0.6466371, -0.28611276, -0.28611273, 0.6466371, 0.5, 1, -0.6247237, -0.33124068, -0.33124065, 0.6247236, 0.53333336, 1, -0.60671896, -0.36316958, -0.36316955, 0.606719, 0.56666666, 1, -0.5896747, -0.39023554, -0.39023548, 0.5896747, 0.6, 1, -0.573949, -0.4130166, -0.41301656, 0.5739489, 0.6333333, 1, -0.5598276, -0.43196422, -0.4319642, 0.55982757, 0.6666667, 1, -0.5475638, -0.447408, -0.44740796, 0.5475638, 0.7, 1, -0.53831047, -0.45849967, -0.45849964, 0.53831035, 0.73333335, 1, -0.53158885, -0.46627605, -0.46627602, 0.5315888, 0.76666665, 1, -0.5276454, -0.4707339, -0.4707339, 0.5276454, 0.8, 1, -0.531291, -0.46661535, -0.46661535, 0.531291, 0.8333333, 1, -0.5512564, -0.4428502, -0.4428502, 0.5512565, 0.8666667, 1, -0.6014973, -0.37175405, -0.37175405, 0.6014972, 0.9, 1, -0.6556332, -0.26484933, -0.2648493, 0.65563315, 0.93333334, 1, -0.6944868, -0.13299699, -0.13299698, 0.69448674, 0.96666664, 1, -0.7070926, 0.004495856, 0.0044958577, 0.70709246, 1, 1, -0.6961938, 0.12375077, 0.123750776, 0.6961937, 1.0333333, 1, -0.67905474, 0.19719204, 0.19719204, 0.6790547, 1.0666667, 1, -0.6672913, 0.23392808, 0.23392811, 0.6672913, 1.0833334, 1, -0.66282797, 0.24629061, 0.24629065, 0.66282797)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_pg0cp"]
|
||||||
|
resource_name = "reset"
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 6.728594e-08, 3.9968324e-08, -0.4244344, 0.9054587)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, 2.349101e-08, 6.948292e-08, 0.42525995, 0.90507126)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.7071068, -2.6692542e-08, 2.6692542e-08, 0.7071068)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.7071068, -1.5454312e-08, 1.5454312e-08, 0.7071068)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_52h43"]
|
||||||
|
resource_name = "walk-loop"
|
||||||
|
length = 1.0833334
|
||||||
|
tracks/0/type = "rotation_3d"
|
||||||
|
tracks/0/imported = true
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Armature/Skeleton3D:head")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||||
|
tracks/1/type = "rotation_3d"
|
||||||
|
tracks/1/imported = true
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Armature/Skeleton3D:arm.l")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = PackedFloat32Array(0, 1, 0.274355, -0.3806173, -0.37481663, 0.79960775, 0.033333335, 1, 0.2714617, -0.37660342, -0.37592492, 0.801972, 0.06666667, 1, 0.26462373, -0.36711693, -0.3784849, 0.80743337, 0.1, 1, 0.25419867, -0.3526541, -0.3822309, 0.81542486, 0.13333334, 1, 0.24051654, -0.33367264, -0.38686773, 0.8253168, 0.16666667, 1, 0.223897, -0.31061602, -0.39208817, 0.8364536, 0.2, 1, 0.20407194, -0.28311232, -0.39774787, 0.8485275, 0.23333333, 1, 0.18218736, -0.25275153, -0.40330747, 0.86038804, 0.26666668, 1, 0.15845338, -0.21982497, -0.40855402, 0.87158084, 0.3, 1, 0.13305698, -0.1845921, -0.4133, 0.8817056, 0.33333334, 1, 0.10615978, -0.14727713, -0.41738102, 0.8904115, 0.36666667, 1, 0.07725142, -0.10717209, -0.42071414, 0.89752215, 0.4, 1, 0.04718683, -0.06546298, -0.42305017, 0.90250576, 0.46666667, 1, -0.013830324, 0.019187145, -0.42431563, 0.9052055, 0.5, 1, -0.043459024, 0.060291544, -0.42326054, 0.9029545, 0.53333336, 1, -0.07086286, 0.09830934, -0.42130613, 0.89878523, 0.56666666, 1, -0.0958137, 0.13292404, -0.41869774, 0.89322066, 0.6, 1, -0.11789824, 0.1635623, -0.41571766, 0.8868631, 0.6333333, 1, -0.13676141, 0.18973155, -0.41266248, 0.88034546, 0.6666667, 1, -0.15209931, 0.21101007, -0.4098244, 0.8742909, 0.7, 1, -0.16219473, 0.22501555, -0.4077798, 0.869929, 0.73333335, 1, -0.16787551, 0.23289663, -0.40656674, 0.86734104, 0.76666665, 1, -0.16340235, 0.22669093, -0.40752575, 0.869387, 0.8, 1, -0.14386564, 0.19958729, -0.4113879, 0.8776261, 0.8333333, 1, -0.10497887, 0.14563906, -0.4175384, 0.89074713, 0.8666667, 1, -0.045283653, 0.062822886, -0.4231598, 0.90273947, 0.9, 1, 0.02366014, -0.032823984, -0.42408693, 0.9047172, 0.93333334, 1, 0.094985865, -0.13177535, -0.41879725, 0.8934326, 0.96666664, 1, 0.16181995, -0.22449538, -0.40785837, 0.8700963, 1, 1, 0.21807429, -0.30253798, -0.39381355, 0.84013414, 1.0333333, 1, 0.25417697, -0.3526239, -0.38223866, 0.81544113, 1.0666667, 1, 0.27256402, -0.37813258, -0.3755045, 0.8010749, 1.0833334, 1, 0.27887058, -0.3868817, -0.3730568, 0.79585326)
|
||||||
|
tracks/2/type = "rotation_3d"
|
||||||
|
tracks/2/imported = true
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Armature/Skeleton3D:arm.r")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = PackedFloat32Array(0, 1, -0.15459529, -0.21817005, 0.40977544, 0.87211597, 0.033333335, 1, -0.15927261, -0.22477087, 0.40880525, 0.87005097, 0.06666667, 1, -0.16879784, -0.23821317, 0.4067322, 0.865639, 0.1, 1, -0.18100263, -0.255437, 0.40388274, 0.8595747, 0.13333334, 1, -0.19377217, -0.2734578, 0.40066472, 0.85272574, 0.16666667, 1, -0.20507099, -0.28940308, 0.3976105, 0.84622556, 0.2, 1, -0.21054503, -0.29712823, 0.3960597, 0.84292495, 0.23333333, 1, -0.19928291, -0.28123477, 0.3991996, 0.8496076, 0.26666668, 1, -0.16628906, -0.23467276, 0.40729094, 0.8668281, 0.3, 1, -0.110335134, -0.15570866, 0.4174444, 0.88843757, 0.33333334, 1, -0.035037424, -0.049446005, 0.42447835, 0.9034078, 0.36666667, 1, 0.04999893, 0.07056013, 0.42366678, 0.9016806, 0.4, 1, 0.12684685, 0.17901048, 0.4148988, 0.8830199, 0.43333334, 1, 0.18774644, 0.26495403, 0.40221378, 0.85602266, 0.46666667, 1, 0.22797991, 0.32173282, 0.39080286, 0.8317369, 0.5, 1, 0.24508724, 0.3458753, 0.38516036, 0.819728, 0.53333336, 1, 0.24129015, 0.34051675, 0.3864553, 0.822484, 0.56666666, 1, 0.23222496, 0.32772362, 0.38944834, 0.828854, 0.6, 1, 0.21821508, 0.30795246, 0.39380717, 0.8381309, 0.6333333, 1, 0.19955707, 0.28162166, 0.39912558, 0.8494498, 0.6666667, 1, 0.17654917, 0.24915215, 0.40494794, 0.8618415, 0.7, 1, 0.14872853, 0.2098907, 0.4109485, 0.87461245, 0.73333335, 1, 0.1180961, 0.1666612, 0.41629404, 0.88598907, 0.76666665, 1, 0.08543309, 0.120566085, 0.42059168, 0.89513564, 0.8333333, 1, 0.017634049, 0.024885863, 0.4250622, 0.90465015, 0.8666667, 1, -0.01467868, -0.020714985, 0.425123, 0.9047795, 0.9, 1, -0.04446189, -0.062746026, 0.42400077, 0.9023911, 0.93333334, 1, -0.07099054, -0.10018411, 0.4220422, 0.89822274, 0.96666664, 1, -0.09364835, -0.1321596, 0.41964442, 0.8931196, 1, 1, -0.111921966, -0.15794797, 0.4172158, 0.88795096, 1.0333333, 1, -0.12352726, -0.1743257, 0.41544038, 0.88417244, 1.0666667, 1, -0.12948188, -0.18272904, 0.41445833, 0.88208216, 1.0833334, 1, -0.13152054, -0.18560605, 0.4141109, 0.88134265)
|
||||||
|
tracks/3/type = "rotation_3d"
|
||||||
|
tracks/3/imported = true
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Armature/Skeleton3D:hip.l")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = PackedFloat32Array(0, 1, -0.5, -0.5, -0.5, 0.5)
|
||||||
|
tracks/4/type = "rotation_3d"
|
||||||
|
tracks/4/imported = true
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Armature/Skeleton3D:upper_leg.l")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = PackedFloat32Array(0, 1, -0.60595876, 0.3644366, 0.36443666, 0.6059587, 0.06666667, 1, -0.60595876, 0.3644366, 0.36443666, 0.6059587, 0.1, 1, -0.6032101, 0.36896825, 0.36896828, 0.6032101, 0.13333334, 1, -0.59639233, 0.37988952, 0.37988958, 0.59639245, 0.16666667, 1, -0.5855792, 0.39635456, 0.39635462, 0.5855793, 0.2, 1, -0.5795719, 0.40508807, 0.40508813, 0.57957196, 0.23333333, 1, -0.5895815, 0.39037627, 0.39037627, 0.58958155, 0.26666668, 1, -0.6165933, 0.34613982, 0.34613985, 0.6165933, 0.3, 1, -0.6541701, 0.26844278, 0.2684428, 0.6541701, 0.33333334, 1, -0.6892638, 0.15784594, 0.157846, 0.6892639, 0.36666667, 1, -0.7066153, 0.026357096, 0.026357153, 0.70661545, 0.4, 1, -0.7008727, -0.093687855, -0.0936878, 0.7008728, 0.43333334, 1, -0.6816648, -0.18797097, -0.1879709, 0.6816648, 0.46666667, 1, -0.6618372, -0.24894077, -0.24894069, 0.6618373, 0.5, 1, -0.6517511, -0.27426365, -0.27426362, 0.6517511, 0.53333336, 1, -0.6582527, -0.25827003, -0.25826997, 0.65825266, 0.56666666, 1, -0.67109025, -0.22279571, -0.22279567, 0.67109025, 0.6, 1, -0.6857183, -0.17259939, -0.17259935, 0.68571824, 0.6666667, 1, -0.70495313, -0.05514667, -0.055146623, 0.7049531, 0.7, 1, -0.70691395, -0.016512973, -0.016512923, 0.70691395, 0.73333335, 1, -0.7071068, -0.00015736022, -0.00015730923, 0.7071068, 0.76666665, 1, -0.7070719, 0.0070313667, 0.00703141, 0.70707184, 0.8, 1, -0.70687455, 0.018124059, 0.018124092, 0.70687443, 0.8333333, 1, -0.7056039, 0.046078686, 0.046078723, 0.7056038, 0.8666667, 1, -0.7008078, 0.09417304, 0.09417307, 0.70080763, 0.9, 1, -0.6911309, 0.14945938, 0.14945939, 0.6911309, 0.93333334, 1, -0.67634094, 0.206308, 0.20630804, 0.6763409, 0.96666664, 1, -0.6577143, 0.25963807, 0.2596381, 0.65771425, 1, 1, -0.6378587, 0.3051825, 0.30518252, 0.63785857, 1.0333333, 1, -0.6225582, 0.33529305, 0.33529308, 0.62255806, 1.0666667, 1, -0.61391485, 0.35086837, 0.35086843, 0.6139148, 1.0833334, 1, -0.6107917, 0.3562773, 0.35627735, 0.6107917)
|
||||||
|
tracks/5/type = "rotation_3d"
|
||||||
|
tracks/5/imported = true
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("Armature/Skeleton3D:hip.r")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = PackedFloat32Array(0, 1, -0.5, 0.5, 0.5, 0.5)
|
||||||
|
tracks/6/type = "rotation_3d"
|
||||||
|
tracks/6/imported = true
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath("Armature/Skeleton3D:upper_leg.r")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = PackedFloat32Array(0, 1, -0.66778064, 0.2325275, 0.23252754, 0.66778064, 0.033333335, 1, -0.6728083, 0.21755226, 0.21755232, 0.6728083, 0.06666667, 1, -0.6822603, 0.18579805, 0.18579808, 0.6822603, 0.1, 1, -0.6924698, 0.14312816, 0.14312819, 0.6924698, 0.13333334, 1, -0.70056885, 0.09593359, 0.09593362, 0.7005689, 0.16666667, 1, -0.7052536, 0.051159598, 0.05115963, 0.70525366, 0.2, 1, -0.7067271, 0.023168769, 0.023168799, 0.70672715, 0.23333333, 1, -0.7070106, 0.011661734, 0.011661766, 0.7070106, 0.26666668, 1, -0.70709205, 0.004570252, 0.004570281, 0.70709205, 0.3, 1, -0.70703137, -0.010325267, -0.010325237, 0.7070314, 0.33333334, 1, -0.7056518, -0.045337453, -0.04533742, 0.7056519, 0.36666667, 1, -0.6996207, -0.102619424, -0.102619395, 0.69962084, 0.4, 1, -0.68725264, -0.16638435, -0.16638432, 0.68725276, 0.43333334, 1, -0.6688022, -0.2295728, -0.22957277, 0.6688022, 0.46666667, 1, -0.6466371, -0.28611276, -0.28611273, 0.6466371, 0.5, 1, -0.6247237, -0.33124068, -0.33124065, 0.6247236, 0.53333336, 1, -0.60671896, -0.36316958, -0.36316955, 0.606719, 0.56666666, 1, -0.5896747, -0.39023554, -0.39023548, 0.5896747, 0.6, 1, -0.573949, -0.4130166, -0.41301656, 0.5739489, 0.6333333, 1, -0.5598276, -0.43196422, -0.4319642, 0.55982757, 0.6666667, 1, -0.5475638, -0.447408, -0.44740796, 0.5475638, 0.7, 1, -0.53831047, -0.45849967, -0.45849964, 0.53831035, 0.73333335, 1, -0.53158885, -0.46627605, -0.46627602, 0.5315888, 0.76666665, 1, -0.5276454, -0.4707339, -0.4707339, 0.5276454, 0.8, 1, -0.531291, -0.46661535, -0.46661535, 0.531291, 0.8333333, 1, -0.5512564, -0.4428502, -0.4428502, 0.5512565, 0.8666667, 1, -0.6014973, -0.37175405, -0.37175405, 0.6014972, 0.9, 1, -0.6556332, -0.26484933, -0.2648493, 0.65563315, 0.93333334, 1, -0.6944868, -0.13299699, -0.13299698, 0.69448674, 0.96666664, 1, -0.7070926, 0.004495856, 0.0044958577, 0.70709246, 1, 1, -0.6961938, 0.12375077, 0.123750776, 0.6961937, 1.0333333, 1, -0.67905474, 0.19719204, 0.19719204, 0.6790547, 1.0666667, 1, -0.6672913, 0.23392808, 0.23392811, 0.6672913, 1.0833334, 1, -0.66282797, 0.24629061, 0.24629065, 0.66282797)
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_pj205"]
|
||||||
|
_data = {
|
||||||
|
&"RESET": SubResource("Animation_3fe0i"),
|
||||||
|
&"collect_helper_part2": SubResource("Animation_erypk"),
|
||||||
|
&"helper_visible": SubResource("Animation_4r34j"),
|
||||||
|
&"idle": SubResource("Animation_kitjm"),
|
||||||
|
&"jump": SubResource("Animation_i5730"),
|
||||||
|
&"jump1": SubResource("Animation_4m5ha"),
|
||||||
|
&"pickup": SubResource("Animation_qw38m"),
|
||||||
|
&"pickup_walk": SubResource("Animation_5eaja"),
|
||||||
|
&"reset": SubResource("Animation_pg0cp"),
|
||||||
|
&"walk": SubResource("Animation_52h43")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_ijy7i"]
|
||||||
|
resource_name = "collect_helper_part2"
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("helper:position")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0.0960083, 1.1406784, 0.538002), Vector3(0.0960083, -0.08320968, 0.538002)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("helper:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, true]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qpqd5"]
|
||||||
|
_data = {
|
||||||
|
&"collect_helper_part2": SubResource("Animation_ijy7i")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Player" type="CharacterBody3D"]
|
||||||
|
collision_mask = 95
|
||||||
|
script = ExtResource("1_dq61c")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00389862, -0.462623, 0.104645)
|
||||||
|
shape = SubResource("BoxShape3D_uk0nh")
|
||||||
|
|
||||||
|
[node name="Camera_Controller" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
top_level = true
|
||||||
|
|
||||||
|
[node name="Camera_Pivot" type="SpringArm3D" parent="Camera_Controller"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.93358, 0.358368, 0, -0.358368, 0.93358, 0, 0, 0)
|
||||||
|
collision_mask = 2
|
||||||
|
spring_length = 5.0
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="Camera_Controller/Camera_Pivot"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.375, 4.596)
|
||||||
|
current = true
|
||||||
|
fov = 70.0
|
||||||
|
|
||||||
|
[node name="RayCast3D" type="RayCast3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.38872, 0)
|
||||||
|
collision_mask = 14
|
||||||
|
|
||||||
|
[node name="InteractRay" parent="." instance=ExtResource("3_wknd5")]
|
||||||
|
transform = Transform3D(1.17, 0, 0, 0, -5.11423e-08, -1.17, 0, 1.17, -5.11423e-08, 0, -0.382462, 0)
|
||||||
|
collision_mask = 12
|
||||||
|
debug_shape_custom_color = Color(0.79, 0.00789999, 0.00789999, 1)
|
||||||
|
|
||||||
|
[node name="Armature" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, -1.41604, 0)
|
||||||
|
|
||||||
|
[node name="Skeleton3D" type="Skeleton3D" parent="Armature"]
|
||||||
|
bones/0/name = "body"
|
||||||
|
bones/0/parent = -1
|
||||||
|
bones/0/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.3528, 0)
|
||||||
|
bones/0/enabled = true
|
||||||
|
bones/0/position = Vector3(0, 0.35279977, 0)
|
||||||
|
bones/0/rotation = Quaternion(0, 0, 0, 1)
|
||||||
|
bones/0/scale = Vector3(1, 1, 1)
|
||||||
|
bones/1/name = "head"
|
||||||
|
bones/1/parent = 0
|
||||||
|
bones/1/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.606169, 0)
|
||||||
|
bones/1/enabled = true
|
||||||
|
bones/1/position = Vector3(0, 0.606169, 0)
|
||||||
|
bones/1/rotation = Quaternion(0, 0, 0, 1)
|
||||||
|
bones/1/scale = Vector3(1, 1, 1)
|
||||||
|
bones/2/name = "shoulder.l"
|
||||||
|
bones/2/parent = 0
|
||||||
|
bones/2/rest = Transform3D(-0.185149, 0.982711, -2.1179e-08, -0.982711, -0.185148, -1.12412e-07, -1.14389e-07, -1.06581e-14, 1, 0, 0.606169, 0)
|
||||||
|
bones/2/enabled = true
|
||||||
|
bones/2/position = Vector3(0, 0.606169, 0)
|
||||||
|
bones/2/rotation = Quaternion(4.4027612e-08, 3.650722e-08, -0.7697886, 0.6382989)
|
||||||
|
bones/2/scale = Vector3(1.0000005, 1.0000004, 1)
|
||||||
|
bones/3/name = "arm.l"
|
||||||
|
bones/3/parent = 2
|
||||||
|
bones/3/rest = Transform3D(0.639711, 0.768615, 1.52624e-08, -0.768616, 0.639711, -1.55777e-07, -1.29496e-07, 8.79214e-08, 1, 2.6077e-08, 0.291873, 4.88498e-15)
|
||||||
|
bones/3/enabled = true
|
||||||
|
bones/3/position = Vector3(2.6077e-08, 0.291873, 4.88498e-15)
|
||||||
|
bones/3/rotation = Quaternion(0.27435496, -0.3806172, -0.37481663, 0.79960763)
|
||||||
|
bones/3/scale = Vector3(1.0000004, 0.99999964, 1)
|
||||||
|
bones/4/name = "shoulder.r"
|
||||||
|
bones/4/parent = 0
|
||||||
|
bones/4/rest = Transform3D(-0.176299, -0.984337, 2.32732e-08, 0.984337, -0.176299, -1.29942e-07, 1.3201e-07, -1.42109e-14, 1, 0, 0.606169, 0)
|
||||||
|
bones/4/enabled = true
|
||||||
|
bones/4/position = Vector3(0, 0.606169, 0)
|
||||||
|
bones/4/rotation = Quaternion(5.0619818e-08, -4.235909e-08, 0.76690906, 0.6417558)
|
||||||
|
bones/4/scale = Vector3(1.0000002, 1.0000002, 1)
|
||||||
|
bones/5/name = "arm.r"
|
||||||
|
bones/5/parent = 4
|
||||||
|
bones/5/rest = Transform3D(0.638308, -0.769781, 1.45754e-07, 0.769781, 0.638308, 1.65745e-08, -1.05794e-07, 1.01619e-07, 1, 2.23517e-08, 0.282945, -5.32907e-15)
|
||||||
|
bones/5/enabled = true
|
||||||
|
bones/5/position = Vector3(2.23517e-08, 0.282945, -5.32907e-15)
|
||||||
|
bones/5/rotation = Quaternion(-0.15459529, -0.21817008, 0.40977547, 0.872116)
|
||||||
|
bones/5/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||||
|
bones/6/name = "hip.l"
|
||||||
|
bones/6/parent = -1
|
||||||
|
bones/6/rest = Transform3D(0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0.3528, 0)
|
||||||
|
bones/6/enabled = true
|
||||||
|
bones/6/position = Vector3(0, 0.35279977, 0)
|
||||||
|
bones/6/rotation = Quaternion(0.5, 0.5, 0.5, -0.5)
|
||||||
|
bones/6/scale = Vector3(1, 1, 1)
|
||||||
|
bones/7/name = "upper_leg.l"
|
||||||
|
bones/7/parent = 6
|
||||||
|
bones/7/rest = Transform3D(1, 0, -7.54979e-08, 7.54979e-08, 0, 1, 0, -1, 0, 0, 0.16212, 0)
|
||||||
|
bones/7/enabled = true
|
||||||
|
bones/7/position = Vector3(0, 0.16212, 0)
|
||||||
|
bones/7/rotation = Quaternion(-0.6059587, 0.3644366, 0.3644366, 0.6059587)
|
||||||
|
bones/7/scale = Vector3(1, 1, 1)
|
||||||
|
bones/8/name = "lower_leg.l"
|
||||||
|
bones/8/parent = 7
|
||||||
|
bones/8/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.103923, 0)
|
||||||
|
bones/8/enabled = true
|
||||||
|
bones/8/position = Vector3(0, 0.103923, 0)
|
||||||
|
bones/8/rotation = Quaternion(0, 0, 0, 1)
|
||||||
|
bones/8/scale = Vector3(1, 1, 1)
|
||||||
|
bones/9/name = "hip.r"
|
||||||
|
bones/9/parent = -1
|
||||||
|
bones/9/rest = Transform3D(0, -1, 0, 0, 0, 1, -1, 0, 0, 0, 0.3528, 0)
|
||||||
|
bones/9/enabled = true
|
||||||
|
bones/9/position = Vector3(0, 0.35279977, 0)
|
||||||
|
bones/9/rotation = Quaternion(0.5, -0.5, -0.5, -0.5)
|
||||||
|
bones/9/scale = Vector3(1, 1, 1)
|
||||||
|
bones/10/name = "upper_leg.r"
|
||||||
|
bones/10/parent = 9
|
||||||
|
bones/10/rest = Transform3D(1, 0, -4.37114e-08, 4.37114e-08, 0, 1, 0, -1, 0, 0, 0.145492, 0)
|
||||||
|
bones/10/enabled = true
|
||||||
|
bones/10/position = Vector3(0, 0.145492, 0)
|
||||||
|
bones/10/rotation = Quaternion(-0.66778064, 0.23252751, 0.23252754, 0.66778064)
|
||||||
|
bones/10/scale = Vector3(1, 1, 1)
|
||||||
|
bones/11/name = "lower_leg.r"
|
||||||
|
bones/11/parent = 10
|
||||||
|
bones/11/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.10808, 0)
|
||||||
|
bones/11/enabled = true
|
||||||
|
bones/11/position = Vector3(0, 0.10808, 0)
|
||||||
|
bones/11/rotation = Quaternion(0, 0, 0, 1)
|
||||||
|
bones/11/scale = Vector3(1, 1, 1)
|
||||||
|
bones/12/name = "neutral_bone"
|
||||||
|
bones/12/parent = -1
|
||||||
|
bones/12/rest = Transform3D(1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0)
|
||||||
|
bones/12/enabled = true
|
||||||
|
bones/12/position = Vector3(0, 0, 0)
|
||||||
|
bones/12/rotation = Quaternion(-0.70710677, 0, 0, 0.70710677)
|
||||||
|
bones/12/scale = Vector3(1, 1, 1)
|
||||||
|
|
||||||
|
[node name="CharacterMesh" type="MeshInstance3D" parent="Armature/Skeleton3D"]
|
||||||
|
mesh = ExtResource("3_gyuqh")
|
||||||
|
skin = SubResource("Skin_gyuqh")
|
||||||
|
|
||||||
|
[node name="Crosshair" type="Control" parent="."]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -20.0
|
||||||
|
offset_top = -20.0
|
||||||
|
offset_right = 20.0
|
||||||
|
offset_bottom = 20.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("4_gyuqh")
|
||||||
|
metadata/_edit_use_anchors_ = true
|
||||||
|
|
||||||
|
[node name="Horizontal" type="Line2D" parent="Crosshair"]
|
||||||
|
points = PackedVector2Array(-15, 0, 15, 0)
|
||||||
|
width = 2.0
|
||||||
|
|
||||||
|
[node name="Vertical" type="Line2D" parent="Crosshair"]
|
||||||
|
points = PackedVector2Array(0, -15, 0, 15)
|
||||||
|
width = 2.0
|
||||||
|
|
||||||
|
[node name="Inventory" parent="." instance=ExtResource("5_wknd5")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="Balloon" parent="." instance=ExtResource("6_rjb0o")]
|
||||||
|
transform = Transform3D(0.6970959, 0.06369831, 0, -0.06369831, 0.6970959, 0, 0, 0, 0.70000005, 0.2608546, 0.32857847, 0.54166865)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
&"": SubResource("AnimationLibrary_pj205")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="helper" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0.096, 1.141, 0.538)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="helper" parent="helper" instance=ExtResource("7_4r34j")]
|
||||||
|
|
||||||
|
[node name="Chatbot" parent="." instance=ExtResource("8_erypk")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="audio_throw" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("9_qpqd5")
|
||||||
|
volume_db = -3.0
|
||||||
|
|
||||||
|
[node name="audio_pickup" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("10_41dcx")
|
||||||
|
volume_db = -7.0
|
||||||
|
|
||||||
|
[node name="AnimationPlayer2" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
&"": SubResource("AnimationLibrary_qpqd5")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="audio_jump" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("11_a75tr")
|
||||||
|
volume_db = -8.0
|
||||||
|
|
||||||
|
[connection signal="grabbed" from="InteractRay" to="." method="_on_interact_ray_grabbed"]
|
||||||
|
[connection signal="animation_started" from="AnimationPlayer" to="." method="_on_animation_player_animation_started"]
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://b4mmlt4progvd"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cg6wf4m1u7anr" path="res://assets/assets.glb" id="1_nyoif"]
|
||||||
|
|
||||||
|
[node name="assets" instance=ExtResource("1_nyoif")]
|
||||||
Binary file not shown.
@@ -0,0 +1,266 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
const count_battery_boxes = 4
|
||||||
|
var currently_charged_battery_boxes := 0
|
||||||
|
signal show_door
|
||||||
|
@onready var aliens = $"npcs/aliens"
|
||||||
|
@onready var batteries = $"Objects/Balloons_A2"
|
||||||
|
@onready var chatbot: Control = $npcs/helpers/Chatbot
|
||||||
|
var aliens_start_count: int
|
||||||
|
var batteries_start_count: int
|
||||||
|
var helper_collected = false
|
||||||
|
var not_congratulated_1 = true
|
||||||
|
var not_congratulated_2 = true
|
||||||
|
var release_generators = false
|
||||||
|
var popped_balloons := 0
|
||||||
|
var current_task := 0
|
||||||
|
var current_text: String
|
||||||
|
var rabbit_activated = false
|
||||||
|
var audio_playing = true
|
||||||
|
@onready var checkpoints = [$startpoint,
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A1,
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A2,
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A3,
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A3_1,
|
||||||
|
]
|
||||||
|
@onready var generators = $Objects/generators
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
aliens_start_count = aliens.get_child_count()
|
||||||
|
batteries_start_count = batteries.get_child_count()
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if Global.chatbot_opened:
|
||||||
|
return
|
||||||
|
if Input.is_action_just_pressed("Screenshot"):
|
||||||
|
take_screenshot()
|
||||||
|
if Input.is_action_just_pressed("fast_forward"):
|
||||||
|
current_task = (current_task + 1 ) % len(checkpoints)
|
||||||
|
print(current_task, checkpoints[current_task].position)
|
||||||
|
$Player.position = checkpoints[current_task].position + Vector3(0.0, 0.5, 0.0)
|
||||||
|
if Input.is_action_just_pressed("rewind"):
|
||||||
|
current_task = (current_task - 1 ) % len(checkpoints)
|
||||||
|
$Player.position = checkpoints[current_task].position
|
||||||
|
if Input.is_action_just_pressed("inventory"):
|
||||||
|
if current_task == 3:
|
||||||
|
$Player.toggle_inventory()
|
||||||
|
if current_task == 4 and Input.is_action_just_pressed("keypad"):
|
||||||
|
reset_music_volume()
|
||||||
|
$Keypad.visible = true
|
||||||
|
$Hilfestellung/CanvasLayer.visible = false
|
||||||
|
$Player.set_mode('aim')
|
||||||
|
|
||||||
|
if not_congratulated_1 and aliens.get_child_count() <= aliens_start_count-5:
|
||||||
|
not_congratulated_1 = false
|
||||||
|
show_congratulations("Glückwunsch!
|
||||||
|
Die erste Aufgabe ist geschafft.", "Definitionen von KI")
|
||||||
|
|
||||||
|
|
||||||
|
func show_congratulations(text, text_2) -> void:
|
||||||
|
print(text)
|
||||||
|
$Player/helper/helper.celebrate()
|
||||||
|
$Hilfestellung/CanvasLayer.visible = false
|
||||||
|
$Congratulations/CanvasLayer/Panel/Label.text = text
|
||||||
|
$Congratulations/CanvasLayer.visible = true
|
||||||
|
$Congratulations/CanvasLayer/Panel/Label_repeat.text = "(Um die "+ text_2 + " noch einmal nachzulesen, sprechen Sie mit ihrem Helfer)"
|
||||||
|
await get_tree().create_timer(5.0).timeout
|
||||||
|
$Player/helper/helper.stop_anim()
|
||||||
|
$Congratulations/CanvasLayer.visible = false
|
||||||
|
|
||||||
|
func openLinkinBrowser(link):
|
||||||
|
OS.shell_open(link)
|
||||||
|
|
||||||
|
func openAIActinBrowser():
|
||||||
|
openLinkinBrowser("https://eur-lex.europa.eu/legal-content/DE/TXT/?uri=CELEX:32024R1689")
|
||||||
|
|
||||||
|
func openDSGVOinBrowser():
|
||||||
|
openLinkinBrowser("https://dsgvo-gesetz.de/")
|
||||||
|
|
||||||
|
func _on_openChatBot():
|
||||||
|
$Hilfestellung/CanvasLayer.visible = false
|
||||||
|
$HUD.visible = false
|
||||||
|
quiet_down_music()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _on_battery_box_removed_battery() -> void:
|
||||||
|
currently_charged_battery_boxes -= 1
|
||||||
|
print(currently_charged_battery_boxes)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_show_door() -> void:
|
||||||
|
print('showing door')
|
||||||
|
$Objects/spaceship/Door.visible = true
|
||||||
|
$Objects/spaceship/Door.position.y = 0.012
|
||||||
|
$Objects/spaceship/door_cover/CollisionShape3D.disabled = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_door_body_entered(body: Node3D) -> void:
|
||||||
|
if $Objects/spaceship/Door.visible:
|
||||||
|
DialogueState.currentTask = 5
|
||||||
|
Transition.change_scene("res://quiz.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_a3_activated() -> void:
|
||||||
|
quiet_down_music()
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A3.current_weight = 10.0
|
||||||
|
DialogueManager.show_chosen_dialogue_balloon(load($Objects/pressure_blocks/PressureBlock_A3.text_on_activation), "/game_balloons/game_balloon_v_2.tscn", "start")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_a_1_activated() -> void:
|
||||||
|
current_task = 1
|
||||||
|
DialogueState.currentTask = 1
|
||||||
|
current_text = "[Enter] oder [t] drücken, um mit den Aliens zu reden"
|
||||||
|
$Hinweistexte/CanvasLayer/Panel/Label.text = "Wenn Sie weiterlaufen werden Ihnen einige Aliens begegnen. Sprechen Sie mit ihnen, um verschiedene Definitionen von Künstlicher Intelligenz (KI) kennenzulernen."
|
||||||
|
$Hinweistexte/CanvasLayer.visible = true
|
||||||
|
if $Tutorial:
|
||||||
|
$Tutorial.queue_free()
|
||||||
|
if $Objects/Bridges/walls_tutorial:
|
||||||
|
$Objects/Bridges/walls_tutorial.queue_free()
|
||||||
|
if $Objects/Chip0/block:
|
||||||
|
$Objects/Chip0/block.queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_a_2_activated() -> void:
|
||||||
|
current_task = 2
|
||||||
|
current_text = "Zielen mit der Maus, Klicken zum Werfen, [r] zum Wechsel zwischen Wurf- und Kameramodus"
|
||||||
|
$Hinweistexte/CanvasLayer/Panel/Label.text = "Laufen Sie weiter zur Wurfzone.
|
||||||
|
Dort angekommen, können Sie die Ballons abwerfen, um zu entdecken, in was für Systemen KI bereits eingesetzt wird bzw. werden kann.
|
||||||
|
Sammeln Sie danach die Batterien, Sie werden sie im weiteren Verlauf benötigen.
|
||||||
|
Zur Erinnerung: Zielen mit der Maus (Fadenkreuz) und Werfen durch Klicken. Wenn Sie kein Fadenkreuz sehen, evtl. [r] drücken, um den Modus zu wechseln."
|
||||||
|
$Hinweistexte/CanvasLayer.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_deactivated() -> void:
|
||||||
|
$Hinweistexte/CanvasLayer.visible = false
|
||||||
|
$Hilfestellung/CanvasLayer/Panel/Label.text = current_text
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_a_3_1_activated() -> void:
|
||||||
|
reset_music_volume()
|
||||||
|
current_task = 3
|
||||||
|
DialogueState.currentTask = 3
|
||||||
|
current_text = "Auswahl der Batterien im Inventar [c], Einfügen mit [f] - ([e] zum wieder rausholen, [q] ablegen)"
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A3_1.current_weight = 10.0
|
||||||
|
$AnimationPlayer.play("start_ordering_game")
|
||||||
|
_on_pressure_block_deactivated()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_balloon_tree_exited() -> void:
|
||||||
|
popped_balloons += 1
|
||||||
|
if popped_balloons == Global.TOTAL_BALLOONS_A2 and current_task == 2:
|
||||||
|
not_congratulated_2 = false
|
||||||
|
DialogueState.batteriesFlag = true
|
||||||
|
show_congratulations("Glückwunsch!
|
||||||
|
Die 2. Aufgabe ist geschafft.", "KI-Systeme")
|
||||||
|
$Objects/arrows/after_throw.visible = true
|
||||||
|
$Objects/Fences/no_arrows/barrier_throw.position.x = 4.0
|
||||||
|
$Hilfestellung/CanvasLayer/Panel/Label.text = "Sammeln Sie die Batterien auf (durch Vorbeilaufen) - einen Counter dazu sehen Sie oben links"
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_pressure_block_a_4_activated() -> void:
|
||||||
|
quiet_down_music()
|
||||||
|
current_task = 4
|
||||||
|
DialogueState.currentTask = 4
|
||||||
|
DialogueState.personalDataFlag = true
|
||||||
|
$Objects/spaceship/keypad.visible = true
|
||||||
|
current_text = "[k] drücken zum Starten des nächsten Minispiels"
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A4.current_weight = 10.0
|
||||||
|
DialogueManager.show_chosen_dialogue_balloon(load($Objects/pressure_blocks/PressureBlock_A4.text_on_activation), "/game_balloons/game_balloon_v_2.tscn", "start")
|
||||||
|
_on_pressure_block_deactivated()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_keypad_game_finished() -> void:
|
||||||
|
$Keypad.visible = false
|
||||||
|
$Objects/spaceship/keypad.visible = false
|
||||||
|
$Hilfestellung/CanvasLayer/Panel/Label.text = "Gehen Sie durch die Tür ins Raumschiff"
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
show_door.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_battery_3_battery_collected() -> void:
|
||||||
|
$Player/helper.visible = true
|
||||||
|
#TODO implement if helper should replace battery 3 (since it's also a chatbot)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||||
|
if anim_name == "collect_helper_part1":
|
||||||
|
$Player/AnimationPlayer2.play("collect_helper_part2")
|
||||||
|
if anim_name == 'follow_rabbit':
|
||||||
|
$AnimationPlayer.play('rotate_label')
|
||||||
|
if anim_name == "ordering_finished":
|
||||||
|
generators.queue_free()
|
||||||
|
show_congratulations("Glückwunsch!
|
||||||
|
Die 3. Aufgabe ist geschafft.", "Risikostufen von KI")
|
||||||
|
$Objects/pressure_blocks/PressureBlock_A4.position = Vector3(-87.26, 3.787, 209.9)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_helper_corner_dialogue_finished() -> void:
|
||||||
|
if not helper_collected:
|
||||||
|
$AnimationPlayer.play("collect_helper_part1")
|
||||||
|
$npcs/helpers/helper_corner/CollisionShape3D.disabled = true
|
||||||
|
helper_collected = true
|
||||||
|
$Objects/chip1/star.queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_battery_box_fully_charged() -> void:
|
||||||
|
currently_charged_battery_boxes += 1
|
||||||
|
print('currently charged boxes: ', currently_charged_battery_boxes)
|
||||||
|
if currently_charged_battery_boxes == count_battery_boxes:
|
||||||
|
print('all boxes are full')
|
||||||
|
await get_tree().create_timer(1.5).timeout
|
||||||
|
$AnimationPlayer.play("ordering_finished")
|
||||||
|
$Objects/Chip0/Arrows_A4.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_inventory_opened() -> void:
|
||||||
|
$Hilfestellung/CanvasLayer.visible = false
|
||||||
|
$HUD.visible = false
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_inventory_closed() -> void:
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
$HUD.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_balloon_popped(balloon: Balloon) -> void:
|
||||||
|
$Player/helper/helper.play_small_celebration()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_chatbot_closing_chatbot() -> void:
|
||||||
|
if current_task > 0:
|
||||||
|
$HUD.visible = true
|
||||||
|
$Hilfestellung/CanvasLayer.visible = true
|
||||||
|
reset_music_volume()
|
||||||
|
|
||||||
|
func take_screenshot():
|
||||||
|
print('taking screenshot')
|
||||||
|
var image = get_viewport().get_texture().get_image()
|
||||||
|
image.save_png("user://screenshot"+Time.get_datetime_string_from_system()+".png")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_start_rabbit_body_entered(body: Node3D) -> void:
|
||||||
|
if not rabbit_activated:
|
||||||
|
$AnimationPlayer.play('follow_rabbit')
|
||||||
|
rabbit_activated = true
|
||||||
|
|
||||||
|
func quiet_down_music() -> void:
|
||||||
|
$AudioStreamPlayer.volume_db = -20.0
|
||||||
|
|
||||||
|
func reset_music_volume() -> void:
|
||||||
|
$AudioStreamPlayer.volume_db = -10.0
|
||||||
|
|
||||||
|
func toggle_music() -> void:
|
||||||
|
if not audio_playing:
|
||||||
|
audio_playing = true
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
|
else:
|
||||||
|
$AudioStreamPlayer.stop()
|
||||||
|
audio_playing = false
|
||||||
|
|
||||||
|
|
||||||
|
func _on_audio_stream_player_finished() -> void:
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d0lyomtjfroou
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
|||||||
|
[gd_resource type="Terrain3DMaterial" load_steps=2 format=3 uid="uid://dtdjnbbnpdyqg"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" uid="uid://01qauauvd8aa" path="res://addons/terrain_3d/extras/shaders/minimum.gdshader" id="1_yvehn"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
_shader_parameters = {
|
||||||
|
&"color_high": Color(0.5019608, 0.4, 0.2, 1),
|
||||||
|
&"color_low": Color(0.055, 0.216, 0.11, 1),
|
||||||
|
&"flat_terrain_normals": false,
|
||||||
|
&"height_scale": 1.0,
|
||||||
|
&"height_split": 1.0
|
||||||
|
}
|
||||||
|
shader_override_enabled = true
|
||||||
|
shader_override = ExtResource("1_yvehn")
|
||||||
|
show_region_grid = true
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 208 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c2crd1tqwu4i"
|
||||||
|
path="res://.godot/imported/Metal049A.png-af30c4a6a788f1059dad8d458b88d8e5.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Resources/Terrains/textures/Metal049A_1K-PNG/Metal049A.png"
|
||||||
|
dest_files=["res://.godot/imported/Metal049A.png-af30c4a6a788f1059dad8d458b88d8e5.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
Binary file not shown.
@@ -0,0 +1,58 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://k8b0a35qcriu"
|
||||||
|
valid=false
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Resources/Terrains/textures/Metal049A_1K-PNG/Metal049A_1K-PNG.blend"
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/root_script=null
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_name_suffixes=true
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
materials/extract=0
|
||||||
|
materials/extract_format=0
|
||||||
|
materials/extract_path=""
|
||||||
|
_subresources={}
|
||||||
|
blender/nodes/visible=0
|
||||||
|
blender/nodes/active_collection_only=false
|
||||||
|
blender/nodes/punctual_lights=true
|
||||||
|
blender/nodes/cameras=true
|
||||||
|
blender/nodes/custom_properties=true
|
||||||
|
blender/nodes/modifiers=1
|
||||||
|
blender/meshes/colors=false
|
||||||
|
blender/meshes/uvs=true
|
||||||
|
blender/meshes/normals=true
|
||||||
|
blender/meshes/export_geometry_nodes_instances=false
|
||||||
|
blender/meshes/tangents=true
|
||||||
|
blender/meshes/skins=2
|
||||||
|
blender/meshes/export_bones_deforming_mesh_only=false
|
||||||
|
blender/materials/unpack_enabled=true
|
||||||
|
blender/materials/export_materials=1
|
||||||
|
blender/animation/limit_playback=true
|
||||||
|
blender/animation/always_sample=true
|
||||||
|
blender/animation/group_tracks=true
|
||||||
|
gltf/naming_version=2
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<materialx version="1.39" fileprefix="./">
|
||||||
|
<open_pbr_surface type="surfaceshader" xpos="6.159420" ypos="-1.879310" name="Metal049A_1K_PNG_OpenPbrSurface">
|
||||||
|
<input type="color3" name="base_color" nodename="Metal049A_1K_PNG_Color" />
|
||||||
|
<input type="float" name="base_metalness" nodename="Metal049A_1K_PNG_Metalness" />
|
||||||
|
<input type="vector3" name="geometry_normal" nodename="NormalMap" />
|
||||||
|
<input type="float" name="specular_roughness" nodename="Metal049A_1K_PNG_Roughness" />
|
||||||
|
</open_pbr_surface>
|
||||||
|
<surfacematerial type="material" xpos="8.695652" ypos="0.000000" name="Metal049A_1K_PNG">
|
||||||
|
<input type="surfaceshader" name="surfaceshader" nodename="Metal049A_1K_PNG_OpenPbrSurface" />
|
||||||
|
<input type="displacementshader" name="displacementshader" nodename="displacement" />
|
||||||
|
</surfacematerial>
|
||||||
|
<tiledimage type="color3" xpos="3.623188" ypos="-3.103448" name="Metal049A_1K_PNG_Color">
|
||||||
|
<input type="filename" value="Metal049A_1K-PNG_Color.png" colorspace="srgb_texture" name="file" />
|
||||||
|
<input type="vector2" value="1.0, 1.0" name="uvtiling" />
|
||||||
|
</tiledimage>
|
||||||
|
<tiledimage type="float" xpos="3.623188" ypos="5.163793" name="Metal049A_1K_PNG_Displacement">
|
||||||
|
<input type="filename" value="Metal049A_1K-PNG_Displacement.png" name="file" />
|
||||||
|
<input type="vector2" value="1.0, 1.0" name="uvtiling" />
|
||||||
|
</tiledimage>
|
||||||
|
<displacement type="displacementshader" xpos="6.159420" ypos="1.879310" name="displacement">
|
||||||
|
<input type="float" name="displacement" nodename="Metal049A_1K_PNG_Displacement" />
|
||||||
|
<input type="float" value="1.0" name="scale" />
|
||||||
|
</displacement>
|
||||||
|
<tiledimage type="float" xpos="3.623188" ypos="-1.758621" name="Metal049A_1K_PNG_Metalness">
|
||||||
|
<input type="filename" value="Metal049A_1K-PNG_Metalness.png" name="file" />
|
||||||
|
<input type="vector2" value="1.0, 1.0" name="uvtiling" />
|
||||||
|
</tiledimage>
|
||||||
|
<tiledimage type="vector3" xpos="1.086957" ypos="0.879310" name="Metal049A_1K_PNG_NormalGL">
|
||||||
|
<input type="filename" value="Metal049A_1K-PNG_NormalGL.png" name="file" />
|
||||||
|
<input type="vector2" value="1.0, 1.0" name="uvtiling" />
|
||||||
|
</tiledimage>
|
||||||
|
<normalmap type="vector3" xpos="3.623188" ypos="3.586207" name="NormalMap">
|
||||||
|
<input type="vector3" name="in" nodename="Metal049A_1K_PNG_NormalGL" />
|
||||||
|
<input type="float" value="1.0" name="scale" />
|
||||||
|
</normalmap>
|
||||||
|
<tiledimage type="float" xpos="3.623188" ypos="-0.413793" name="Metal049A_1K_PNG_Roughness">
|
||||||
|
<input type="filename" value="Metal049A_1K-PNG_Roughness.png" name="file" />
|
||||||
|
<input type="vector2" value="1.0, 1.0" name="uvtiling" />
|
||||||
|
</tiledimage>
|
||||||
|
</materialx>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" load_steps=6 format=3 uid="acg_bsi79hm4"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://acg_0b6m4z8d" id="Color" path="./Metal049A_1K-PNG_Color.png"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://acg_d70su2z9" id="Metalness" path="./Metal049A_1K-PNG_Metalness.png"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://acg_q1sedajb" id="Displacement" path="./Metal049A_1K-PNG_Displacement.png"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://acg_w7dtvmnb" id="Roughness" path="./Metal049A_1K-PNG_Roughness.png"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://acg_70ebfpqw" id="NormalGL" path="./Metal049A_1K-PNG_NormalGL.png"]
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("Color")
|
||||||
|
metallic_texture = ExtResource("Metalness")
|
||||||
|
metallic = 1.0
|
||||||
|
metallic_texture_channel = 4
|
||||||
|
roughness_texture = ExtResource("Roughness")
|
||||||
|
roughness_texture_channel = 4
|
||||||
|
normal_texture = ExtResource("NormalGL")
|
||||||
|
normal_enabled = true
|
||||||
|
heightmap_texture = ExtResource("Displacement")
|
||||||
|
heightmap_scale = 1.0
|
||||||
|
heightmap_enabled = true
|
||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 523 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://ymsbb8ebr4be"
|
||||||
|
path.s3tc="res://.godot/imported/Metal049A_1K-PNG_Color.png-b49d04f407d2e9f51385bd00b6d2b523.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Resources/Terrains/textures/Metal049A_1K-PNG/Metal049A_1K-PNG_Color.png"
|
||||||
|
dest_files=["res://.godot/imported/Metal049A_1K-PNG_Color.png-b49d04f407d2e9f51385bd00b6d2b523.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user