@rbxts/promise-character
v1.0.3
Published
Promise all members of a character rig exist, then dot access!
Downloads
756
Maintainers
Readme
promise-character
Usage:
Pass a Player's Character Model
into promiseR15
or promiseR6
, which will promise via promiseTree
from validate-tree
that all the members defined in the R6/R15 trees exist (all members except those generated by Sound/Animate scripts).
promiseR15(character).then(char => {
// All members are properly typed and defined!
char.Head.face.Texture = ""
});
// alternatively, one may use `await`
async function f() {
const char = await promiseR15(character);
char.Head.face.Texture = ""
}
Here is what I envision as a practical use for this library:
import {
promiseR6,
promiseR15,
CharacterRigR15,
CharacterRigR6,
} from "@rbxts/promise-character";
import { Players } from "@rbxts/services";
import { promiseChildOfClass } from "@rbxts/promise-child";
function doStuffWithR15(rig: CharacterRigR15) {
rig.RightFoot.Destroy();
}
function doStuffWithR6(rig: CharacterRigR6) {
rig["Left Arm"].Destroy();
}
async function handleCharacterModel(model: Model) {
const rigType = (await promiseChildOfClass(model, "Humanoid")).RigType.Name;
if (rigType === "R15") {
const rig15 = await promiseR15(model);
rig15.Head.Neck.Destroy(); // R15 specific logic :)
doStuffWithR15(rig15);
} else if (rigType === "R6") {
const rig6 = await promiseR6(model);
rig6.Torso.Destroy(); // R6 specific logic :)
doStuffWithR6(rig6);
} else {
throw `${model.Name} has an unknown rig type! ${rigType}`;
}
}
Players.PlayerAdded.Connect(({ Name, Character, CharacterAdded }) => {
print(`Welcome, ${Name}`);
if (Character) handleCharacterModel(Character);
CharacterAdded.Connect(handleCharacterModel);
});