diff --git a/ActionRPG-HeartBeast/Player/Player.gd b/ActionRPG-HeartBeast/Player/Player.gd index bf5b4d2..28a086e 100644 --- a/ActionRPG-HeartBeast/Player/Player.gd +++ b/ActionRPG-HeartBeast/Player/Player.gd @@ -2,9 +2,11 @@ extends KinematicBody2D var velocity = Vector2.ZERO var input_vector = Vector2.ZERO +var roll_vector = Vector2.DOWN const ACCELERATION = 500 const MAX_SPEED = 80 +const ROLL_SPEED = 120 const FRICTION = 500 enum { @@ -28,7 +30,7 @@ func _process(delta): move_state(delta) ROLL: - pass + roll_state(delta) ATTACK: attack_state(delta) @@ -37,9 +39,13 @@ func move_state(delta): input_vector.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left") input_vector.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up") input_vector = input_vector.normalized() + if input_vector != Vector2.ZERO: + roll_vector = input_vector animationTree.set("parameters/Idle/blend_position", input_vector) animationTree.set("parameters/Run/blend_position", input_vector) + animationTree.set("parameters/Attack/blend_position", input_vector) + animationTree.set("parameters/Roll/blend_position", input_vector) animationState.travel("Run") velocity = velocity.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta) else: @@ -47,19 +53,33 @@ func move_state(delta): animationState.travel("Idle") velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta) - velocity = move_and_slide(velocity) + #velocity = move_and_slide(velocity) + move() + + if Input.is_action_just_pressed("roll"): + state = ROLL if Input.is_action_just_pressed("attack"): state = ATTACK +func roll_animation_finished(): + state = MOVE + +func roll_state(delta): + velocity = roll_vector * ROLL_SPEED + animationState.travel("Roll") + move() + func attack_state(delta): #velocity = Vector2.ZERO - animationTree.set("parameters/Attack/blend_position", input_vector) - animationState.travel("Attack") + #animationTree.set("parameters/Attack/blend_position", input_vector) velocity = Vector2.ZERO + animationState.travel("Attack") #velocity = velocity.move_toward(Vector2.ZERO, FRICTION*delta) #velocity = move_and_slide(velocity) +func move(): + velocity = move_and_slide(velocity) func attack_aninimation_finished(): state = MOVE diff --git a/ActionRPG-HeartBeast/Player/Player.tscn b/ActionRPG-HeartBeast/Player/Player.tscn index 8b9c310..4653b27 100644 --- a/ActionRPG-HeartBeast/Player/Player.tscn +++ b/ActionRPG-HeartBeast/Player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=42 format=2] +[gd_scene load_steps=53 format=2] [ext_resource path="res://Player/Player.gd" type="Script" id=1] [ext_resource path="res://Player/Player.png" type="Texture" id=2] @@ -319,10 +319,129 @@ tracks/1/keys = { "values": [ true ] } +[sub_resource type="Animation" id=41] +resource_name = "RollDown" +length = 0.5 +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, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 55, 56, 57, 58, 59 ] +} +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.499905 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "roll_animation_finished" +} ] +} + +[sub_resource type="Animation" id=43] +resource_name = "RollLeft" +length = 0.5 +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, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 50, 51, 52, 53, 54 ] +} +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.500823 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "roll_animation_finished" +} ] +} + +[sub_resource type="Animation" id=42] +resource_name = "RollRight" +length = 0.5 +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, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 40, 41, 42, 43, 44 ] +} +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.500364 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "roll_animation_finished" +} ] +} + +[sub_resource type="Animation" id=44] +resource_name = "RollUp" +length = 0.5 +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, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 45, 46, 47, 48, 49 ] +} +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.501281 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "roll_animation_finished" +} ] +} + [sub_resource type="Animation" id=6] resource_name = "RunDown" length = 0.6 -loop = true tracks/0/type = "value" tracks/0/path = NodePath("Sprite:frame") tracks/0/interp = 1 @@ -437,6 +556,31 @@ min_space = Vector2( -1, -1.1 ) max_space = Vector2( 1, 1.1 ) blend_mode = 1 +[sub_resource type="AnimationNodeAnimation" id=45] +animation = "RollLeft" + +[sub_resource type="AnimationNodeAnimation" id=46] +animation = "RollDown" + +[sub_resource type="AnimationNodeAnimation" id=47] +animation = "RollRight" + +[sub_resource type="AnimationNodeAnimation" id=48] +animation = "RollUp" + +[sub_resource type="AnimationNodeBlendSpace2D" id=49] +blend_point_0/node = SubResource( 45 ) +blend_point_0/pos = Vector2( -1, 0 ) +blend_point_1/node = SubResource( 46 ) +blend_point_1/pos = Vector2( 0, 1.1 ) +blend_point_2/node = SubResource( 47 ) +blend_point_2/pos = Vector2( 1, 0 ) +blend_point_3/node = SubResource( 48 ) +blend_point_3/pos = Vector2( 0, -1.1 ) +min_space = Vector2( -1, -1.1 ) +max_space = Vector2( 1, 1.1 ) +blend_mode = 1 + [sub_resource type="AnimationNodeAnimation" id=20] animation = "RunLeft" @@ -474,15 +618,22 @@ blend_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id=39] +[sub_resource type="AnimationNodeStateMachineTransition" id=50] + +[sub_resource type="AnimationNodeStateMachineTransition" id=51] + [sub_resource type="AnimationNodeStateMachine" id=18] states/Attack/node = SubResource( 35 ) states/Attack/position = Vector2( 321.375, 203.5 ) states/Idle/node = SubResource( 15 ) states/Idle/position = Vector2( 323.5, 96.2812 ) +states/Roll/node = SubResource( 49 ) +states/Roll/position = Vector2( 325, -25.5 ) states/Run/node = SubResource( 24 ) states/Run/position = Vector2( 509.5, 96.5 ) -transitions = [ "Run", "Idle", SubResource( 25 ), "Idle", "Run", SubResource( 26 ), "Idle", "Attack", SubResource( 36 ), "Attack", "Idle", SubResource( 37 ), "Attack", "Run", SubResource( 38 ), "Run", "Attack", SubResource( 39 ) ] +transitions = [ "Run", "Idle", SubResource( 25 ), "Idle", "Run", SubResource( 26 ), "Idle", "Attack", SubResource( 36 ), "Attack", "Idle", SubResource( 37 ), "Attack", "Run", SubResource( 38 ), "Run", "Attack", SubResource( 39 ), "Roll", "Idle", SubResource( 50 ), "Idle", "Roll", SubResource( 51 ) ] start_node = "Idle" +graph_offset = Vector2( -10, -78 ) [sub_resource type="AnimationNodeStateMachinePlayback" id=19] @@ -512,6 +663,10 @@ anims/IdleLeft = SubResource( 10 ) anims/IdleRight = SubResource( 7 ) anims/IdleUp = SubResource( 8 ) anims/RESET = SubResource( 2 ) +anims/RollDown = SubResource( 41 ) +anims/RollLeft = SubResource( 43 ) +anims/RollRight = SubResource( 42 ) +anims/RollUp = SubResource( 44 ) anims/RunDown = SubResource( 6 ) anims/RunLeft = SubResource( 4 ) anims/RunRight = SubResource( 3 ) @@ -523,11 +678,12 @@ anim_player = NodePath("../AnimationPlayer") parameters/playback = SubResource( 19 ) parameters/Attack/blend_position = Vector2( 0, 0 ) parameters/Idle/blend_position = Vector2( 0, 0 ) +parameters/Roll/blend_position = Vector2( -0.00132686, 0.00234544 ) parameters/Run/blend_position = Vector2( 0, 0 ) [node name="HitboxPivot" type="Position2D" parent="."] position = Vector2( 0, -4 ) -rotation = 4.71239 +rotation = 1.5708 __meta__ = { "_gizmo_extents_": 8.0 } diff --git a/ActionRPG-HeartBeast/project.godot b/ActionRPG-HeartBeast/project.godot index b4c25c5..d7647c2 100644 --- a/ActionRPG-HeartBeast/project.godot +++ b/ActionRPG-HeartBeast/project.godot @@ -82,10 +82,16 @@ ui_down={ } attack={ "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":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +"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":88,"physical_scancode":0,"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":74,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } +roll={ +"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":90,"physical_scancode":0,"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":75,"physical_scancode":0,"unicode":0,"echo":false,"script":null) + ] +} [layer_names]