many small changes, and few big ones

This commit is contained in:
ChaoticByte 2024-10-16 20:23:53 +02:00
parent e8985f4e79
commit a3ca623258
No known key found for this signature in database
32 changed files with 391 additions and 247 deletions

View file

@ -4,7 +4,7 @@ extends AudioStreamPlayer2D
# EXPORTED VARS
# detect every nth tick
@export var detect_mod: int = 4
@export var audio_tick_interval: int = 4
@export_category("dampening effect")
@export var n_pointcasts_to_player: int = 25
@ -162,12 +162,12 @@ func _ready() -> void:
create_audio_bus_effects()
create_raycasts()
var tick: int = 0
var audio_tick: int = 0
func _physics_process(delta: float) -> void:
if tick == 0:
func _physics_process(_delta: float) -> void:
if audio_tick == 0:
var reverb_params = determine_reverb_params()
var blocked_amount = determine_distance_amount_blocked()
update_reverb(reverb_params[0], reverb_params[1])
update_dampening(blocked_amount)
tick = (tick + 1) % detect_mod
audio_tick = (audio_tick + 1) % audio_tick_interval

View file

@ -1,12 +1,11 @@
extends Node
const mainmenu_player_pos: Vector2 = Vector2(0, 128 + 32)
class Entrypoint extends Object:
var scene_name: String
var player_position: Vector2
var keep_velocity: bool
var initial_velocity: Vector2
var lock_player: bool
func _init(
scene_name_: String,
player_position_: Vector2,
@ -14,24 +13,15 @@ class Entrypoint extends Object:
# if player velocity is zero, use initial_velocity
keep_velocity_: bool = true,
# initial player velocity
initial_velocity_: Vector2 = Vector2.ZERO
initial_velocity_: Vector2 = Vector2.ZERO,
# lock player movement
lock_player_: bool = false
) -> void:
self.scene_name = scene_name_
self.player_position = player_position_
self.keep_velocity = keep_velocity_
self.initial_velocity = initial_velocity_
const SCENES = {
"menu": "uid://bqmpoix37kutp",
"intro": "uid://c6w7lrydi43ts",
"test": "uid://dqf665b540tfg",
}
var MENU_SCENE: PackedScene = preload("res://menu/menu.tscn")
var ENTRYPOINTS = {
"intro_start": Entrypoint.new("intro", Vector2(0, 0)),
"test": Entrypoint.new("test", Vector2(1680, 200), false, Vector2(0, -500)),
}
self.lock_player = lock_player_
# load that stuff
@ -52,11 +42,11 @@ func load_scene(scn_name: String, force_reload: bool = false) -> bool:
return true # nothing to do :)
if not _pre_load_checks():
return false
if not scn_name in SCENES:
if not scn_name in LevelsDef.SCENES:
push_error("Level " + scn_name + " doesn't exist.")
return false
unload_scene()
var scn: Node2D = load(SCENES[scn_name]).instantiate()
var scn: Node2D = load(LevelsDef.SCENES[scn_name]).instantiate()
NodeRegistry.level_root_container.add_child(scn)
return true
@ -66,17 +56,19 @@ func unload_scene():
c.queue_free()
func load_entrypoint(ep_name: String) -> bool: # returns true on success
if not ep_name in ENTRYPOINTS:
if not ep_name in LevelsDef.ENTRYPOINTS:
push_error("Entrypoint " + ep_name + " doesn't exist.")
return false
if not _pre_load_checks():
return false
var e: Entrypoint = ENTRYPOINTS[ep_name]
var e: Entrypoint = LevelsDef.ENTRYPOINTS[ep_name]
if load_scene(e.scene_name):
NodeRegistry.player.position = e.player_position
NodeRegistry.player.camera.call_deferred("reset_smoothing")
if not e.keep_velocity or NodeRegistry.player.velocity == Vector2.ZERO:
NodeRegistry.player.velocity = e.initial_velocity
if e.lock_player:
NodeRegistry.player.locked = true
Gamestate.last_entrypoint = ep_name
Gamestate.save_slot() # save game
return true
@ -87,5 +79,5 @@ func load_menu():
if not _pre_load_checks():
return false
unload_scene()
NodeRegistry.player.position = mainmenu_player_pos
NodeRegistry.player.position = Vector2(0, 129)
return load_scene("menu", true)

