From 4aacaa34bc3c5f6d396dfa48b082ebd224f25b8b Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 22 Dec 2024 00:17:17 +0100 Subject: [PATCH] add player controller --- objects/brick_player.tscn | 31 ++++++++++++++++++++ project.godot | 18 ++++++++++++ scenes/test.tscn | 25 ++++------------ scripts/player.gd | 44 ++++++++++++++++++++++++++++ tileset/village/tileset_village.tres | 32 ++++++++++++++++++++ 5 files changed, 130 insertions(+), 20 deletions(-) create mode 100644 objects/brick_player.tscn create mode 100644 scripts/player.gd diff --git a/objects/brick_player.tscn b/objects/brick_player.tscn new file mode 100644 index 0000000..798955a --- /dev/null +++ b/objects/brick_player.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=6 format=3 uid="uid://bqi5s710xb1ju"] + +[ext_resource type="Script" path="res://scripts/player.gd" id="1_8j4h4"] +[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"] +[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="3_2srrh"] +[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_hdsg1"] +size = Vector2(16, 31) + +[node name="Brick Player" type="CharacterBody2D"] +script = ExtResource("1_8j4h4") + +[node name="Root" type="Node2D" parent="."] + +[node name="Base" type="Sprite2D" parent="Root"] +texture = ExtResource("2_bc55y") + +[node name="Left Eye" type="Sprite2D" parent="Root"] +position = Vector2(-7, -6) +texture = ExtResource("3_2srrh") +hframes = 2 + +[node name="Right Eye" type="Sprite2D" parent="Root"] +position = Vector2(6, -5) +texture = ExtResource("4_ccn81") +hframes = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 0.5) +shape = SubResource("RectangleShape2D_hdsg1") diff --git a/project.godot b/project.godot index 69eacee..96439b3 100644 --- a/project.godot +++ b/project.godot @@ -32,6 +32,24 @@ window/stretch/mode="viewport" window/stretch/aspect="keep_height" window/stretch/scale_mode="integer" +[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":65,"key_label":0,"unicode":97,"location":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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +jump={ +"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} + [rendering] textures/canvas_textures/default_texture_filter=0 diff --git a/scenes/test.tscn b/scenes/test.tscn index d30c75d..6a4dc30 100644 --- a/scenes/test.tscn +++ b/scenes/test.tscn @@ -1,11 +1,9 @@ -[gd_scene load_steps=17 format=4 uid="uid://h60obxmju6mo"] +[gd_scene load_steps=15 format=4 uid="uid://h60obxmju6mo"] [ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_5lb42"] [ext_resource type="TileSet" uid="uid://cl4bn8lofqvky" path="res://tileset/village/tileset_village.tres" id="1_d680t"] [ext_resource type="Texture2D" uid="uid://dxvevrm15uus1" path="res://sprites/flowers_tileset.png" id="3_235u2"] -[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="4_45fjl"] -[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="5_5lce7"] -[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="6_qq5u2"] +[ext_resource type="PackedScene" uid="uid://bqi5s710xb1ju" path="res://objects/brick_player.tscn" id="4_hetw8"] [sub_resource type="Gradient" id="Gradient_anvhr"] offsets = PackedFloat32Array(1) @@ -386,22 +384,9 @@ tile_set = SubResource("TileSet_r3m5w") tile_map_data = PackedByteArray("AAD7//3/AQABAAAAAAD8//3/AQAAAAAAAAD+//3/AQABAAAAAAD///3/AQAAAAAAAAABAP3/AQADAAAAAAAFAP3/AQAAAAAAAAAEAP3/AQAAAAAAAAACAP3/AQABAAAAAAAJAPX/AQACAAAAAAANAPf/AQAAAAAAAAARAPn/AQAAAAAAAAAaAAEAAQACAAAAAAAdAAEAAQADAAAAAAAeAAEAAQABAAAAAAAfAAEAAQADAAAAAAAgAAEAAQADAAAAAAAiAAEAAQADAAAAAAAjAAEAAQABAAAAAAAkAAEAAQADAAAAAAAcAPP/AQACAAAAAAAgAPP/AQACAAAAAAAhAPP/AQACAAAAAAAiAPP/AQABAAAAAAAkAPP/AQADAAAAAAAlAPP/AQAAAAAAAAAmAPP/AQACAAAAAAAoAPP/AQABAAAAAAApAPP/AQAAAAAAAAAtAPP/AQACAAAAAAAvAPP/AQADAAAAAAAwAPP/AQADAAAAAAAxAPP/AQAAAAAAAAAzAPP/AQACAAAAAAA0APP/AQACAAAAAAA1APP/AQADAAAAAAA3APP/AQADAAAAAAA4APP/AQADAAAAAAA5APP/AQACAAAAAAA6APP/AQACAAAAAAAmAAcAAQAAAAAAAAAnAAcAAQABAAAAAAAoAAcAAQADAAAAAAApAAcAAQABAAAAAAAqAAcAAQADAAAAAAArAAcAAQACAAAAAAAsAAcAAQABAAAAAAAtAAcAAQABAAAAAAAuAAcAAQABAAAAAAAvAAcAAQACAAAAAAAwAAcAAQACAAAAAAAyAAcAAQAAAAAAAAA1AAcAAQACAAAAAAA3AAcAAQAAAAAAAAAZAAMAAQACAAAAAAAXAAMAAQABAAAAAAAWAAMAAQABAAAAAAAUAAMAAQADAAAAAAA=") tile_set = SubResource("TileSet_fpn3g") -[node name="Brick Player" type="Node2D" parent="."] -position = Vector2(14, 0) - -[node name="Base" type="Sprite2D" parent="Brick Player"] -position = Vector2(-56, -32) -texture = ExtResource("4_45fjl") - -[node name="Left Eye" type="Sprite2D" parent="Brick Player"] -position = Vector2(-63, -38) -texture = ExtResource("5_5lce7") -hframes = 2 - -[node name="Right Eye" type="Sprite2D" parent="Brick Player"] -position = Vector2(-50, -37) -texture = ExtResource("6_qq5u2") -hframes = 2 +[node name="Brick Player" parent="." instance=ExtResource("4_hetw8")] +position = Vector2(219, 0) +metadata/_edit_group_ = true [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(237, -100) diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..c9518bd --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,44 @@ +extends CharacterBody2D + +@export var speed: float = 300.0 + +var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") + +@onready var root = $Root + +@export var jump_height: float = 100 +@export var jump_time_to_peak: float = 0.5 +@export var jump_time_to_descent: float = 0.4 + +@onready var jump_velocity: float = ((2.0 * jump_height) / jump_time_to_peak) * -1.0 +@onready var jump_gravity: float = ((-2.0 * jump_height) / (jump_time_to_peak * jump_time_to_peak)) * -1.0 +@onready var fall_gravity: float = ((-2.0 * jump_height) / (jump_time_to_descent * jump_time_to_descent)) * -1.0 + +func _process(_delta): + if velocity.x > 0.0: + root.rotation = deg_to_rad(-10) + elif velocity.x < 0.0: + root.rotation = deg_to_rad(10) + else: + root.rotation = 0 + +func _physics_process(delta): + if not is_on_floor(): + velocity.y += calculate_gravity() * delta + + if Input.is_action_pressed("jump") and is_on_floor(): + jump() + + var direction = Input.get_axis("left", "right") + if direction: + velocity.x = direction * speed + else: + velocity.x = move_toward(velocity.x, 0, speed) + + move_and_slide() + +func jump(): + velocity.y = jump_velocity + +func calculate_gravity() -> float: + return jump_gravity if velocity.y < 0.0 else fall_gravity diff --git a/tileset/village/tileset_village.tres b/tileset/village/tileset_village.tres index 6e9f142..b5acca6 100644 --- a/tileset/village/tileset_village.tres +++ b/tileset/village/tileset_village.tres @@ -7,12 +7,14 @@ texture = ExtResource("1") 0:0/0 = 0 0:0/0/terrain_set = 0 0:0/0/terrain = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 0:0/0/terrains_peering_bit/right_side = 0 0:0/0/terrains_peering_bit/bottom_right_corner = 0 0:0/0/terrains_peering_bit/bottom_side = 0 1:0/0 = 0 1:0/0/terrain_set = 0 1:0/0/terrain = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 1:0/0/terrains_peering_bit/right_side = 0 1:0/0/terrains_peering_bit/bottom_right_corner = 0 1:0/0/terrains_peering_bit/bottom_side = 0 @@ -21,6 +23,7 @@ texture = ExtResource("1") 2:1/0 = 0 2:1/0/terrain_set = 0 2:1/0/terrain = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 2:1/0/terrains_peering_bit/bottom_side = 0 2:1/0/terrains_peering_bit/bottom_left_corner = 0 2:1/0/terrains_peering_bit/left_side = 0 @@ -29,11 +32,13 @@ texture = ExtResource("1") 3:1/0 = 0 3:1/0/terrain_set = 0 3:1/0/terrain = 0 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 3:1/0/terrains_peering_bit/bottom_side = 0 3:1/0/terrains_peering_bit/top_side = 0 4:2/0 = 0 4:2/0/terrain_set = 0 4:2/0/terrain = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 4:2/0/terrains_peering_bit/right_side = 0 4:2/0/terrains_peering_bit/bottom_right_corner = 0 4:2/0/terrains_peering_bit/bottom_side = 0 @@ -61,11 +66,13 @@ texture = ExtResource("1") 7:3/0 = 0 7:3/0/terrain_set = 0 7:3/0/terrain = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 7:3/0/terrains_peering_bit/left_side = 0 7:3/0/terrains_peering_bit/top_side = 0 8:3/0 = 0 8:3/0/terrain_set = 0 8:3/0/terrain = 0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 8:3/0/terrains_peering_bit/right_side = 0 8:3/0/terrains_peering_bit/left_side = 0 8:3/0/terrains_peering_bit/top_side = 0 @@ -87,6 +94,7 @@ texture = ExtResource("1") 7:4/0 = 0 7:4/0/terrain_set = 0 7:4/0/terrain = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 7:4/0/terrains_peering_bit/bottom_side = 0 7:4/0/terrains_peering_bit/left_side = 0 7:4/0/terrains_peering_bit/top_side = 0 @@ -111,31 +119,37 @@ texture = ExtResource("1") 4:4/0 = 0 4:4/0/terrain_set = 0 4:4/0/terrain = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 4:4/0/terrains_peering_bit/right_side = 0 4:4/0/terrains_peering_bit/bottom_side = 0 4:4/0/terrains_peering_bit/top_side = 0 2:3/0 = 0 2:3/0/terrain_set = 0 2:3/0/terrain = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 2:3/0/terrains_peering_bit/left_side = 0 1:3/0 = 0 1:3/0/terrain_set = 0 1:3/0/terrain = 0 +1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 1:3/0/terrains_peering_bit/right_side = 0 1:3/0/terrains_peering_bit/left_side = 0 0:3/0 = 0 0:3/0/terrain_set = 0 0:3/0/terrain = 0 +0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 0:3/0/terrains_peering_bit/right_side = 0 0:2/0 = 0 0:2/0/terrain_set = 0 0:2/0/terrain = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 0:2/0/terrains_peering_bit/right_side = 0 0:2/0/terrains_peering_bit/top_side = 0 0:2/0/terrains_peering_bit/top_right_corner = 0 0:1/0 = 0 0:1/0/terrain_set = 0 0:1/0/terrain = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 0:1/0/terrains_peering_bit/right_side = 0 0:1/0/terrains_peering_bit/bottom_right_corner = 0 0:1/0/terrains_peering_bit/bottom_side = 0 @@ -155,16 +169,19 @@ texture = ExtResource("1") 2:0/0 = 0 2:0/0/terrain_set = 0 2:0/0/terrain = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 2:0/0/terrains_peering_bit/bottom_side = 0 2:0/0/terrains_peering_bit/bottom_left_corner = 0 2:0/0/terrains_peering_bit/left_side = 0 3:0/0 = 0 3:0/0/terrain_set = 0 3:0/0/terrain = 0 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 3:0/0/terrains_peering_bit/bottom_side = 0 4:1/0 = 0 4:1/0/terrain_set = 0 4:1/0/terrain = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 4:1/0/terrains_peering_bit/right_side = 0 4:1/0/terrains_peering_bit/bottom_side = 0 4:1/0/terrains_peering_bit/top_side = 0 @@ -182,16 +199,19 @@ texture = ExtResource("1") 3:2/0 = 0 3:2/0/terrain_set = 0 3:2/0/terrain = 0 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 3:2/0/terrains_peering_bit/top_side = 0 2:2/0 = 0 2:2/0/terrain_set = 0 2:2/0/terrain = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 2:2/0/terrains_peering_bit/left_side = 0 2:2/0/terrains_peering_bit/top_left_corner = 0 2:2/0/terrains_peering_bit/top_side = 0 1:2/0 = 0 1:2/0/terrain_set = 0 1:2/0/terrain = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 1:2/0/terrains_peering_bit/right_side = 0 1:2/0/terrains_peering_bit/left_side = 0 1:2/0/terrains_peering_bit/top_left_corner = 0 @@ -200,11 +220,13 @@ texture = ExtResource("1") 4:3/0 = 0 4:3/0/terrain_set = 0 4:3/0/terrain = 0 +4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 4:3/0/terrains_peering_bit/right_side = 0 4:3/0/terrains_peering_bit/top_side = 0 3:3/0 = 0 3:3/0/terrain_set = 0 3:3/0/terrain = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 9:3/0 = 0 9:3/0/terrain_set = 0 9:3/0/terrain = 0 @@ -216,6 +238,7 @@ texture = ExtResource("1") 6:3/0 = 0 6:3/0/terrain_set = 0 6:3/0/terrain = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 6:3/0/terrains_peering_bit/right_side = 0 6:3/0/terrains_peering_bit/left_side = 0 6:3/0/terrains_peering_bit/top_side = 0 @@ -223,6 +246,7 @@ texture = ExtResource("1") 5:3/0 = 0 5:3/0/terrain_set = 0 5:3/0/terrain = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 5:3/0/terrains_peering_bit/right_side = 0 5:3/0/terrains_peering_bit/left_side = 0 5:3/0/terrains_peering_bit/top_left_corner = 0 @@ -255,6 +279,7 @@ texture = ExtResource("1") 7:2/0 = 0 7:2/0/terrain_set = 0 7:2/0/terrain = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 7:2/0/terrains_peering_bit/bottom_side = 0 7:2/0/terrains_peering_bit/bottom_left_corner = 0 7:2/0/terrains_peering_bit/left_side = 0 @@ -272,6 +297,7 @@ texture = ExtResource("1") 6:0/0 = 0 6:0/0/terrain_set = 0 6:0/0/terrain = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 6:0/0/terrains_peering_bit/right_side = 0 6:0/0/terrains_peering_bit/bottom_right_corner = 0 6:0/0/terrains_peering_bit/bottom_side = 0 @@ -279,6 +305,7 @@ texture = ExtResource("1") 5:0/0 = 0 5:0/0/terrain_set = 0 5:0/0/terrain = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 5:0/0/terrains_peering_bit/right_side = 0 5:0/0/terrains_peering_bit/bottom_side = 0 5:0/0/terrains_peering_bit/bottom_left_corner = 0 @@ -286,16 +313,19 @@ texture = ExtResource("1") 4:0/0 = 0 4:0/0/terrain_set = 0 4:0/0/terrain = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 4:0/0/terrains_peering_bit/right_side = 0 4:0/0/terrains_peering_bit/bottom_side = 0 7:0/0 = 0 7:0/0/terrain_set = 0 7:0/0/terrain = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 7:0/0/terrains_peering_bit/bottom_side = 0 7:0/0/terrains_peering_bit/left_side = 0 8:0/0 = 0 8:0/0/terrain_set = 0 8:0/0/terrain = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 8:0/0/terrains_peering_bit/right_side = 0 8:0/0/terrains_peering_bit/bottom_side = 0 8:0/0/terrains_peering_bit/left_side = 0 @@ -311,6 +341,7 @@ texture = ExtResource("1") 7:1/0 = 0 7:1/0/terrain_set = 0 7:1/0/terrain = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 7:1/0/terrains_peering_bit/bottom_side = 0 7:1/0/terrains_peering_bit/left_side = 0 7:1/0/terrains_peering_bit/top_left_corner = 0 @@ -335,6 +366,7 @@ texture = ExtResource("1") 9:0/0/terrains_peering_bit/top_side = 0 [resource] +physics_layer_0/collision_layer = 1 terrain_set_0/mode = 0 terrain_set_0/terrain_0/name = "Village 0" terrain_set_0/terrain_0/color = Color(0.520131, 0.153738, 0.75213, 1)