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

0.8.1 • Public • Published

Atomic Binding

The credit for the original source code goes to Roblox. The contents of this file were taken from Roblox-provided AtomicBinding ModuleScript located under the RbxCharacterSounds LocalScript, which itself is located in the StarterPlayerScript service.

Basic Usage

Note that there is autocomplete support for alias values. You should use slash (/) to see the possible paths.

type Character = Model & {
	Humanoid: Humanoid & {
		Animator: Animator;
	};
	HumanoidRootPart: BasePart;
};

// Notice how we first invoke an empty function.
const bindingFromBase = createAtomicBinding<Character>()({
    animator: "Humanoid/Animator",
    humanoid: "Humanoid",
    rootPart: "HumanoidRootPart",
}, ({ root, animator, humanoid, rootPart }) => {
    // do something with "Animator"
    // do something with "Humanoid"
    // do something with "HumanoidRootPart"

    return () => {
        // Disconnect all "instances" related connections
    };
});

const manifest = createManifest<Character>({
    animator: "Humanoid/Animator",
    humanoid: "Humanoid",
    rootPart: "HumanoidRootPart",
})

const binding = createAtomicBinding(manifest, ({ root, animator, humanoid, rootPart }) => {
    // do something with "Animator"
    // do something with "Humanoid"
    // do something with "HumanoidRootPart"

    return () => {
        // Disconnect all "instances" related connections
    };
})

const character = {} as Character

// some CharacterAdded event handler
binding.bindRoot(character);

// some CharacterRemoving event handler
binding.unbindRoot(character);

binding.destroy();

The "getInstanceFromPath" function is quite helpful when we just want to ensure that the instance exists at the provided path.

type SomeModel = Model & {
    Particles: Folder & {
        Particle1: ParticleEmitter;
        Particle2: ParticleEmitter;
    }
}

const someModel = {} as SomeModel

const particle = getInstanceFromPath(someModel, "Particles/Particle1")
if (!particle) {
    return
}

The waitForInstanceFromPath function does the same as the getInstanceFromPath function, but instead utilizes WaitForChild method of the Instance. This means that the return type will never be undefined.

Package Sidebar

Install

npm i @rbxts/atomic-binding

Weekly Downloads

0

Version

0.8.1

License

MIT

Unpacked Size

25.3 kB

Total Files

14

Last publish

Collaborators

  • mathfox