Files
2026-07-17 10:54:32 +08:00

298 lines
18 KiB
TypeScript

// @structural-rewrite-v1
import { _decorator, Collider, Component, Material, Node, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc';
import { AssetController } from '../scripts/AssetController';
import { GameController } from '../scripts/GameController';
import { AudioMgr } from '../scripts/framework/audio/AudioMgr';
import { RagdollBone } from './RagdollBone';
import { RagdollConstraint } from './RagdollConstraint';
const { ccclass, property } = _decorator;
@ccclass('Ragdoll')
export class Ragdoll extends Component {
@property(Node)
rootNode: Node = null;
@property(Node)
centerNode: Node = null;
@property(SkinnedMeshRenderer)
renderer: SkinnedMeshRenderer = null;
@property(Material)
siwang: Material;
isDie = false;
private realBones: Node[] = [];
private simuBones: Node[] = [];
private simuBoneJointArr: CANNON.ConeTwistConstraint[] = [];
private world: any;
private isEnabled = false;
protected start(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (this["world"] = ((PhysicsSystem["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["physicsWorld"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
void (this["initRagdoll"]());
}
} while (false);
}
finally {
}
}
protected lateUpdate(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if (!(this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
return;
void (this["updateBones"]());
}
} while (false);
}
finally {
}
}
createSimuBones(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (this["simuBones"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const simulation = new Node();
void (simulation["addComponent"](SphereCollider)["radius"] = 0.2 * ((simulation["worldScale"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
void (simulation["addComponent"](RigidBody));
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addChild"](simulation));
void (this["syncPositionAndRotation"](simulation, bone));
void (bone["getComponent"](RagdollBone)["initializeSimulation"](simulation));
return simulation;
}
} while (false);
}
finally {
}
}));
void (this["scheduleOnce"](() => (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]()), 0));
}
} while (false);
}
finally {
}
}
createSimuBoneJoints(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["simuBoneJointArr"] = (this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["map"]((bone) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const joint = bone["getComponent"](RagdollConstraint);
if (!joint)
return null;
const bodyA = ((bone["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
const bodyB = (((joint["connectedBone"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RagdollBone)["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getComponent"](RigidBody)["body"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["impl"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
const constraint = joint["createConstraint"](bodyA, bodyB);
void ((this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](constraint));
return constraint;
}
} while (false);
}
finally {
}
})["filter"]((constraint): constraint is CANNON.ConeTwistConstraint => constraint != null));
}
} while (false);
}
finally {
}
}
getAllRealBones(node: Node): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void ((node["children"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((child) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const bone = child["getComponent"](RagdollBone);
if (bone) {
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["push"](child));
void (bone["ragdoll"] = this);
}
void (this["getAllRealBones"](child));
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
syncPositionAndRotation(nodeA: Node, nodeB: Node): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (nodeA["setWorldPosition"](nodeB["worldPosition"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
void (nodeA["setWorldRotation"](nodeB["worldRotation"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
}
} while (false);
}
finally {
}
}
getEnabled(): boolean {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: return this["isEnabled"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
}
} while (false);
}
finally {
}
}
setEnabled(isEnabled: boolean): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if (isEnabled && this["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
return;
void ([this["disableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["enableRagdoll"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(isEnabled)]["call"](this));
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["die"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
}
} while (false);
}
finally {
}
}
enableRagdoll(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (this["isDie"] = true);
void ((GameController["getInstance"]()["curLevel"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["onEnemyDie"](this));
void ((this["renderer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["material"] = this["siwang"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => this["prepareBoneForPhysics"](bone)));
void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["wakeUp"]()));
void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["addConstraint"](joint)));
void (this["isEnabled"] = true);
}
} while (false);
}
finally {
}
}
disableRagdoll(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const ragdollBone = bone["getComponent"](RagdollBone);
void (ragdollBone["restorePose"]());
}
} while (false);
}
finally {
}
}));
void ((this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone) => bone["getComponent"](RigidBody)["sleep"]()));
void ((this["simuBoneJointArr"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((joint) => (this["world"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeConstraint"](joint)));
void (this["isEnabled"] = false);
}
} while (false);
}
finally {
}
}
private initRagdoll(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (this["getAllRealBones"](this["rootNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
void (this["createSimuBones"]());
void (this["createSimuBoneJoints"]());
}
} while (false);
}
finally {
}
}
private updateBones(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void ((this["realBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["forEach"]((bone, index) => this["syncPositionAndRotation"](bone, (this["simuBones"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[index])));
}
} while (false);
}
finally {
}
}
private prepareBoneForPhysics(bone: Node): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const ragdollBone = bone["getComponent"](RagdollBone);
void (this["syncPositionAndRotation"](ragdollBone["simuNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, bone));
const collider = ragdollBone["getComponent"](Collider);
if (collider)
void (collider["enabled"] = false);
}
} while (false);
}
finally {
}
}
}