37 lines
855 B
GDScript
37 lines
855 B
GDScript
@tool
|
||
@icon("res://addons/reedscene/prop/icon/prop_trans_icon.svg")
|
||
|
||
extends Node
|
||
class_name ReedTransition
|
||
|
||
@export var from_state_id: int = -1
|
||
@export var effects: Array[ReedPropEffect] = []
|
||
|
||
## runtime only
|
||
@export var runtime_only: bool = true
|
||
|
||
##Transtion能否被触发
|
||
func can_trigger(from: ReedPropState, ctx: Dictionary) -> bool:
|
||
if from == null:
|
||
return false
|
||
|
||
if from_state_id != -1 and from.state_id != from_state_id:
|
||
return false
|
||
|
||
if runtime_only and ctx.get("is_load", false):
|
||
return false
|
||
|
||
return true
|
||
|
||
|
||
##执行Transition的逻辑
|
||
func execute(from: ReedPropState, to: ReedPropState, ctx: Dictionary) -> bool:
|
||
# Effect 不需要知道 from/to,但 Transition 需要用 to 拿目标对象
|
||
var owner : Node= to._owner
|
||
var prop_comp : Node= to._owner_prop_comp
|
||
|
||
for e in effects:
|
||
e.apply(owner, prop_comp, ctx)
|
||
|
||
return true
|