-- -- File:: rockstar/helpers/terrain.ms -- Description:: Helper for editing objects with the terrain shaders -- -- Author:: Greg Smith 0 and uvChannel <= nummaps then ( texmap = getsubtexmap selMaterial uvChannel if texmap == undefined then ( imgTexMap.bitmap = undefined ) else ( imgTexMap.bitmap = texmap.bitmap ) ) else ( imgTexMap.bitmap = undefined ) ) -------------------------------------------------------------- -- -------------------------------------------------------------- fn RefreshMaterial = ( layers = #() if lstMaterial.selection != 0 then ( if numShaderMaps > 0 then append layers "1st layer" if numShaderMaps > 1 then append layers "2nd layer" if numShaderMaps > 2 then append layers "3rd layer" if numShaderMaps > 3 then append layers "4th layer" ) selMaterial = undefined selID = 0 if classof selObj.material == Rage_Shader then ( numShaderMaps = GetNumShaderMaps selObj.material if numShaderMaps > 0 then ( selMaterial = selObj.material ) ) else if classof selObj.material == Multimaterial then ( for i = 1 to selObj.material.materiallist.count do ( submat = selObj.material.materiallist[i] subid = selObj.material.materialIDList[i] if 0==lstMaterial.selection then lstMaterial.selection = 1 print lstMaterial.selection if classof submat == Rage_Shader and submat.name == lstMaterial.items[lstMaterial.selection] then ( selMaterial = submat selID = subid ) ) ) lstLayer.items = layers stcMatID.text = "Material ID: " + (selID as string) if selMaterial == undefined then ( stcName.text = "Shader Name: " ) else ( stcName.text = "Shader Name: " + (RstGetShaderName selMaterial) ) stcLayers.text = "Number of Layers: " + (numShaderMaps as string) RefreshLayer() ) -------------------------------------------------------------- -- -------------------------------------------------------------- fn RefreshObject = ( if selection.count == 0 then ( stcObject.text = "Object: None selected" return 0 ) selObj = selection[1] stcObject.text = "Object: " + selObj.name materialNames = #() materialIDs = #() if classof selObj.material == Rage_Shader then ( numShaderMaps = GetNumShaderMaps selObj.material if numShaderMaps > 0 then ( append materialNames selObj.material.name append materialIDs 0 ) ) else if classof selObj.material == Multimaterial then ( for i = 1 to selObj.material.materiallist.count do ( submat = selObj.material.materiallist[i] subid = selObj.material.materialIDList[i] if classof submat == Rage_Shader and undefined!=(findString (RsRemoveExtension(RstGetShaderName submat)) "terrain") then ( numShaderMaps = GetNumShaderMaps submat if numShaderMaps > 0 then ( append materialNames submat.name append materialIDs subid ) ) else ( messagebox ("material has an unsupported material in its list:"+submat.name) return false ) ) ) lstMaterial.items = materialNames lstMaterial.selection = 1 RefreshMaterial() ) -------------------------------------------------------------- -- -------------------------------------------------------------- fn SetupModifiers = ( selObj = selection[1] mat = undefined if classof selObj.material == Rage_Shader then ( mat = selObj.material ) else if classof selObj.material == Multimaterial then ( matID = materialIDs[lstMaterial.selection] idxFound = selObj.material.materialIDList[matID] if idxFound > 0 then ( mat = selObj.material.materiallist[idxFound] ) ) if mat != undefined and classof mat != Rage_Shader then ( messagebox "object doesnt have a rage shader" return 0 ) numMaps = GetNumShaderMaps mat if numMaps == 0 then ( messagebox "unsupported shader" return 0 ) -- maxops.collapsenode obj off for i = 1 to numMaps do ( tmap = getsubtexmap mat i if classof tmap == Bitmaptexture then ( tmap.coords.mapchannel = i ) -- newUV = Uvwmap() -- newUV.mapchannel = numMaps - i + 1 -- addmodifier obj newUV setChan = (numMaps * 2) - i + 1 if isUVA then setChan = setChan + 1 newPaint = VertexPaint() newPaint.mapchannel = setChan addmodifier selObj newPaint ) if isUVA then ( newUV = Uvwmap() newUV.mapchannel = numMaps + 1 addmodifier selObj newUV ) ) -------------------------------------------------------------- -- -------------------------------------------------------------- on SetupUVAChannel pressed do ( obj = selection[1] if classof obj.material != Rage_Shader then ( messagebox "object doesnt have a rage shader" return 0 ) numMaps = GetNumShaderMaps obj.material if numMaps == 0 then ( messagebox "unsupported shader" return 0 ) newUV = Uvwmap() newUV.mapchannel = numMaps + 1 addmodifier obj newUV\ ) --//////////////////////////////////////////////////////////// -- events --//////////////////////////////////////////////////////////// -------------------------------------------------------------- -- -------------------------------------------------------------- on btnRefresh pressed do ( RefreshObject() ) -------------------------------------------------------------- -- -------------------------------------------------------------- on btnSetup pressed do ( if selection.count != 1 then ( messagebox "Select an object first and press Refresh" ) else ( SetupModifiers() ) ) -------------------------------------------------------------- -- -------------------------------------------------------------- on btnUV_A pressed do ( SetupUVAChannel() ) -------------------------------------------------------------- -- -------------------------------------------------------------- on lstMaterial selected arg do ( RefreshMaterial() ) -------------------------------------------------------------- -- -------------------------------------------------------------- on lstLayer selected arg do ( RefreshLayer() ) -------------------------------------------------------------- -- -------------------------------------------------------------- on btnAlphaEdit pressed do ( if selection.count != 1 then ( messagebox "Select an object first and press Refresh" ) else ( foundID = -1 tries = 2 while tries > 0 and foundID == -1 do ( numModifiers = selObj.modifiers.count for i = 1 to numModifiers do ( if classof selObj.modifiers[i] == VertexPaint and selObj.modifiers[i].mapChannel == alphaChannel then ( foundID = i exit ) ) if foundID == -1 then SetupModifiers() tries = tries - 1 ) if foundID != -1 then ( max modify mode modPanel.setCurrentObject selObj.modifiers[foundID] ) ) ) ) try CloseRolloutFloater RsMultiUtil catch() RsMultiUtil = newRolloutFloater "Terrain Setup" 400 400 50 126 addRollout RsMultiRoll RsMultiUtil