fix: generous black borders around levels

This commit is contained in:
Jakob Feldmann 2024-01-18 14:07:51 +01:00
parent 1d55756ade
commit bfe0805377
23 changed files with 138 additions and 95 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 109 B

View File

@ -117,7 +117,7 @@ _global_script_class_icons={
[application]
config/name="Blobby"
run/main_scene="res://src/UserInterface/Screens/MainMenu/MainScreen.tscn"
run/main_scene="res://src/Levels/Level 1.tscn"
config/icon="res://icon.png"
config/windows_native_icon="res://icon.ico"

View File

@ -4385,7 +4385,7 @@ texture = SubResource( 62 )
offset = Vector2( 1, 0 )
hframes = 6
vframes = 6
frame = 8
frame = 6
__meta__ = {
"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo="
}

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=4 format=2]
[gd_scene load_steps=5 format=2]
[ext_resource path="res://assets/environment/decor/glass.png" type="Texture" id=1]
[ext_resource path="res://assets/environment/decor/Roots_And_Leafs.png" type="Texture" id=2]
[ext_resource path="res://assets/environment/blocks/Alien-Ship-Ground-Inner-Black.png" type="Texture" id=3]
[sub_resource type="TileSet" id=1]
0/name = "glass.png 0"
@ -130,6 +131,20 @@
8/shape_one_way_margin = 0.0
8/shapes = [ ]
8/z_index = 0
9/name = "Alien-Ship-Ground-Inner-Black.png 9"
9/texture = ExtResource( 3 )
9/tex_offset = Vector2( 0, 0 )
9/modulate = Color( 1, 1, 1, 1 )
9/region = Rect2( 0, 0, 32, 32 )
9/tile_mode = 0
9/occluder_offset = Vector2( 0, 0 )
9/navigation_offset = Vector2( 0, 0 )
9/shape_offset = Vector2( 0, 0 )
9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
9/shape_one_way = false
9/shape_one_way_margin = 0.0
9/shapes = [ ]
9/z_index = 0
[node name="GlassAndRoots" type="TileMap"]
tile_set = SubResource( 1 )

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -51,5 +51,4 @@ scale = Vector2( 1.5, 1 )
position = Vector2( 0, 1.5 )
z_index = -1
frames = SubResource( 1 )
frame = 8
playing = true

View File

