@rbxts/promise-character
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

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);
});

Package Sidebar

Install

npm i @rbxts/promise-character

Weekly Downloads

207

Version

1.0.3

License

ISC

Unpacked Size

24.7 kB

Total Files

4

Last publish

Collaborators

  • validark