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://Scene/Player.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://Assets/Placeholder.png" type="Texture" id=2]
|
[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]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 15.6178, 15.7669 )
|
extents = Vector2( 15.6178, 15.7669 )
|
||||||
@ -25,3 +26,7 @@ shape = SubResource( 1 )
|
|||||||
|
|
||||||
[node name="Player2" parent="." instance=ExtResource( 1 )]
|
[node name="Player2" parent="." instance=ExtResource( 1 )]
|
||||||
position = Vector2( 221.278, 126.847 )
|
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():
|
func _ready():
|
||||||
sprite = get_node("Sprite")
|
sprite = get_node("Sprite")
|
||||||
area = get_node("Area2D")
|
area = get_node("Area2D")
|
||||||
loadedScript = load(scriptName)
|
loadedScript = load(scriptName).new()
|
||||||
area.connect("body_entered", self, "onBodyEntered")
|
area.connect("body_entered", self, "onBodyEntered")
|
||||||
|
|
||||||
func onBodyEntered(body : PhysicsBody2D):
|
func onBodyEntered(body):
|
||||||
queue_free()
|
body.addCoroutine(loadedScript.StartEffect(body))
|
||||||
|
queue_free()
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta):
|
|
||||||
pass
|
|
||||||
|
|||||||
@ -2,34 +2,33 @@ extends Node
|
|||||||
|
|
||||||
#The time, in seconds, it should take for the character to fade to FadeOutValue
|
#The time, in seconds, it should take for the character to fade to FadeOutValue
|
||||||
export var FadeOutTime = 2.0
|
export var FadeOutTime = 2.0
|
||||||
|
export var InvisTime = 5.0
|
||||||
|
export var FadeInTime = 2.0
|
||||||
|
|
||||||
#The alpha value we aim for when fading out
|
#The alpha value we aim for when fading out
|
||||||
export var FadeOutValue = 0.05
|
export var FadeOutValue = 0.05
|
||||||
|
|
||||||
var coroutines = []
|
|
||||||
|
|
||||||
func AlmostFadeOutRoutine(player, delta):
|
func AlmostFadeOutRoutine(player, delta):
|
||||||
var sprite : Sprite = get_node("Sprite")
|
var sprite : Sprite = player.get_node("Sprite")
|
||||||
var elapsed = delta
|
var elapsed = delta
|
||||||
var origin = sprite.get_modulate().a
|
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)
|
var a = lerp(origin, FadeOutValue, elapsed / FadeOutTime)
|
||||||
|
sprite.self_modulate = Color(1,1,1, a)
|
||||||
elapsed += yield()
|
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):
|
func StartEffect(player):
|
||||||
var rout = AlmostFadeOutRoutine(player, 0)
|
var rout = AlmostFadeOutRoutine(player, 0)
|
||||||
coroutines.add(rout)
|
return rout
|
||||||
pass
|
|
||||||
|
|
||||||
func FinishEffect():
|
|
||||||
pass
|
|
||||||
|
|
||||||
func UpdateEffect(delta):
|
|
||||||
for rout in coroutines:
|
|
||||||
if rout.is_valid():
|
|
||||||
rout.resume(delta)
|
|
||||||
else:
|
|
||||||
coroutines.remove(rout)
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|||||||
@ -8,11 +8,14 @@ const MAX_LIFE = 30
|
|||||||
var vel = Vector2.ZERO
|
var vel = Vector2.ZERO
|
||||||
var curLife = MAX_LIFE
|
var curLife = MAX_LIFE
|
||||||
|
|
||||||
|
var coroutines = []
|
||||||
|
|
||||||
#onready var animationPlayer = $AnimationPlayer
|
#onready var animationPlayer = $AnimationPlayer
|
||||||
#onready var animationTree = $AnimationTree
|
#onready var animationTree = $AnimationTree
|
||||||
#onready var animationState = animationTree.get("parameters/playback")
|
#onready var animationState = animationTree.get("parameters/playback")
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
|
updatePaintEffects(delta)
|
||||||
curLife -= delta
|
curLife -= delta
|
||||||
if curLife <= 0:
|
if curLife <= 0:
|
||||||
#fin du game laul
|
#fin du game laul
|
||||||
@ -40,3 +43,21 @@ func _physics_process(delta):
|
|||||||
vel = vel.move_toward(Vector2.ZERO, FRICTION * delta)
|
vel = vel.move_toward(Vector2.ZERO, FRICTION * delta)
|
||||||
|
|
||||||
vel = move_and_slide(vel)
|
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