EG/scripts/MoverScript.py
2025-12-12 16:16:15 +08:00

91 lines
3.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
移动脚本 - 让对象在指定方向上来回移动
"""
from core.script_system import ScriptBase
import math
class MoverScript(ScriptBase):
"""移动脚本类"""
def __init__(self):
super().__init__()
# 移动参数
self.move_distance = 5.0 # 移动距离
self.move_speed = 2.0 # 移动速度 (单位/秒)
self.move_axis = "x" # 移动轴: "x", "y", "z"
# 内部变量
self.start_position = None # 起始位置
self.current_direction = 1 # 当前移动方向: 1或-1
self.current_distance = 0.0 # 当前移动距离
self.is_moving = True # 是否正在移动
def start(self):
"""脚本开始时调用"""
self.log("移动脚本启动!")
self.log(f"移动参数: 距离={self.move_distance}, 速度={self.move_speed}, 轴={self.move_axis}")
# 记录起始位置
self.start_position = self.gameObject.getPos()
self.log(f"起始位置: {self.start_position}")
def update(self, dt):
"""每帧更新"""
if not self.is_moving or self.start_position is None:
return
# 计算移动增量
move_delta = self.move_speed * dt * self.current_direction
self.current_distance += abs(move_delta)
# 检查是否需要改变方向
if self.current_distance >= self.move_distance:
self.current_direction *= -1
self.current_distance = 0.0
# 应用移动
current_pos = self.gameObject.getPos()
new_pos = [current_pos.getX(), current_pos.getY(), current_pos.getZ()]
if self.move_axis == "x":
new_pos[0] += move_delta
elif self.move_axis == "y":
new_pos[1] += move_delta
elif self.move_axis == "z":
new_pos[2] += move_delta
self.gameObject.setPos(new_pos[0], new_pos[1], new_pos[2])
def set_move_parameters(self, distance=None, speed=None, axis=None):
"""设置移动参数"""
if distance is not None:
self.move_distance = distance
if speed is not None:
self.move_speed = speed
if axis is not None and axis in ["x", "y", "z"]:
self.move_axis = axis
self.log(f"移动参数更新: 距离={self.move_distance}, 速度={self.move_speed}, 轴={self.move_axis}")
def toggle_movement(self):
"""切换移动状态"""
self.is_moving = not self.is_moving
status = "恢复" if self.is_moving else "暂停"
self.log(f"移动{status}")
def reset_position(self):
"""重置到起始位置"""
if self.start_position:
self.gameObject.setPos(self.start_position)
self.current_distance = 0.0
self.current_direction = 1
self.log("位置已重置到起始点")
def on_destroy(self):
"""脚本销毁时调用"""
self.log("移动脚本停止")