298 lines
12 KiB
JavaScript
298 lines
12 KiB
JavaScript
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
|