41 lines
No EOL
1.5 KiB
TypeScript
41 lines
No EOL
1.5 KiB
TypeScript
import { World, useEvent } from "@rbxts/matter"
|
|
import { Model, PlayerCharacter } from "ReplicatedStorage/ecs/components"
|
|
|
|
/**
|
|
* @todo
|
|
*/
|
|
function playersRagdollOnDeath(world: World): void {
|
|
for (const [_, playerCharacter, model] of world.query(PlayerCharacter, Model)) {
|
|
if (!model.model) continue
|
|
|
|
playerCharacter.humanoid.BreakJointsOnDeath = false
|
|
|
|
for (const [_] of useEvent(playerCharacter.humanoid, "Died")) {
|
|
model.model.GetDescendants().forEach((v, _) => {
|
|
if (v.IsA("Motor6D")) {
|
|
const attachment0 = new Instance("Attachment")
|
|
const attachment1 = new Instance("Attachment")
|
|
attachment0.CFrame = v.C0
|
|
attachment1.CFrame = v.C1
|
|
attachment0.Parent = v.Part0
|
|
attachment1.Parent = v.Part1
|
|
|
|
const ballSocketConstraint = new Instance("BallSocketConstraint")
|
|
ballSocketConstraint.Attachment0 = attachment0
|
|
ballSocketConstraint.Attachment1 = attachment1
|
|
ballSocketConstraint.LimitsEnabled = true
|
|
ballSocketConstraint.TwistLimitsEnabled = true
|
|
ballSocketConstraint.Parent = v.Parent
|
|
|
|
v.Destroy()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
for (const [id] of world.query(PlayerCharacter).without(Model)) {
|
|
world.despawn(id)
|
|
}
|
|
}
|
|
|
|
export = playersRagdollOnDeath |