System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2"], function (_export, _context) {
  "use strict";

  var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, Component, Node, Vec3, _decorator, Timer, Vec3Util, _dec, _class, _crd, ccclass, property, MoveTo;

  function _reportPossibleCrUseOfTimer(extras) {
    _reporterNs.report("Timer", "../../core/common/timer/Timer", _context.meta, extras);
  }

  function _reportPossibleCrUseOfVec3Util(extras) {
    _reporterNs.report("Vec3Util", "../../core/utils/Vec3Util", _context.meta, extras);
  }

  return {
    setters: [function (_unresolved_) {
      _reporterNs = _unresolved_;
    }, function (_cc) {
      _cclegacy = _cc.cclegacy;
      __checkObsolete__ = _cc.__checkObsolete__;
      __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
      Component = _cc.Component;
      Node = _cc.Node;
      Vec3 = _cc.Vec3;
      _decorator = _cc._decorator;
    }, function (_unresolved_2) {
      Timer = _unresolved_2.Timer;
    }, function (_unresolved_3) {
      Vec3Util = _unresolved_3.Vec3Util;
    }],
    execute: function () {
      _crd = true;

      _cclegacy._RF.push({}, "5e22a+qWUpI6ZHSVRRj2DYT", "MoveTo", undefined);
      /*
       * @Author: dgflash
       * @Date: 2022-03-25 18:12:10
       * @LastEditors: dgflash
       * @LastEditTime: 2023-01-19 14:59:50
       */


      __checkObsolete__(['Component', 'Node', 'Vec3', '_decorator']);

      ({
        ccclass,
        property
      } = _decorator);
      /** 移动到指定目标位置 */

      _export("MoveTo", MoveTo = (_dec = ccclass('MoveTo'), _dec(_class = class MoveTo extends Component {
        constructor(...args) {
          super(...args);

          /** 目标位置 */
          this.target = null;

          /** 移动方向 */
          this.velocity = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
            error: Error()
          }), Vec3Util) : Vec3Util).zero;

          /** 移动速度（每秒移动的像素距离） */
          this.speed = 0;

          /** 是否计算将 Y 轴带入计算 */
          this.hasYAxis = true;

          /** 坐标标（默认本地坐标） */
          this.ns = Node.NodeSpace.LOCAL;

          /** 偏移距离 */
          this.offset = 0;

          /** 偏移向量 */
          this.offsetVector = null;

          /** 移动开始 */
          this.onStart = null;

          /** 移动完成回调 */
          this.onComplete = null;

          /** 距离变化时 */
          this.onChange = null;

          /** 延时触发器 */
          this.timer = new (_crd && Timer === void 0 ? (_reportPossibleCrUseOfTimer({
            error: Error()
          }), Timer) : Timer)();

          /** 终点备份 */
          this.end = null;
        }

        onLoad() {
          this.enabled = false;
        }

        move() {
          this.enabled = true;
        }

        update(dt) {
          let end;
          console.assert(this.speed > 0, "移动速度必须要大于零");

          if (this.target instanceof Node) {
            end = this.ns == Node.NodeSpace.WORLD ? this.target.worldPosition : this.target.position;
          } else {
            end = this.target;
          } // 移动目标节点被释放时


          if (end == null) {
            this.exit();
            return;
          } // 目标移动后，重计算移动方向与移动到目标点的速度


          if (this.end == null || !this.end.strictEquals(end)) {
            var _this$onChange;

            let target = end.clone();

            if (this.offsetVector) {
              target = target.add(this.offsetVector);
            }

            if (this.hasYAxis == false) target.y = 0; // 移动方向与移动数度

            let start = this.ns == Node.NodeSpace.WORLD ? this.node.worldPosition : this.node.position;
            this.velocity = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
              error: Error()
            }), Vec3Util) : Vec3Util).sub(target, start).normalize(); // 移动时间与目标偏位置计算

            let distance = Vec3.distance(start, target) - this.offset; // 目标位置修改事件

            (_this$onChange = this.onChange) == null || _this$onChange.call(this);

            if (distance <= 0) {
              this.exit();
              return;
            } else {
              var _this$onStart;

              (_this$onStart = this.onStart) == null || _this$onStart.call(this);
              this.timer.step = distance / this.speed;
              this.end = end.clone();
            }
          }

          if (this.speed > 0) {
            let trans = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
              error: Error()
            }), Vec3Util) : Vec3Util).mul(this.velocity, this.speed * dt);
            if (this.ns == Node.NodeSpace.WORLD) this.node.worldPosition = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
              error: Error()
            }), Vec3Util) : Vec3Util).add(this.node.worldPosition, trans);else this.node.position = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
              error: Error()
            }), Vec3Util) : Vec3Util).add(this.node.position, trans);
          } // 移动完成事件


          if (this.timer.update(dt)) {
            if (this.offset == 0) {
              if (this.ns == Node.NodeSpace.WORLD) this.node.worldPosition = this.end;else this.node.position = this.end;
            }

            this.exit();
          }
        }

        exit() {
          var _this$onComplete;

          (_this$onComplete = this.onComplete) == null || _this$onComplete.call(this);
          this.enabled = false;
          this.target = null;
          this.velocity = (_crd && Vec3Util === void 0 ? (_reportPossibleCrUseOfVec3Util({
            error: Error()
          }), Vec3Util) : Vec3Util).zero;
          this.speed = 0;
          this.hasYAxis = true;
          this.ns = Node.NodeSpace.LOCAL;
          this.offset = 0;
          this.offsetVector = null;
          this.onStart = null;
          this.onComplete = null;
          this.onChange = null;
          this.timer.reset();
          this.end = null;
        }

      }) || _class));

      _cclegacy._RF.pop();

      _crd = false;
    }
  };
});
//# sourceMappingURL=ad2df49f333ae487878e35c2dca5b5c2806cc148.js.map