Système de coroutines pour les effets de bucket KFC

This commit is contained in:
Hurlu 2020-04-04 15:09:40 +02:00
parent 1baf3ba8f3
commit 1cc6fa6b00
4 changed files with 48 additions and 26 deletions

View File

@ -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"

View File

@ -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()

View File

@ -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

View File

@ -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)