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
|
@ -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
|
||||
|
|
|
@ -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
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
|
|
@ -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()
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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")
|
||||
|
|
Reference in a new issue