You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.5 KiB
GDScript

2 years ago
extends Node3D
2 years ago
class_name Effect
2 years ago
@onready var afterimage = preload("res://scene/effect/afterimage/normal.tscn")
2 years ago
@onready var corpse = preload("res://scene/effect/afterimage/normal.tscn")
@onready var readiness_hero = preload("res://scene/effect/decal/readiness_hero.tscn")
@onready var readiness_monster = preload("res://scene/effect/decal/readiness_monster.tscn")
2 years ago
@onready var character = (get_owner() as Character)
@onready var view = (%View as View)
@onready var status = (%Status as Status)
2 years ago
var rediness : Decal
2 years ago
var is_pause : bool
2 years ago
var is_right : bool
func init(type:Enum.ECharacterType,body_scale:Vector3):
match type:
Enum.ECharacterType.Player:rediness = readiness_hero.instantiate()
Enum.ECharacterType.Monster:rediness = readiness_monster.instantiate()
if rediness:
rediness.scale = body_scale *2.2
rediness.scale.y = 10
rediness.position = Vector3.DOWN * 4
add_child(rediness)
2 years ago
func _process(delta):
2 years ago
#指针方向
if status.move_dir:
var angle = status.move_dir.angle_to(Vector2.RIGHT)
rediness.rotation.y = angle
2 years ago
#flip
2 years ago
if is_right != status.is_right:
is_right = status.is_right
for child in get_children():
if child is Particle:
child.scale.x = 1 if is_right else -1
2 years ago
#pause
if is_pause != status.is_pause:
is_pause = status.is_pause
for child in get_children():
if child is Particle:
var particle = child as Particle
particle.set_pause(is_pause)
2 years ago
2 years ago
func cast_image(res:Resource):
2 years ago
var new_afterimage = afterimage.instantiate() as Afterimage
new_afterimage.position = character.view_pos()
new_afterimage.name = "afterimage"
new_afterimage.velocity = character.velocity / 4
view.clone(new_afterimage)
SignalManager.effect_create.emit(new_afterimage)
2 years ago
func cast_after_image():cast_image(afterimage)
func cast_corpse():cast_image(corpse)
2 years ago
func cast_attack_particle():
if !status.skill_cfg:
return
2 years ago
var resource = status.skill_cfg.attack_particle as Resource
cast_particle(resource)
func cast_particle(resource:Resource):
if !resource:
print("未配置技能特效")
2 years ago
return
2 years ago
var new_particle = resource.instantiate() as Particle
2 years ago
new_particle.position = status.basic_offset
new_particle.name = "attack_particle"
var dir = status.skill_dir
dir.x = abs(dir.x)
var angle = dir.angle_to(Vector2.RIGHT)
new_particle.rotation.y = angle
2 years ago
new_particle.scale.x = 1 if is_right else -1
2 years ago
add_child(new_particle)
func release_effect():
for child in get_children():
if child is Particle:
var particle = child as Particle
particle.position = character.view_pos()
remove_child(particle)
SignalManager.effect_create.emit(particle)