From 53b88e5553db675a8a7ef02565d1db8a7d37c75a Mon Sep 17 00:00:00 2001 From: Sagi Dayan Date: Thu, 12 Nov 2020 23:45:32 -0500 Subject: [PATCH] Face traps with arrows --- assets/Traps/arrow.png | Bin 0 -> 190 bytes assets/Traps/arrow.png.import | 34 ++++++++++ assets/Traps/mask_trap.gif | Bin 0 -> 814 bytes assets/Traps/mask_trap.png | Bin 0 -> 8308 bytes assets/Traps/mask_trap.png.import | 34 ++++++++++ src/GameWorld/Levels/PreGame.tscn | 13 +++- src/Hazards/Arrow.gd | 34 ++++++++++ src/Hazards/Arrow.tscn | 86 +++++++++++++++++++++++++ src/Hazards/MaskTrap.gd | 62 ++++++++++++++++++ src/Hazards/MaskTrap.tscn | 100 ++++++++++++++++++++++++++++++ 10 files changed, 361 insertions(+), 2 deletions(-) create mode 100644 assets/Traps/arrow.png create mode 100644 assets/Traps/arrow.png.import create mode 100644 assets/Traps/mask_trap.gif create mode 100644 assets/Traps/mask_trap.png create mode 100644 assets/Traps/mask_trap.png.import create mode 100644 src/Hazards/Arrow.gd create mode 100644 src/Hazards/Arrow.tscn create mode 100644 src/Hazards/MaskTrap.gd create mode 100644 src/Hazards/MaskTrap.tscn diff --git a/assets/Traps/arrow.png b/assets/Traps/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1b4170fe4eeb1666e6e079c758f957fcc37fac GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t)4E9Ar`&K2@^43m;doE$zw5n^LM6JJ z7pitG>;b8~H}lv3{WZUi9XNda=!Vi?u5K~2j5lxk*WJ}&U}9=|@ahHwAP`u*bKSak j_RP%8UC#m?R2djpgS8ZEpMMVqI*7s3)z4*}Q$iB}#!yJP literal 0 HcmV?d00001 diff --git a/assets/Traps/arrow.png.import b/assets/Traps/arrow.png.import new file mode 100644 index 0000000..8c1653a --- /dev/null +++ b/assets/Traps/arrow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/arrow.png-6ef2cedb65ee67b68492baae0a925137.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/Traps/arrow.png" +dest_files=[ "res://.import/arrow.png-6ef2cedb65ee67b68492baae0a925137.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=false +svg/scale=1.0 diff --git a/assets/Traps/mask_trap.gif b/assets/Traps/mask_trap.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d2f3eac6105ff9271fddf8cc41323b62c0a32c2 GIT binary patch literal 814 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXkNJoYR zUA}y|zqi*mT-7^MfBpLPK*7Cx_kz@502Wt)6P}Jc7QRwo)0}BmD6i4?RG_PI;=0+t zB@3>~S=2_gg}+emdDfs zw)nt?!wjwS98W5I2$-?E%Zv#T5_Gd)gLPieA%?j=GnaX(l5W4Q4mi$`;)BJ86#swF amSgTZa3Dh2f*-ifHeU2Y1}6O literal 0 HcmV?d00001 diff --git a/assets/Traps/mask_trap.png b/assets/Traps/mask_trap.png new file mode 100644 index 0000000000000000000000000000000000000000..f52164a5e8ff4ef69522c1596b3b092b4bc5a9c9 GIT binary patch literal 8308 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 void: + seed(self.get_instance_id()) + var options = range(-30, 30, 5) + options.shuffle() + _pin_angle = options[0] + +func _physics_process(delta: float) -> void: + if _fly: + position.x += speed * scale.x * delta + +func _on_HitZone_body_entered(body:Node) -> void: + remove_child($HitZone) + if body.name == "Player": + body.die() + _fly = false + $AnimationPlayer.play("fade_out") + + pass + +func _on_PinZone_body_entered(body:Node) -> void: + remove_child($HitZone) + rotation_degrees = _pin_angle + print(rotation_degrees) + _fly = false + yield(get_tree().create_timer(5), "timeout") + $AnimationPlayer.play("fade_out") + pass diff --git a/src/Hazards/Arrow.tscn b/src/Hazards/Arrow.tscn new file mode 100644 index 0000000..0085bd4 --- /dev/null +++ b/src/Hazards/Arrow.tscn @@ -0,0 +1,86 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://assets/Traps/arrow.png" type="Texture" id=1] +[ext_resource path="res://src/Hazards/Arrow.gd" type="Script" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 2.5, 2.5 ) + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 1.5, 1.5 ) + +[sub_resource type="Animation" id=3] +resource_name = "fade_out" +length = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.2 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "queue_free" +} ] +} + +[sub_resource type="Animation" id=4] +resource_name = "idle" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + +[node name="Arrow" type="Node2D"] +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +position = Vector2( -7, -1 ) +texture = ExtResource( 1 ) + +[node name="HitZone" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 3 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitZone"] +position = Vector2( -2.5, -0.5 ) +shape = SubResource( 1 ) + +[node name="PinZone" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 8 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PinZone"] +position = Vector2( -6, -0.5 ) +shape = SubResource( 2 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "idle" +anims/fade_out = SubResource( 3 ) +anims/idle = SubResource( 4 ) +[connection signal="body_entered" from="HitZone" to="." method="_on_HitZone_body_entered"] +[connection signal="body_entered" from="PinZone" to="." method="_on_PinZone_body_entered"] diff --git a/src/Hazards/MaskTrap.gd b/src/Hazards/MaskTrap.gd new file mode 100644 index 0000000..7c8817e --- /dev/null +++ b/src/Hazards/MaskTrap.gd @@ -0,0 +1,62 @@ +extends Node2D + + +export var ammo:int = 1 +export var timeout:= 2.0 +export var enabled := true + +var _activated := false +var _can_activate := true +onready var _ammo = ammo +var Arrow = load("res://src/Hazards/Arrow.tscn") + + + +func _physics_process(delta: float) -> void: + if enabled && _can_activate && _did_trigger(): + _can_activate = false + _activated = true + $AnimationPlayer.play("fire") + + +func _did_trigger()->bool: + if $TopRayCast.is_colliding(): + var collider = $TopRayCast.get_collider() + if collider.name == "SolidsTileMap": + var new_cast = $TopRayCast.cast_to + new_cast.x = to_local($TopRayCast.get_collision_point()).x - 1 + $TopRayCast.cast_to = new_cast + if collider.name == "Player": + return true + if $BottomRayCast.is_colliding(): + var collider = $BottomRayCast.get_collider() + if collider.name == "SolidsTileMap": + var new_cast = $BottomRayCast.cast_to + new_cast.x = to_local($BottomRayCast.get_collision_point()).x - 1 + $BottomRayCast.cast_to = new_cast + if $BottomRayCast.get_collider().name == "Player": + return true + return false + + + + +func _on_fire_animation_ended(): + print("Fire!") + var arrow = Arrow.instance() + arrow.position = Vector2(8,-3) + add_child(arrow) + _ammo -= 1 + if _ammo == 0: + $AnimationPlayer.play("idle") + _activated = false + $TimeoutTimer.start(timeout) + else: + $AnimationPlayer.play("fire") + + pass + +func _on_TimeoutTimer_timeout()->void: + _can_activate = true; + $AnimationPlayer.play("armed") + _ammo = ammo diff --git a/src/Hazards/MaskTrap.tscn b/src/Hazards/MaskTrap.tscn new file mode 100644 index 0000000..636d8da --- /dev/null +++ b/src/Hazards/MaskTrap.tscn @@ -0,0 +1,100 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://assets/Traps/mask_trap.png" type="Texture" id=1] +[ext_resource path="res://src/Hazards/MaskTrap.gd" type="Script" id=2] + +[sub_resource type="Animation" id=1] +resource_name = "armed" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 1 ] +} + +[sub_resource type="Animation" id=2] +resource_name = "fire" +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 1, 2, 3, 4 ] +} +tracks/1/type = "method" +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.3 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "_on_fire_animation_ended" +} ] +} + +[sub_resource type="Animation" id=3] +resource_name = "idle" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 0 ] +} + +[node name="MaskTrap" type="Node2D"] +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +position = Vector2( 7, -8 ) +texture = ExtResource( 1 ) +hframes = 6 +frame = 1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "armed" +anims/armed = SubResource( 1 ) +anims/fire = SubResource( 2 ) +anims/idle = SubResource( 3 ) + +[node name="TopRayCast" type="RayCast2D" parent="."] +position = Vector2( 3, -16 ) +enabled = true +cast_to = Vector2( 150, 0 ) +collision_mask = 9 + +[node name="BottomRayCast" type="RayCast2D" parent="."] +position = Vector2( 3, 0 ) +enabled = true +cast_to = Vector2( 150, 0 ) +collision_mask = 9 + +[node name="VisibilityEnabler2D" type="VisibilityEnabler2D" parent="."] +position = Vector2( 7, -8 ) + +[node name="TimeoutTimer" type="Timer" parent="."] +one_shot = true +[connection signal="timeout" from="TimeoutTimer" to="." method="_on_TimeoutTimer_timeout"]