many small changes, and few big ones
This commit is contained in:
parent
e8985f4e79
commit
a3ca623258
32 changed files with 391 additions and 247 deletions
54
core/player/player.gd
Normal file
54
core/player/player.gd
Normal file
|
@ -0,0 +1,54 @@
|
|||
extends CharacterBody2D
|
||||
|
||||
@onready var camera = $Camera2D
|
||||
|
||||
# die
|
||||
|
||||
func die():
|
||||
LevelsCore.load_entrypoint(Gamestate.last_entrypoint)
|
||||
|
||||
# movement and stuff
|
||||
|
||||
@export var movement_speed = 300.0
|
||||
@export var jump_velocity = -350.0
|
||||
@export var air_friction = 0.02
|
||||
@export var floor_friction = 0.1
|
||||
@export var max_jumps: int = 2
|
||||
@export var rigidbody_impulse_mult: float = 0.04
|
||||
|
||||
var locked: bool = false
|
||||
var jumps: int = 0
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var gravity = get_gravity()
|
||||
var dir = Input.get_axis("player_left", "player_right")
|
||||
var on_floor = is_on_floor()
|
||||
var on_wall = is_on_wall()
|
||||
# left right movement
|
||||
if dir and not locked:
|
||||
velocity.x = move_toward(velocity.x, dir * movement_speed, movement_speed*floor_friction)
|
||||
elif on_floor:# or on_ceiling:
|
||||
velocity.x = move_toward(velocity.x, 0, movement_speed*floor_friction)
|
||||
elif not locked:
|
||||
velocity.x = move_toward(velocity.x, 0, movement_speed*air_friction)
|
||||
# gravity
|
||||
if not on_floor:
|
||||
velocity += gravity * delta
|
||||
# reset number of jumps
|
||||
if on_floor or on_wall:
|
||||
jumps = 0
|
||||
# jumping / dropping from ceiling
|
||||
if Input.is_action_just_pressed("player_jump") and not locked:
|
||||
if jumps < max_jumps: # (allows air jumps)
|
||||
velocity.y = jump_velocity
|
||||
jumps += 1
|
||||
move_and_slide()
|
||||
# affect rigid bodies
|
||||
# adapted solution from
|
||||
# https://kidscancode.org/godot_recipes/4.x/physics/character_vs_rigid/index.html
|
||||
for i in get_slide_collision_count():
|
||||
var collision = get_slide_collision(i)
|
||||
var collider = collision.get_collider()
|
||||
if collider is RigidBody2D:
|
||||
var impulse = -collision.get_normal() * (velocity.length() / collider.mass) * rigidbody_impulse_mult
|
||||
collider.apply_central_impulse(impulse)
|
34
core/player/player.tscn
Normal file
34
core/player/player.tscn
Normal file
|
@ -0,0 +1,34 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://ebb4pfxklatj"]
|
||||
|
||||
[ext_resource type="Script" path="res://core/player/player.gd" id="1_fob34"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_7cq61"]
|
||||
size = Vector2(16, 16)
|
||||
|
||||
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_p33ik"]
|
||||
polygon = PackedVector2Array(-8.605, -17, -9, 1, 9, 1, 8.385, -17)
|
||||
|
||||
[node name="Player" type="CharacterBody2D"]
|
||||
collision_layer = 2
|
||||
slide_on_ceiling = false
|
||||
floor_block_on_wall = false
|
||||
script = ExtResource("1_fob34")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -8)
|
||||
shape = SubResource("RectangleShape2D_7cq61")
|
||||
|
||||
[node name="LightOccluder2D" type="LightOccluder2D" parent="."]
|
||||
occluder = SubResource("OccluderPolygon2D_p33ik")
|
||||
|
||||
[node name="Polygon2D" type="Polygon2D" parent="."]
|
||||
polygon = PackedVector2Array(-8.605, -17, -9, 1, 9, 1, 8.385, -17)
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
process_callback = 0
|
||||
position_smoothing_enabled = true
|
||||
drag_horizontal_enabled = true
|
||||
drag_vertical_enabled = true
|
||||
drag_top_margin = 0.3
|
||||
drag_bottom_margin = 0.3
|
||||
editor_draw_drag_margin = true
|
Reference in a new issue