h4x7o0r Posted December 11, 2011 Share Posted December 11, 2011 Hey all , i want to make a toggle for water shader ( E.g When i press "K" button to turns the shader on / off ). Here is the code : toggle = false function water() -- Version check if getVersion ().sortable < "1.1.0" then outputChatBox( "Resource is not compatible with this client." ) return end -- Create shader local myShader, tec = dxCreateShader ( "water.fx" ) if not myShader then outputChatBox( "Could not create shader. Please use debugscript 3" ) else outputChatBox( "Using technique " .. tec ) -- Set textures local textureVol = dxCreateTexture ( "images/smallnoise3d.dds" ); local textureCube = dxCreateTexture ( "images/cube_env256.dds" ); dxSetShaderValue ( myShader, "microflakeNMapVol_Tex", textureVol ); dxSetShaderValue ( myShader, "showroomMapCube_Tex", textureCube ); -- Apply to global txd 13 engineApplyShaderToWorldTexture ( myShader, "waterclear256" ) -- Update water color incase it gets changed by persons unknown setTimer( function() if myShader then local r,g,b,a = getWaterColor() dxSetShaderValue ( myShader, "gWaterColor", r/255, g/255, b/255, a/255 ); end end ,100,0 ) end end addCommandHandler("water", water) Where should i put the "if statement for the toggle" and bind button Link to comment
Castillo Posted December 11, 2011 Share Posted December 11, 2011 (edited) -- -- c_water.lua -- local waterOn = false addEventHandler( "onClientResourceStart", resourceRoot, function() -- Version check if getVersion ().sortable < "1.1.0" then return end -- Create shader myShader, tec = dxCreateShader ( "water.fx" ) if myShader then outputChatBox( "Using technique " .. tec ) -- Set textures local textureVol = dxCreateTexture ( "images/smallnoise3d.dds" ); local textureCube = dxCreateTexture ( "images/cube_env256.dds" ); dxSetShaderValue ( myShader, "microflakeNMapVol_Tex", textureVol ); dxSetShaderValue ( myShader, "showroomMapCube_Tex", textureCube ); end end ) function setWaterShaderEnabled(bool) if bool then engineApplyShaderToWorldTexture ( myShader, "waterclear256" ) -- Update water color incase it gets changed by persons unknown waterTimer = setTimer( function() if myShader then local r,g,b,a = getWaterColor() dxSetShaderValue ( myShader, "gWaterColor", r/255, g/255, b/255, a/255 ); end end ,100,0 ) waterOn = true else if isTimer(waterTimer) then killTimer(waterTimer) end engineRemoveShaderFromWorldTexture ( myShader, "waterclear256" ) waterOn = false end end bindKey("K","down", function () waterOn = not waterOn setWaterShaderEnabled(waterOn) end) Edited December 11, 2011 by Guest Link to comment
h4x7o0r Posted December 11, 2011 Author Share Posted December 11, 2011 Line 29 : Bad Argument @ 'engineApplyShaderToWorldTexture' . [Expected material at argument 1, got boolean] Link to comment
Castillo Posted December 11, 2011 Share Posted December 11, 2011 Copy my code again, I forgot about something. Link to comment
h4x7o0r Posted December 11, 2011 Author Share Posted December 11, 2011 Now everything's fine. Thank you very much. Link to comment
h4x7o0r Posted January 2, 2012 Author Share Posted January 2, 2012 How can I set this to be active when the resource starts ? Link to comment
Castillo Posted January 2, 2012 Share Posted January 2, 2012 -- -- c_water.lua -- local waterOn = false function setWaterShaderEnabled(bool) if bool then engineApplyShaderToWorldTexture ( myShader, "waterclear256" ) -- Update water color incase it gets changed by persons unknown waterTimer = setTimer( function() if myShader then local r,g,b,a = getWaterColor() dxSetShaderValue ( myShader, "gWaterColor", r/255, g/255, b/255, a/255 ); end end ,100,0 ) waterOn = true else if isTimer(waterTimer) then killTimer(waterTimer) end engineRemoveShaderFromWorldTexture ( myShader, "waterclear256" ) waterOn = false end end addEventHandler( "onClientResourceStart", resourceRoot, function() -- Version check if getVersion ().sortable < "1.1.0" then return end -- Create shader myShader, tec = dxCreateShader ( "water.fx" ) if myShader then outputChatBox( "Using technique " .. tec ) -- Set textures local textureVol = dxCreateTexture ( "images/smallnoise3d.dds" ); local textureCube = dxCreateTexture ( "images/cube_env256.dds" ); dxSetShaderValue ( myShader, "microflakeNMapVol_Tex", textureVol ); dxSetShaderValue ( myShader, "showroomMapCube_Tex", textureCube ); end setWaterShaderEnabled(true) end ) bindKey("K","down", function () waterOn = not waterOn setWaterShaderEnabled(waterOn) end) Link to comment
h4x7o0r Posted January 2, 2012 Author Share Posted January 2, 2012 Like always Castillo to the rescue. Thank you very much man . It's working very well. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now