EG/plugins/user/state_machine/transitions/transition.py
2025-12-12 16:16:15 +08:00

87 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
状态转换类
定义状态之间的转换条件和规则
"""
class Transition:
"""
状态转换类
"""
def __init__(self, to_state, condition_func=None):
self.to_state = to_state # 目标状态
self.condition_func = condition_func # 转换条件函数
def is_triggered(self, context):
"""
检查转换条件是否满足
:param context: 状态上下文
:return: 是否满足转换条件
"""
if self.condition_func:
try:
return self.condition_func(context)
except Exception as e:
print(f"转换条件检查出错: {e}")
return False
else:
# 如果没有提供条件函数,默认满足转换条件
return True
class StateWithTransitions:
"""
带有转换条件的状态类
扩展基础状态类,添加状态转换功能
"""
def __init__(self, name="StateWithTransitions"):
self.name = name
self.transitions = [] # 状态转换列表
def add_transition(self, transition):
"""添加状态转换"""
self.transitions.append(transition)
def remove_transition(self, transition):
"""移除状态转换"""
if transition in self.transitions:
self.transitions.remove(transition)
def get_transitions(self):
"""获取状态转换列表"""
return self.transitions
def check_transitions(self, context):
"""
检查所有转换条件,返回满足条件的目标状态
:param context: 状态上下文
:return: 目标状态如果没有满足条件的转换则返回None
"""
for transition in self.transitions:
if transition.is_triggered(context):
return transition.to_state
return None
def enter(self, context):
"""
进入状态时调用
:param context: 状态上下文
"""
pass
def execute(self, context):
"""
执行状态逻辑
:param context: 状态上下文
:return: 下一个状态如果为None则保持当前状态
"""
# 检查状态转换
next_state = self.check_transitions(context)
return next_state
def exit(self, context):
"""
退出状态时调用
:param context: 状态上下文
"""
pass