From fe3e7f712e5e77622ccf648da934a53adf3875d2 Mon Sep 17 00:00:00 2001 From: Hurlu Date: Sat, 4 Apr 2020 14:18:27 +0200 Subject: [PATCH 1/2] Working on PaintEffects --- Scene/Clopinette.tscn | 2 +- Scene/Player.tscn | 2 +- Scene/TestScene.tscn | 13 +------ Scripts/Clopinette.gd | 12 ++++-- Scripts/PaintEffects/Invisibility.gd | 35 ++++++++++++++++++ project.godot | 55 ---------------------------- 6 files changed, 47 insertions(+), 72 deletions(-) create mode 100644 Scripts/PaintEffects/Invisibility.gd diff --git a/Scene/Clopinette.tscn b/Scene/Clopinette.tscn index 9d75f9e..b9d0453 100644 --- a/Scene/Clopinette.tscn +++ b/Scene/Clopinette.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=2] -[ext_resource path="res://Placeholder.png" type="Texture" id=1] +[ext_resource path="res://Assets/Placeholder.png" type="Texture" id=1] [ext_resource path="res://Scripts/Clopinette.gd" type="Script" id=2] [node name="Clopinette" type="Node2D"] diff --git a/Scene/Player.tscn b/Scene/Player.tscn index cdf9e85..3040ff7 100644 --- a/Scene/Player.tscn +++ b/Scene/Player.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://Placeholder.png" type="Texture" id=1] +[ext_resource path="res://Assets/Placeholder.png" type="Texture" id=1] [ext_resource path="res://Scripts/Player.gd" type="Script" id=2] [sub_resource type="RectangleShape2D" id=1] diff --git a/Scene/TestScene.tscn b/Scene/TestScene.tscn index afd1590..3859147 100644 --- a/Scene/TestScene.tscn +++ b/Scene/TestScene.tscn @@ -5,18 +5,9 @@ [node name="World" type="Node2D"] -[node name="KinematicBody2D" parent="." instance=ExtResource( 1 )] +[node name="Player1" parent="." instance=ExtResource( 1 )] position = Vector2( 121.087, 85.6409 ) -[node name="Clopinette" parent="." instance=ExtResource( 2 )] -position = Vector2( 128.363, 287.853 ) - -[node name="Clopinette2" parent="." instance=ExtResource( 2 )] -position = Vector2( 419.87, 371.785 ) - -[node name="Clopinette3" parent="." instance=ExtResource( 2 )] -position = Vector2( 364.818, 208.433 ) - [node name="Clopinette4" parent="." instance=ExtResource( 2 )] position = Vector2( 476.728, 110.06 ) - +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" diff --git a/Scripts/Clopinette.gd b/Scripts/Clopinette.gd index 4b2418b..8beb3c3 100644 --- a/Scripts/Clopinette.gd +++ b/Scripts/Clopinette.gd @@ -1,16 +1,20 @@ extends Node2D -var sprite; -var area; -var collider; +var sprite +var area +var collider +var loadedScript + +export(String, FILE, "*.gd") var scriptName # Called when the node enters the scene tree for the first time. func _ready(): sprite = get_node("Sprite") area = get_node("Area2D") + loadedScript = load(scriptName) area.connect("body_entered", self, "onBodyEntered") -func onBodyEntered(body : PhysicsBody2D): +func onBodyEntered(body : PhysicsBody2D): queue_free() # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/Scripts/PaintEffects/Invisibility.gd b/Scripts/PaintEffects/Invisibility.gd new file mode 100644 index 0000000..8767af9 --- /dev/null +++ b/Scripts/PaintEffects/Invisibility.gd @@ -0,0 +1,35 @@ +extends Node + +#The time, in seconds, it should take for the character to fade to FadeOutValue +export var FadeOutTime = 2.0 + +#The alpha value we aim for when fading out +export var FadeOutValue = 0.05 + +var coroutines = [] + +func AlmostFadeOutRoutine(player, delta): + var sprite : Sprite = get_node("Sprite") + var elapsed = delta + var origin = sprite.get_modulate().a + while sprite.get_modulate().a > FadeOutValue: + var a = lerp(origin, FadeOutValue, elapsed / FadeOutTime) + elapsed += yield() + pass + +func StartEffect(player): + var rout = AlmostFadeOutRoutine(player, 0) + coroutines.add(rout) + pass + +func FinishEffect(): + pass + +func UpdateEffect(delta): + for rout in coroutines: + if rout.is_valid(): + rout.resume(delta) + else: + coroutines.remove(rout) + pass + diff --git a/project.godot b/project.godot index 2d301e9..6c96d20 100644 --- a/project.godot +++ b/project.godot @@ -19,61 +19,6 @@ config/name="Paint Jam 2020" run/main_scene="res://Scene/TestScene.tscn" config/icon="res://icon.png" -[display] - -window/size/width=320 -window/size/height=180 -window/size/test_width=1280 -window/size/test_height=720 -window/stretch/mode="2d" -window/stretch/aspect="keep" - -[importer_defaults] - -texture={ -"compress/bptc_ldr": 0, -"compress/hdr_mode": 0, -"compress/lossy_quality": 0.7, -"compress/mode": 0, -"compress/normal_map": 0, -"detect_3d": false, -"flags/anisotropic": false, -"flags/filter": false, -"flags/mipmaps": false, -"flags/repeat": 0, -"flags/srgb": 2, -"process/HDR_as_SRGB": false, -"process/fix_alpha_border": true, -"process/invert_color": false, -"process/premult_alpha": false, -"size_limit": 0, -"stream": false, -"svg/scale": 1.0 -} - -[input] - -ui_right2={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) - ] -} -ui_left2={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"unicode":0,"echo":false,"script":null) - ] -} -ui_up2={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"unicode":0,"echo":false,"script":null) - ] -} -ui_down2={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) - ] -} - [rendering] quality/driver/driver_name="GLES2" From 1cc6fa6b0053bbc1afca315e913a33f4fa86283e Mon Sep 17 00:00:00 2001 From: Hurlu Date: Sat, 4 Apr 2020 15:09:40 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Syst=C3=A8me=20de=20coroutines=20pour=20les?= =?UTF-8?q?=20effets=20de=20bucket=20KFC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scene/TestScene.tscn | 7 +++++- Scripts/Clopinette.gd | 11 ++++----- Scripts/PaintEffects/Invisibility.gd | 35 ++++++++++++++-------------- Scripts/Player.gd | 21 +++++++++++++++++ 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/Scene/TestScene.tscn b/Scene/TestScene.tscn index 6bb05cb..1ed4015 100644 --- a/Scene/TestScene.tscn +++ b/Scene/TestScene.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://Scene/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://Assets/Placeholder.png" type="Texture" id=2] +[ext_resource path="res://Scene/Clopinette.tscn" type="PackedScene" id=3] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 15.6178, 15.7669 ) @@ -25,3 +26,7 @@ shape = SubResource( 1 ) [node name="Player2" parent="." instance=ExtResource( 1 )] position = Vector2( 221.278, 126.847 ) + +[node name="Clopinette" parent="." instance=ExtResource( 3 )] +position = Vector2( 149.267, 34.1946 ) +scriptName = "res://Scripts/PaintEffects/Invisibility.gd" diff --git a/Scripts/Clopinette.gd b/Scripts/Clopinette.gd index 8beb3c3..2ce6413 100644 --- a/Scripts/Clopinette.gd +++ b/Scripts/Clopinette.gd @@ -11,12 +11,9 @@ export(String, FILE, "*.gd") var scriptName func _ready(): sprite = get_node("Sprite") area = get_node("Area2D") - loadedScript = load(scriptName) + loadedScript = load(scriptName).new() area.connect("body_entered", self, "onBodyEntered") -func onBodyEntered(body : PhysicsBody2D): - queue_free() - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - pass +func onBodyEntered(body): + body.addCoroutine(loadedScript.StartEffect(body)) + queue_free() diff --git a/Scripts/PaintEffects/Invisibility.gd b/Scripts/PaintEffects/Invisibility.gd index 8767af9..30a7106 100644 --- a/Scripts/PaintEffects/Invisibility.gd +++ b/Scripts/PaintEffects/Invisibility.gd @@ -2,34 +2,33 @@ extends Node #The time, in seconds, it should take for the character to fade to FadeOutValue export var FadeOutTime = 2.0 +export var InvisTime = 5.0 +export var FadeInTime = 2.0 #The alpha value we aim for when fading out export var FadeOutValue = 0.05 -var coroutines = [] - func AlmostFadeOutRoutine(player, delta): - var sprite : Sprite = get_node("Sprite") + var sprite : Sprite = player.get_node("Sprite") var elapsed = delta var origin = sprite.get_modulate().a - while sprite.get_modulate().a > FadeOutValue: + while sprite.self_modulate.a > FadeOutValue: var a = lerp(origin, FadeOutValue, elapsed / FadeOutTime) + sprite.self_modulate = Color(1,1,1, a) elapsed += yield() - pass + + elapsed -= FadeOutTime; + while elapsed < InvisTime: + 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) + elapsed += yield() + func StartEffect(player): var rout = AlmostFadeOutRoutine(player, 0) - coroutines.add(rout) - pass - -func FinishEffect(): - pass - -func UpdateEffect(delta): - for rout in coroutines: - if rout.is_valid(): - rout.resume(delta) - else: - coroutines.remove(rout) - pass + return rout diff --git a/Scripts/Player.gd b/Scripts/Player.gd index 8b9b1a8..e42847d 100644 --- a/Scripts/Player.gd +++ b/Scripts/Player.gd @@ -8,11 +8,14 @@ const MAX_LIFE = 30 var vel = Vector2.ZERO var curLife = MAX_LIFE +var coroutines = [] + #onready var animationPlayer = $AnimationPlayer #onready var animationTree = $AnimationTree #onready var animationState = animationTree.get("parameters/playback") func _process(delta): + updatePaintEffects(delta) curLife -= delta if curLife <= 0: #fin du game laul @@ -40,3 +43,21 @@ func _physics_process(delta): vel = vel.move_toward(Vector2.ZERO, FRICTION * delta) vel = move_and_slide(vel) + + +func updatePaintEffects(delta): + var sprite = get_node("Sprite") + 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) + + +func addCoroutine(routine): + coroutines.append(routine)