SyntaxGameServer/RCCService2020/internalscripts/thumbnails/Head.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