218 lines
5.6 KiB
Plaintext
Executable File
218 lines
5.6 KiB
Plaintext
Executable File
--
|
|
-- File:: rockstar/helpers/shaderchange.ms
|
|
-- Description:: Shader Variable Parameter Changer
|
|
--
|
|
-----------------------------------------------------------------------------
|
|
|
|
rollout ShaderChangeRoll "Shader Attribute Changer"
|
|
(
|
|
-----------------------------------------------------------------------------------------
|
|
-- 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" )
|
|
dropdownlist lstName "Name:" items:#("Specular Falloff", "Specular Intensity", "Bumpiness")
|
|
spinner spnValue "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:2
|
|
button btnSetAbove "Change If Above"
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- Methods
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
-- Populate combo box from our material list
|
|
fn populateShaderList = (
|
|
|
|
local materials = #()
|
|
|
|
for obj in $selection do
|
|
(
|
|
if ( ( Editable_Mesh != classof( obj ) ) and
|
|
( Editable_Poly != classof( obj ) ) ) then
|
|
continue
|
|
|
|
if ( Multimaterial != classof( obj.material ) ) then
|
|
continue
|
|
|
|
if ( 0 == ( getNumSubMtls obj.material ) ) then
|
|
continue
|
|
|
|
for submat in obj.material.materialList do
|
|
(
|
|
|
|
if ( Rage_Shader != classof( submat ) ) then
|
|
continue
|
|
|
|
if ( 0 != ( findItem materials submat ) ) then
|
|
continue
|
|
|
|
append materials submat
|
|
|
|
)
|
|
)
|
|
|
|
lstShader.items = #()
|
|
items = #( "All" )
|
|
|
|
for mat in materials do
|
|
(
|
|
|
|
if ( Rage_Shader != classof( mat ) ) then
|
|
continue
|
|
|
|
shaderName = RstGetShaderName mat
|
|
if ( 0 != ( findItem items shaderName ) ) then
|
|
continue
|
|
|
|
append items shaderName
|
|
|
|
)
|
|
lstShader.items = items
|
|
)
|
|
|
|
fn modifyShaderValue material valname checkvalue tolerance newvalue = (
|
|
|
|
if classof material == Multimaterial then (
|
|
|
|
for submat in material.materiallist do (
|
|
|
|
modifyShaderValue submat valname checkvalue tolerance newvalue
|
|
)
|
|
)
|
|
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 varName == valname and varType == "float" then (
|
|
|
|
currvalue = RstGetVariable material i
|
|
|
|
if (currvalue >= (checkvalue - tolerance)) and (currvalue <= (checkvalue + tolerance)) then (
|
|
|
|
RstSetVariable material i newvalue
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
fn modifyShaderValueIfAbove material valname checkvalue newvalue = (
|
|
|
|
if classof material == Multimaterial then (
|
|
|
|
for submat in material.materiallist do (
|
|
|
|
modifyShaderValueIfAbove submat valname checkvalue newvalue
|
|
)
|
|
)
|
|
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 varName == valname and varType == "float" then (
|
|
|
|
currvalue = RstGetVariable material i
|
|
|
|
if (currvalue >= checkvalue) then (
|
|
|
|
RstSetVariable material i newvalue
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
fn setSelected = (
|
|
|
|
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
|
|
)
|
|
)
|
|
)
|
|
|
|
fn setSelectedIfAbove =(
|
|
|
|
for obj in selection do (
|
|
|
|
if classof obj == Editable_mesh or classof obj == Editable_poly do (
|
|
|
|
modifyShaderValueIfAbove obj.material lstName.selected spnValue.value spnNewValue.value
|
|
)
|
|
)
|
|
)
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- Events
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
--
|
|
--
|
|
--
|
|
on btnSet pressed do (
|
|
|
|
setSelected()
|
|
)
|
|
|
|
--
|
|
--
|
|
--
|
|
on btnSetAbove pressed do (
|
|
|
|
setSelectedIfAbove()
|
|
)
|
|
|
|
--
|
|
-- Rollout open event, initialise dropdown shader list
|
|
--
|
|
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
|