forked from team-sg/hero-mark-2
added bow
This commit is contained in:
parent
5d01f40535
commit
2d3fc72ebe
50 changed files with 610 additions and 151 deletions
13
objects/player/arrow_projectile.gd
Normal file
13
objects/player/arrow_projectile.gd
Normal file
|
@ -0,0 +1,13 @@
|
|||
extends Node2D
|
||||
|
||||
func _ready():
|
||||
scale.x = get_parent().get_node("Player").sprite.scale.x
|
||||
|
||||
func _physics_process(delta):
|
||||
position.x += 4 * scale.x
|
||||
|
||||
|
||||
func _on_Area2D_body_entered(body):
|
||||
if body is TileMap or body is StaticBody2D:
|
||||
queue_free()
|
||||
|
35
objects/player/arrow_projectile.tscn
Normal file
35
objects/player/arrow_projectile.tscn
Normal file
|
@ -0,0 +1,35 @@
|
|||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
|
||||
[ext_resource path="res://graphics/player/arrow.png" type="Texture" id=2]
|
||||
[ext_resource path="res://objects/player/arrow_projectile.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=1]
|
||||
shader = ExtResource( 1 )
|
||||
shader_param/border_color = Color( 0, 0, 0, 1 )
|
||||
shader_param/border_corners = true
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=2]
|
||||
extents = Vector2( 5.5, 3.5 )
|
||||
|
||||
[node name="ArrowProjectile" type="Node2D"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
material = SubResource( 1 )
|
||||
z_index = -1
|
||||
texture = ExtResource( 2 )
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="." groups=["arrow"]]
|
||||
visible = false
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
position = Vector2( -0.5, -0.5 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."]
|
||||
position = Vector2( -0.5, -0.5 )
|
||||
scale = Vector2( 0.55, 0.35 )
|
||||
|
||||
[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
|
||||
[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"]
|
|
@ -7,8 +7,10 @@ onready var climb_ray = $ClimbRay
|
|||
onready var anims = $AnimationPlayer
|
||||
onready var sword_sprite = $SwordSprite
|
||||
onready var sword_hitbox = $SwordArea
|
||||
#Map
|
||||
onready var map = get_owner()
|
||||
##States
|
||||
enum State {IDLE,WALK,JUMP,FALL,STUNNED,CLIMB,SWORD}
|
||||
enum State {IDLE,WALK,JUMP,FALL,STUNNED,CLIMB,SWORD,SHOOT}
|
||||
var current_state = State.IDLE
|
||||
var axis = Vector2.ZERO
|
||||
##Physics
|
||||
|
@ -20,7 +22,9 @@ var jump_force = 150
|
|||
var current_ladder = null
|
||||
var can_doublejump = true
|
||||
var doublejump_force = 120
|
||||
|
||||
var arrowpos = Vector2(5,3)
|
||||
#Preload
|
||||
var pre_arrow = preload("res://objects/player/arrow_projectile.tscn")
|
||||
|
||||
|
||||
func _physics_process(delta):
|
||||
|
@ -47,11 +51,14 @@ func _physics_process(delta):
|
|||
continue
|
||||
State.SWORD:
|
||||
_process_sword()
|
||||
continue
|
||||
State.SHOOT:
|
||||
_process_shoot()
|
||||
|
||||
#Gravity
|
||||
if current_state != State.CLIMB: velocity.y += gravity
|
||||
#Apply velocity
|
||||
move_and_slide(velocity,Vector2.UP)
|
||||
print(velocity.y)
|
||||
#Debug
|
||||
if Input.is_action_pressed("debug_move_player"):
|
||||
position = get_viewport().get_mouse_position()
|
||||
|
@ -89,6 +96,8 @@ func _process_idle_walk():
|
|||
Game.play_sound(Game.a_sword,Game.ac_jump)
|
||||
current_state = State.SWORD
|
||||
return
|
||||
#Goto Shoot
|
||||
check_shoot()
|
||||
|
||||
func _process_jump():
|
||||
jump_pressure += 1
|
||||
|
@ -99,6 +108,8 @@ func _process_jump():
|
|||
velocity.y = -jump_force / 4
|
||||
#velocity.y = 0
|
||||
current_state = State.FALL
|
||||
#Goto Shoot
|
||||
check_shoot()
|
||||
|
||||
func _process_fall():
|
||||
if anims.get_current_animation() != "doublejump": anims.play("jump")
|
||||
|
@ -109,8 +120,11 @@ func _process_fall():
|
|||
if is_on_floor():
|
||||
current_state = State.IDLE
|
||||
return
|
||||
#Goto Shoot
|
||||
check_shoot()
|
||||
|
||||
func _process_climb():
|
||||
can_doublejump = true
|
||||
#Graphics
|
||||
anims.play("climb")
|
||||
anims.set_speed_scale(abs(axis.y))
|
||||
|
@ -141,13 +155,25 @@ func _process_sword():
|
|||
sword_hitbox.position.x = sprite.scale.x * 10
|
||||
#Return to idle after animationplayer end anim signal
|
||||
|
||||
func _process_shoot():
|
||||
#Stop
|
||||
velocity.x = 0
|
||||
if anims.get_current_animation() == "shoot air":
|
||||
#Cancel air shoot animation when grounded
|
||||
if is_on_floor():
|
||||
current_state = State.IDLE
|
||||
return
|
||||
move(walk_speed,0,true)
|
||||
|
||||
func spawn_arrow():
|
||||
Game.play_sound(Game.a_shoot,Game.ac_jump)
|
||||
Game.instance_node(pre_arrow,global_position.x+(arrowpos.x*sprite.scale.x),global_position.y+arrowpos.y,map)
|
||||
|
||||
func check_jump():
|
||||
if Input.is_action_just_pressed("jump"):
|
||||
#Detach ladder
|
||||
if current_state == State.CLIMB:
|
||||
Game.ac_climb.set_stream(null)
|
||||
Game.ac_climb.set_stream(null) # stop climb sound
|
||||
position.x -= sprite.scale.x * 5
|
||||
anims.set_speed_scale(1)
|
||||
# Jump
|
||||
|
@ -166,6 +192,15 @@ func check_double_jump():
|
|||
velocity.y = -doublejump_force
|
||||
anims.play("doublejump")
|
||||
|
||||
func check_shoot():
|
||||
#Only Shoot if have arrows and there are no arrows onscreen
|
||||
if Input.is_action_just_pressed("shoot") && Game.arrows > 0 && get_tree().get_nodes_in_group("arrow").size() == 0:
|
||||
current_state = State.SHOOT
|
||||
if is_on_floor():
|
||||
anims.play("shoot grounded")
|
||||
else:
|
||||
anims.play("shoot air") #Shoot immediately in air
|
||||
|
||||
func move(hsp,vsp,flip:bool):
|
||||
velocity.x = hsp * axis.x
|
||||
#Flip
|
||||
|
@ -196,3 +231,15 @@ func _on_AnimationPlayer_animation_finished(anim_name):
|
|||
if anim_name == "stab":
|
||||
current_state = State.IDLE
|
||||
return
|
||||
#Return to idle after grounded shoot
|
||||
if anim_name == "shoot grounded":
|
||||
current_state = State.IDLE
|
||||
return
|
||||
#Return to fall or idle after air shoot
|
||||
if anim_name == "shoot air":
|
||||
if is_on_floor():
|
||||
current_state = State.IDLE
|
||||
return
|
||||
else:
|
||||
current_state = State.FALL
|
||||
return
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=45 format=2]
|
||||
[gd_scene load_steps=27 format=2]
|
||||
|
||||
[ext_resource path="res://objects/player/player.gd" type="Script" id=1]
|
||||
[ext_resource path="res://graphics/player/sg_walk.png" type="Texture" id=2]
|
||||
|
@ -9,132 +9,12 @@
|
|||
[ext_resource path="res://graphics/player/sg_climb.png" type="Texture" id=7]
|
||||
[ext_resource path="res://graphics/player/pal_sword_red.png" type="Texture" id=8]
|
||||
[ext_resource path="res://graphics/player/sg_stab.png" type="Texture" id=9]
|
||||
[ext_resource path="res://graphics/player/sword_slash.png" type="Texture" id=10]
|
||||
[ext_resource path="res://graphics/player/sg_shoot_grounded.png" type="Texture" id=10]
|
||||
[ext_resource path="res://graphics/player/sword_stab.png" type="Texture" id=11]
|
||||
[ext_resource path="res://graphics/player/sg_slash.png" type="Texture" id=12]
|
||||
[ext_resource path="res://graphics/player/sg_shoot_air.png" type="Texture" id=12]
|
||||
[ext_resource path="res://scripts/recolor.tres" type="Shader" id=13]
|
||||
[ext_resource path="res://graphics/player/sg_doublejump.png" type="Texture" id=14]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=14]
|
||||
shader = ExtResource( 4 )
|
||||
shader_param/border_color = Color( 0, 0, 0, 1 )
|
||||
shader_param/border_corners = true
|
||||
shader_param/palette = ExtResource( 6 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=12]
|
||||
atlas = ExtResource( 7 )
|
||||
region = Rect2( 0, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=13]
|
||||
atlas = ExtResource( 7 )
|
||||
region = Rect2( 20, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=16]
|
||||
atlas = ExtResource( 12 )
|
||||
region = Rect2( 0, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=17]
|
||||
atlas = ExtResource( 12 )
|
||||
region = Rect2( 32, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=18]
|
||||
atlas = ExtResource( 12 )
|
||||
region = Rect2( 64, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=19]
|
||||
atlas = ExtResource( 9 )
|
||||
region = Rect2( 0, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=20]
|
||||
atlas = ExtResource( 9 )
|
||||
region = Rect2( 32, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=8]
|
||||
atlas = ExtResource( 2 )
|
||||
region = Rect2( 0, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=9]
|
||||
atlas = ExtResource( 2 )
|
||||
region = Rect2( 20, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=10]
|
||||
atlas = ExtResource( 2 )
|
||||
region = Rect2( 40, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=11]
|
||||
atlas = ExtResource( 2 )
|
||||
region = Rect2( 60, 0, 20, 20 )
|
||||
|
||||
[sub_resource type="SpriteFrames" id=5]
|
||||
animations = [ {
|
||||
"frames": [ SubResource( 12 ), SubResource( 13 ) ],
|
||||
"loop": true,
|
||||
"name": "climb",
|
||||
"speed": 7.0
|
||||
}, {
|
||||
"frames": [ ExtResource( 3 ) ],
|
||||
"loop": true,
|
||||
"name": "idle",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [ ExtResource( 5 ) ],
|
||||
"loop": true,
|
||||
"name": "jump",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [ SubResource( 16 ), SubResource( 17 ), SubResource( 18 ) ],
|
||||
"loop": false,
|
||||
"name": "slash",
|
||||
"speed": 7.0
|
||||
}, {
|
||||
"frames": [ SubResource( 19 ), SubResource( 20 ) ],
|
||||
"loop": false,
|
||||
"name": "stab",
|
||||
"speed": 15.0
|
||||
}, {
|
||||
"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ) ],
|
||||
"loop": true,
|
||||
"name": "walk",
|
||||
"speed": 10.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=21]
|
||||
shader = ExtResource( 13 )
|
||||
shader_param/palette = ExtResource( 8 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=22]
|
||||
atlas = ExtResource( 10 )
|
||||
region = Rect2( 0, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=23]
|
||||
atlas = ExtResource( 10 )
|
||||
region = Rect2( 32, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=24]
|
||||
atlas = ExtResource( 10 )
|
||||
region = Rect2( 64, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=25]
|
||||
atlas = ExtResource( 11 )
|
||||
region = Rect2( 0, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="AtlasTexture" id=26]
|
||||
atlas = ExtResource( 11 )
|
||||
region = Rect2( 32, 0, 32, 32 )
|
||||
|
||||
[sub_resource type="SpriteFrames" id=15]
|
||||
animations = [ {
|
||||
"frames": [ SubResource( 22 ), SubResource( 23 ), SubResource( 24 ) ],
|
||||
"loop": true,
|
||||
"name": "slash",
|
||||
"speed": 7.0
|
||||
}, {
|
||||
"frames": [ SubResource( 25 ), SubResource( 26 ) ],
|
||||
"loop": false,
|
||||
"name": "stab",
|
||||
"speed": 15.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=27]
|
||||
shader = ExtResource( 4 )
|
||||
shader_param/border_color = Color( 0, 0, 0, 1 )
|
||||
|
@ -412,6 +292,164 @@ tracks/4/keys = {
|
|||
"values": [ 0.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=37]
|
||||
resource_name = "shoot air"
|
||||
length = 0.5
|
||||
step = 0.06
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("Sprite:region_rect")
|
||||
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": [ Rect2( 0, 0, 20, 20 ) ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("Sprite:texture")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ ExtResource( 12 ) ]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ true ]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/path = NodePath("SwordSprite:texture")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ null ]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/path = NodePath("Sprite:rotation_degrees")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/5/type = "method"
|
||||
tracks/5/path = NodePath(".")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"values": [ {
|
||||
"args": [ ],
|
||||
"method": "spawn_arrow"
|
||||
} ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=36]
|
||||
resource_name = "shoot grounded"
|
||||
length = 0.5
|
||||
step = 0.06
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("Sprite:region_rect")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/keys = {
|
||||
"times": PoolRealArray( 0, 0.06, 0.12, 0.24, 0.3, 0.36 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
|
||||
"update": 1,
|
||||
"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 40, 0, 20, 20 ), Rect2( 60, 0, 20, 20 ), Rect2( 80, 0, 20, 20 ), Rect2( 100, 0, 20, 20 ) ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("Sprite:texture")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ ExtResource( 10 ) ]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ true ]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/path = NodePath("SwordSprite:texture")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ null ]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/path = NodePath("Sprite:rotation_degrees")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/5/type = "method"
|
||||
tracks/5/path = NodePath(".")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/keys = {
|
||||
"times": PoolRealArray( 0.24 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"values": [ {
|
||||
"args": [ ],
|
||||
"method": "spawn_arrow"
|
||||
} ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=32]
|
||||
resource_name = "stab"
|
||||
length = 0.3
|
||||
|
@ -560,25 +598,9 @@ extents = Vector2( 6, 7 )
|
|||
[node name="Player" type="KinematicBody2D"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
visible = false
|
||||
material = SubResource( 14 )
|
||||
frames = SubResource( 5 )
|
||||
animation = "stab"
|
||||
frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="Sword" type="AnimatedSprite" parent="."]
|
||||
visible = false
|
||||
material = SubResource( 21 )
|
||||
frames = SubResource( 15 )
|
||||
animation = "stab"
|
||||
frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
material = SubResource( 27 )
|
||||
texture = ExtResource( 14 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 0, 0, 20, 20 )
|
||||
|
||||
|
@ -613,6 +635,8 @@ anims/climb = SubResource( 29 )
|
|||
anims/doublejump = SubResource( 35 )
|
||||
anims/idle = SubResource( 30 )
|
||||
anims/jump = SubResource( 31 )
|
||||
"anims/shoot air" = SubResource( 37 )
|
||||
"anims/shoot grounded" = SubResource( 36 )
|
||||
anims/stab = SubResource( 32 )
|
||||
anims/walk = SubResource( 33 )
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue