diff --git a/Scene/Player.tscn b/Scene/Player.tscn index b48be64..1a8222c 100644 --- a/Scene/Player.tscn +++ b/Scene/Player.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=29 format=2] +[gd_scene load_steps=30 format=2] [ext_resource path="res://Assets/spriteset test.png" type="Texture" id=1] [ext_resource path="res://Scripts/Player.gd" type="Script" id=2] [ext_resource path="res://Assets/zétoile.png" type="Texture" id=3] [ext_resource path="res://Sounds/PaintJamPickupSound.wav" type="AudioStream" id=4] +[ext_resource path="res://Assets/Patain.png" type="Texture" id=5] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 15.5015, 46.849 ) @@ -243,7 +244,7 @@ parameters/Idle/blend_position = Vector2( -1.1, 0.0314158 ) parameters/Run/blend_position = Vector2( -0.0925897, 0.517895 ) [node name="ConfusionStars" type="Node2D" parent="."] -scale = Vector2( 10, 10 ) +visible = false [node name="Path2D" type="Path2D" parent="ConfusionStars"] position = Vector2( -19.4617, -21.2425 ) @@ -275,5 +276,39 @@ scale = Vector2( 1.1136, 1.2906 ) z_index = -1 texture = ExtResource( 3 ) +[node name="Patins" type="Node2D" parent="."] +visible = false + +[node name="Path2D" type="Path2D" parent="Patins"] +position = Vector2( -19.4617, -21.2425 ) +scale = Vector2( 0.731191, 0.591658 ) +curve = SubResource( 24 ) + +[node name="PathFollow2D" type="PathFollow2D" parent="Patins/Path2D"] +position = Vector2( 42.3056, -54.7672 ) +rotation = 0.639347 +offset = 68.39 +rotate = false + +[node name="Sprite" type="Sprite" parent="Patins/Path2D/PathFollow2D"] +position = Vector2( 0.823479, -2.89215 ) +rotation = -0.639347 +scale = Vector2( 1.1136, 1.2906 ) +z_index = -1 +texture = ExtResource( 5 ) + +[node name="PathFollow2D2" type="PathFollow2D" parent="Patins/Path2D"] +position = Vector2( 3.62132, -97.5903 ) +rotation = 0.639347 +offset = 203.97 +rotate = false + +[node name="Sprite" type="Sprite" parent="Patins/Path2D/PathFollow2D2"] +position = Vector2( 0.823479, -2.89215 ) +rotation = -0.639347 +scale = Vector2( 1.1136, 1.2906 ) +z_index = -1 +texture = ExtResource( 5 ) + [node name="PickupPlayer" type="AudioStreamPlayer2D" parent="."] stream = ExtResource( 4 ) diff --git a/Scene/TestScene.tscn b/Scene/TestScene.tscn index a3220a6..6e6e368 100644 --- a/Scene/TestScene.tscn +++ b/Scene/TestScene.tscn @@ -25,10 +25,8 @@ margin_bottom = -5.0 ] instance=ExtResource( 1 )] position = Vector2( 317.194, 221.462 ) -[node name="Player2" parent="." groups=[ -"player", -] instance=ExtResource( 1 )] -position = Vector2( 1593.81, 209.193 ) +[node name="Player2" parent="." instance=ExtResource( 1 )] +position = Vector2( 1338.97, 220.441 ) [node name="CanvasLayer" parent="." instance=ExtResource( 4 )] @@ -55,9 +53,178 @@ position = Vector2( 1659.71, 594.146 ) position = Vector2( 340.904, 670.119 ) [node name="Clopinette" parent="." instance=ExtResource( 2 )] -position = Vector2( 265.689, 415.412 ) -scriptName = "res://Scripts/PaintEffects/Upscale.gd" +position = Vector2( 201.25, 408.252 ) +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" + +[node name="Label" type="Label" parent="Clopinette"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Invisible" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette3" parent="." instance=ExtResource( 2 )] +position = Vector2( 201.25, 533.362 ) +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" + +[node name="Label" type="Label" parent="Clopinette3"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Invisible" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette5" parent="." instance=ExtResource( 2 )] +position = Vector2( 201.25, 635.861 ) +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" + +[node name="Label" type="Label" parent="Clopinette5"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Invisible" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette6" parent="." instance=ExtResource( 2 )] +position = Vector2( 202.757, 735.346 ) +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" + +[node name="Label" type="Label" parent="Clopinette6"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Invisible" +__meta__ = { +"_edit_use_anchors_": false +} [node name="Clopinette2" parent="." instance=ExtResource( 2 )] -position = Vector2( 259.961, 538.562 ) +position = Vector2( 1454.23, 429.732 ) +scriptName = "res://Scripts/PaintEffects/Upscale.gd" + +[node name="Label" type="Label" parent="Clopinette2"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Gigantisme" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette10" parent="." instance=ExtResource( 2 )] +position = Vector2( 1455.74, 509.621 ) +scriptName = "res://Scripts/PaintEffects/Upscale.gd" + +[node name="Label" type="Label" parent="Clopinette10"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Gigantisme" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette11" parent="." instance=ExtResource( 2 )] +position = Vector2( 1460.26, 589.511 ) +scriptName = "res://Scripts/PaintEffects/Upscale.gd" + +[node name="Label" type="Label" parent="Clopinette11"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Gigantisme" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette12" parent="." instance=ExtResource( 2 )] +position = Vector2( 1464.78, 675.429 ) +scriptName = "res://Scripts/PaintEffects/Upscale.gd" + +[node name="Label" type="Label" parent="Clopinette12"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Gigantisme" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette4" parent="." instance=ExtResource( 2 )] +position = Vector2( 733.945, 418.276 ) scriptName = "res://Scripts/PaintEffects/Slippery.gd" + +[node name="Label" type="Label" parent="Clopinette4"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Patinage" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette7" parent="." instance=ExtResource( 2 )] +position = Vector2( 736.96, 525.298 ) +scriptName = "res://Scripts/PaintEffects/Slippery.gd" + +[node name="Label" type="Label" parent="Clopinette7"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Patinage" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette8" parent="." instance=ExtResource( 2 )] +position = Vector2( 742.99, 638.348 ) +scriptName = "res://Scripts/PaintEffects/Slippery.gd" + +[node name="Label" type="Label" parent="Clopinette8"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Patinage" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Clopinette9" parent="." instance=ExtResource( 2 )] +position = Vector2( 746.004, 716.73 ) +scriptName = "res://Scripts/PaintEffects/Slippery.gd" + +[node name="Label" type="Label" parent="Clopinette9"] +margin_left = -22.9116 +margin_top = -44.3913 +margin_right = 17.0884 +margin_bottom = -30.3913 +text = "Patinage" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="DebugLabel" type="Label" parent="."] +margin_left = 701.0 +margin_top = 52.0 +margin_right = 1289.0 +margin_bottom = 264.0 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/Scripts/PaintEffects/ConfuseDirections.gd b/Scripts/PaintEffects/ConfuseDirections.gd index d35634c..d0712fa 100644 --- a/Scripts/PaintEffects/ConfuseDirections.gd +++ b/Scripts/PaintEffects/ConfuseDirections.gd @@ -2,16 +2,13 @@ extends Node export var Duration = 7.5 -func ConfusionRoutine(player, delta): - player.get_node("ConfusionStars").visible = true - var tex = load("res://Assets/zétoile.png") - player.get_node("ConfusionStars/Path2D/PathFollow2D/Sprite").texture = tex - player.get_node("ConfusionStars/Path2D/PathFollow2D2/Sprite").texture = tex +func ConfusionRoutine(player, delta): var elapsed = delta var inputs = player.baseInputs + [] inputs.shuffle() player.inputs = inputs while elapsed < Duration: + player.get_node("ConfusionStars").visible = true elapsed += yield() player.inputs = player.baseInputs player.get_node("ConfusionStars").visible = false diff --git a/Scripts/PaintEffects/Invisibility.gd b/Scripts/PaintEffects/Invisibility.gd index 4b30005..dda449f 100644 --- a/Scripts/PaintEffects/Invisibility.gd +++ b/Scripts/PaintEffects/Invisibility.gd @@ -13,18 +13,17 @@ func AlmostFadeOutRoutine(player, delta): var elapsed = delta var origin = sprite.get_modulate().a while sprite.self_modulate.a > FadeOutValue: - var a = lerp(origin, FadeOutValue, elapsed / FadeOutTime) - sprite.self_modulate = Color(1,1,1, a) + player.ALPHA_FACTORS.append(lerp(1, FadeOutValue, elapsed / FadeOutTime)) elapsed += yield() elapsed -= FadeOutTime; while elapsed < InvisTime: + player.ALPHA_FACTORS.append(FadeOutValue) elapsed += yield() elapsed -= InvisTime; while sprite.self_modulate.a < origin: - var a = lerp(FadeOutValue, origin, elapsed / FadeInTime) - sprite.self_modulate = Color(1,1,1, a) + player.ALPHA_FACTORS.append(lerp(FadeOutValue, 1, elapsed / FadeInTime)) elapsed += yield() diff --git a/Scripts/PaintEffects/Slippery.gd b/Scripts/PaintEffects/Slippery.gd index eedf5a7..71c8639 100644 --- a/Scripts/PaintEffects/Slippery.gd +++ b/Scripts/PaintEffects/Slippery.gd @@ -4,28 +4,19 @@ extends Node export var SlipperyTime = 7.5 #How much less friction should the player have -export var FrictionFactor = 20 +export var FrictionFactor = 1.0 / 20.0 export var SpeedFactor = 3 -func SlipperyRoutine(player, delta): - var elapsed = delta - player.get_node("ConfusionStars").visible = true - var tex = load("res://Assets/Patain.png") - player.get_node("ConfusionStars/Path2D/PathFollow2D/Sprite").texture = tex - player.get_node("ConfusionStars/Path2D/PathFollow2D2/Sprite").texture = tex - var originalFriction = player.FRICTION - var originalSpeed = player.MAX_SPEED - - player.FRICTION /= FrictionFactor - player.MAX_SPEED *= SpeedFactor +func SlipperyRoutine(player, delta): + var elapsed = delta while elapsed < SlipperyTime: + player.get_node("Patins").visible = true + player.FRICTION_FACTORS.append(FrictionFactor) + player.SPEED_FACTORS.append(SpeedFactor) elapsed += yield() - player.get_node("ConfusionStars").visible = false - player.FRICTION = originalFriction - player.MAX_SPEED = originalSpeed - + player.get_node("Patins").visible = false func StartEffect(player): var rout = SlipperyRoutine(player, 0) diff --git a/Scripts/PaintEffects/Upscale.gd b/Scripts/PaintEffects/Upscale.gd index 21e89c2..4cc307c 100644 --- a/Scripts/PaintEffects/Upscale.gd +++ b/Scripts/PaintEffects/Upscale.gd @@ -9,14 +9,10 @@ export var GrowDownTime = 1.0 export var GrowUpFactor = 5 #How much slower should the player become -export var SlowFactor = 6 +export var SlowFactor = 1.0 / 6.0 func GiantRoutine(player, delta): var elapsed = delta - var fast_speed = player.MAX_SPEED - var slow_speed = player.MAX_SPEED / SlowFactor - var fast_acc = player.ACCELERATION - var slow_acc = player.ACCELERATION / SlowFactor var small_scale = player.transform.get_scale() var big_scale = player.transform.get_scale() * GrowUpFactor var sprite = player.get_node("Sprite") @@ -24,26 +20,24 @@ func GiantRoutine(player, delta): var conf = player.get_node("ConfusionStars") while elapsed < GrowUpTime: - player.MAX_SPEED = lerp(fast_speed, slow_speed, elapsed / GrowUpTime) - player.ACCELERATION = lerp(fast_acc, slow_acc, elapsed / GrowUpTime) - setScale(sprite, coll, conf, lerp(small_scale, big_scale, elapsed / GrowUpTime)) + player.SPEED_FACTORS.append(lerp(1, SlowFactor, elapsed / GrowUpTime)) + player.ACCELERATION_FACTORS.append(lerp(1, SlowFactor, elapsed / GrowUpTime)) + player.SCALE_FACTORS.append(lerp(1, GrowUpFactor, elapsed / GrowUpTime)) elapsed += yield() elapsed -= GrowUpTime; while elapsed < IsBigTime: + player.SPEED_FACTORS.append(SlowFactor) + player.ACCELERATION_FACTORS.append(SlowFactor) + player.SCALE_FACTORS.append(GrowUpFactor) elapsed += yield() elapsed -= IsBigTime; while elapsed < GrowDownTime: - player.MAX_SPEED = lerp(slow_speed, fast_speed, elapsed / GrowDownTime) - player.ACCELERATION = lerp(slow_acc, fast_acc, elapsed / GrowDownTime) - setScale(sprite, coll, conf, lerp(big_scale, small_scale, elapsed / GrowDownTime)) + player.SPEED_FACTORS.append(lerp(SlowFactor, 1, elapsed / GrowDownTime)) + player.ACCELERATION_FACTORS.append(lerp(SlowFactor, 1, elapsed / GrowDownTime)) + player.SCALE_FACTORS.append(lerp(GrowUpFactor, 1, elapsed / GrowDownTime)) elapsed += yield() - -func setScale(sprite, coll, conf, scale): - sprite.scale = scale; - coll.scale = scale; - conf.scale = scale; func StartEffect(player): var rout = GiantRoutine(player, 0) diff --git a/Scripts/Player.gd b/Scripts/Player.gd index 10b1812..488d68b 100644 --- a/Scripts/Player.gd +++ b/Scripts/Player.gd @@ -1,8 +1,20 @@ extends KinematicBody2D -var MAX_SPEED = 600 -var ACCELERATION = 1800 -var FRICTION = 2000 +const MAX_SPEED = 600 +const ACCELERATION = 1800 +const FRICTION = 2000 +var SPEED_FACTORS = [] +var ACCELERATION_FACTORS = [] +var FRICTION_FACTORS = [] +var SCALE_FACTORS = [] +var ALPHA_FACTORS = [] + +var empty_coroutine_frames = 0 + +var current_speed = MAX_SPEED +var current_acceleration = ACCELERATION +var current_friction = FRICTION + var MAX_LIFE = 30 const PICKUP_BONUS = 5 export var rota_speed = 100 @@ -15,8 +27,7 @@ var fast_trail = load("res://Scene/FastPaint.tscn") var slow_cooldown_elapsed = 5 var fast_cooldown_elapsed = 5 -var follow1; -var follow2; +var pathFollows = [] var vel = Vector2.ZERO var last_dir = Vector2.ZERO @@ -38,12 +49,19 @@ onready var animationPlayer = $AnimationPlayer onready var animationTree = $AnimationTree onready var animationState = animationTree.get("parameters/playback") onready var pickupPlayer = $PickupPlayer +onready var sprite = $Sprite +onready var coll = $CollisionShape2D +onready var conf = $ConfusionStars +onready var pati = $Patins + var healthBar = null func _ready(): - get_node("ConfusionStars").visible = false - follow1 = get_node("ConfusionStars/Path2D/PathFollow2D") - follow2 = get_node("ConfusionStars/Path2D/PathFollow2D2") + coroutines = [] + pathFollows.append(get_node("ConfusionStars/Path2D/PathFollow2D")) + pathFollows.append(get_node("ConfusionStars/Path2D/PathFollow2D2")) + pathFollows.append(get_node("Patins/Path2D/PathFollow2D")) + pathFollows.append(get_node("Patins/Path2D/PathFollow2D2")) if self.name == "Player1": healthBar = get_tree().get_nodes_in_group("healthbar")[0] elif self.name == "Player2": @@ -87,8 +105,8 @@ func launch_fast(): world.add_child(inst) func _process(delta): - follow1.set_offset(follow1.get_offset() + delta * rota_speed) - follow2.set_offset(follow2.get_offset() + delta * rota_speed) + for each in pathFollows: + each.set_offset(each.get_offset() + delta * rota_speed) if (self.name == "Player1" && Input.get_action_strength("gameplay_slow") > 0) \ || (self.name == "Player2" && Input.get_action_strength("gameplay_slow2") > 0): @@ -118,32 +136,82 @@ func get_dir(): input_vector = input_vector.normalized() return input_vector +func setScale(scale): + sprite.scale = scale; + coll.scale = scale; + conf.scale = scale; + +func setAlpha(alpha): + sprite.self_modulate = Color(1,1,1, alpha) + +func array_mul(array): + var val = 1 + for i in array: + val *= i + return val + +func array_sum(array): + var val = 0 + for i in array: + val += i + return val + +func array_specsum(array): + if array.size() == 0: + return 1 + var smaller = [] + var bigger = [] + for val in array: + smaller.append(val) if val < 1 else bigger.append(val) + smaller = array_mul(smaller) + bigger = 1 if bigger.size() == 0 else array_sum(bigger) + return smaller * bigger + +func update_current(): + current_speed = MAX_SPEED * array_specsum(SPEED_FACTORS) + current_acceleration = ACCELERATION * array_specsum(ACCELERATION_FACTORS) + current_friction = FRICTION * array_specsum(FRICTION_FACTORS) + setScale(Vector2.ONE * array_specsum(SCALE_FACTORS)) + if SCALE_FACTORS.size() > 1: + print("FACTO == " + String(SCALE_FACTORS)) + print("SCALE == " + String(Vector2.ONE * array_specsum(SCALE_FACTORS))) + setAlpha(1 * array_specsum(ALPHA_FACTORS)) + func _physics_process(delta): var input_vector = get_dir() + update_current() + if input_vector != Vector2.ZERO: last_dir = input_vector animationTree.set("parameters/Idle/blend_position", input_vector) animationTree.set("parameters/Run/blend_position", input_vector) animationState.travel("Run") - vel = vel.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta) + vel = vel.move_toward(input_vector * current_speed, current_acceleration * delta) else: animationState.travel("Idle") - vel = vel.move_toward(Vector2.ZERO, FRICTION * delta) + vel = vel.move_toward(Vector2.ZERO, current_friction * delta) vel = move_and_slide(vel) func updatePaintEffects(delta): - var updated = [] - for rout in coroutines: - if rout != null && rout.is_valid(): - var new_rout = rout.resume(delta) - if new_rout != null && new_rout.is_valid(): - updated.append(new_rout) - coroutines.remove(coroutines.find(rout)) - - for rout in updated: - coroutines.append(rout) + var updated = [] + #if coroutines.size() == 0: + # empty_coroutine_frames += 1 + #else: + # empty_coroutine_frames = 0 + + #if empty_coroutine_frames > 2 || coroutines.size() > 0: + ACCELERATION_FACTORS = [] + FRICTION_FACTORS = [] + SPEED_FACTORS = [] + SCALE_FACTORS = [] + ALPHA_FACTORS = [] + for rout in coroutines: + if rout != null && rout.is_valid(): + updated.append(rout.resume(delta)) + + coroutines = updated + [] func addCoroutine(routine): pickupPlayer.play() diff --git a/Scripts/SlowTrail.gd b/Scripts/SlowTrail.gd index 3b47e77..6e1f699 100644 --- a/Scripts/SlowTrail.gd +++ b/Scripts/SlowTrail.gd @@ -17,6 +17,7 @@ func unslow_player(victim): func _ready(): sprite = get_node("Sprite") get_node("Sprite/Area2D").connect("body_entered", self, "slow_player") + get_node("Sprite/Area2D").connect("body_entered", self, "slow_player") get_node("Sprite/Area2D").connect("body_exited", self, "unslow_player") func _process(delta):