54
core/player/player.gd Normal file
View 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
View 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

View file

@ -1,5 +1,5 @@
@tool
extends CollisionPolygon2D
class_name P extends CollisionPolygon2D
@export var color: Color = Color.WHITE:
set(v):
@ -8,18 +8,27 @@ extends CollisionPolygon2D
get():
return color
var polygon_2d: Polygon2D = null
var light_occluder_2d: LightOccluder2D = null
@export var update: bool:
set(v):
update_polygon()
func update_polygon():
# normal polygon
$Polygon2D.polygon = polygon
$Polygon2D.color = color
if polygon_2d == null:
polygon_2d = Polygon2D.new()
self.add_child(polygon_2d)
if light_occluder_2d == null:
light_occluder_2d = LightOccluder2D.new()
self.add_child(light_occluder_2d)
# visible polygon
polygon_2d.polygon = polygon
polygon_2d.color = color
# light occluder
var lo_polygon = OccluderPolygon2D.new()
lo_polygon.polygon = polygon
$LightOccluder2D.occluder = lo_polygon
light_occluder_2d.occluder = lo_polygon
func _ready() -> void:
update_polygon()

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=3 format=3 uid="uid://cbynoofsjcl45"]
[gd_scene load_steps=3 format=3 uid="uid://c7cflclgotwsr"]
[ext_resource type="Script" path="res://core/polygon/polygon.gd" id="1_ga37f"]
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_2cqf3"]
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_b1ir8"]
[node name="Polygon" type="CollisionPolygon2D"]
script = ExtResource("1_ga37f")
@ -11,4 +11,4 @@ script = ExtResource("1_ga37f")
[node name="LightOccluder2D" type="LightOccluder2D" parent="."]
editor_description = "For particle collisions"
occluder = SubResource("OccluderPolygon2D_2cqf3")
occluder = SubResource("OccluderPolygon2D_b1ir8")

View file

@ -8,8 +8,7 @@ uniform sampler2D vignette_mask;
// constants
const float rgb_distortion_v_mult = 0.9;
const float rgb_distortion_v_exp = 2.0;
const float rgb_distortion_v_mult = 0.5;
const float rgb_distortion_v_min = 0.04;
const float rgb_distortion_v_max = 0.12;
@ -19,13 +18,13 @@ void fragment() {
float v = texture(vignette_mask, SCREEN_UV).r;
// rgb & blur distortion
float v_ = clamp(
pow(v * rgb_distortion_v_mult, rgb_distortion_v_exp),
v * rgb_distortion_v_mult,
rgb_distortion_v_min,
rgb_distortion_v_max
);
vec2 screen_uv_r = SCREEN_UV - (v_ * 0.01);
vec2 screen_uv_g = SCREEN_UV + (v_ * 0.01);
vec2 screen_uv_b = SCREEN_UV;
vec2 screen_uv_r = SCREEN_UV + vec2(-v_ * 0.01, 0.0);
vec2 screen_uv_g = SCREEN_UV + vec2(0.0, v_ * 0.01);
vec2 screen_uv_b = SCREEN_UV + vec2(v_ * 0.01, -v_ * 0.01);
COLOR.r = textureLod(screen_texture, screen_uv_r, v).r;
COLOR.g = textureLod(screen_texture, screen_uv_g, v).g;
COLOR.b = textureLod(screen_texture, screen_uv_b, v).b;

View file

@ -1,6 +1,9 @@
[gd_resource type="GradientTexture2D" load_steps=2 format=3 uid="uid://bwlgypt4xjocj"]
[sub_resource type="Gradient" id="Gradient_h26vj"]
interpolation_mode = 2
offsets = PackedFloat32Array(0.0432099, 1)
colors = PackedColorArray(0.0768358, 0.0768358, 0.0768358, 1, 1, 1, 1, 1)
[resource]
gradient = SubResource("Gradient_h26vj")