From f7d3ad7fa35cacc85867671b3f6999eec7e13201 Mon Sep 17 00:00:00 2001 From: Wynd Date: Sun, 22 Sep 2024 12:58:04 +0300 Subject: [PATCH] New player icon and animation logic to fit --- entities/assets/player.png | Bin 0 -> 473 bytes entities/assets/player.png.import | 34 +++++ entities/player/player.gd | 42 ++++-- entities/player/player.tscn | 222 +++++++++++++++++++++++++----- project.godot | 2 +- scenes/main.tscn | 14 +- 6 files changed, 266 insertions(+), 48 deletions(-) create mode 100644 entities/assets/player.png create mode 100644 entities/assets/player.png.import diff --git a/entities/assets/player.png b/entities/assets/player.png new file mode 100644 index 0000000000000000000000000000000000000000..e517d0f2a191fbd95088176398602cba121908e4 GIT binary patch literal 473 zcmV;~0Ve*5P)Px$lSxEDR9J=Wn6YkyFc5|hly>OirJb1j1|9kUl^EC={2n|-AEQ!Kb+1sDjCqO7 znUaMiLo&FN(fK$V8_Up2+ys30+b8RM*p~q^Aqu6RyY83)vD6%dDAc~)sq5{c1~3uN zFa!WNoeuy2aDVrZQE>{sp;10PK6Ak*<2e98EgMx<(g3w=jAbk<3DgJs+Vr(-6denH z&z<4UV1pdcMzfT1>JzHhJjbx>j+qABgjmQ;?$T2oJH8NwvQ3b zil1#Yz(-H5tYps@UjeTq9IF9i`q44y_TaXQi%)r{!B{7rjpKhc=aia*5QVzlF3tf` zaN|5M_gMg7tpjTvAhtvu$T4g`Kj3seuo2>K`*!E#oF3l=FgKF$zP+aCzwuKvL 0 and checkpoints[current_checkpoint]: position = checkpoints[current_checkpoint].position else: @@ -66,8 +69,18 @@ func _try_get_input(): elif Input.is_action_pressed("move_left"): input_dir = Vector2.LEFT should_move = true - + + _change_sprite() + + if attack_frame > 0: + attack_frame -= 1 + + if not should_move and not is_moving and attack_frame <= 0: + sprite.frame = 0 + sprite.stop() + if should_move and not is_moving: + sprite.play() raycast.target_position = input_dir * 8 raycast.force_raycast_update() @@ -90,6 +103,19 @@ func _try_get_input(): is_moving = true sprite.global_position = tile_map.map_to_local(current_tile) +func _change_sprite(): + var is_attacking = attack_frame > 0 + if not is_attacking: + if input_dir == Vector2.UP: + sprite.animation = &"move_up" + elif input_dir == Vector2.RIGHT: + sprite.animation = &"move_right" + sprite.flip_h = false + elif input_dir == Vector2.DOWN: + sprite.animation = &"move_down" + elif input_dir == Vector2.LEFT: + sprite.animation = &"move_right" + sprite.flip_h = true func _try_move(delta: int): if not is_moving or is_dead: @@ -113,13 +139,13 @@ func apply_camera_shake(strength: float = 10.0, fade: float = 5.0): func _try_interact(): raycast.target_position = input_dir * 8 raycast.force_raycast_update() - - var collider = raycast.get_collider() - if Input.is_action_just_pressed("attack") and collider: - if collider is PuzzleElement: + + if Input.is_action_just_pressed("attack"): + sprite.play(&"spin") + attack_frame = 50 + var collider = raycast.get_collider() + if collider and collider is PuzzleElement: (collider as PuzzleElement).interact(self) - pass - pass func teleport(pos: Vector2i): global_position = pos diff --git a/entities/player/player.tscn b/entities/player/player.tscn index 310c80f..09534ce 100644 --- a/entities/player/player.tscn +++ b/entities/player/player.tscn @@ -1,39 +1,198 @@ -[gd_scene load_steps=8 format=3 uid="uid://dpn82ibpmpb6u"] +[gd_scene load_steps=29 format=3 uid="uid://dpn82ibpmpb6u"] [ext_resource type="Script" path="res://entities/player/player.gd" id="1_jrd75"] -[ext_resource type="Texture2D" uid="uid://dxkxa6e6ue1b6" path="res://entities/assets/bat.png" id="1_qfnf0"] +[ext_resource type="Texture2D" uid="uid://384kxu6h01cg" path="res://entities/assets/player.png" id="2_la6m6"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_7830n"] +atlas = ExtResource("2_la6m6") +region = Rect2(0, 16, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hxarw"] +atlas = ExtResource("2_la6m6") +region = Rect2(8, 16, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ldeja"] +atlas = ExtResource("2_la6m6") +region = Rect2(16, 16, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_okcjq"] +atlas = ExtResource("2_la6m6") +region = Rect2(24, 16, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uckr3"] +atlas = ExtResource("2_la6m6") +region = Rect2(0, 0, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l6ht8"] +atlas = ExtResource("2_la6m6") +region = Rect2(8, 0, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f5bxb"] +atlas = ExtResource("2_la6m6") +region = Rect2(16, 0, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_580lu"] +atlas = ExtResource("2_la6m6") +region = Rect2(24, 0, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m6w0l"] +atlas = ExtResource("2_la6m6") +region = Rect2(0, 8, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xoslx"] +atlas = ExtResource("2_la6m6") +region = Rect2(8, 8, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_efl5l"] +atlas = ExtResource("2_la6m6") +region = Rect2(16, 8, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xuq2e"] +atlas = ExtResource("2_la6m6") +region = Rect2(24, 8, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vr7nv"] +atlas = ExtResource("2_la6m6") +region = Rect2(0, 32, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_sxg7e"] +atlas = ExtResource("2_la6m6") +region = Rect2(8, 32, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_npc0u"] +atlas = ExtResource("2_la6m6") +region = Rect2(16, 32, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uruo7"] +atlas = ExtResource("2_la6m6") +region = Rect2(24, 32, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uc5kf"] +atlas = ExtResource("2_la6m6") +region = Rect2(0, 24, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m5dpf"] +atlas = ExtResource("2_la6m6") +region = Rect2(8, 24, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5ihc5"] +atlas = ExtResource("2_la6m6") +region = Rect2(16, 24, 8, 8) + +[sub_resource type="AtlasTexture" id="AtlasTexture_c1p0s"] +atlas = ExtResource("2_la6m6") +region = Rect2(24, 24, 8, 8) + +[sub_resource type="SpriteFrames" id="SpriteFrames_icodh"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_7830n") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hxarw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ldeja") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_okcjq") +}], +"loop": false, +"name": &"move_down", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_uckr3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l6ht8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f5bxb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_580lu") +}], +"loop": false, +"name": &"move_right", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_m6w0l") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xoslx") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_efl5l") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xuq2e") +}], +"loop": false, +"name": &"move_up", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_vr7nv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_sxg7e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_npc0u") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uruo7") +}], +"loop": false, +"name": &"punch", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_uc5kf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m5dpf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5ihc5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_c1p0s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uc5kf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m5dpf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5ihc5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_c1p0s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uc5kf") +}], +"loop": false, +"name": &"spin", +"speed": 12.0 +}] [sub_resource type="Animation" id="Animation_ve5nf"] resource_name = "RESET" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} [sub_resource type="Animation" id="Animation_ab576"] resource_name = "move" length = 0.5 loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.25), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [0, 1] -} [sub_resource type="AnimationLibrary" id="AnimationLibrary_dx4e7"] _data = { @@ -52,12 +211,11 @@ z_index = 10 collision_mask = 15 script = ExtResource("1_jrd75") -[node name="Sprite2D" type="Sprite2D" parent="."] -texture_filter = 1 -texture = ExtResource("1_qfnf0") -hframes = 2 +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_icodh") +animation = &"move_up" -[node name="Camera2D" type="Camera2D" parent="Sprite2D"] +[node name="Camera2D" type="Camera2D" parent="AnimatedSprite2D"] [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { @@ -66,6 +224,7 @@ libraries = { autoplay = "move" [node name="CollisionShape2D" type="CollisionShape2D" parent="."] +visible = false shape = SubResource("RectangleShape2D_l7fhd") [node name="RayCast2D" type="RayCast2D" parent="."] @@ -73,6 +232,7 @@ target_position = Vector2(0, 8) collision_mask = 3 [node name="Area2D" type="Area2D" parent="."] +visible = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_x0fgp") diff --git a/project.godot b/project.godot index fc4791b..75198a6 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="GBJAM12" -config/tags=PackedStringArray("gamejam", "tilemap") +config/tags=PackedStringArray("2d", "gamejam", "tilemap") run/main_scene="res://scenes/main.tscn" config/features=PackedStringArray("4.3", "GL Compatibility") diff --git a/scenes/main.tscn b/scenes/main.tscn index a7720db..419ca34 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -75,7 +75,6 @@ position = Vector2(-180, 284) [node name="Player" parent="." node_paths=PackedStringArray("checkpoints") instance=ExtResource("2_w5xov")] position = Vector2(220, 60) checkpoints = [NodePath("../Start"), NodePath("../Checkpoints/Hallway"), NodePath("../Checkpoints/Garden"), NodePath("../Checkpoints/BallCourse"), NodePath("../Checkpoints/PostBallCourse")] -current_checkpoint = 1 [node name="Checkpoints" type="Node2D" parent="."] @@ -372,32 +371,32 @@ script = ExtResource("8_sr3y5") graves = [NodePath("Grave"), NodePath("Grave3"), NodePath("Grave2"), NodePath("Grave5"), NodePath("Grave4"), NodePath("Grave6")] [node name="Grave" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(-8, -16) +position = Vector2(-24, -16) pair = NodePath("../Grave3") jingle = ExtResource("3_v8h4p") [node name="Grave3" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(16, -24) +position = Vector2(16, -16) pair = NodePath("../Grave") jingle = ExtResource("3_v8h4p") [node name="Grave2" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(24, -8) +position = Vector2(32, -40) pair = NodePath("../Grave5") jingle = ExtResource("4_xmwgp") [node name="Grave5" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(32, -48) +position = Vector2(0, -64) pair = NodePath("../Grave2") jingle = ExtResource("4_xmwgp") [node name="Grave4" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(-16, -40) +position = Vector2(-16, -48) pair = NodePath("../Grave6") jingle = ExtResource("17_02jvj") [node name="Grave6" parent="GardenManager/GravesPuzzle" node_paths=PackedStringArray("pair") instance=ExtResource("2_fe1sr")] -position = Vector2(0, -64) +position = Vector2(24, -64) pair = NodePath("../Grave4") jingle = ExtResource("17_02jvj") @@ -833,7 +832,6 @@ position = Vector2(0, -16) shape = SubResource("RectangleShape2D_c5an3") [node name="VoidLayer" type="TileMapLayer" parent="BallCourseManager/BallPuzzle"] -visible = false z_index = 10 position = Vector2(4, 4) tile_map_data = PackedByteArray("AAAOAPb/AAAAAAAAAAAOAPf/AAAAAAAAAAAOAPj/AAAAAAAAAAAOAPn/AAAAAAAAAAAOAPr/AAAAAAAAAAAOAPv/AAAAAAAAAAAOAPz/AAAAAAAAAAAOAP3/AAAAAAAAAAAOAP7/AAAAAAAAAAAOAP//AAAAAAAAAAAOAAAAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAMAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAPAPb/AAAAAAAAAAAPAPf/AAAAAAAAAAAPAPj/AAAAAAAAAAAPAPn/AAAAAAAAAAAPAPr/AAAAAAAAAAAPAPv/AAAAAAAAAAAPAPz/AAAAAAAAAAAPAP3/AAAAAAAAAAAPAP7/AAAAAAAAAAAPAP//AAAAAAAAAAAPAAAAAAAAAAAAAAAPAAEAAAAAAAAAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAAAAAAAAAAPAAUAAAAAAAAAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAQAPb/AAAAAAAAAAAQAPf/AAAAAAAAAAAQAPj/AAAAAAAAAAAQAPn/AAAAAAAAAAAQAPr/AAAAAAAAAAAQAPv/AAAAAAAAAAAQAPz/AAAAAAAAAAAQAP3/AAAAAAAAAAAQAP7/AAAAAAAAAAAQAP//AAAAAAAAAAAQAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAAAAAAAAAARAPb/AAAAAAAAAAARAPf/AAAAAAAAAAARAPj/AAAAAAAAAAARAPn/AAAAAAAAAAARAPr/AAAAAAAAAAARAPv/AAAAAAAAAAARAPz/AAAAAAAAAAARAP3/AAAAAAAAAAARAP7/AAAAAAAAAAARAP//AAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAAAAAAAAAARAAIAAAAAAAAAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAASAPb/AAAAAAAAAAASAPf/AAAAAAAAAAASAPj/AAAAAAAAAAASAPn/AAAAAAAAAAASAPr/AAAAAAAAAAASAPv/AAAAAAAAAAASAPz/AAAAAAAAAAASAP3/AAAAAAAAAAASAP7/AAAAAAAAAAASAP//AAAAAAAAAAASAAAAAAAAAAAAAAASAAEAAAAAAAAAAAASAAIAAAAAAAAAAAASAAMAAAAAAAAAAAASAAQAAAAAAAAAAAASAAUAAAAAAAAAAAASAAYAAAAAAAAAAAASAAcAAAAAAAAAAAASAAgAAAAAAAAAAAATAPb/AAAAAAAAAAATAPf/AAAAAAAAAAATAPj/AAAAAAAAAAATAPn/AAAAAAAAAAATAPr/AAAAAAAAAAATAPv/AAAAAAAAAAATAPz/AAAAAAAAAAATAP3/AAAAAAAAAAATAP7/AAAAAAAAAAATAP//AAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAAAAAAAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAAUAPb/AAAAAAAAAAAUAPf/AAAAAAAAAAAUAPj/AAAAAAAAAAAUAPn/AAAAAAAAAAAUAPr/AAAAAAAAAAAUAPv/AAAAAAAAAAAUAPz/AAAAAAAAAAAUAP3/AAAAAAAAAAAUAP7/AAAAAAAAAAAUAP//AAAAAAAAAAAUAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAMAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAgAAAAAAAAAAAAOAO7/AAAAAAAAAAAOAO//AAAAAAAAAAAOAPD/AAAAAAAAAAAOAPH/AAAAAAAAAAAOAPL/AAAAAAAAAAAOAPP/AAAAAAAAAAAOAPT/AAAAAAAAAAAOAPX/AAAAAAAAAAAPAO7/AAAAAAAAAAAPAO//AAAAAAAAAAAPAPD/AAAAAAAAAAAPAPH/AAAAAAAAAAAPAPL/AAAAAAAAAAAPAPP/AAAAAAAAAAAPAPT/AAAAAAAAAAAPAPX/AAAAAAAAAAAQAO7/AAAAAAAAAAAQAO//AAAAAAAAAAAQAPD/AAAAAAAAAAAQAPH/AAAAAAAAAAAQAPL/AAAAAAAAAAAQAPP/AAAAAAAAAAAQAPT/AAAAAAAAAAAQAPX/AAAAAAAAAAARAO7/AAAAAAAAAAARAO//AAAAAAAAAAARAPD/AAAAAAAAAAARAPH/AAAAAAAAAAARAPL/AAAAAAAAAAARAPP/AAAAAAAAAAARAPT/AAAAAAAAAAARAPX/AAAAAAAAAAASAO7/AAAAAAAAAAASAO//AAAAAAAAAAASAPD/AAAAAAAAAAASAPH/AAAAAAAAAAASAPL/AAAAAAAAAAASAPP/AAAAAAAAAAASAPT/AAAAAAAAAAASAPX/AAAAAAAAAAATAO7/AAAAAAAAAAATAO//AAAAAAAAAAATAPD/AAAAAAAAAAATAPH/AAAAAAAAAAATAPL/AAAAAAAAAAATAPP/AAAAAAAAAAATAPT/AAAAAAAAAAATAPX/AAAAAAAAAAAUAO7/AAAAAAAAAAAUAO//AAAAAAAAAAAUAPD/AAAAAAAAAAAUAPH/AAAAAAAAAAAUAPL/AAAAAAAAAAAUAPP/AAAAAAAAAAAUAPT/AAAAAAAAAAAUAPX/AAAAAAAAAAANAPv/AAAGAAAAAAAMAO7/AAAAAAAAAAAMAO//AAAAAAAAAAAMAPD/AAAAAAAAAAAMAPH/AAAAAAAAAAAMAPL/AAAAAAAAAAAMAPP/AAAAAAAAAAAMAPT/AAAAAAAAAAAMAPX/AAAAAAAAAAAMAPb/AAAAAAAAAAAMAPf/AAAAAAAAAAAMAPj/AAAAAAAAAAAMAPn/AAAAAAAAAAAMAPr/AAAAAAAAAAANAO7/AAAAAAAAAAANAO//AAAAAAAAAAANAPD/AAAAAAAAAAANAPH/AAAAAAAAAAANAPL/AAAAAAAAAAANAPP/AAAAAAAAAAANAPT/AAAAAAAAAAANAPX/AAAAAAAAAAANAPb/AAAAAAAAAAANAPf/AAAAAAAAAAANAPj/AAAAAAAAAAANAPn/AAAAAAAAAAANAPr/AAAAAAAAAAA=")