System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2", "__unresolved_3", "__unresolved_4", "__unresolved_5"], function (_export, _context) { "use strict"; var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, _decorator, Collider, Component, Material, Node, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider, RagdollBone, RagdollConstraint, GameController, AudioMgr, AssetController, _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _crd, ccclass, property, Ragdoll; function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); } function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } function _reportPossibleCrUseOfRagdollBone(extras) { _reporterNs.report("RagdollBone", "./RagdollBone", _context.meta, extras); } function _reportPossibleCrUseOfRagdollConstraint(extras) { _reporterNs.report("RagdollConstraint", "./RagdollConstraint", _context.meta, extras); } function _reportPossibleCrUseOfGameController(extras) { _reporterNs.report("GameController", "../scripts/GameController", _context.meta, extras); } function _reportPossibleCrUseOfAudioMgr(extras) { _reporterNs.report("AudioMgr", "../scripts/framework/audio/AudioMgr", _context.meta, extras); } function _reportPossibleCrUseOfAssetController(extras) { _reporterNs.report("AssetController", "../scripts/AssetController", _context.meta, extras); } return { setters: [function (_unresolved_) { _reporterNs = _unresolved_; }, function (_cc) { _cclegacy = _cc.cclegacy; __checkObsolete__ = _cc.__checkObsolete__; __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__; _decorator = _cc._decorator; Collider = _cc.Collider; Component = _cc.Component; Material = _cc.Material; Node = _cc.Node; PhysicsSystem = _cc.PhysicsSystem; RigidBody = _cc.RigidBody; SkinnedMeshRenderer = _cc.SkinnedMeshRenderer; SphereCollider = _cc.SphereCollider; }, function (_unresolved_2) { RagdollBone = _unresolved_2.RagdollBone; }, function (_unresolved_3) { RagdollConstraint = _unresolved_3.RagdollConstraint; }, function (_unresolved_4) { GameController = _unresolved_4.GameController; }, function (_unresolved_5) { AudioMgr = _unresolved_5.AudioMgr; }, function (_unresolved_6) { AssetController = _unresolved_6.AssetController; }], execute: function () { _crd = true; _cclegacy._RF.push({}, "fc0eb4iDgpE04mibrjf0fSC", "Ragdoll", undefined); __checkObsolete__(['_decorator', 'Collider', 'Component', 'Material', 'Node', 'PhysicsGroup', 'PhysicsSystem', 'RigidBody', 'SkinnedMeshRenderer', 'SphereCollider']); ({ ccclass, property } = _decorator); _export("Ragdoll", Ragdoll = (_dec = ccclass('Ragdoll'), _dec2 = property(Node), _dec3 = property(Node), _dec4 = property(SkinnedMeshRenderer), _dec5 = property(Material), _dec(_class = (_class2 = class Ragdoll extends Component { constructor() { super(...arguments); _initializerDefineProperty(this, "rootNode", _descriptor, this); _initializerDefineProperty(this, "centerNode", _descriptor2, this); _initializerDefineProperty(this, "renderer", _descriptor3, this); _initializerDefineProperty(this, "siwang", _descriptor4, this); // 新的材质 this.realBones = []; this.simuBones = []; this.simuBoneJointArr = []; this.world = void 0; this.isEnabled = false; this.isDie = false; } start() { this.world = PhysicsSystem.instance.physicsWorld.impl; this.initRagdoll(); } initRagdoll() { // 压入真实骨骼 this.getAllRealBones(this.rootNode); // 创建模拟骨骼 this.createSimuBones(); // 创建模拟骨骼的关节 this.createSimuBoneJoints(); } createSimuBones() { for (var boneNode of this.realBones) { var node = new Node(); node.addComponent(SphereCollider).radius = 0.2 * node.worldScale.x; node.addComponent(RigidBody); this.node.addChild(node); this.simuBones.push(node); this.syncPositionAndRotation(node, boneNode); // 同步之后将位置赋给初始位置 var ragdollBone = boneNode.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone); ragdollBone.simuNode = node; ragdollBone.initPos = boneNode.getPosition(); ragdollBone.initRot = boneNode.getRotation(); } this.scheduleOnce(() => { for (var bone of this.simuBones) { var body = bone.getComponent(RigidBody); body.sleep(); } }, 0); } createSimuBoneJoints() { for (var boneNode of this.realBones) { var joint = boneNode.getComponent(_crd && RagdollConstraint === void 0 ? (_reportPossibleCrUseOfRagdollConstraint({ error: Error() }), RagdollConstraint) : RagdollConstraint); if (joint) { var simuNodeA = boneNode.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone).simuNode; var simuNodeB = joint.connectedBone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone).simuNode; var bodyA = simuNodeA.getComponent(RigidBody).body.impl; var bodyB = simuNodeB.getComponent(RigidBody).body.impl; var spineJoint = new CANNON.ConeTwistConstraint(bodyA, bodyB, { pivotA: new CANNON.Vec3(joint.pivotA.x, joint.pivotA.y, joint.pivotA.z), pivotB: new CANNON.Vec3(joint.pivotB.x, joint.pivotB.y, joint.pivotB.z), axisA: new CANNON.Vec3(joint.axisA.x, joint.axisA.y, joint.axisA.z), axisB: new CANNON.Vec3(joint.axisB.x, joint.axisB.y, joint.axisB.z), angle: joint.angle, twistAngle: joint.twistAngle }); this.world.addConstraint(spineJoint); this.simuBoneJointArr.push(spineJoint); } } } getAllRealBones(node) { var bones = node.children; for (var boneNode of bones) { var bone = boneNode.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone); if (bone) { this.realBones.push(boneNode); bone.ragdoll = this; } this.getAllRealBones(boneNode); } } lateUpdate(deltaTime) { if (this.isEnabled) { this.updateBones(); } } syncPositionAndRotation(nodeA, nodeB) { nodeA.setWorldPosition(nodeB.worldPosition); nodeA.setWorldRotation(nodeB.worldRotation); } // 将模拟骨骼的位置和转角同步到真实骨骼 updateBones() { for (var i = 0; i < this.realBones.length; i++) { this.syncPositionAndRotation(this.realBones[i], this.simuBones[i]); } } getEnabled() { return this.isEnabled; } setEnabled(isEnabled) { if (isEnabled && this.isDie) return; isEnabled ? this.enableRagdoll() : this.disableRagdoll(); (_crd && AudioMgr === void 0 ? (_reportPossibleCrUseOfAudioMgr({ error: Error() }), AudioMgr) : AudioMgr).inst.playOneShot((_crd && AssetController === void 0 ? (_reportPossibleCrUseOfAssetController({ error: Error() }), AssetController) : AssetController).instance.die); } enableRagdoll() { this.isDie = true; (_crd && GameController === void 0 ? (_reportPossibleCrUseOfGameController({ error: Error() }), GameController) : GameController).getInstance().curLevel.onEnemyDie(this); // this.renderer.setMaterialInstance(this.siwang, 0) this.renderer.material = this.siwang; // 将模拟骨骼的位置和真实骨骼同步 for (var bone of this.realBones) { var ragdollBone = bone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone); this.syncPositionAndRotation(ragdollBone.simuNode, bone); var collider = ragdollBone.getComponent(Collider); if (collider) collider.enabled = false; } for (var _bone of this.simuBones) { var body = _bone.getComponent(RigidBody); body.wakeUp(); } // 将关节添加至物理世界 for (var joint of this.simuBoneJointArr) { this.world.addConstraint(joint); } this.isEnabled = true; } disableRagdoll() { // 将真实骨骼移动至初始位置 for (var bone of this.realBones) { var ragdollBone = bone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({ error: Error() }), RagdollBone) : RagdollBone); bone.setPosition(ragdollBone.initPos); bone.setRotation(ragdollBone.initRot); } for (var _bone2 of this.simuBones) { var body = _bone2.getComponent(RigidBody); body.sleep(); } // 从物理世界中移除关节 for (var joint of this.simuBoneJointArr) { this.world.removeConstraint(joint); } this.isEnabled = false; } }, (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "rootNode", [_dec2], { configurable: true, enumerable: true, writable: true, initializer: function initializer() { return null; } }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "centerNode", [_dec3], { configurable: true, enumerable: true, writable: true, initializer: function initializer() { return null; } }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "renderer", [_dec4], { configurable: true, enumerable: true, writable: true, initializer: function initializer() { return null; } }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "siwang", [_dec5], { configurable: true, enumerable: true, writable: true, initializer: null })), _class2)) || _class)); _cclegacy._RF.pop(); _crd = false; } }; }); //# sourceMappingURL=b84580597e9cababc38b7a3ce49a27f22d6f0abe.js.map