Face traps with arrows
This commit is contained in:
parent
834b3ed53f
commit
53b88e5553
10 changed files with 361 additions and 2 deletions
BIN
assets/Traps/arrow.png
Normal file
BIN
assets/Traps/arrow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 190 B |
34
assets/Traps/arrow.png.import
Normal file
34
assets/Traps/arrow.png.import
Normal file
|
@ -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
|
BIN
assets/Traps/mask_trap.gif
Normal file
BIN
assets/Traps/mask_trap.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 814 B |
BIN
assets/Traps/mask_trap.png
Normal file
BIN
assets/Traps/mask_trap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.1 KiB |
34
assets/Traps/mask_trap.png.import
Normal file
34
assets/Traps/mask_trap.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/mask_trap.png-818f650db1c37c9c6869abab749ce2d9.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Traps/mask_trap.png"
|
||||
dest_files=[ "res://.import/mask_trap.png-818f650db1c37c9c6869abab749ce2d9.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
|
File diff suppressed because one or more lines are too long
34
src/Hazards/Arrow.gd
Normal file
34
src/Hazards/Arrow.gd
Normal file
|
@ -0,0 +1,34 @@
|
|||
extends Node2D
|
||||
|
||||
export var speed := 230
|
||||
|
||||
var _fly := true
|
||||
var _pin_angle := 0
|
||||
|
||||
func _ready() -> 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
|
86
src/Hazards/Arrow.tscn
Normal file
86
src/Hazards/Arrow.tscn
Normal file
|
@ -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"]
|
62
src/Hazards/MaskTrap.gd
Normal file
62
src/Hazards/MaskTrap.gd
Normal file
|
@ -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
|
100
src/Hazards/MaskTrap.tscn
Normal file
100
src/Hazards/MaskTrap.tscn
Normal file
|
@ -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"]
|
Loading…
Reference in a new issue