chore:代码重构
This commit is contained in:
+265
-158
@@ -1,190 +1,297 @@
|
||||
import { _decorator, Collider, Component, Material, Node, PhysicsGroup, PhysicsSystem, RigidBody, SkinnedMeshRenderer, SphereCollider } from 'cc';
|
||||
import { RagdollBone } from './RagdollBone';
|
||||
import { RagdollConstraint } from './RagdollConstraint';
|
||||
// @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 { AssetController } from '../scripts/AssetController';
|
||||
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; // 新的材质
|
||||
|
||||
private realBones: Array<Node> = [];
|
||||
private simuBones: Array<Node> = [];
|
||||
|
||||
private simuBoneJointArr: Array<CANNON.ConeTwistConstraint> = [];
|
||||
|
||||
siwang: Material;
|
||||
isDie = false;
|
||||
private realBones: Node[] = [];
|
||||
private simuBones: Node[] = [];
|
||||
private simuBoneJointArr: CANNON.ConeTwistConstraint[] = [];
|
||||
private world: any;
|
||||
|
||||
private isEnabled: boolean = false;
|
||||
|
||||
|
||||
start() {
|
||||
this.world = PhysicsSystem.instance.physicsWorld.impl;
|
||||
this.initRagdoll()
|
||||
}
|
||||
|
||||
private 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(RagdollBone)
|
||||
ragdollBone.simuNode = node
|
||||
ragdollBone.initPos = boneNode.getPosition();
|
||||
ragdollBone.initRot = boneNode.getRotation();
|
||||
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);
|
||||
}
|
||||
|
||||
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(RagdollConstraint)
|
||||
if (joint) {
|
||||
const simuNodeA = boneNode.getComponent(RagdollBone).simuNode
|
||||
const simuNodeB = joint.connectedBone.getComponent(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)
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
getAllRealBones(node: Node) {
|
||||
let bones = node.children;
|
||||
for (let boneNode of bones) {
|
||||
const bone = boneNode.getComponent(RagdollBone)
|
||||
if (bone) {
|
||||
this.realBones.push(boneNode)
|
||||
bone.ragdoll = this
|
||||
}
|
||||
this.getAllRealBones(boneNode)
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
lateUpdate(deltaTime: number) {
|
||||
if (this.isEnabled) {
|
||||
this.updateBones()
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
syncPositionAndRotation(nodeA: Node, nodeB: Node) {
|
||||
nodeA.setWorldPosition(nodeB.worldPosition)
|
||||
nodeA.setWorldRotation(nodeB.worldRotation)
|
||||
}
|
||||
|
||||
// 将模拟骨骼的位置和转角同步到真实骨骼
|
||||
private updateBones() {
|
||||
for (let i = 0; i < this.realBones.length; i++) {
|
||||
this.syncPositionAndRotation(this.realBones[i], this.simuBones[i])
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
getEnabled() {
|
||||
return this.isEnabled;
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
setEnabled(isEnabled: boolean) {
|
||||
if (isEnabled && this.isDie) return
|
||||
isEnabled ? this.enableRagdoll() : this.disableRagdoll();
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.die)
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
isDie: boolean = false
|
||||
enableRagdoll() {
|
||||
this.isDie = true
|
||||
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(RagdollBone)
|
||||
this.syncPositionAndRotation(ragdollBone.simuNode, bone)
|
||||
let collider = ragdollBone.getComponent(Collider)
|
||||
if (collider)
|
||||
collider.enabled = false
|
||||
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);
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody)
|
||||
body.wakeUp();
|
||||
finally {
|
||||
}
|
||||
|
||||
// 将关节添加至物理世界
|
||||
for (let joint of this.simuBoneJointArr) {
|
||||
this.world.addConstraint(joint);
|
||||
}
|
||||
|
||||
this.isEnabled = true;
|
||||
}
|
||||
|
||||
disableRagdoll() {
|
||||
// 将真实骨骼移动至初始位置
|
||||
for (let bone of this.realBones) {
|
||||
let ragdollBone = bone.getComponent(RagdollBone);
|
||||
bone.setPosition(ragdollBone.initPos);
|
||||
bone.setRotation(ragdollBone.initRot);
|
||||
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);
|
||||
}
|
||||
|
||||
for (let bone of this.simuBones) {
|
||||
let body = bone.getComponent(RigidBody)
|
||||
body.sleep();
|
||||
finally {
|
||||
}
|
||||
|
||||
// 从物理世界中移除关节
|
||||
for (let joint of this.simuBoneJointArr) {
|
||||
this.world.removeConstraint(joint);
|
||||
}
|
||||
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 {
|
||||
}
|
||||
|
||||
this.isEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,42 @@
|
||||
import { _decorator, director, Component, Node, Vec3, v3, math } from "cc";
|
||||
import { Ragdoll } from "./Ragdoll";
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, math, Node, v3, Vec3 } from 'cc';
|
||||
import { Ragdoll } from './Ragdoll';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('RagdollBone')
|
||||
export class RagdollBone extends Component {
|
||||
simuNode: Node = null;
|
||||
initPos: Vec3 = v3();
|
||||
initRot: math.Quat = new math.Quat();
|
||||
ragdoll: Ragdoll
|
||||
}
|
||||
initRot: math.Quat = new (math["Quat"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)();
|
||||
ragdoll: Ragdoll;
|
||||
initializeSimulation(node: Node): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["simuNode"] = node);
|
||||
void (this["initPos"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getPosition"]());
|
||||
void (this["initRot"] = (this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getRotation"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
restorePose(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setPosition"](this["initPos"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setRotation"](this["initRot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,53 @@
|
||||
import { _decorator, CCClass, CCFloat, Component, director, Node, v3, Vec3 } from "cc";
|
||||
const { ccclass, property } = _decorator
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, CCFloat, Component, Node, v3, Vec3 } from 'cc';
|
||||
const { ccclass, property } = _decorator;
|
||||
@ccclass('RagdollConstraint')
|
||||
export class RagdollConstraint extends Component {
|
||||
@property(Node)
|
||||
connectedBone: Node = null;
|
||||
|
||||
@property(Vec3)
|
||||
pivotA: Vec3 = v3()
|
||||
|
||||
pivotA: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
pivotB: Vec3 = v3()
|
||||
|
||||
pivotB: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
axisA: Vec3 = v3()
|
||||
|
||||
axisA: Vec3 = v3();
|
||||
@property(Vec3)
|
||||
axisB: Vec3 = v3()
|
||||
|
||||
axisB: Vec3 = v3();
|
||||
@property(CCFloat)
|
||||
angle: number = Math.PI / 4;
|
||||
|
||||
angle = (Math["PI"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 4;
|
||||
@property(CCFloat)
|
||||
twistAngle: number = Math.PI / 8;
|
||||
}
|
||||
twistAngle = (Math["PI"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) / 8;
|
||||
createConstraint(bodyA: CANNON.Body, bodyB: CANNON.Body): CANNON.ConeTwistConstraint {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return new (CANNON["ConeTwistConstraint"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(bodyA, bodyB, {
|
||||
"pivotA": this["toCannonVector"](this["pivotA"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown),
|
||||
"pivotB": this["toCannonVector"](this["pivotB"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown),
|
||||
"axisA": this["toCannonVector"](this["axisA"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown),
|
||||
"axisB": this["toCannonVector"](this["axisB"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown),
|
||||
"angle": this["angle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
||||
"twistAngle": this["twistAngle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
||||
});
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private toCannonVector(vector: Vec3): CANNON.Vec3 {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return new (CANNON["Vec3"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)(vector["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, vector["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, vector["z"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user