From 8b93f60aa00d9a741cda8222eddbf64c04c15db6 Mon Sep 17 00:00:00 2001 From: Joseph Manley Date: Sat, 16 May 2020 20:35:08 -0400 Subject: [PATCH] Technically a game --- ...a.png-d56c2c3c604fb12791bf7613004ed5a9.md5 | 3 + ....png-d56c2c3c604fb12791bf7613004ed5a9.stex | Bin 0 -> 515 bytes ...t.png-9efdbc2b7641e3d048bb739e7ca8b977.md5 | 3 + ....png-9efdbc2b7641e3d048bb739e7ca8b977.stex | Bin 0 -> 123 bytes ...p.png-07edc3c3fd79a9ce4de9ab28aa95564c.md5 | 3 + ....png-07edc3c3fd79a9ce4de9ab28aa95564c.stex | Bin 0 -> 1947 bytes client/Assets/Art/Characters/aura.aseprite | Bin 0 -> 619 bytes client/Assets/Art/Characters/aura.png | Bin 0 -> 362 bytes client/Assets/Art/Characters/aura.png.import | 34 ++++++++ client/Assets/Art/Objects/flashlight.aseprite | Bin 0 -> 566 bytes client/Assets/Art/Objects/flashlight.png | Bin 0 -> 91 bytes .../Assets/Art/Objects/flashlight.png.import | 34 ++++++++ client/Assets/Art/flashlight_map.aseprite | Bin 0 -> 3648 bytes client/Assets/Art/flashlight_map.png | Bin 0 -> 1915 bytes client/Assets/Art/flashlight_map.png.import | 34 ++++++++ client/Assets/Stories/english_story.tres | 38 +++++++++ client/Nodes/Player.tscn | 31 ++++++- client/Scenes/World.scn | Bin 9238 -> 10955 bytes client/Scripts/Component/Pickup.gd | 14 ++++ client/Scripts/Component/TipArea.gd | 12 +++ client/Scripts/Entities/Flashlight.gd | 19 +++++ client/Scripts/Entities/NPCs/Aura.gd | 45 ++++++++++ client/Scripts/Entities/NPCs/CEO.gd | 1 + .../Scripts/Entities/NPCs/IntroScientist.gd | 4 + client/Scripts/Entities/Player.gd | 16 +++- client/Scripts/Entities/Zone.gd | 8 ++ client/Scripts/Entities/ZoneLoader.gd | 5 +- client/Scripts/Singletons/WorldManager.gd | 2 +- client/Scripts/Systems/GameGui.gd | 79 +++++++++++++++++- client/project.godot | 11 +++ 30 files changed, 390 insertions(+), 6 deletions(-) create mode 100644 client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.md5 create mode 100644 client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.stex create mode 100644 client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.md5 create mode 100644 client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.stex create mode 100644 client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.md5 create mode 100644 client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.stex create mode 100644 client/Assets/Art/Characters/aura.aseprite create mode 100644 client/Assets/Art/Characters/aura.png create mode 100644 client/Assets/Art/Characters/aura.png.import create mode 100644 client/Assets/Art/Objects/flashlight.aseprite create mode 100644 client/Assets/Art/Objects/flashlight.png create mode 100644 client/Assets/Art/Objects/flashlight.png.import create mode 100644 client/Assets/Art/flashlight_map.aseprite create mode 100644 client/Assets/Art/flashlight_map.png create mode 100644 client/Assets/Art/flashlight_map.png.import create mode 100644 client/Scripts/Component/Pickup.gd create mode 100644 client/Scripts/Component/TipArea.gd create mode 100644 client/Scripts/Entities/Flashlight.gd create mode 100644 client/Scripts/Entities/NPCs/Aura.gd diff --git a/client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.md5 b/client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.md5 new file mode 100644 index 0000000..4e115c4 --- /dev/null +++ b/client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.md5 @@ -0,0 +1,3 @@ +source_md5="29f28fa741ffa711826400e7fea90a27" +dest_md5="2fe6ef3f4c5624748dc861a0b95a251b" + diff --git a/client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.stex b/client/.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.stex new file mode 100644 index 0000000000000000000000000000000000000000..b6817adf06c17acf884b0c1c8d339328baa000a8 GIT binary patch literal 515 zcmV+e0{s0)L{n5C0000G000000000001yWO0002z0RR9{PDdb#P)Px$ok>JNR7i=nR54G&KotJ2 z=|t2Bk-*mO-regX@W9C4cukmmOgI}uyIcJeUp>#~-Ig!ThkEv8Z8R}_ z`Ks4@w($;A+xJ-aa9tWnGZivP6i&AUU)J+E0RUiF13c90zoL3gw7XSgkFTU6V(A=b z^Wzil3IIgLeHf(+wp|{fQ-$jY>gGtt3U!O<12I9W@}etgxkENP_3xDVDF{FD@fHMCJI zQa`@12V{Yr;Iia__@M>JlE}n`^#cIvj9KaLCmQQA{x>sIrL?_A#NPk_002ovPDHLk FV1h4A<6i&( literal 0 HcmV?d00001 diff --git a/client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.md5 b/client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.md5 new file mode 100644 index 0000000..c8ba1ab --- /dev/null +++ b/client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.md5 @@ -0,0 +1,3 @@ +source_md5="a2e5738b2c3c72b7747d4619c999f663" +dest_md5="52ebec391e52938a37545ccc6f79cf74" + diff --git a/client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.stex b/client/.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.stex new file mode 100644 index 0000000000000000000000000000000000000000..9937c8175d8eed71ad597f0724a3678c0d88533f GIT binary patch literal 123 zcmZ>F2@YXqU|?VbVh9jm2eIRUIKalFz;h33RQds!&{DA`p3`$>Gu`!63FmF|_Jemtsz~JfX=d#Wz Gp$Pz-MjE34 literal 0 HcmV?d00001 diff --git a/client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.md5 b/client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.md5 new file mode 100644 index 0000000..f268f66 --- /dev/null +++ b/client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.md5 @@ -0,0 +1,3 @@ +source_md5="66ca8a87ea50ca711ae82b664f60a2a4" +dest_md5="369b1a9c914d86a94dc9b0795e76649f" + diff --git a/client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.stex b/client/.import/flashlight_map.png-07edc3c3fd79a9ce4de9ab28aa95564c.stex new file mode 100644 index 0000000000000000000000000000000000000000..0c0d5a8a37e751b9e81fa5c52c2d7acac4745133 GIT binary patch literal 1947 zcmXw42T+sQ7QRVBCL}5nDZ=}GGkfRGxpTfb=gyh$&i%eK)~;><0l)?D z&r(9eDPW)haCSOFNQc8N%w7x(?Xt7ArhxCoaQP2%a18caDTWWk70MY)!0c0B003=l zXKmpYSGYV$vYqr&fAz5@Z+Eh`Msngnd*XnFi7ndH7X65TUm)O<6%;Jnd%HWkzwh2h zu8j&sP0@>Qt6VD$i<(ZIl>buXB$(pQ9F%U6PW1=Y5yuaRiUs$4FW)+6#_!}Q_xCnzO(zvyVyc}BHn$ZulPAMk+k7mLLr z?NIes?dq^5tB)WgSuUJT*SH^ly_mM7sYk$rV<*+r)F3*4YPG%&I~Ki7XZRopo#PV| zGEICbbNW)gs5!ddKnEuaT?h{e!OlNFJY240Z#2_ATZPI#9~K^tTFdL~^9bE13ij+` zzji?rI>*Mw5EGtpBP!8`pF>q>{Q~wDb6po4;7m?>w=u9h*LP^}m9-wWRYd|6Uc+}Z2 zT`+U|R zx%kxE(dqAg9HjtUS9iC((n=qj;t{8%L0){3_3o$+z(ifUhH20$&GYH{X*rDkuS*{U z76@mkzW#XI@(R16q~_5LalOweX2@X-bhEIe1ht^)^oOZnz{X|V=iTWiPLD&>bbvC4 z!vQZEB~{pqwl~z8kNCR)nW(E*LgM5zXGDMk80w3w4-5UtLGeZ_W6uB|a#0Bz@WI(@pc%~jMJo}^lqbMSYtwY9ENYr3g0?wQdcR0pl`-;fjHP}la1juBJ9WHN!&ly7}N z>n}tEoxbZ${F=9QPvo3PBv-q`akTC+wtt4yzS~#S94kH%|56>9))m1jMsZ*gM?EC?^8n#=th_$_+Pw@kfn1o2Cp(Wbt58* z@OfyGRf6_g-v$~&)9l*N$;k;EzA2)z*LUB3mVG=?2ve(8S-?+l&^s;gcDU7AigWk` zfoFxYZ^{qhIa`k>$G>IBkI;-9SEz6VIZ4EGuzV<#d*y+I5) z7-xqVJi*Ta`*Kh#+4!;qkJ_KKx%V&^cY66zbGdnLV>yt__ZATSYmAJH)EI_RtF(d3 z1}Vy1>V8==nMR{!4H_95Lffd5F%~%<*@jCG_+sTuBq0HQ_Y+Pe5(&Mf`upMw17q9# znW-LrKI+q0&)fMAA8%6d|Bi9;SKpIih!y8J1_41Y1xu+nw6l4oyVq+0IHq%$c_Z=)!7xTw;z<~!vMH&Pj zmyQe7xrT3huit{X6S4tbpOL$>^Q<{|CAS_nn8Y$};H@nU;Qu{{!H3myG}b literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Characters/aura.aseprite b/client/Assets/Art/Characters/aura.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c59ad5e6da79d295ceecbde2ce7b1953632967ca GIT binary patch literal 619 zcmd01Vqkc%l!-wA2o)F@85kH+fEWR|7#Kl(r1>4FBG*%3V*%iQ6 zB3Tj!WJ@Y=K}9%`WMIt0k&*uy7*04l1Ic%XX8}nd0FuQndO)&2%o<3}w6Fk@@7}!w zl9^dq|22S0SU`RT84NT4s2ivi$OdWx>HsPSss$>P1*ubD29huUG=PDX!6&gYwP*&2 zsQ{8-WcUvZObFm*;Ag0qlbmpXf7Rovf5$DK9yVlrn(*P>hc*8de7fWm7+y18Tyl$f zGq=jLnNz>YOFq8Tt|ulb`BT2dvFNB?mBtSHGg3Kr9c&*bem(HU#hib-Tn$4ce}{jM zUD4M))!+Hnu}4=dV4hGVq4q|YgQ1oCgzb(;i3(pC4%VB@Vr1AZGbwix&>_D*GJ*pZ z6r4>!400zMiaXh%?rdmywPW7@LcgB{XBt@U$udn943yab literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Characters/aura.png b/client/Assets/Art/Characters/aura.png new file mode 100644 index 0000000000000000000000000000000000000000..b369b9861e63a2b5e18f240d2a75bfe7198bad7f GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6k~CayA#8@b22Z1Y!y!z#}JRs zFUR+;Dil^l<)^3#_6dwkjcL1w}MSqGjU{cgdb_6+g{^E__4PF@2HJO)o!KbLh* G2~7ac#hVEL literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Characters/aura.png.import b/client/Assets/Art/Characters/aura.png.import new file mode 100644 index 0000000..f8a1f90 --- /dev/null +++ b/client/Assets/Art/Characters/aura.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Art/Characters/aura.png" +dest_files=[ "res://.import/aura.png-d56c2c3c604fb12791bf7613004ed5a9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/client/Assets/Art/Objects/flashlight.aseprite b/client/Assets/Art/Objects/flashlight.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..354728dd5427d2bd153c42d6aa8d34a53c932e71 GIT binary patch literal 566 zcmcJNu}i~16o+41Lq?qhryio>BBnuFiiLvU(mF_osyI}s7Mh_F6;Xr^A_!f&2%>dx zann`7!9_Q5mg=B_u8M9};rx;+_8;(t_i=d#`F$5I8Wedr3`j@M&jW@$jH3;aWP31?n#ND#)QtD?CZrSmdTBKVI!O{K%EW{(QnjMDsZXc{46yVFn z9{hZd!rkX_=$uu0dKlY*56OFJB(&HL|)1&81S=;Mw!)+pnPET(AU zh#+>T;e`}N=y)z#V}Szsgp*7xnFNwXRM<;WA^2M;h$&;UYx9dLGQf+Wnp>Jn(Jb#; WtnM$l?#FBJGL|bh+NF2WOnn0w(2m#u literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/flashlight.png b/client/Assets/Art/Objects/flashlight.png new file mode 100644 index 0000000000000000000000000000000000000000..a48b0f7a5cc6f20a40178a982d3a075857fe51de GIT binary patch literal 91 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y@!3HFyABb!Laf*Z7ofy`glX(f`hhH%VG nE-5VhdH%qG0|uopt=JgEOPIH+S02p;Dq!$*^>bP0l+XkKdh{3Z literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/flashlight.png.import b/client/Assets/Art/Objects/flashlight.png.import new file mode 100644 index 0000000..11e37aa --- /dev/null +++ b/client/Assets/Art/Objects/flashlight.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Art/Objects/flashlight.png" +dest_files=[ "res://.import/flashlight.png-9efdbc2b7641e3d048bb739e7ca8b977.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/client/Assets/Art/flashlight_map.aseprite b/client/Assets/Art/flashlight_map.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..0bd0c2608fde228d05148a76f19da8ac8252dcc5 GIT binary patch literal 3648 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 J2LFup{{Vx7OjG~> literal 9238 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 1: + var gui = get_tree().root.get_node("World").get_node("GUI") + gui.display_tip(tip) + queue_free() diff --git a/client/Scripts/Component/TipArea.gd b/client/Scripts/Component/TipArea.gd new file mode 100644 index 0000000..5991ba0 --- /dev/null +++ b/client/Scripts/Component/TipArea.gd @@ -0,0 +1,12 @@ +extends Area2D + +export var tip = "" + +func _ready(): + connect("body_entered", self, "_on_body_enter") + +func _on_body_enter(body): + if body.has_method("add_interactable"): + var gui = get_tree().root.get_node("World").get_node("GUI") + gui.display_tip(tip) + queue_free() diff --git a/client/Scripts/Entities/Flashlight.gd b/client/Scripts/Entities/Flashlight.gd new file mode 100644 index 0000000..1c0e1b7 --- /dev/null +++ b/client/Scripts/Entities/Flashlight.gd @@ -0,0 +1,19 @@ +extends Node2D + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +func _process(delta): + var rot = global_position.angle_to_point(get_global_mouse_position()) + rotation = rot + PI - get_parent().global_rotation + + if Input.is_action_just_pressed("toggle_flashlight"): + $Light2D.enabled = !$Light2D.enabled + $Glow.enabled = !$Glow.enabled diff --git a/client/Scripts/Entities/NPCs/Aura.gd b/client/Scripts/Entities/NPCs/Aura.gd new file mode 100644 index 0000000..38f9408 --- /dev/null +++ b/client/Scripts/Entities/NPCs/Aura.gd @@ -0,0 +1,45 @@ +extends Area2D + +var state = 0 +var timer : Timer + +func _ready(): + $Speaker.speaker_name = "Aura" + connect("body_entered", self, "_on_body_enter") + connect("body_exited", self, "_on_body_exit") + +func _on_body_enter(body): + if body.has_method("add_interactable"): + state = 1 + $Speaker.start_dialog("aura_meeting") + +func _process(delta): + if state == 1 and not $Speaker.gui.is_in_dialog(): + $Sprite.frame = 0 + $Speaker.start_dialog("aura_meeting_gun") + state = 2 + elif state == 2 and not $Speaker.gui.is_in_dialog(): + $"/root/MusicManager".stop() + if not timer: + timer = Timer.new() + add_child(timer) + timer.connect("timeout", self, "shoot_scene") + timer.start(0.5) + + +func shoot_scene(): + $AudioStreamPlayer.play() + $CanvasLayer/Blood.show() + timer.disconnect("timeout", self, "shoot_scene") + timer.stop() + timer.connect("timeout", self, "start_fade") + timer.start(0.5) + +func start_fade(): + timer.stop() + var fader = get_tree().root.get_node("World").get_node("Fader").get_child(0) + fader.connect("fade_complete", self, "go_to_credits") + fader.fade(2, false) + +func go_to_credits(): + get_tree().change_scene("res://Scenes/Credits.scn") diff --git a/client/Scripts/Entities/NPCs/CEO.gd b/client/Scripts/Entities/NPCs/CEO.gd index eddbbe8..ae157f0 100644 --- a/client/Scripts/Entities/NPCs/CEO.gd +++ b/client/Scripts/Entities/NPCs/CEO.gd @@ -19,3 +19,4 @@ func _on_interact(): func _on_dialog_exit(): if state == 0: state = 1 + $Speaker.gui.display_tip("Press S and then SPACE\nto go down platforms") diff --git a/client/Scripts/Entities/NPCs/IntroScientist.gd b/client/Scripts/Entities/NPCs/IntroScientist.gd index c9d371a..15b493d 100644 --- a/client/Scripts/Entities/NPCs/IntroScientist.gd +++ b/client/Scripts/Entities/NPCs/IntroScientist.gd @@ -4,8 +4,12 @@ func _ready(): connect("interacted", self, "_on_interact") $Speaker.speaker = "fast_talker" $Speaker.speaker_name = "Dr.Thadd" + $Speaker.connect("dialog_exited", self, "give_tip") $Speaker.start_dialog("intro_science") func _on_interact(): $Speaker.start_dialog("intro_science_followup") +func give_tip(): + $Speaker.gui.display_tip("Used A & D to move\nleft and right") + $Speaker.disconnect("dialog_exited", self, "give_tip") diff --git a/client/Scripts/Entities/Player.gd b/client/Scripts/Entities/Player.gd index 241d100..4b8dedf 100644 --- a/client/Scripts/Entities/Player.gd +++ b/client/Scripts/Entities/Player.gd @@ -17,6 +17,20 @@ var motion : Vector2 = Vector2(0,0) # Player's current velocity var gui var interactables = [] +var items = [] +var equiped = null + +func add_item(item): + items.append(item) + equip_item(item) + +func equip_item(item): + var node = get_node_or_null("Torso/RightArm/RightForearm/LeftHand/Node2D/" + item) + if node: + equiped = item + node.show() + else: + print("Tried to equip: " + item + " but item was missing!") func add_interactable(interactable): interactables.append(interactable) @@ -49,7 +63,7 @@ func _physics_process(delta): func user_input(): - if Input.is_action_just_pressed("ui_accept") and len(interactables) > 0 and not gui.is_in_dialog(): + if Input.is_action_just_pressed("interact") and len(interactables) > 0 and not gui.is_in_dialog(): interactables[0].interact() if is_on_floor() and Input.is_action_just_pressed("ui_up") and Input.is_action_pressed("ui_down"): diff --git a/client/Scripts/Entities/Zone.gd b/client/Scripts/Entities/Zone.gd index 6306c57..b20827c 100644 --- a/client/Scripts/Entities/Zone.gd +++ b/client/Scripts/Entities/Zone.gd @@ -1,8 +1,14 @@ extends Node2D +export var display_name = "Untitled" export var load_on_start = false export var music : AudioStream +var loaded = false + +func is_loaded(): + return loaded + func _ready(): if load_on_start: load_zone() @@ -13,7 +19,9 @@ func load_zone(): if $"/root/MusicManager".stream != music: $"/root/MusicManager".play_stream(music) show() + loaded = true func unload_zone(): hide() + loaded = false diff --git a/client/Scripts/Entities/ZoneLoader.gd b/client/Scripts/Entities/ZoneLoader.gd index ce7a108..7ab0661 100644 --- a/client/Scripts/Entities/ZoneLoader.gd +++ b/client/Scripts/Entities/ZoneLoader.gd @@ -12,6 +12,9 @@ func _on_body_entered(body): var child = parent.get_child(i) if child.has_method("load_zone"): if child.name == load_zone + "Zone": - child.load_zone() + if not child.is_loaded(): + child.load_zone() + var gui = get_tree().root.get_node("World").get_node("GUI") + gui.display_zone(child.display_name) else: child.unload_zone() diff --git a/client/Scripts/Singletons/WorldManager.gd b/client/Scripts/Singletons/WorldManager.gd index 8919e5a..94c4d21 100644 --- a/client/Scripts/Singletons/WorldManager.gd +++ b/client/Scripts/Singletons/WorldManager.gd @@ -14,4 +14,4 @@ func _ready(): func play_sound(audio_stream): audio_player.stream = audio_stream - audio_player.play() + #audio_player.play() diff --git a/client/Scripts/Systems/GameGui.gd b/client/Scripts/Systems/GameGui.gd index aeebf57..607c6ab 100644 --- a/client/Scripts/Systems/GameGui.gd +++ b/client/Scripts/Systems/GameGui.gd @@ -1,10 +1,23 @@ extends CanvasLayer +var in_dialog = false +var tip_timer : Timer +var zone_timer : Timer + +const TIP_FADE_RATE = 0.1 +const SHOW_TIP_TIME = 3 + +const ZONE_FADE_RATE = 0.05 +const SHOW_ZONE_TIME = 3 + +func _ready(): + $Dialog.hide() + $Tip.hide() + $ZoneLabel.hide() + func is_in_dialog(): return in_dialog or $Dialog.is_visible_in_tree() -var in_dialog = false - func current_dialog(): return $Dialog/Textbox/Body.text @@ -32,3 +45,65 @@ func add_choice(speaker : Node, choice_id : int, choice_text : String): func show_choices(): $Dialog/Choices.show() + +func display_tip(tip): + $Tip.modulate.a = 0 + $Tip.text = tip + $Tip.show() + if not tip_timer: + tip_timer = Timer.new() + add_child(tip_timer) + tip_timer.disconnect("timeout", self, "fade_tip_out") + tip_timer.disconnect("timeout", self, "start_fade_tip_out") + tip_timer.connect("timeout", self, "fade_tip_in") + tip_timer.start(TIP_FADE_RATE) + +func start_fade_tip_out(): + tip_timer.disconnect("timeout", self, "fade_tip_in") + tip_timer.disconnect("timeout", self, "start_fade_tip_out") + tip_timer.connect("timeout", self, "fade_tip_out") + tip_timer.start(TIP_FADE_RATE) + +func fade_tip_in(): + $Tip.modulate.a = clamp($Tip.modulate.a + 0.1, 0, 1) + if $Tip.modulate.a == 1: + tip_timer.disconnect("timeout", self, "fade_tip_out") + tip_timer.disconnect("timeout", self, "fade_tip_in") + tip_timer.connect("timeout", self, "start_fade_tip_out") + tip_timer.start(SHOW_TIP_TIME) + +func fade_tip_out(): + $Tip.modulate.a = clamp($Tip.modulate.a - 0.1, 0, 1) + if $Tip.modulate.a == 0: + tip_timer.stop() + +func display_zone(zone): + $ZoneLabel.modulate.a = 0 + $ZoneLabel.text = "Entering: " + zone + $ZoneLabel.show() + if not zone_timer: + zone_timer = Timer.new() + add_child(zone_timer) + zone_timer.disconnect("timeout", self, "fade_zone_out") + zone_timer.disconnect("timeout", self, "start_fade_zone_out") + zone_timer.connect("timeout", self, "fade_zone_in") + zone_timer.start(ZONE_FADE_RATE) + +func start_fade_zone_out(): + zone_timer.disconnect("timeout", self, "fade_zone_in") + zone_timer.disconnect("timeout", self, "start_fade_zone_out") + zone_timer.connect("timeout", self, "fade_zone_out") + zone_timer.start(ZONE_FADE_RATE) + +func fade_zone_in(): + $ZoneLabel.modulate.a = clamp($ZoneLabel.modulate.a + 0.1, 0, 1) + if $ZoneLabel.modulate.a == 1: + zone_timer.disconnect("timeout", self, "fade_zone_out") + zone_timer.disconnect("timeout", self, "fade_zone_in") + zone_timer.connect("timeout", self, "start_fade_zone_out") + zone_timer.start(SHOW_ZONE_TIME) + +func fade_zone_out(): + $ZoneLabel.modulate.a = clamp($ZoneLabel.modulate.a - 0.1, 0, 1) + if $ZoneLabel.modulate.a == 0: + zone_timer.stop() diff --git a/client/project.godot b/client/project.godot index cf276b6..38abc2f 100644 --- a/client/project.godot +++ b/client/project.godot @@ -65,6 +65,17 @@ ui_down={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) ] } +toggle_flashlight={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"unicode":0,"echo":false,"script":null) + ] +} +interact={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"unicode":0,"echo":false,"script":null) + ] +} [rendering]