@ -6,7 +6,7 @@ const PhysicsConst = preload("res://src/Utilities/Physic/PhysicsConst.gd")
var mass = 1
var coupled_mass = mass
var spring_k = -400
var spring_k = 400
var start_y = 0
var y_velocity = 0
var friction = 0.91
@ -17,81 +17,77 @@ var shock_ready = true
func _ready() -> void:
start_y = self.position.y
start_y = self.position.y
# TODO Limit spring deformation
func _physics_process(delta: float) -> void:
var bc = _body_contact()
if !bc:
shock_ready = true
if bc && shock_ready:
_Kinematic_Body_on_Spring()
var bc = _body_contact()
if !bc:
shock_ready = true
if bc && shock_ready:
_Kinematic_Body_on_Spring()
var spring_force = spring_k * (self.position.y - self.start_y)
if coupled_body != null:
coupled_mass = mass + coupled_body.mass
else:
coupled_mass = mass
var spring_force = spring_k * (self.start_y - self.position.y)
if coupled_body != null:
coupled_mass = mass + coupled_body.mass
else:
coupled_mass = mass
var weight_force = coupled_mass * PhysicsConst.gravity
var result_force = weight_force + spring_force
y_velocity = PhysicsFunc.two_step_euler(
y_velocity, result_force, coupled_mass, delta
)
var weight_force = coupled_mass * PhysicsConst.gravity
var result_force = weight_force + spring_force
y_velocity = PhysicsFunc.two_step_euler(
y_velocity, result_force, coupled_mass, delta
)
y_velocity *= friction
y_velocity *= friction
self.position.y += y_velocity * delta
self.position.y += y_velocity * delta
func _body_contact() -> bool:
var areas: Array = $SpringSkin.get_overlapping_areas()
for i in range(0, areas.size()):
if ["BlobbySkin","EnemySkin"].has(areas[i].name):
coupled_body = areas[i].get_parent()
return true
coupled_body = null
return false
var areas: Array = $SpringSkin.get_overlapping_areas()
for i in range(0, areas.size()):
coupled_body = areas[i].get_parent()
return true
coupled_body = null
return false
func _Kinematic_Body_on_Spring() -> void:
var a_velocity = stored_incoming_velocity
var a_mass = coupled_body.mass
var b_velocity = y_velocity
var b_mass = mass
y_velocity += PhysicsFunc.complete_unelastic_shock(
a_velocity, b_velocity, a_mass, b_mass
)
stored_incoming_velocity = 0
shock_ready = false
var a_velocity = stored_incoming_velocity
var a_mass = coupled_body.mass
var b_velocity = y_velocity
var b_mass = mass
y_velocity += PhysicsFunc.complete_unelastic_shock(
a_velocity, b_velocity, a_mass, b_mass
)
stored_incoming_velocity = 0
shock_ready = false
func _on_SpringSkin_area_exited(_area: Area2D) -> void:
var displacement = self.position.y - self.start_y
var potential_spring_energy = spring_k * 0.5 * pow(displacement, 2)
var mass_ratio = 1 - mass / coupled_mass
var transferred_kinetic_energy = potential_spring_energy * mass_ratio
var kinetic_energy_in_velocity = (
-sign(displacement)
* sqrt(
abs(
2 * transferred_kinetic_energy / max(coupled_mass - mass, 0.001)
)
)
)
if coupled_body != null:
coupled_body.velocity.y += kinetic_energy_in_velocity
var displacement = self.position.y - self.start_y
var potential_spring_energy = spring_k * 0.5 * pow(displacement, 2)
var mass_ratio = 1 - mass / coupled_mass
var transferred_kinetic_energy = potential_spring_energy * mass_ratio
var kinetic_energy_in_velocity = (
-sign(displacement)
* sqrt(
2 * transferred_kinetic_energy / max(coupled_mass - mass, 0.001)
)
)
if coupled_body != null:
coupled_body.velocity.y += kinetic_energy_in_velocity
func _on_EnteringVelocityDetector_area_entered(area: Area2D) -> void:
if area.name == "BlobbySkin":
if area.get_parent().velocity.y > 0:
stored_incoming_velocity = area.get_parent().velocity.y
if area.get_parent().velocity.y > 0:
stored_incoming_velocity = area.get_parent().velocity.y
func _on_EnteringVelocityDetector_area_exited(area: Area2D) -> void:
if coupled_body == null:
$SpringSound.play()
if coupled_body == null:
$SpringSound.play()

View File

@ -22,6 +22,7 @@ texture = ExtResource( 2 )
[node name="SpringSkin" type="Area2D" parent="."]
collision_layer = 32
collision_mask = 3
monitorable = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpringSkin"]
position = Vector2( -0.0412841, -1.27843 )
@ -39,7 +40,8 @@ one_way_collision = true
[node name="EnteringVelocityDetector" type="Area2D" parent="."]
position = Vector2( 0, -3.04889 )
collision_layer = 32
collision_mask = 43
collision_mask = 3
monitorable = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="EnteringVelocityDetector"]
position = Vector2( 0.00395775, -1.07744 )

View File

@ -41,7 +41,7 @@ resource_name = "LowPassFilter"
cutoff_hz = 3000.0
[resource]
bus/0/volume_db = inf_neg
bus/0/volume_db = -10.4576
bus/1/name = "Music"
bus/1/solo = false
bus/1/mute = false

View File

@ -226,8 +226,7 @@ scroll_horizontal_enabled = false
script = ExtResource( 11 )
[node name="VBoxContainer" type="VBoxContainer" parent="MenuContainer/Panel/LevelList"]
margin_right = 123.0
margin_bottom = 102.0
margin_right = 119.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3