Many added feats:
Invincibility Shader (simple) New Death Shader dissolving Pit Areas Invincibility fixes for spikes and flying laser cutters Vending Machine Better global and level stats tracking
This commit is contained in:
parent
349e8b332b
commit
4238855751
Binary file not shown.
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 327 B |
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 527 B After Width: | Height: | Size: 539 B |
@ -1,16 +1,19 @@
|
|||||||
extends Actor
|
extends Actor
|
||||||
const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
|
const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
|
||||||
export var jump_buffer_filled := false
|
|
||||||
#TODO Switch to new unique node name method for referencing
|
#TODO Switch to new unique node name method for referencing
|
||||||
onready var left_wall_raycasts = $WallRaycasts/LeftWallRaycast
|
onready var left_wall_raycasts = $WallRaycasts/LeftWallRaycast
|
||||||
onready var right_wall_raycasts = $WallRaycasts/RightWallRaycast
|
onready var right_wall_raycasts = $WallRaycasts/RightWallRaycast
|
||||||
onready var effect_player = $BlobbyActionEffects/AnimationPlayer
|
onready var effect_player = $BlobbyActionEffects/AnimationPlayer
|
||||||
|
|
||||||
|
onready var death_shader = preload("res://src/Actors/Blobby/DeathShader.tres")
|
||||||
|
onready var invincible_shader = preload("res://src/Actors/Blobby/InvincibleShader.tres")
|
||||||
|
|
||||||
onready var player_state_machine = $BlobbyStateMachine
|
onready var player_state_machine = $BlobbyStateMachine
|
||||||
onready var init_boost = player_state_machine.init_boost
|
onready var init_boost = player_state_machine.init_boost
|
||||||
onready var init_boost_type = player_state_machine.init_boost_type
|
onready var init_boost_type = player_state_machine.init_boost_type
|
||||||
|
|
||||||
|
|
||||||
|
export var jump_buffer_filled := false
|
||||||
|
|
||||||
var wall_touch_direction = 1
|
var wall_touch_direction = 1
|
||||||
|
|
||||||
@ -18,18 +21,20 @@ var stomping = false
|
|||||||
var floor_angle = Vector2(0,0)
|
var floor_angle = Vector2(0,0)
|
||||||
var previous_rotation = 0
|
var previous_rotation = 0
|
||||||
var snap_possible = true
|
var snap_possible = true
|
||||||
|
var shielded = false
|
||||||
|
|
||||||
# When the Enemy stomp AREA enters the enemy collision area -> stomp
|
# When the Enemy stomp AREA enters the enemy collision area -> stomp
|
||||||
func _on_BlobbySkin_area_entered(area: Area2D) -> void:
|
func _on_BlobbySkin_area_entered(area: Area2D) -> void:
|
||||||
if area.is_in_group("weakpoint"):
|
if area.is_in_group("harmful") && !levelState.is_dead:
|
||||||
stomping = true
|
die()
|
||||||
if area.is_in_group("harmful"):
|
if area.is_in_group("pit"):
|
||||||
|
shielded = false
|
||||||
die()
|
die()
|
||||||
|
|
||||||
|
|
||||||
# When the Enemy collision BODY enters the enemy collision area -> die
|
# When the Enemy collision BODY enters the enemy collision area -> die
|
||||||
func _on_BlobbySkin_body_entered(body: Node) -> void:
|
func _on_BlobbySkin_body_entered(body: Node) -> void:
|
||||||
if body.is_in_group("harmful"):
|
if body.is_in_group("harmful") && !levelState.is_dead:
|
||||||
die()
|
die()
|
||||||
|
|
||||||
|
|
||||||
@ -380,7 +385,7 @@ func execute_movement() -> void:
|
|||||||
center_floor_rot = floor_rot
|
center_floor_rot = floor_rot
|
||||||
# snap when on slopes
|
# snap when on slopes
|
||||||
if((abs(floor_rot) > 0.1 || abs(center_floor_rot) > 0.1) && snap_possible):
|
if((abs(floor_rot) > 0.1 || abs(center_floor_rot) > 0.1) && snap_possible):
|
||||||
velocity = move_and_slide_with_snap(velocity.rotated(floor_rot*1.1),
|
velocity = move_and_slide_with_snap(velocity.rotated(floor_rot),
|
||||||
snap, FLOOR_NORMAL, true)
|
snap, FLOOR_NORMAL, true)
|
||||||
# normal slide on flat floor
|
# normal slide on flat floor
|
||||||
else:
|
else:
|
||||||
@ -400,8 +405,8 @@ func calculate_slope_rotation(onfloor: bool) -> float:
|
|||||||
# avoid invalid angles and stay in rotation when touching ground completely
|
# avoid invalid angles and stay in rotation when touching ground completely
|
||||||
if(!(-PI/2 <= slope_angle_left && slope_angle_left <= PI/2)
|
if(!(-PI/2 <= slope_angle_left && slope_angle_left <= PI/2)
|
||||||
|| !(-PI/2 <= slope_angle_right && slope_angle_right <= PI/2)
|
|| !(-PI/2 <= slope_angle_right && slope_angle_right <= PI/2)
|
||||||
|| (abs(slope_angle_left) - abs(slope_angle_right) == 0 && onfloor)):
|
|| (is_equal_approx(abs(slope_angle_left), abs(slope_angle_right)))):
|
||||||
return previous_rotation if abs(previous_rotation) > 0.1 else 0.0
|
return previous_rotation if abs(rad2deg(previous_rotation)) > 1 && !is_equal_approx(slope_angle_left , 0) else 0.0
|
||||||
# downturn
|
# downturn
|
||||||
if(abs(slope_angle_left) > abs(slope_angle_right) && velocity.x < -10||
|
if(abs(slope_angle_left) > abs(slope_angle_right) && velocity.x < -10||
|
||||||
abs(slope_angle_right) > abs(slope_angle_left) && velocity.x > 10):
|
abs(slope_angle_right) > abs(slope_angle_left) && velocity.x > 10):
|
||||||
@ -412,18 +417,35 @@ func calculate_slope_rotation(onfloor: bool) -> float:
|
|||||||
var length_vector: Vector2 = $SlopeRaycastLeft.get_collision_point() - $SlopeRaycastRight.get_collision_point()
|
var length_vector: Vector2 = $SlopeRaycastLeft.get_collision_point() - $SlopeRaycastRight.get_collision_point()
|
||||||
angle = length_vector.angle() - PI
|
angle = length_vector.angle() - PI
|
||||||
previous_rotation = angle
|
previous_rotation = angle
|
||||||
|
if is_equal_approx(deg2rad(angle), 0):
|
||||||
|
pass
|
||||||
return angle
|
return angle
|
||||||
|
|
||||||
|
func receive_power_up(kind: String) -> void:
|
||||||
|
if kind == "shield":
|
||||||
|
$BubbleShieldViewport/IridescenceBall.visible = true
|
||||||
|
shielded = true
|
||||||
|
|
||||||
|
# TODO Maybe this should be a state in itself?
|
||||||
func die() -> void:
|
func die() -> void:
|
||||||
|
if shielded:
|
||||||
|
shielded = false
|
||||||
|
$BubbleShieldViewport/IridescenceBall.visible = false
|
||||||
|
$InvincibilityTimer.start()
|
||||||
|
$BlobbySprite.material = invincible_shader
|
||||||
|
return
|
||||||
|
elif !$InvincibilityTimer.is_stopped():
|
||||||
|
return
|
||||||
z_index = 1
|
z_index = 1
|
||||||
levelState.is_dead = true
|
$BlobbySprite.material = death_shader
|
||||||
levelState.deaths += 1
|
signalManager.emit_signal("player_died")
|
||||||
$BlobbySprite/AnimationTree.active = false
|
$BlobbySprite/AnimationTree.active = false
|
||||||
$BlobbySprite/BlobbymationPlayer.play("dying3")
|
$BlobbySprite/BlobbymationPlayer.play("dying3")
|
||||||
$BlobbySprite/BlobbymationPlayer.play("expandingDisolve")
|
$BlobbySprite/BlobbymationPlayer.play("expandingDisolve")
|
||||||
|
|
||||||
# TODO Checkpoint system
|
# TODO Checkpoint system
|
||||||
func respawn() -> void:
|
func respawn() -> void:
|
||||||
|
# Is tied to the death animation
|
||||||
get_tree().reload_current_scene()
|
get_tree().reload_current_scene()
|
||||||
|
|
||||||
# This problem stems from trying to decelerate a walk
|
# This problem stems from trying to decelerate a walk
|
||||||
@ -446,3 +468,10 @@ func _on_BlobbySkin_body_exited(body:Node) -> void:
|
|||||||
# This is for drop through platforms
|
# This is for drop through platforms
|
||||||
if body.get_collision_mask_bit(7):
|
if body.get_collision_mask_bit(7):
|
||||||
set_collision_mask_bit(7, true)
|
set_collision_mask_bit(7, true)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_InvincibilityTimer_timeout() -> void:
|
||||||
|
$BlobbySprite.material = null
|
||||||
|
for area in $BlobbySkin.get_overlapping_areas():
|
||||||
|
if area.is_in_group("harmful"):
|
||||||
|
die()
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=119 format=2]
|
[gd_scene load_steps=117 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/blobby/blobby-effects-spritesheet.png" type="Texture" id=1]
|
[ext_resource path="res://assets/blobby/blobby-effects-spritesheet.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3]
|
[ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3]
|
||||||
@ -9,39 +9,6 @@
|
|||||||
[sub_resource type="RectangleShape2D" id=2]
|
[sub_resource type="RectangleShape2D" id=2]
|
||||||
extents = Vector2( 14.9127, 5.98593 )
|
extents = Vector2( 14.9127, 5.98593 )
|
||||||
|
|
||||||
[sub_resource type="Shader" id=190]
|
|
||||||
code = "shader_type canvas_item;
|
|
||||||
|
|
||||||
float random(vec2 uv) {
|
|
||||||
return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 438.5453);
|
|
||||||
}
|
|
||||||
|
|
||||||
uniform float sensitivity : hint_range(0.0, 1.0) = 0.;
|
|
||||||
uniform float scale = 1.;
|
|
||||||
|
|
||||||
void fragment() {
|
|
||||||
// Get size of texture in pixels
|
|
||||||
float size_x = float(textureSize(TEXTURE, 0).x);
|
|
||||||
float size_y = float(textureSize(TEXTURE, 0).y);
|
|
||||||
//
|
|
||||||
vec4 pixelColor = texture(TEXTURE, UV);
|
|
||||||
// Create a new \"UV\" which remaps every UV value to a snapped pixel value
|
|
||||||
vec2 UVr = vec2(floor(UV.x*size_x)/size_x, floor(UV.y*size_y)/size_y);
|
|
||||||
// Determine whether pixel should be visible or not
|
|
||||||
float visible = step(sensitivity, random(UVr));
|
|
||||||
// Draw the pixel, or not depending on if it is visible or not
|
|
||||||
COLOR = vec4(pixelColor.r, pixelColor.g, pixelColor.b, min(visible, pixelColor.a));
|
|
||||||
}
|
|
||||||
|
|
||||||
void vertex () {
|
|
||||||
VERTEX = VERTEX * scale;
|
|
||||||
}"
|
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id=191]
|
|
||||||
shader = SubResource( 190 )
|
|
||||||
shader_param/sensitivity = 0.0
|
|
||||||
shader_param/scale = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="StreamTexture" id=62]
|
[sub_resource type="StreamTexture" id=62]
|
||||||
load_path = "res://.import/blobby-spritesheet.png-205c8efc79bec685345a637ed2dcfc9b.stex"
|
load_path = "res://.import/blobby-spritesheet.png-205c8efc79bec685345a637ed2dcfc9b.stex"
|
||||||
|
|
||||||
@ -4573,6 +4540,7 @@ tracks/2/keys = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="Blobby" type="KinematicBody2D" groups=["player"]]
|
[node name="Blobby" type="KinematicBody2D" groups=["player"]]
|
||||||
|
scale = Vector2( 0.879, 0.936 )
|
||||||
collision_mask = 248
|
collision_mask = 248
|
||||||
collision/safe_margin = 0.001
|
collision/safe_margin = 0.001
|
||||||
script = ExtResource( 4 )
|
script = ExtResource( 4 )
|
||||||
@ -4612,7 +4580,6 @@ transparent_bg = true
|
|||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="BlobbySprite" type="Sprite" parent="."]
|
[node name="BlobbySprite" type="Sprite" parent="."]
|
||||||
material = SubResource( 191 )
|
|
||||||
position = Vector2( 0, -16 )
|
position = Vector2( 0, -16 )
|
||||||
scale = Vector2( -1, 1 )
|
scale = Vector2( -1, 1 )
|
||||||
texture = SubResource( 62 )
|
texture = SubResource( 62 )
|
||||||
@ -4770,7 +4737,12 @@ one_shot = true
|
|||||||
wait_time = 0.067
|
wait_time = 0.067
|
||||||
one_shot = true
|
one_shot = true
|
||||||
|
|
||||||
|
[node name="InvincibilityTimer" type="Timer" parent="."]
|
||||||
|
wait_time = 1.618
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
[connection signal="area_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_area_entered"]
|
[connection signal="area_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_area_entered"]
|
||||||
[connection signal="body_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_body_entered"]
|
[connection signal="body_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_body_entered"]
|
||||||
[connection signal="got_grounded" from="BlobbyStateMachine" to="." method="_on_Blobby_got_grounded"]
|
[connection signal="got_grounded" from="BlobbyStateMachine" to="." method="_on_Blobby_got_grounded"]
|
||||||
[connection signal="timeout" from="BlobbyStateMachine/JumpBufferTimer" to="." method="_on_JumpBufferTimer_timeout"]
|
[connection signal="timeout" from="BlobbyStateMachine/JumpBufferTimer" to="." method="_on_JumpBufferTimer_timeout"]
|
||||||
|
[connection signal="timeout" from="InvincibilityTimer" to="." method="_on_InvincibilityTimer_timeout"]
|
||||||
|
|||||||
27
src/Actors/Blobby/BlobbyDeath.gdshader
Normal file
27
src/Actors/Blobby/BlobbyDeath.gdshader
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
float random(vec2 uv) {
|
||||||
|
return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 438.5453);
|
||||||
|
}
|
||||||
|
|
||||||
|
uniform float sensitivity : hint_range(0.0, 1.0) = 0.;
|
||||||
|
uniform float w_sens: hint_range(0., 5.) = 1.;
|
||||||
|
uniform float scale = 1.;
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
// Get size of texture in pixels
|
||||||
|
float size_x = float(textureSize(TEXTURE, 0).x);
|
||||||
|
float size_y = float(textureSize(TEXTURE, 0).y);
|
||||||
|
//
|
||||||
|
vec4 pixelColor = texture(TEXTURE, UV);
|
||||||
|
// Create a new "UV" which remaps every UV value to a snapped pixel value
|
||||||
|
vec2 UVr = vec2(floor(UV.x*size_x)/size_x, floor(UV.y*size_y)/size_y);
|
||||||
|
// Determine whether pixel should be visible or not
|
||||||
|
float visible = step(sensitivity, random(UVr));
|
||||||
|
// Draw the pixel, or not depending on if it is visible or not
|
||||||
|
COLOR = vec4(pixelColor.r + sensitivity*w_sens, pixelColor.g + sensitivity*w_sens, pixelColor.b + sensitivity*w_sens, min(visible, pixelColor.a));
|
||||||
|
}
|
||||||
|
|
||||||
|
void vertex () {
|
||||||
|
VERTEX = VERTEX * scale;
|
||||||
|
}
|
||||||
13
src/Actors/Blobby/BlobbyInvincible.gdshader
Normal file
13
src/Actors/Blobby/BlobbyInvincible.gdshader
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
void fragment(){
|
||||||
|
vec4 pixelColor = texture(TEXTURE, UV);
|
||||||
|
if (pixelColor.a > 0.1)
|
||||||
|
{
|
||||||
|
vec3 shineColor = vec3(1.,1.,1.) * max(cos(TIME*8.),0.);
|
||||||
|
COLOR = pixelColor + vec4(shineColor, 1.);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
COLOR = pixelColor
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -20,6 +20,7 @@ var state_time := 0.0
|
|||||||
# Adds the intial states
|
# Adds the intial states
|
||||||
func _ready():
|
func _ready():
|
||||||
signalManager.connect("getback_timer_up", parent, "die")
|
signalManager.connect("getback_timer_up", parent, "die")
|
||||||
|
signalManager.connect("power_up_collected", parent, "receive_power_up")
|
||||||
anim_player.play("RESET")
|
anim_player.play("RESET")
|
||||||
add_state("idle")
|
add_state("idle")
|
||||||
add_state("duck")
|
add_state("duck")
|
||||||
|
|||||||
9
src/Actors/Blobby/DeathShader.tres
Normal file
9
src/Actors/Blobby/DeathShader.tres
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://src/Actors/Blobby/BlobbyDeath.gdshader" type="Shader" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
shader = ExtResource( 1 )
|
||||||
|
shader_param/sensitivity = 0.0
|
||||||
|
shader_param/w_sens = 1.007
|
||||||
|
shader_param/scale = 1.0
|
||||||
6
src/Actors/Blobby/InvincibleShader.tres
Normal file
6
src/Actors/Blobby/InvincibleShader.tres
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://src/Actors/Blobby/BlobbyInvincible.gdshader" type="Shader" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
shader = ExtResource( 1 )
|
||||||
@ -43,43 +43,39 @@ func _ready():
|
|||||||
# TODO Test Performance
|
# TODO Test Performance
|
||||||
_update_lighting_shader()
|
_update_lighting_shader()
|
||||||
# TODO Trigger when needed
|
# TODO Trigger when needed
|
||||||
signalManager.connect("terminal_activated", self, "_on_SignalManager_terminal_activated")
|
signalManager.connect("terminal_activated", self, "_on_SignalManager_terminal_activated")
|
||||||
|
signalManager.connect("player_died", self, "_death_cam")
|
||||||
|
|
||||||
func _on_SignalManager_terminal_activated():
|
func _on_SignalManager_terminal_activated():
|
||||||
get_node("LightAnimationPlayer").play("Pulsing")
|
get_node("LightAnimationPlayer").play("Pulsing")
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if(!levelState.is_dead):
|
if(anim_player.is_playing()):
|
||||||
if(anim_player.is_playing()):
|
|
||||||
position = blobby.position
|
|
||||||
prev_pos = position
|
|
||||||
_update_lighting_shader()
|
|
||||||
return
|
|
||||||
var player_vel = (blobby.position - prev_pos)/delta
|
|
||||||
# TODO Take average of velocity here
|
|
||||||
if(abs(player_vel.x) >= blobby.max_velocity["walk"] * 0.97
|
|
||||||
&& (sign(player_vel.x) == sign(target_offset.x) || target_offset.x == 0)):
|
|
||||||
if(player_vel.x > 0):
|
|
||||||
right_move_time += delta
|
|
||||||
left_move_time = max(0, left_move_time - delta)
|
|
||||||
slow_time = max(0, slow_time - delta)
|
|
||||||
else:
|
|
||||||
left_move_time += delta
|
|
||||||
right_move_time = max(0, right_move_time - delta)
|
|
||||||
slow_time = max(0, slow_time - delta)
|
|
||||||
elif(abs(player_vel.x) <= blobby.max_velocity["walk"] * 0.9
|
|
||||||
|| sign(player_vel.x) != sign(target_offset.x) || target_offset.x == 0):
|
|
||||||
slow_time += delta
|
|
||||||
left_move_time = max(0, left_move_time - delta)
|
|
||||||
right_move_time = max(0, right_move_time - delta)
|
|
||||||
|
|
||||||
_adapt_to_movement(player_vel)
|
|
||||||
position = blobby.position
|
position = blobby.position
|
||||||
prev_pos = position
|
prev_pos = position
|
||||||
#TODO Do this via a event or let it be to track blobbies movement better
|
_update_lighting_shader()
|
||||||
else:
|
return
|
||||||
self.position = blobby.global_position
|
var player_vel = (blobby.position - prev_pos)/delta
|
||||||
_death_cam()
|
# TODO Take average of velocity here
|
||||||
|
if(abs(player_vel.x) >= blobby.max_velocity["walk"] * 0.97
|
||||||
|
&& (sign(player_vel.x) == sign(target_offset.x) || target_offset.x == 0)):
|
||||||
|
if(player_vel.x > 0):
|
||||||
|
right_move_time += delta
|
||||||
|
left_move_time = max(0, left_move_time - delta)
|
||||||
|
slow_time = max(0, slow_time - delta)
|
||||||
|
else:
|
||||||
|
left_move_time += delta
|
||||||
|
right_move_time = max(0, right_move_time - delta)
|
||||||
|
slow_time = max(0, slow_time - delta)
|
||||||
|
elif(abs(player_vel.x) <= blobby.max_velocity["walk"] * 0.9
|
||||||
|
|| sign(player_vel.x) != sign(target_offset.x) || target_offset.x == 0):
|
||||||
|
slow_time += delta
|
||||||
|
left_move_time = max(0, left_move_time - delta)
|
||||||
|
right_move_time = max(0, right_move_time - delta)
|
||||||
|
|
||||||
|
_adapt_to_movement(player_vel)
|
||||||
|
position = blobby.position
|
||||||
|
prev_pos = position
|
||||||
_update_lighting_shader()
|
_update_lighting_shader()
|
||||||
|
|
||||||
func _set_boundaries():
|
func _set_boundaries():
|
||||||
|
|||||||
@ -324,9 +324,9 @@ tracks/1/path = NodePath(".:limit_left")
|
|||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = false
|
tracks/1/enabled = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PoolRealArray( 1 ),
|
"times": PoolRealArray( 0 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1 ),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [ -10000000 ]
|
"values": [ -10000000 ]
|
||||||
@ -336,9 +336,9 @@ tracks/2/path = NodePath(".:limit_top")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
tracks/2/enabled = false
|
tracks/2/enabled = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PoolRealArray( 1 ),
|
"times": PoolRealArray( 0 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1 ),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [ -10000000 ]
|
"values": [ -10000000 ]
|
||||||
@ -348,9 +348,9 @@ tracks/3/path = NodePath(".:limit_right")
|
|||||||
tracks/3/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/3/imported = false
|
tracks/3/imported = false
|
||||||
tracks/3/enabled = false
|
tracks/3/enabled = true
|
||||||
tracks/3/keys = {
|
tracks/3/keys = {
|
||||||
"times": PoolRealArray( 1 ),
|
"times": PoolRealArray( 0 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1 ),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [ 10000000 ]
|
"values": [ 10000000 ]
|
||||||
@ -360,9 +360,9 @@ tracks/4/path = NodePath(".:limit_bottom")
|
|||||||
tracks/4/interp = 1
|
tracks/4/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/4/imported = false
|
tracks/4/imported = false
|
||||||
tracks/4/enabled = false
|
tracks/4/enabled = true
|
||||||
tracks/4/keys = {
|
tracks/4/keys = {
|
||||||
"times": PoolRealArray( 1 ),
|
"times": PoolRealArray( 0 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1 ),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [ 10000000 ]
|
"values": [ 10000000 ]
|
||||||
@ -374,7 +374,7 @@ tracks/5/loop_wrap = true
|
|||||||
tracks/5/imported = false
|
tracks/5/imported = false
|
||||||
tracks/5/enabled = false
|
tracks/5/enabled = false
|
||||||
tracks/5/keys = {
|
tracks/5/keys = {
|
||||||
"times": PoolRealArray( 1, 1.61 ),
|
"times": PoolRealArray( 0.06, 1.61 ),
|
||||||
"transitions": PoolRealArray( 1, 0.120742 ),
|
"transitions": PoolRealArray( 1, 0.120742 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ 0.0, 360.0 ]
|
"values": [ 0.0, 360.0 ]
|
||||||
@ -386,7 +386,7 @@ tracks/6/loop_wrap = true
|
|||||||
tracks/6/imported = false
|
tracks/6/imported = false
|
||||||
tracks/6/enabled = true
|
tracks/6/enabled = true
|
||||||
tracks/6/keys = {
|
tracks/6/keys = {
|
||||||
"times": PoolRealArray( 1.16 ),
|
"times": PoolRealArray( 1.1 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1 ),
|
||||||
"values": [ {
|
"values": [ {
|
||||||
"args": [ ],
|
"args": [ ],
|
||||||
@ -828,12 +828,11 @@ z_index = 3
|
|||||||
rotating = true
|
rotating = true
|
||||||
current = true
|
current = true
|
||||||
zoom = Vector2( 0.75, 0.75 )
|
zoom = Vector2( 0.75, 0.75 )
|
||||||
limit_smoothed = true
|
|
||||||
drag_margin_h_enabled = true
|
drag_margin_h_enabled = true
|
||||||
drag_margin_v_enabled = true
|
drag_margin_v_enabled = true
|
||||||
drag_margin_left = 0.05
|
drag_margin_left = 0.1
|
||||||
drag_margin_top = 0.0
|
drag_margin_top = 0.0
|
||||||
drag_margin_right = 0.05
|
drag_margin_right = 0.1
|
||||||
drag_margin_bottom = 0.25
|
drag_margin_bottom = 0.25
|
||||||
editor_draw_drag_margin = true
|
editor_draw_drag_margin = true
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
@ -863,6 +862,8 @@ motion_scale = Vector2( 0, 0 )
|
|||||||
z_index = -1
|
z_index = -1
|
||||||
texture = ExtResource( 4 )
|
texture = ExtResource( 4 )
|
||||||
|
|
||||||
|
[node name="Sprite2" type="Sprite" parent="ParallaxBackground/ParallaxLayer"]
|
||||||
|
|
||||||
[node name="ParallaxLayer2" type="ParallaxLayer" parent="ParallaxBackground"]
|
[node name="ParallaxLayer2" type="ParallaxLayer" parent="ParallaxBackground"]
|
||||||
z_index = -1
|
z_index = -1
|
||||||
motion_scale = Vector2( 0, 0 )
|
motion_scale = Vector2( 0, 0 )
|
||||||
@ -938,10 +939,10 @@ texture = ExtResource( 8 )
|
|||||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
|
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
|
||||||
visible = false
|
visible = false
|
||||||
frames = SubResource( 7 )
|
frames = SubResource( 7 )
|
||||||
frame = 5
|
frame = 7
|
||||||
playing = true
|
playing = true
|
||||||
|
|
||||||
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
|
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
|
||||||
frames = SubResource( 8 )
|
frames = SubResource( 8 )
|
||||||
frame = 10
|
frame = 12
|
||||||
playing = true
|
playing = true
|
||||||
|
|||||||
@ -3,6 +3,7 @@ extends Area2D
|
|||||||
|
|
||||||
onready var anim_player: AnimationPlayer = $AnimationPlayer
|
onready var anim_player: AnimationPlayer = $AnimationPlayer
|
||||||
onready var levelState := get_tree().root.get_child(1).get_node("%LevelState")
|
onready var levelState := get_tree().root.get_child(1).get_node("%LevelState")
|
||||||
|
onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager")
|
||||||
onready var levelName := get_tree().get_current_scene().get_name()
|
onready var levelName := get_tree().get_current_scene().get_name()
|
||||||
|
|
||||||
export var next_scene: PackedScene
|
export var next_scene: PackedScene
|
||||||
@ -11,24 +12,9 @@ export var next_scene: PackedScene
|
|||||||
func _get_configuration_warning() -> String:
|
func _get_configuration_warning() -> String:
|
||||||
return "The next scene property can't be empty" if not next_scene else ""
|
return "The next scene property can't be empty" if not next_scene else ""
|
||||||
|
|
||||||
func update_level_achievements() -> void:
|
func level_completion() -> void:
|
||||||
var progress_dict : Dictionary = GlobalState.progress_dict
|
signalManager.emit_signal("level_completed")
|
||||||
var levelProgress : Dictionary = {}
|
|
||||||
|
|
||||||
levelProgress["currency"] = levelState.currency
|
|
||||||
levelProgress["kills"] = levelState.kills
|
|
||||||
levelProgress["deaths"] = levelState.deaths
|
|
||||||
levelProgress["frees"] = levelState.frees
|
|
||||||
|
|
||||||
if !progress_dict.has(levelName):
|
|
||||||
progress_dict[levelName] = levelProgress
|
|
||||||
else:
|
|
||||||
progress_dict[levelName]["currency"] = progress_dict[levelName]["currency"] + levelState.currency
|
|
||||||
progress_dict[levelName]["kills"] = progress_dict[levelName]["kills"] + levelState.kills
|
|
||||||
progress_dict[levelName]["deaths"] = progress_dict[levelName]["deaths"] + levelState.deaths
|
|
||||||
progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + levelState.frees
|
|
||||||
|
|
||||||
GlobalState.set_progress(progress_dict)
|
|
||||||
|
|
||||||
func teleport() -> void:
|
func teleport() -> void:
|
||||||
anim_player.play("fade_in")
|
anim_player.play("fade_in")
|
||||||
@ -37,5 +23,5 @@ func teleport() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_body_entered(_body: Node) -> void:
|
func _on_body_entered(_body: Node) -> void:
|
||||||
update_level_achievements()
|
level_completion()
|
||||||
teleport()
|
teleport()
|
||||||
|
|||||||
@ -17,7 +17,8 @@ func _process(delta):
|
|||||||
|
|
||||||
func selfActivate():
|
func selfActivate():
|
||||||
#TODO Is a event for blobby himself
|
#TODO Is a event for blobby himself
|
||||||
blobby.get_node("BubbleShieldViewport/IridescenceBall").visible = true
|
#blobby.get_node("BubbleShieldViewport/IridescenceBall").visible = true
|
||||||
|
signalManager.emit_signal("power_up_collected", "shield")
|
||||||
#TODO dis importante
|
#TODO dis importante
|
||||||
activatorArea.set_deferred("monitoring", false)
|
activatorArea.set_deferred("monitoring", false)
|
||||||
|
|
||||||
|
|||||||
@ -5,27 +5,28 @@ onready var blobby = get_node("%Blobby")
|
|||||||
var last_distance: Vector2 = Vector2(100,100)
|
var last_distance: Vector2 = Vector2(100,100)
|
||||||
|
|
||||||
# TODO Incorporate other enteties and highlight mass differences
|
# TODO Incorporate other enteties and highlight mass differences
|
||||||
var time = 0
|
var time := 0.0
|
||||||
var radius = 15
|
var radius = 15
|
||||||
export var v_radius = 15
|
export var v_radius = 15
|
||||||
export var draft_radius = 20
|
export var draft_radius = 20
|
||||||
export var interact_power = 0.04
|
export var interact_power = 0.04
|
||||||
var rand = rand_range(1,1.2)
|
var rand = rand_range(1,1.3)
|
||||||
var displacement_coeff: Vector2 = Vector2(1.0,0)
|
var displacement_coeff: Vector2 = Vector2(1.0,0)
|
||||||
var saved_displacement
|
var saved_displacement
|
||||||
var is_idle_swinging
|
var is_idle_swinging
|
||||||
var start_swing_time
|
var start_swing_time := 0.0
|
||||||
var begin_idle
|
var begin_idle
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
# TODO This could probably fuck something up later? For other randomness based events
|
# TODO This could probably fuck something up later? For other randomness based events
|
||||||
randomize()
|
randomize()
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
var distance: float = abs(global_position.x - blobby.global_position.x + 6)
|
var distance: float = abs(global_position.x - blobby.global_position.x + 6)
|
||||||
var v_distance: float = abs(global_position.y - blobby.global_position.y + 11)
|
var v_distance: float = abs(global_position.y - blobby.global_position.y + 11)
|
||||||
|
#Velocity relative to the grass, increasing distance is - velocity
|
||||||
var blobby_vel = (last_distance.x - distance)/delta
|
var blobby_vel = (last_distance.x - distance)/delta
|
||||||
var blobby_v_vel = (last_distance.y - v_distance)/delta
|
var blobby_vert_vel = (last_distance.y - v_distance)/delta
|
||||||
var direction: Vector2 = Vector2(sign(global_position.x - blobby.global_position.x + 6),0)
|
var direction: Vector2 = Vector2(sign(global_position.x - blobby.global_position.x + 6),0)
|
||||||
# TODO This only gets more and more unreadable *facepalm*
|
# TODO This only gets more and more unreadable *facepalm*
|
||||||
var power = smoothstep(radius, 0, distance)
|
var power = smoothstep(radius, 0, distance)
|
||||||
@ -39,15 +40,15 @@ func _physics_process(delta: float) -> void:
|
|||||||
$Timer.stop()
|
$Timer.stop()
|
||||||
|
|
||||||
# TODO v_distance could be a problem for upside down stuff
|
# TODO v_distance could be a problem for upside down stuff
|
||||||
elif (distance < radius && distance > 1 && blobby_vel != 0 && v_distance < 14 && blobby_v_vel ==0):
|
elif (distance < radius && distance > 1 && abs(blobby_vel) > 0.1 && v_distance < 14 && abs(blobby_vert_vel) < 0.1):
|
||||||
displacement_coeff += direction * power/radius * 0.3 * blobby_vel * interact_power
|
displacement_coeff += direction * power/radius * 0.3 * blobby_vel * interact_power
|
||||||
displacement_coeff += direction * power * 2 * interact_power
|
displacement_coeff += direction * power * 2 * interact_power
|
||||||
saved_displacement = displacement_coeff.x
|
saved_displacement = displacement_coeff.x
|
||||||
is_idle_swinging = false
|
is_idle_swinging = false
|
||||||
$Timer.stop()
|
$Timer.stop()
|
||||||
|
|
||||||
elif (v_distance < v_radius && distance < radius && blobby_v_vel != 0):
|
elif (v_distance < v_radius && distance < radius && abs(blobby_vert_vel) > 0.1):
|
||||||
displacement_coeff += direction * v_power/v_radius * blobby_v_vel * interact_power
|
displacement_coeff += direction * v_power/v_radius * blobby_vert_vel * interact_power
|
||||||
saved_displacement = displacement_coeff.x
|
saved_displacement = displacement_coeff.x
|
||||||
is_idle_swinging = false
|
is_idle_swinging = false
|
||||||
$Timer.stop()
|
$Timer.stop()
|
||||||
|
|||||||
@ -1,22 +1,55 @@
|
|||||||
[gd_scene load_steps=9 format=2]
|
[gd_scene load_steps=16 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/environment/decor/straight_straw.png" type="Texture" id=1]
|
[ext_resource path="res://assets/environment/decor/straight_straw.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Environment/ShaderGrass.gd" type="Script" id=2]
|
[ext_resource path="res://src/Environment/ShaderGrass.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://src/Environment/ShaderGrass.tres" type="Material" id=3]
|
|
||||||
[ext_resource path="res://assets/environment/decor/short_straw.png" type="Texture" id=4]
|
[ext_resource path="res://assets/environment/decor/short_straw.png" type="Texture" id=4]
|
||||||
[ext_resource path="res://assets/environment/decor/bent_straw.png" type="Texture" id=5]
|
[ext_resource path="res://assets/environment/decor/bent_straw.png" type="Texture" id=5]
|
||||||
[ext_resource path="res://assets/environment/decor/bent_straw_2.png" type="Texture" id=6]
|
[ext_resource path="res://assets/environment/decor/bent_straw_2.png" type="Texture" id=6]
|
||||||
[ext_resource path="res://assets/environment/decor/bent_straw_leftt.png" type="Texture" id=7]
|
[ext_resource path="res://assets/environment/decor/bent_straw_leftt.png" type="Texture" id=7]
|
||||||
[ext_resource path="res://assets/environment/decor/bent_straw_left_2.png" type="Texture" id=8]
|
[ext_resource path="res://assets/environment/decor/bent_straw_left_2.png" type="Texture" id=8]
|
||||||
|
[ext_resource path="res://src/Environment/ShaderGrass.gdshader" type="Shader" id=9]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=1]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=2]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=3]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=4]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=5]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=6]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=7]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource( 9 )
|
||||||
|
shader_param/displacement_coefficient_x = 0.0
|
||||||
|
|
||||||
[node name="ShaderGrass" type="Node2D"]
|
[node name="ShaderGrass" type="Node2D"]
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
v_radius = 20
|
interact_power = 0.055
|
||||||
draft_radius = 30
|
|
||||||
interact_power = 0.06
|
|
||||||
|
|
||||||
[node name="StraightStraw" type="Polygon2D" parent="."]
|
[node name="StraightStraw" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 1 )
|
||||||
position = Vector2( -2, 0 )
|
position = Vector2( -2, 0 )
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
polygon = PoolVector2Array( 4.9375, 4.5625, 5, 1.6875, 8.125, 1.6875, 8.0625, 4.875, 8.0625, 8.4375, 8.125, 12.125, 4.8125, 12.0625, 4.8125, 8.5 )
|
polygon = PoolVector2Array( 4.9375, 4.5625, 5, 1.6875, 8.125, 1.6875, 8.0625, 4.875, 8.0625, 8.4375, 8.125, 12.125, 4.8125, 12.0625, 4.8125, 8.5 )
|
||||||
@ -24,7 +57,7 @@ uv = PoolVector2Array( 4.9375, 4.5625, 5, 1.6875, 8.125, 1.6875, 8.0625, 4.875,
|
|||||||
polygons = [ PoolIntArray( 1, 3, 0 ), PoolIntArray( 2, 3, 1 ), PoolIntArray( 0, 4, 3 ), PoolIntArray( 0, 7, 4 ), PoolIntArray( 6, 7, 5 ), PoolIntArray( 4, 5, 7 ) ]
|
polygons = [ PoolIntArray( 1, 3, 0 ), PoolIntArray( 2, 3, 1 ), PoolIntArray( 0, 4, 3 ), PoolIntArray( 0, 7, 4 ), PoolIntArray( 6, 7, 5 ), PoolIntArray( 4, 5, 7 ) ]
|
||||||
|
|
||||||
[node name="ShortStraw" type="Polygon2D" parent="."]
|
[node name="ShortStraw" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 2 )
|
||||||
position = Vector2( -4, -1 )
|
position = Vector2( -4, -1 )
|
||||||
texture = ExtResource( 4 )
|
texture = ExtResource( 4 )
|
||||||
polygon = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.1875, 6, 8.0625, 8.0625, 8.0625, 10.1875, 8.0625, 12.125 )
|
polygon = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.1875, 6, 8.0625, 8.0625, 8.0625, 10.1875, 8.0625, 12.125 )
|
||||||
@ -32,7 +65,7 @@ uv = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.
|
|||||||
polygons = [ PoolIntArray( 3, 5, 4 ), PoolIntArray( 2, 3, 5 ), PoolIntArray( 1, 2, 6 ), PoolIntArray( 5, 6, 2 ), PoolIntArray( 6, 0, 7 ), PoolIntArray( 6, 1, 0 ) ]
|
polygons = [ PoolIntArray( 3, 5, 4 ), PoolIntArray( 2, 3, 5 ), PoolIntArray( 1, 2, 6 ), PoolIntArray( 5, 6, 2 ), PoolIntArray( 6, 0, 7 ), PoolIntArray( 6, 1, 0 ) ]
|
||||||
|
|
||||||
[node name="ShortStraw2" type="Polygon2D" parent="."]
|
[node name="ShortStraw2" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 3 )
|
||||||
position = Vector2( 1, -2 )
|
position = Vector2( 1, -2 )
|
||||||
texture = ExtResource( 4 )
|
texture = ExtResource( 4 )
|
||||||
polygon = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.1875, 6, 8.0625, 8.0625, 8.0625, 10.1875, 8.0625, 12.125 )
|
polygon = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.1875, 6, 8.0625, 8.0625, 8.0625, 10.1875, 8.0625, 12.125 )
|
||||||
@ -40,7 +73,7 @@ uv = PoolVector2Array( 5, 12.0625, 4.9375, 10.0625, 4.875, 8, 5.0625, 5.9375, 8.
|
|||||||
polygons = [ PoolIntArray( 3, 5, 4 ), PoolIntArray( 2, 3, 5 ), PoolIntArray( 1, 2, 6 ), PoolIntArray( 5, 6, 2 ), PoolIntArray( 6, 0, 7 ), PoolIntArray( 6, 1, 0 ) ]
|
polygons = [ PoolIntArray( 3, 5, 4 ), PoolIntArray( 2, 3, 5 ), PoolIntArray( 1, 2, 6 ), PoolIntArray( 5, 6, 2 ), PoolIntArray( 6, 0, 7 ), PoolIntArray( 6, 1, 0 ) ]
|
||||||
|
|
||||||
[node name="BentStrawRight" type="Polygon2D" parent="."]
|
[node name="BentStrawRight" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 4 )
|
||||||
position = Vector2( 5, 0 )
|
position = Vector2( 5, 0 )
|
||||||
texture = ExtResource( 5 )
|
texture = ExtResource( 5 )
|
||||||
polygon = PoolVector2Array( 1, 12, 0.9375, 9.0625, 2.75, 7.0625, 5, 5.75, 9.1875, 5.75, 9.125, 9.1875, 6, 10, 5.0625, 12.0625 )
|
polygon = PoolVector2Array( 1, 12, 0.9375, 9.0625, 2.75, 7.0625, 5, 5.75, 9.1875, 5.75, 9.125, 9.1875, 6, 10, 5.0625, 12.0625 )
|
||||||
@ -48,14 +81,14 @@ uv = PoolVector2Array( 1, 12, 0.9375, 9.0625, 2.75, 7.0625, 5, 5.75, 9.1875, 5.7
|
|||||||
polygons = [ PoolIntArray( 1, 7, 0 ), PoolIntArray( 2, 7, 1 ), PoolIntArray( 6, 7, 2 ), PoolIntArray( 6, 3, 2 ), PoolIntArray( 3, 5, 6 ), PoolIntArray( 3, 4, 5 ) ]
|
polygons = [ PoolIntArray( 1, 7, 0 ), PoolIntArray( 2, 7, 1 ), PoolIntArray( 6, 7, 2 ), PoolIntArray( 6, 3, 2 ), PoolIntArray( 3, 5, 6 ), PoolIntArray( 3, 4, 5 ) ]
|
||||||
|
|
||||||
[node name="BentStraw2Right" type="Polygon2D" parent="."]
|
[node name="BentStraw2Right" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 5 )
|
||||||
position = Vector2( 4, 0 )
|
position = Vector2( 4, 0 )
|
||||||
texture = ExtResource( 6 )
|
texture = ExtResource( 6 )
|
||||||
polygon = PoolVector2Array( 0.875, 12, 0.875, 7.9375, 2.13287, 6.45765, 3, 5.4375, 4.625, 3.6875, 6.9375, 1.6875, 9.375, 4.25, 7, 6.25, 5.5625, 7.5, 4.75, 8.25, 4.6875, 11.875 )
|
polygon = PoolVector2Array( 0.875, 12, 0.875, 7.9375, 2.13287, 6.45765, 3, 5.4375, 4.625, 3.6875, 6.9375, 1.6875, 9.375, 4.25, 7, 6.25, 5.5625, 7.5, 4.75, 8.25, 4.6875, 11.875 )
|
||||||
uv = PoolVector2Array( 0.875, 12, 0.875, 7.9375, 3, 5.4375, 4.625, 3.6875, 6.9375, 1.6875, 9.375, 4.25, 7, 6.25, 5.5625, 7.5, 4.75, 8.25, 4.6875, 11.8125 )
|
uv = PoolVector2Array( 0.875, 12, 0.875, 7.9375, 3, 5.4375, 4.625, 3.6875, 6.9375, 1.6875, 9.375, 4.25, 7, 6.25, 5.5625, 7.5, 4.75, 8.25, 4.6875, 11.8125 )
|
||||||
|
|
||||||
[node name="BentStrawLeft" type="Polygon2D" parent="."]
|
[node name="BentStrawLeft" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 6 )
|
||||||
position = Vector2( -6, 0 )
|
position = Vector2( -6, 0 )
|
||||||
texture = ExtResource( 7 )
|
texture = ExtResource( 7 )
|
||||||
polygon = PoolVector2Array( 5.0625, 11.9375, 3.9375, 10, 1, 8.9375, 0.875, 5.8125, 5.1875, 5.6875, 6.8125, 7.25, 8.9375, 8.6875, 8.875, 11.9375 )
|
polygon = PoolVector2Array( 5.0625, 11.9375, 3.9375, 10, 1, 8.9375, 0.875, 5.8125, 5.1875, 5.6875, 6.8125, 7.25, 8.9375, 8.6875, 8.875, 11.9375 )
|
||||||
@ -63,7 +96,7 @@ uv = PoolVector2Array( 5.0625, 11.9375, 3.9375, 10, 1, 8.9375, 0.875, 5.8125, 5.
|
|||||||
polygons = [ PoolIntArray( 0, 6, 7 ), PoolIntArray( 1, 6, 0 ), PoolIntArray( 1, 5, 6 ), PoolIntArray( 1, 4, 5 ), PoolIntArray( 2, 1, 4 ), PoolIntArray( 3, 4, 2 ) ]
|
polygons = [ PoolIntArray( 0, 6, 7 ), PoolIntArray( 1, 6, 0 ), PoolIntArray( 1, 5, 6 ), PoolIntArray( 1, 4, 5 ), PoolIntArray( 2, 1, 4 ), PoolIntArray( 3, 4, 2 ) ]
|
||||||
|
|
||||||
[node name="BentStraw2Left" type="Polygon2D" parent="."]
|
[node name="BentStraw2Left" type="Polygon2D" parent="."]
|
||||||
material = ExtResource( 3 )
|
material = SubResource( 7 )
|
||||||
position = Vector2( -4, 0 )
|
position = Vector2( -4, 0 )
|
||||||
texture = ExtResource( 8 )
|
texture = ExtResource( 8 )
|
||||||
polygon = PoolVector2Array( 4.9375, 11.875, 5, 8.8125, 2.8125, 7, -0.375, 4.0625, 2.25, 1.9375, 4.75, 4.625, 8.0625, 7.9375, 8, 12.0625 )
|
polygon = PoolVector2Array( 4.9375, 11.875, 5, 8.8125, 2.8125, 7, -0.375, 4.0625, 2.25, 1.9375, 4.75, 4.625, 8.0625, 7.9375, 8, 12.0625 )
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -89,10 +89,10 @@ wait_time = 20.0
|
|||||||
[node name="BlobbyCam" parent="." instance=ExtResource( 12 )]
|
[node name="BlobbyCam" parent="." instance=ExtResource( 12 )]
|
||||||
|
|
||||||
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
|
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
|
||||||
frame = 8
|
frame = 6
|
||||||
|
|
||||||
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
|
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
|
||||||
frame = 13
|
frame = 11
|
||||||
|
|
||||||
[node name="Blobby" parent="." instance=ExtResource( 2 )]
|
[node name="Blobby" parent="." instance=ExtResource( 2 )]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
@ -96,7 +96,6 @@ margin_bottom = 0.456848
|
|||||||
[node name="Blobby" parent="." instance=ExtResource( 4 )]
|
[node name="Blobby" parent="." instance=ExtResource( 4 )]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
position = Vector2( 59, 112 )
|
position = Vector2( 59, 112 )
|
||||||
scale = Vector2( 0.878906, 0.936025 )
|
|
||||||
|
|
||||||
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 4 )
|
parameters/playback = SubResource( 4 )
|
||||||
@ -141,7 +140,7 @@ shape = SubResource( 3 )
|
|||||||
position = Vector2( 0, 1.5 )
|
position = Vector2( 0, 1.5 )
|
||||||
z_index = -1
|
z_index = -1
|
||||||
frames = SubResource( 5 )
|
frames = SubResource( 5 )
|
||||||
frame = 24
|
frame = 20
|
||||||
playing = true
|
playing = true
|
||||||
|
|
||||||
[node name="Terminal" parent="." instance=ExtResource( 47 )]
|
[node name="Terminal" parent="." instance=ExtResource( 47 )]
|
||||||
@ -168,6 +167,7 @@ tile_data = PoolIntArray( 851970, 1, 0, 851971, 0, 0, 851973, 0, 0, 851975, 2, 0
|
|||||||
|
|
||||||
[node name="Flyer" parent="." instance=ExtResource( 41 )]
|
[node name="Flyer" parent="." instance=ExtResource( 41 )]
|
||||||
position = Vector2( 496, 152 )
|
position = Vector2( 496, 152 )
|
||||||
|
scale = Vector2( 0.879, 0.936 )
|
||||||
max_speed = 120
|
max_speed = 120
|
||||||
|
|
||||||
[node name="StateLabel" parent="Flyer" index="1"]
|
[node name="StateLabel" parent="Flyer" index="1"]
|
||||||
@ -180,6 +180,9 @@ parameters/playback = SubResource( 6 )
|
|||||||
position = Vector2( 776, 320 )
|
position = Vector2( 776, 320 )
|
||||||
movement_radius = 4
|
movement_radius = 4
|
||||||
|
|
||||||
|
[node name="WhatAreFrog" parent="BoundFrog" index="0"]
|
||||||
|
scale = Vector2( 0.879, 0.936 )
|
||||||
|
|
||||||
[node name="FlyingPlatformClean" parent="." instance=ExtResource( 43 )]
|
[node name="FlyingPlatformClean" parent="." instance=ExtResource( 43 )]
|
||||||
position = Vector2( 496, 220 )
|
position = Vector2( 496, 220 )
|
||||||
|
|
||||||
@ -202,5 +205,7 @@ visible = false
|
|||||||
[editable path="UserInterface/HUD"]
|
[editable path="UserInterface/HUD"]
|
||||||
[editable path="Blobby"]
|
[editable path="Blobby"]
|
||||||
[editable path="Flyer"]
|
[editable path="Flyer"]
|
||||||
|
[editable path="BoundFrog"]
|
||||||
|
[editable path="BoundFrog/RopeAnchor"]
|
||||||
[editable path="FlyingPlatformClean"]
|
[editable path="FlyingPlatformClean"]
|
||||||
[editable path="WhyButton"]
|
[editable path="WhyButton"]
|
||||||
|
|||||||
357
src/Levels/First Level.tscn
Normal file
357
src/Levels/First Level.tscn
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -407,7 +407,7 @@ position = Vector2( 0, -2.52127 )
|
|||||||
scale = Vector2( 0.149428, 0.151196 )
|
scale = Vector2( 0.149428, 0.151196 )
|
||||||
frames = SubResource( 4 )
|
frames = SubResource( 4 )
|
||||||
animation = "rotate"
|
animation = "rotate"
|
||||||
frame = 42
|
frame = 126
|
||||||
playing = true
|
playing = true
|
||||||
|
|
||||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||||
|
|||||||
13
src/ObstacleObjects/PitArea.tscn
Normal file
13
src/ObstacleObjects/PitArea.tscn
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
|
extents = Vector2( 860.5, 11 )
|
||||||
|
|
||||||
|
[node name="PitArea" type="Node2D"]
|
||||||
|
|
||||||
|
[node name="Area2D" type="Area2D" parent="." groups=["pit"]]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 3
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||||
|
shape = SubResource( 1 )
|
||||||
@ -1,11 +1,19 @@
|
|||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://src/ObstacleObjects/DangerousBlockArea.tscn" type="PackedScene" id=1]
|
[ext_resource path="res://src/ObstacleObjects/DangerousBlockArea.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://assets/obstacle object/speiku/speiku16.png" type="Texture" id=23]
|
[ext_resource path="res://assets/obstacle object/speiku/speiku16.png" type="Texture" id=23]
|
||||||
|
|
||||||
[node name="Spikes" type="Node2D"]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
|
extents = Vector2( 11, 11 )
|
||||||
|
|
||||||
|
[node name="Spikes" type="StaticBody2D"]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
[node name="DangerousBlockArea" parent="." instance=ExtResource( 1 )]
|
[node name="DangerousBlockArea" parent="." instance=ExtResource( 1 )]
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
texture = ExtResource( 23 )
|
texture = ExtResource( 23 )
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|||||||
@ -9,6 +9,7 @@ onready var global_facing: Vector2 = local_facing.rotated(transform.get_rotation
|
|||||||
onready var slide_friction = 1.5
|
onready var slide_friction = 1.5
|
||||||
|
|
||||||
var flyoff_triggered = false
|
var flyoff_triggered = false
|
||||||
|
var has_hit_player = false
|
||||||
var velocity = 1
|
var velocity = 1
|
||||||
var max_velocity = 200
|
var max_velocity = 200
|
||||||
var acceleration_force = 1200
|
var acceleration_force = 1200
|
||||||
@ -24,6 +25,9 @@ func _ready() -> void:
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if !flyoff_triggered:
|
if !flyoff_triggered:
|
||||||
for ray in trigger_rays:
|
for ray in trigger_rays:
|
||||||
|
# When player has been hit on the way
|
||||||
|
if (has_hit_player && body.position.x > 0):
|
||||||
|
break
|
||||||
if ray.is_colliding():
|
if ray.is_colliding():
|
||||||
var collider = ray.get_collider()
|
var collider = ray.get_collider()
|
||||||
if collider.is_in_group("player"):
|
if collider.is_in_group("player"):
|
||||||
@ -33,7 +37,9 @@ func _physics_process(delta: float) -> void:
|
|||||||
if body.position.x > 0:
|
if body.position.x > 0:
|
||||||
velocity=1
|
velocity=1
|
||||||
body.position.x += (max_velocity/3)*-1*delta
|
body.position.x += (max_velocity/3)*-1*delta
|
||||||
else:
|
elif body.position.x == 0:
|
||||||
|
has_hit_player = false
|
||||||
|
if flyoff_triggered:
|
||||||
velocity = PhysicsFunc.two_step_euler(
|
velocity = PhysicsFunc.two_step_euler(
|
||||||
velocity, acceleration_force, mass, delta
|
velocity, acceleration_force, mass, delta
|
||||||
)
|
)
|
||||||
@ -42,4 +48,6 @@ func _physics_process(delta: float) -> void:
|
|||||||
if collision != null:
|
if collision != null:
|
||||||
if !collision.collider.is_in_group("player"):
|
if !collision.collider.is_in_group("player"):
|
||||||
body.set("motion/sync_to_physics", true)
|
body.set("motion/sync_to_physics", true)
|
||||||
flyoff_triggered = false
|
else:
|
||||||
|
has_hit_player = true
|
||||||
|
flyoff_triggered = false
|
||||||
|
|||||||
@ -45,6 +45,8 @@ margin_top = -59.0
|
|||||||
margin_right = 352.0
|
margin_right = 352.0
|
||||||
margin_bottom = 11.0
|
margin_bottom = 11.0
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
|
text = "You saved up %s orbicles.
|
||||||
|
You died %s times, destroyed %s and freed %s beings."
|
||||||
align = 1
|
align = 1
|
||||||
script = ExtResource( 8 )
|
script = ExtResource( 8 )
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,8 @@ onready var signalManager := $"../%SignalManager"
|
|||||||
var paused := false setget set_paused
|
var paused := false setget set_paused
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
signalManager.connect("player_died", self, "_on_GlobalState_player_died")
|
#signalManager.connect("player_died", self, "_on_GlobalState_player_died")
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _on_GlobalState_player_died() -> void:
|
func _on_GlobalState_player_died() -> void:
|
||||||
|
|||||||
@ -11,10 +11,15 @@ var frees: = 0 setget set_frees
|
|||||||
# TODO Rename probs
|
# TODO Rename probs
|
||||||
var is_dead: = false setget set_dead
|
var is_dead: = false setget set_dead
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
signalManager.connect("level_completed", self, "_on_level_completed")
|
||||||
|
signalManager.connect("player_died", self, "player_dying")
|
||||||
|
|
||||||
func reset() -> void:
|
func reset() -> void:
|
||||||
deaths = 0
|
deaths = 0
|
||||||
kills = 0
|
kills = 0
|
||||||
currency = 0
|
currency = 0
|
||||||
|
frees = 0
|
||||||
|
|
||||||
func set_currency(value: int) -> void:
|
func set_currency(value: int) -> void:
|
||||||
currency = value
|
currency = value
|
||||||
@ -34,7 +39,11 @@ func set_frees(value: int) -> void:
|
|||||||
func set_dead(value: bool) -> void:
|
func set_dead(value: bool) -> void:
|
||||||
is_dead = value
|
is_dead = value
|
||||||
|
|
||||||
func _on_Level_tree_exiting() -> void:
|
func _on_level_completed():
|
||||||
|
update_global_state()
|
||||||
|
reset()
|
||||||
|
|
||||||
|
func update_global_state() -> void:
|
||||||
var progress_dict : Dictionary = GlobalState.progress_dict
|
var progress_dict : Dictionary = GlobalState.progress_dict
|
||||||
var levelProgress : Dictionary = {}
|
var levelProgress : Dictionary = {}
|
||||||
|
|
||||||
@ -52,4 +61,12 @@ func _on_Level_tree_exiting() -> void:
|
|||||||
progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + frees
|
progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + frees
|
||||||
|
|
||||||
GlobalState.set_progress(progress_dict)
|
GlobalState.set_progress(progress_dict)
|
||||||
pass # Replace with function body.
|
|
||||||
|
func player_dying() -> void:
|
||||||
|
currency = 0
|
||||||
|
kills = 0
|
||||||
|
frees = 0
|
||||||
|
is_dead = true
|
||||||
|
deaths += 1
|
||||||
|
update_global_state()
|
||||||
|
deaths = 0
|
||||||
|
|||||||
@ -6,6 +6,8 @@ signal currency_updated()
|
|||||||
signal kills_updated()
|
signal kills_updated()
|
||||||
signal frees_updated()
|
signal frees_updated()
|
||||||
signal player_died()
|
signal player_died()
|
||||||
|
signal level_completed()
|
||||||
|
signal power_up_collected(kind)
|
||||||
|
|
||||||
func _on_Timer_timeout() -> void:
|
func _on_Timer_timeout() -> void:
|
||||||
emit_signal("getback_timer_up")
|
emit_signal("getback_timer_up")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user