c0balt60/promise_character
v0.1.3 ·
Promises a character tree
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)
:andThen(function(char)
-- All members are properly typed and defined!
char.Head.face.Texture = ""
end)
-- alternatively, you can use await
task.spawn(function()
local char = promiseR15(character):await()
char.Head.face.Texture = ""
end)
Here is what I envision as a practical use for this library:
local Players = game:GetService("Players")
local promiseCharacter = require(...)
local promiseChild = require(...)
local function doStuffWithR15(rig: promiseCharacter.CharacterRigR15)
rig.RightFoot:Destroy()
end
local function doStuffWithR6(rig: promiseCharacter.CharacterRigR6)
rig["Left Arm"]:Destroy()
end
local function handleCharacterModel(model: Model)
local rigType = promiseChild.promiseChildOfClass(model, "Humanoid"):await().RigType.Name
if rigType == "R15" then
local rig15 = promiseCharacter.promiseR15(model)
rig15.Head.Neck:Destroy() -- R15 specific logic
doStuffWithR15(rig15)
elseif rigType == "R6" then
local rig6 = promiseCharacter.promiseR6(model)
rig6.Torso:Destroy() -- R6 specific logic
doStuffWithR6(rig6)
else
error(`{model.Name} has an unknown rig type! {rigType}`)
end
end
Players.PlayerAdded:Connect(function(player)
print("Player joined: ", player.Name)
if player.Character then
handleCharacterModel(player.Character)
end
player.CharacterAdded:Connect(handleCharacterModel)
end)