init
This commit is contained in:
+296
@@ -0,0 +1,296 @@
|
||||
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(...args) {
|
||||
super(...args);
|
||||
|
||||
_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 (let boneNode of this.realBones) {
|
||||
let 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); // 同步之后将位置赋给初始位置
|
||||
|
||||
let 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 (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody);
|
||||
body.sleep();
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
||||
createSimuBoneJoints() {
|
||||
for (let boneNode of this.realBones) {
|
||||
const joint = boneNode.getComponent(_crd && RagdollConstraint === void 0 ? (_reportPossibleCrUseOfRagdollConstraint({
|
||||
error: Error()
|
||||
}), RagdollConstraint) : RagdollConstraint);
|
||||
|
||||
if (joint) {
|
||||
const simuNodeA = boneNode.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({
|
||||
error: Error()
|
||||
}), RagdollBone) : RagdollBone).simuNode;
|
||||
const simuNodeB = joint.connectedBone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({
|
||||
error: Error()
|
||||
}), RagdollBone) : RagdollBone).simuNode;
|
||||
const bodyA = simuNodeA.getComponent(RigidBody).body.impl;
|
||||
const bodyB = simuNodeB.getComponent(RigidBody).body.impl;
|
||||
let 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) {
|
||||
let bones = node.children;
|
||||
|
||||
for (let boneNode of bones) {
|
||||
const 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 (let 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 (let bone of this.realBones) {
|
||||
let ragdollBone = bone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({
|
||||
error: Error()
|
||||
}), RagdollBone) : RagdollBone);
|
||||
this.syncPositionAndRotation(ragdollBone.simuNode, bone);
|
||||
let collider = ragdollBone.getComponent(Collider);
|
||||
if (collider) collider.enabled = false;
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody);
|
||||
body.wakeUp();
|
||||
} // 将关节添加至物理世界
|
||||
|
||||
|
||||
for (let joint of this.simuBoneJointArr) {
|
||||
this.world.addConstraint(joint);
|
||||
}
|
||||
|
||||
this.isEnabled = true;
|
||||
}
|
||||
|
||||
disableRagdoll() {
|
||||
// 将真实骨骼移动至初始位置
|
||||
for (let bone of this.realBones) {
|
||||
let ragdollBone = bone.getComponent(_crd && RagdollBone === void 0 ? (_reportPossibleCrUseOfRagdollBone({
|
||||
error: Error()
|
||||
}), RagdollBone) : RagdollBone);
|
||||
bone.setPosition(ragdollBone.initPos);
|
||||
bone.setRotation(ragdollBone.initRot);
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody);
|
||||
body.sleep();
|
||||
} // 从物理世界中移除关节
|
||||
|
||||
|
||||
for (let 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 () {
|
||||
return null;
|
||||
}
|
||||
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "centerNode", [_dec3], {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
initializer: function () {
|
||||
return null;
|
||||
}
|
||||
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "renderer", [_dec4], {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
initializer: function () {
|
||||
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
|
||||
+1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user