143 lines
3.9 KiB
Lua
143 lines
3.9 KiB
Lua
-- Head v1.2.0
|
|
|
|
local assetUrl, fileExtension, x, y, baseUrl, mannequinId = ...
|
|
|
|
local ThumbnailGenerator = game:GetService("ThumbnailGenerator")
|
|
ThumbnailGenerator:AddProfilingCheckpoint("ThumbnailScriptStarted")
|
|
|
|
local DFFlagHeadThumbnailMannequins = settings():GetFFlag("HeadThumbnailMannequins")
|
|
|
|
-- Modules
|
|
local CreateExtentsMinMax
|
|
local MannequinUtility
|
|
local ScaleUtility
|
|
|
|
if DFFlagHeadThumbnailMannequins then
|
|
CreateExtentsMinMax = require(ThumbnailGenerator:GetThumbnailModule("CreateExtentsMinMax"))
|
|
MannequinUtility = require(ThumbnailGenerator:GetThumbnailModule("MannequinUtility"))
|
|
ScaleUtility = require(ThumbnailGenerator:GetThumbnailModule("ScaleUtility"))
|
|
end
|
|
|
|
pcall(function() game:GetService("ContentProvider"):SetBaseUrl(baseUrl) end)
|
|
game:GetService("ScriptContext").ScriptsDisabled = true
|
|
game:GetService("UserInputService").MouseIconEnabled = false
|
|
|
|
local objects = game:GetObjects(assetUrl)
|
|
ThumbnailGenerator:AddProfilingCheckpoint("ObjectsLoaded")
|
|
|
|
local headScaleType
|
|
local mannequin
|
|
|
|
if DFFlagHeadThumbnailMannequins then
|
|
headScaleType = ScaleUtility.GetObjectsScaleType(objects)
|
|
mannequin = MannequinUtility.LoadMannequinForScaleType(headScaleType)
|
|
else
|
|
mannequin = game:GetObjects(baseUrl.. "/asset/?id=" .. tostring(mannequinId))[1]
|
|
mannequin.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
|
|
mannequin.Parent = workspace
|
|
end
|
|
|
|
ThumbnailGenerator:AddProfilingCheckpoint("MannequinLoaded")
|
|
|
|
local function addFaceDecal(head)
|
|
if head:FindFirstChild("face") then
|
|
return
|
|
end
|
|
|
|
local face = Instance.new("Decal")
|
|
face.Name = "face"
|
|
face.Texture = "rbxasset://textures/face.png"
|
|
face.Parent = head
|
|
end
|
|
|
|
local function replaceMannequinMeshPartHead(meshPartHead, meshHead)
|
|
local newHead = Instance.new("Part")
|
|
newHead.Size = meshPartHead.Size
|
|
newHead.CFrame = meshPartHead.CFrame
|
|
newHead.Color = meshPartHead.Color
|
|
newHead.Name = "Head"
|
|
|
|
addFaceDecal(newHead)
|
|
|
|
local copiedAttachments = false
|
|
for _, child in pairs(meshHead:GetChildren()) do
|
|
if child:IsA("Vector3Value") and string.find(child.Name, "Attachment") then
|
|
copiedAttachments = true
|
|
|
|
local newAttachment = Instance.new("Attachment")
|
|
newAttachment.Name = child.Name
|
|
newAttachment.Position = child.Value
|
|
newAttachment.Parent = newHead
|
|
end
|
|
end
|
|
|
|
if not copiedAttachments then
|
|
for _, child in pairs(meshPartHead:GetChildren()) do
|
|
child.Parent = newHead
|
|
end
|
|
end
|
|
|
|
meshPartHead:Destroy()
|
|
newHead.Parent = mannequin
|
|
end
|
|
|
|
local function replaceMannequinHeadWithMeshHead()
|
|
for _, obj in pairs(objects) do
|
|
if obj:IsA("Folder") and obj.Name == "R15ArtistIntent" then
|
|
local head = obj.Head
|
|
addFaceDecal(head)
|
|
mannequin.Head:Destroy()
|
|
head.Parent = mannequin
|
|
end
|
|
end
|
|
end
|
|
|
|
local headObject = objects[1]
|
|
if headObject:IsA("Folder") then
|
|
replaceMannequinHeadWithMeshHead()
|
|
else
|
|
if DFFlagHeadThumbnailMannequins then
|
|
if mannequin.Head:IsA("MeshPart") then
|
|
replaceMannequinMeshPartHead(mannequin.Head, headObject)
|
|
end
|
|
else
|
|
mannequin.Head.BrickColor = BrickColor.Gray()
|
|
end
|
|
|
|
if mannequin.Head:FindFirstChild("Mesh") then
|
|
mannequin.Head.Mesh:Destroy()
|
|
end
|
|
headObject.Parent = mannequin.Head
|
|
end
|
|
|
|
if DFFlagHeadThumbnailMannequins then
|
|
-- Scale mannequin based on the scale type of the Head
|
|
local humanoid = mannequin:FindFirstChild("Humanoid")
|
|
if humanoid then
|
|
ScaleUtility.CreateProportionScaleValues(humanoid, headScaleType)
|
|
humanoid:BuildRigFromAttachments()
|
|
end
|
|
else
|
|
for _, child in pairs(mannequin:GetChildren()) do
|
|
if child:IsA("BasePart") and child.Name ~= "Head" then
|
|
child:Destroy()
|
|
end
|
|
end
|
|
end
|
|
|
|
local shouldCrop = false
|
|
local extentsMinMax
|
|
|
|
if DFFlagHeadThumbnailMannequins then
|
|
local focusParts = {
|
|
mannequin:FindFirstChild("Head")
|
|
}
|
|
|
|
shouldCrop = #focusParts > 0
|
|
extentsMinMax = CreateExtentsMinMax(focusParts)
|
|
end
|
|
|
|
local result, requestedUrls = ThumbnailGenerator:Click(fileExtension, x, y, --[[hideSky = ]] true, shouldCrop, extentsMinMax)
|
|
ThumbnailGenerator:AddProfilingCheckpoint("ThumbnailGenerated")
|
|
|
|
return result, requestedUrls |