diff --git a/Godot/Code/Character.gd b/Godot/Code/Character.gd index c05b2ee..c083293 100644 --- a/Godot/Code/Character.gd +++ b/Godot/Code/Character.gd @@ -1,13 +1,49 @@ extends CharacterBody2D var gravity = 800 -const SPEED = 60.0 +const SPEED = 200.0 const JUMP_VELOCITY = -400.0 @onready var sprite = $Sprites var land_time = 0 var jumping = false var side = 1 +var double_jump = false + +enum State { + Idle, + Run, + Walk, + Jump, + AirSpin, + Landing +} + +enum JumpState { +} + +func _play_anim(state: State, velocity: Vector2): + match state: + State.Idle: + sprite.play("Idle") + State.Run: + sprite.play("Run") + State.Walk: + sprite.play("Walk") + State.Jump: + sprite.pause() + sprite.set_frame_and_progress(0, 0) + if velocity.y > 50: + sprite.set_frame_and_progress(2,0) + elif velocity.y > -150: + sprite.set_frame_and_progress(1, 0) + State.AirSpin: + pass + State.Landing: + sprite.play("Land") + +func _process_velocity(state: State, delta): + pass func _physics_process(delta): if not is_on_floor(): @@ -15,16 +51,23 @@ func _physics_process(delta): elif jumping: jumping = false sprite.play("Land") - land_time = 0.33 + double_jump = false + land_time = 0.16 - if Input.is_action_just_pressed("ui_accept") and is_on_floor(): - velocity.y = JUMP_VELOCITY - sprite.play("Jump") - jumping = true - sprite.pause() - sprite.set_frame_and_progress(0, 0) + if Input.is_action_just_pressed("ui_accept"): + if is_on_floor(): + velocity.y = JUMP_VELOCITY + sprite.play("Jump") + jumping = true + sprite.pause() + sprite.set_frame_and_progress(0, 0) + elif not double_jump: + sprite.play("AirSpin") + double_jump = true + var boost = 0 if velocity.y > 0 else velocity.y / 3 + velocity.y = JUMP_VELOCITY / 1.4 + boost - if jumping: + if jumping and not double_jump: if velocity.y > 50: sprite.set_frame_and_progress(2,0) elif velocity.y > -150: @@ -32,8 +75,8 @@ func _physics_process(delta): var speed = SPEED if Input.is_key_pressed(KEY_SHIFT): - speed *= 3 - var direction = Input.get_axis("ui_left", "ui_right") + speed /= 3 + var direction = Input.get_axis("left", "right") if direction: velocity.x = direction * speed else: @@ -41,8 +84,6 @@ func _physics_process(delta): if direction != 0: sprite.flip_h = direction == -1 - - if land_time >= 0: land_time -= delta @@ -50,12 +91,10 @@ func _physics_process(delta): if land_time <= 0 and not jumping: if velocity.x != 0: if Input.is_key_pressed(KEY_SHIFT): - sprite.play("Run") - else: sprite.play("Walk") + else: + sprite.play("Run") else: sprite.play("Idle") - - move_and_slide() diff --git a/Godot/Scenes/Main.tscn b/Godot/Scenes/Main.tscn index ebdf85b..f373216 100644 --- a/Godot/Scenes/Main.tscn +++ b/Godot/Scenes/Main.tscn @@ -5,7 +5,7 @@ [sub_resource type="QuadMesh" id="QuadMesh_n5vip"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_s46ls"] -size = Vector2(300, 20) +size = Vector2(500, 20) [node name="Node2D" type="Node2D"] @@ -13,11 +13,11 @@ size = Vector2(300, 20) position = Vector2(163, 99) [node name="StaticBody2D" type="StaticBody2D" parent="."] -position = Vector2(198, 184) +position = Vector2(265, 254) [node name="MeshInstance2D" type="MeshInstance2D" parent="StaticBody2D"] modulate = Color(0.168627, 0.678431, 0.701961, 1) -scale = Vector2(300, 20) +scale = Vector2(500, 20) mesh = SubResource("QuadMesh_n5vip") [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] diff --git a/Godot/Scenes/Player.tscn b/Godot/Scenes/Player.tscn index 4ed252a..e4eaaf7 100644 --- a/Godot/Scenes/Player.tscn +++ b/Godot/Scenes/Player.tscn @@ -1,12 +1,37 @@ -[gd_scene load_steps=44 format=3 uid="uid://bjc6dwxaakqdg"] +[gd_scene load_steps=48 format=3 uid="uid://bjc6dwxaakqdg"] [ext_resource type="Script" path="res://Code/Character.gd" id="1_23c20"] [ext_resource type="Texture2D" uid="uid://wfwjlevruveu" path="res://Import/Sprites/Character Idle 48x48.png" id="2_8h572"] +[ext_resource type="Texture2D" uid="uid://c87b08n23v0kx" path="res://Import/Sprites/player air spin 48x48.png" id="2_gpxo5"] [ext_resource type="Texture2D" uid="uid://bge22c82umdui" path="res://Import/Sprites/PlayerWalk 48x48.png" id="3_xxdqr"] [ext_resource type="Texture2D" uid="uid://y8syonuki304" path="res://Import/Sprites/run cycle 48x48.png" id="4_rqcgh"] [ext_resource type="Texture2D" uid="uid://8ikuchoh7pyd" path="res://Import/Sprites/player jump 48x48.png" id="5_f2sni"] [ext_resource type="Texture2D" uid="uid://diiqvgeqnmn1c" path="res://Import/Sprites/player land 48x48.png" id="6_ba2s3"] +[sub_resource type="AtlasTexture" id="AtlasTexture_c40es"] +atlas = ExtResource("2_gpxo5") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_12cxk"] +atlas = ExtResource("2_gpxo5") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yyln8"] +atlas = ExtResource("2_gpxo5") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kfcja"] +atlas = ExtResource("2_gpxo5") +region = Rect2(144, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3mg0x"] +atlas = ExtResource("2_gpxo5") +region = Rect2(192, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2sfvi"] +atlas = ExtResource("2_gpxo5") +region = Rect2(240, 0, 48, 48) + [sub_resource type="AtlasTexture" id="AtlasTexture_t3ih3"] atlas = ExtResource("2_8h572") region = Rect2(0, 0, 48, 48) @@ -67,22 +92,10 @@ region = Rect2(0, 0, 48, 48) atlas = ExtResource("6_ba2s3") region = Rect2(48, 0, 48, 48) -[sub_resource type="AtlasTexture" id="AtlasTexture_iiovw"] -atlas = ExtResource("6_ba2s3") -region = Rect2(96, 0, 48, 48) - [sub_resource type="AtlasTexture" id="AtlasTexture_sx58l"] atlas = ExtResource("6_ba2s3") region = Rect2(144, 0, 48, 48) -[sub_resource type="AtlasTexture" id="AtlasTexture_6l2e7"] -atlas = ExtResource("6_ba2s3") -region = Rect2(240, 0, 48, 48) - -[sub_resource type="AtlasTexture" id="AtlasTexture_acowd"] -atlas = ExtResource("6_ba2s3") -region = Rect2(336, 0, 48, 48) - [sub_resource type="AtlasTexture" id="AtlasTexture_3u4f5"] atlas = ExtResource("4_rqcgh") region = Rect2(0, 0, 48, 48) @@ -151,6 +164,29 @@ region = Rect2(336, 0, 48, 48) animations = [{ "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_c40es") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_12cxk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yyln8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kfcja") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3mg0x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2sfvi") +}], +"loop": false, +"name": &"AirSpin", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_t3ih3") }, { "duration": 1.0, @@ -206,16 +242,7 @@ animations = [{ "texture": SubResource("AtlasTexture_3uk3c") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_iiovw") -}, { -"duration": 1.0, "texture": SubResource("AtlasTexture_sx58l") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_6l2e7") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_acowd") }], "loop": true, "name": &"Land", @@ -290,7 +317,9 @@ script = ExtResource("1_23c20") texture_filter = 1 position = Vector2(0, -16) sprite_frames = SubResource("SpriteFrames_gvqqb") -animation = &"Run" +animation = &"AirSpin" +frame = 5 +frame_progress = 1.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -14.5) diff --git a/Godot/project.godot b/Godot/project.godot index 94e4d4d..84bed5d 100644 --- a/Godot/project.godot +++ b/Godot/project.godot @@ -22,3 +22,30 @@ window/size/viewport_height=300 window/size/window_width_override=1600 window/size/window_height_override=1050 window/stretch/scale=3.0 + +[input] + +left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +] +} +up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +] +} +down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +] +}