155 lines
5.3 KiB
Plaintext
Executable File
155 lines
5.3 KiB
Plaintext
Executable File
--
|
|
-- File:: rockstar/helpers/shaderchange.ms
|
|
-- Description:: Shader Variable Parameter Changer
|
|
--
|
|
-----------------------------------------------------------------------------
|
|
|
|
rollout ShaderChangeRoll "Shader Attribute Changer"
|
|
(
|
|
-----------------------------------------------------------------------------------------
|
|
-- LOCALS
|
|
-----------------------------------------------------------------------------------------
|
|
local materials = #()
|
|
-----------------------------------------------------------------------------------------
|
|
-- Interface
|
|
-----------------------------------------------------------------------------------------
|
|
hyperlink lnkHelp "Help?" address:"https://devstar.rockstargames.com/wiki/index.php/Change_Shaders#Shader_Attribute_Changer" align:#right color:(color 0 0 255) hoverColor:(color 0 0 255) visitedColor:(color 0 0 255)
|
|
|
|
dropdownlist lstShader "Shader:" items:#( "All on selected Objects" )
|
|
dropdownlist lstName "Attribute Name:"
|
|
spinner spnValue "Target Value to Change:"range:[0,5000,0.01]
|
|
spinner spnTolerance "Tolerance:" range:[0,5000,0.01]
|
|
spinner spnNewValue "New Value:" range:[0,5000,100]
|
|
button btnSet "Change" across:3 width:95 align:#left offset:[-5,0]
|
|
button btnSetBelow "If Below Target" width:95 align:#left
|
|
button btnSetAbove "If Above Target" width:95 align:#left offset:[5,0]
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- Methods
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
-- POPULATE THE LIST OF ATTRIBUTE VARIBLES
|
|
fn populateVarList =
|
|
(
|
|
if (lstShader.selected == "All on selected Objects") then
|
|
(
|
|
local varArray = #()
|
|
for mat in materials where (mat!=undefined) do for n=1 to (RstGetVariableCount mat) where (RstGetVariableType mat n == "float") do appendIfUnique varArray (RstGetVariableName mat n)
|
|
lstName.items = varArray
|
|
)
|
|
else
|
|
(
|
|
local selShader = undefined
|
|
-- GET SELCTED SHADER
|
|
for mat in materials while selShader == undefined do if (RstGetShaderName mat == lstShader.selected) do selShader = mat
|
|
-- GET FLOAT VARS OFF SHADER
|
|
if (selShader != undefined) do
|
|
(
|
|
lstName.items = (for n=1 to (RstGetVariableCount selShader) where (RstGetVariableType selShader n == "float") collect RstGetVariableName selShader n)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Populate combo box from our material list
|
|
fn populateShaderList =
|
|
(
|
|
materials = #()
|
|
|
|
for obj in $selection do
|
|
(
|
|
if (GetAttrClass obj == "Gta Object") then
|
|
(
|
|
materialList = RsGetMaterialsOnObjFaces obj
|
|
join materials materialList
|
|
)
|
|
)
|
|
|
|
items = #("All on selected Objects")
|
|
|
|
materials = makeUniqueArray materials
|
|
for mat in materials do
|
|
(
|
|
if(ClassOf mat == Rage_Shader) then
|
|
(
|
|
shaderName = RstGetShaderName mat
|
|
appendIfUnique items shaderName
|
|
)
|
|
|
|
)
|
|
sort items
|
|
lstShader.items = items
|
|
|
|
-- GET VARS
|
|
populateVarList()
|
|
)
|
|
|
|
|
|
fn modifyShaderValue material valname checkvalue tolerance newvalue type =
|
|
(
|
|
if classof material == Multimaterial then
|
|
(
|
|
for submat in material.materiallist do modifyShaderValue submat valname checkvalue tolerance newvalue type
|
|
)
|
|
else if classof material == Rage_Shader then
|
|
(
|
|
-- DHM -- 2007-05-22 -- Check the shader name has been selected or "All"
|
|
local shaderName = RstGetShaderName material
|
|
local selectedShaderName = lstShader.selected
|
|
|
|
if ((1 != lstShader.selection) and (shaderName != selectedShaderName)) then return false -- Ignore submaterial
|
|
-- End
|
|
|
|
varcount = RstGetVariableCount material
|
|
|
|
for i = 1 to varcount do (
|
|
|
|
varName = RstGetVariableName material i
|
|
varType = RstGetVariableType material i
|
|
|
|
if toupper varName == toupper valname and varType == "float" then
|
|
(
|
|
currvalue = RstGetVariable material i
|
|
if (type == #tol) AND (currvalue >= (checkvalue - tolerance)) and (currvalue <= (checkvalue + tolerance)) then RstSetVariable material i newvalue
|
|
if (type == #above) AND (currvalue >= checkvalue) then RstSetVariable material i newvalue
|
|
if (type == #below) AND (currvalue <= checkvalue) then RstSetVariable material i newvalue
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- CHANGE ON SELECTION
|
|
fn setSelected type =
|
|
(
|
|
for obj in selection do
|
|
(
|
|
if classof obj == Editable_mesh or classof obj == Editable_poly do
|
|
(
|
|
modifyShaderValue obj.material lstName.selected spnValue.value spnTolerance.value spnNewValue.value type
|
|
)
|
|
)
|
|
)
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- Events
|
|
-----------------------------------------------------------------------------------------
|
|
on btnSet pressed do setSelected #tol
|
|
on btnSetAbove pressed do setSelected #above
|
|
on btnSetBelow pressed do setSelected #below
|
|
|
|
on lstShader selected arg do populateVarList()
|
|
|
|
on ShaderChangeRoll open do
|
|
(
|
|
populateShaderList()
|
|
-- Install handler for selection updates
|
|
callbacks.addScript #selectionSetChanged "ShaderChangeRoll.populateShaderList()" id:#shaderChangeSelection
|
|
)
|
|
|
|
on ShaderChangeRoll close do
|
|
(
|
|
-- Remove handler for selection updates
|
|
callbacks.removeScripts id:#shaderChangeSelection
|
|
)
|
|
)
|
|
-- End of script
|