Système de coroutines pour les effets de bucket KFC
This commit is contained in:
parent
1baf3ba8f3
commit
1cc6fa6b00
@ -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"
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user