Files
2025-09-29 00:52:08 +02:00

3845 lines
279 KiB
Plaintext
Executable File

------------------------------------------------------------------------------------
--
-- File:: RsTinyRAG.ms
-- Description:: Scene Analysis Tool - gets memory dump and displays info on the loaded entities (mostly texture info so far)
--
-- Author:: Martin Good <martin.good@rockstarnorth.com>
-- Date:: 13/11/2019
--
------------------------------------------------------------------------------------
-- TODOs --
-- Max Viewport -> RAG Camera in coord source ddl
-- EXTRA GROUPS TO ADD --
/*
(Virtual Map) :
( +, -, all the elements...)
*/
RSTA_LoadCommonFunction #("FN_RSTA_XML.ms")
fileIn "pipeline/util/RAG_funcs.ms"
filein "pipeline/util/assert.ms"
global RsTinyRAG
global RsTinyRAGPos = try (GetDialogPos RsTinyRAG) catch( [4,64] )
try (DestroyDialog RsTinyRAG) catch()
rollout RsTinyRAG "RAG Button Assist Tool"
(
struct sRsColourValues (orphan, hd, lod, slod1, slod2, slod3, slod4, opaque, alpha, decal, cutout, shadow, water, txd1, txd2, txd3, txd4,
isHD, usingHD, sharedHD, capableHD, switchingHD, notHD,
priRequired, priHigh, priMedium, priLow, priStatic, priNotAProp, priInvalid,
densityXMin, densityMin, densityMid, densityMax, densityXMax,
default, picker, IMAP, txd, texture, shader, attribute )
-- Dialog Sizes
local TR_WIDTH = 465
local TR_HEIGHT = 500
local DEBUG_ADD_WIDGET_LABELS = false -- DEBUG flag to add widget.name to Tooltips by AddLabelsToTooltips() <-- call this in listener to add them if not on by default
local TRACE = 0 -- DEBUG Trace Messages : 0 = DISABLED, 1 = ENABLED
--local DARK_SCHEME_MULTIPLIER = if ( (colorman.getcolor #text )*255 )[1] > 128 then ( 0.65 ) else ( 1.0 )
local DARK_SCHEME_MULTIPLIER = try( if (colorMan.getColorTheme() == #dark) then ( 0.70 ) else ( 1.0 ) ) catch(0.70) -- Broken in 2012... so a try defaulting to dark
local RAINBOW_UI = true
local DEFAULT_COLOUR = ( (colorMan.getColor #pressedButton) * 255 ) -- if RAINBOW_UI then ( (color 110 182 230) * DARK_SCHEME_MULTIPLIER ) else
local CONNECT_COLOUR = if RAINBOW_UI then ( (color 80 210 90) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR )
local BLOCK_COLOUR = if RAINBOW_UI then ( (color 135 170 205) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- LIGHT BLUE
local TIME_COLOUR = if RAINBOW_UI then ( (color 135 205 205) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- CYAN
local WIRE_COLOUR = if RAINBOW_UI then ( (color 140 210 135) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- LIGHT GREEN
local LIGHT_COLOUR = if RAINBOW_UI then ( (color 205 190 135) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- YELLOW
local LOD_COLOUR = if RAINBOW_UI then ( (color 135 135 206) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- PURPLISH
local OCCL_COLOUR = if RAINBOW_UI then ( (color 205 135 200) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- MAGENTA
local TOGGLE_COLOUR = if RAINBOW_UI then ( (color 205 175 135) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- ORANGE
local CONTROL_COLOUR = if RAINBOW_UI then ( (color 205 145 135) * DARK_SCHEME_MULTIPLIER ) else ( DEFAULT_COLOUR ) -- RED
local OBJECT_HELPER_COLOUR = color 70 250 40
local CAMERA_HELPER_COLOUR = color 60 190 255
local buttonColours = if (RAINBOW_UI) then
(
sRsColourValues orphan:( color 210 90 86 255 ) hd:( color 210 138 86 255 ) lod:( color 210 190 90 255 ) \
slod1:( color 90 180 80 255 ) slod2:( color 90 170 180 255 ) slod3:( color 90 100 190 255 ) slod4:( color 140 90 180 ) \
opaque:( color 90 180 80 255 ) alpha:( color 210 90 86 255 ) decal:( color 90 100 190 255 ) cutout:( color 210 190 90 255 ) \
shadow:( DEFAULT_COLOUR * 0.8 )
)
else
(
sRsColourValues orphan:DEFAULT_COLOUR hd:DEFAULT_COLOUR lod:DEFAULT_COLOUR \
slod1:DEFAULT_COLOUR slod2:DEFAULT_COLOUR slod3:DEFAULT_COLOUR slod4:DEFAULT_COLOUR \
opaque:DEFAULT_COLOUR alpha:DEFAULT_COLOUR decal:DEFAULT_COLOUR cutout:DEFAULT_COLOUR \
shadow:DEFAULT_COLOUR
)
local RAGcolours = sRsColourValues orphan:( color 255 0 0 255 ) hd:( color 255 110 0 255 ) lod:( color 255 255 0 255 ) \
slod1:( color 110 255 0 255 ) slod2:( color 0 255 220 255 ) slod3:( color 0 100 255 255 ) slod4:( color 130 0 255 255 ) \
opaque:( color 0 255 0 255 ) alpha:( color 255 0 0 255 ) decal:( color 0 0 255 255 ) cutout:( color 255 255 0 255 ) water:( color 0 255 255 255 ) \
txd1:(color 255 70 0 255) txd2:(color 0 210 255 255) txd3:(color 255 210 0 255) txd4:(color 210 0 255 255) \
isHD:(color 0 0 255 255) usingHD:(color 0 255 0 255) sharedHD:(color 0 220 255 255) capableHD:(color 255 250 0 255) switchingHD:(color 255 135 0 255) notHD:(color 180 0 0 255) \
priRequired:(color 120 255 0 255) priHigh:(color 255 255 0 255) priMedium:(color 255 120 0 255) priLow:(color 255 0 0 255) \
priStatic:(color 80 0 255 255) priNotAProp:(color 0 0 50 255) priInvalid:(color 255 0 255 255) \
densityXMin:(color 0 0 255 255) densityMin:(color 80 120 255 255) densityMid:(color 80 255 0 255) densityMax:(color 255 160 0 255) densityXMax:(color 255 0 0 255) \
default:( color 120 255 0 255 ) picker:( color 40 255 0 255 ) IMAP:( color 0 240 255 255 ) txd:( color 0 255 80 255 ) texture:( color 220 255 0 255 ) shader:( color 255 180 0 255 ) attribute:( color 200 255 0 255 )
local initialWidgetOffsets = #()
local FP_PRECISION = "#.2f"
--local LODLevels = #("", "OHD", "HD", "LOD", "SLOD1", "SLOD2", "SLOD3", "SLOD4")
--local weatherItems = #("DISABLED","Neu","HiPr","Sun","Mst","Fog","Clr","Ovc","OvcD","Drz","Rai","Thu","ThSt","Hur","Shw","Hai","Sle","SnwClr","Snl","Snw","Bliz","GrndBliz","WiOt","Sand","rain_test")
local weatherItems = #("DISABLED","EXS","CLR","CLS","SMG","FOGGY","OVC","RAI","THU","CLG","NEU","SNW","BLI","SNL","XMAS","HALLOWEEN")
local wireFrameItems = #()
struct sRswireMode (item, optionMode, groupLabel, RAGvalue)
local SEPARATOR = stringStream "" -- Will be filled with "-" to cover the ddlWireMode width
local PREVIOUS_WIREMODE = 1 -- Used for skipping over SEPARATORs in ddlWireMode
-- !!!! IMPORTANT INFO FOR ADDING NEW GROUPS !!!!
--
-- For IsolateGroup to work (right-click function for isolating individual checkbuttons in a group), the grouped widgets need to be in an array with a dummy groupbox in the first index
-- eg. WIDGET_CONTROLS = #( gbxWidgetGroup, chkWidget1, chkWidget2 .. chkWidgetN )
-- Will then need an event with the following template :
-- on widget rightclick do ( IsolateGroup widget WIDGET_CONTROLS ; GroupUpdateFunction )
--
-- Wire Mode Drop Down Items
-- SEPARATOR are skipped over automatically
-- If adding new ones, update SetRAGWireframeMode function if any non-standard options are needed
-- For any new option widgets : add widget names to a new WIREOPTION_XXXXX_WIDGETS array + add same to WIREOPTION_ALL_WIDGETS,
-- (First is used for showing/hiding when ddlWireMode changes, second for storing/using offsets for showing/hiding rows)
-- Add the new WIREOPTION group to WIREOPTION_WIDGETS,
-- + add/duplicate & modify events that call SetRAGWireframeWidgets()
-- dotNetTrackBars need initialised in the open event (value tooltips set up automatically by TrackbarMouseEvent function)
-- Need to think of a way to remove optionMode... it needs tied in to the order of WIREOPTION_WIDGETS (if they're out of synch, update problems will occur when the ddlWireMode changes)
-- Most likely findItem optionRow gbxWidget in the open event !!!
local wireModes = #(
sRsWireMode item:"Picker" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Picker",
sRsWireMode item:"IMAP" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Model Path Contains ...",
sRsWireMode item:"Name" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Model Name Is ...",
sRsWireMode item:"TXD Name" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Model Uses Parent Txd ...",
sRsWireMode item:"Texture" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Shader Uses Texture ...",
sRsWireMode item:SEPARATOR optionMode:0 groupLabel:"YOU SHOULDN'T SEE THIS TEXT!" RAGvalue:"SEPARATOR_NON_MODE",
sRsWireMode item:"Shaders..." optionMode:5 groupLabel:"OPTIONS - (Shaders)" RAGvalue:"Shader Name Is ...",
sRsWireMode item:"Attributes..." optionMode:6 groupLabel:"OPTIONS - (Object Attributes)" RAGvalue:"Is Prop",
sRsWireMode item:"Color Per..." optionMode:8 groupLabel:"OPTIONS - (Color by Something)" RAGValue:"Random Colour Per Entity",
sRsWireMode item:SEPARATOR optionMode:0 groupLabel:"YOU SHOULDN'T SEE THIS TEXT!" RAGvalue:"SEPARATOR_NON_MODE",
sRsWireMode item:"BLOCK ID" optionMode:1 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"Model Path Contains ...",
sRsWireMode item:SEPARATOR optionMode:0 groupLabel:"YOU SHOULDN'T SEE THIS TEXT!" RAGvalue:"SEPARATOR_NON_MODE",
sRsWireMode item:"LOD Level" optionMode:2 groupLabel:"OPTIONS - (LOD Levels)" RAGvalue:"LOD Type",
sRsWireMode item:"Buckets" optionMode:3 groupLabel:"OPTIONS - (Render Buckets)" RAGvalue:"Render Buckets",
sRsWireMode item:"HD State" optionMode:4 groupLabel:"OPTIONS - (HD State)" RAGvalue:"Model HD State",
sRsWireMode item:"Priority Level" optionMode:10 groupLabel:"OPTIONS - (Priority Level)" RAGValue:"Prop Priority Level",
sRsWireMode item:SEPARATOR optionMode:0 groupLabel:"YOU SHOULDN'T SEE THIS TEXT!" RAGvalue:"SEPARATOR_NON_MODE",
sRsWireMode item:"Overdraw" optionMode:9 groupLabel:"OPTIONS - (Extra TXD Names)" RAGvalue:"OverDraw",
sRsWireMode item:"Tex Density" optionMode:7 groupLabel:"OPTIONS - (Tex Density)" RAGvalue:"Tex Density",
sRSWireMode item:"Light Costs" optionmode:11 groupLabel:"OPTIONS - (Light Costs)" RAGValue:"LIGHT_COST_NON_MODE"
)
local collisionHash = #(
datapair item:"OFF" RAGvalue:undefined,
datapair item:"MOVER" RAGvalue:"Optimization/Draw map collision (MOVER)",
datapair item:"WEAPON" RAGvalue:"Optimization/Draw map collision (WEAPON)",
datapair item:"COVER" RAGvalue:"Optimization/Draw map collision (COVER)",
datapair item:"HORSE" RAGvalue:"Optimization/Draw map collision (HORSE)",
datapair item:"Hrs AVOID" RAGvalue:"Optimization/Draw map collision (HORSE AVOIDANCE)",
datapair item:"STAIR" RAGvalue:"Optimization/Draw map collision (STAIRS SLOPE)",
datapair item:"NO NAV" RAGvalue:"Optimization/Draw map collision (NO NAVMESH)"
)
local otherCollisionHash = #(
datapair item:"OFF" RAGvalue:undefined,
datapair item:"Pavement" RAGvalue:"Optimization/Draw pavement",
datapair item:"Deep Snow" RAGvalue:"Optimization/Draw deep snow",
datapair item:"Mud" RAGvalue:"Optimization/Draw mud",
datapair item:"PedDensity" RAGvalue:"Optimization/Draw ped density",
datapair item:"Slide" RAGvalue:"Optimization/Draw quadruped slide map"
)
-- Notable Warp Coordinates by Project
local warpPoints = case of
(
( matchPattern ( ::RsConfigGetAssetsDir() ) pattern:"*/rdr3/*" ):
(
#(
datapair label:"Valentine (l_09j)" location:[-295,790,117],
datapair label:"New France (p_15c)" location:[2665,-1213,52],
datapair label:"New France2 (p_15)" location:[2726,-1284,50],
datapair label:"New Slum (p_14)" location:[2706,-1137,51],
datapair label:"New France 06 (p_15j)" location:[2709,-1213,52],
datapair label:"New Slum (p_15g)" location:[2804,-1104,45],
datapair label:"New Market (p_15p)" location:[2781,-1339,45],
datapair label:"New Market (p_15an)" location:[2872, -1219, 46],
datapair label:"Marsh (o_15j)" location:[2234,-734,42]
)
)
( matchPattern ( ::RsConfigGetAssetsDir() ) pattern:"*/americas/*" ):
(
#(
datapair label:"Hottest Spottest (ds23a)" location:[-1206,-1778,2]
)
)
default:
(
#()
)
)
-- Gaps between Dialog edges and Groups
local TR_GROUP_GAP = 4
local TR_GROUP_HGAP = TR_GROUP_GAP + 4
-- Gaps between Border edge and Widgets
local TR_GROUP_HBORDERS = 18
local TR_GROUP_BORDERS = TR_GROUP_HBORDERS + 10
-- Gaps between 2 Widgets
local TR_SMALL_GAP = 3
local TR_LARGE_GAP = TR_SMALL_GAP + 8
local TR_SMALL_BUTTON_HEIGHT = 20 -- 90% of Button Heights
local TR_LARGE_BUTTON_HEIGHT = (2*TR_SMALL_BUTTON_HEIGHT) + TR_SMALL_GAP -- Large height equivalent to 2 Small Buttons + small gap between
local TR_WIRE_BUTTON_HEIGHT = TR_SMALL_BUTTON_HEIGHT - 1
local TR_TRACKBAR_HEIGHT = (TR_WIRE_BUTTON_HEIGHT-2)
local TR_GROUP_POS = [(TR_GROUP_HGAP/2),(TR_GROUP_GAP/2) + 34] -- Position for first group in every row (row y offsets are calculated later)
local TR_FIRST_OFFSET = [TR_GROUP_HBORDERS/2,(TR_GROUP_BORDERS/2)+4] -- Offset from TL Corner of Group to first Widget
-- Group Dimensions
-- Slightly haphazard way of doing things... useful for precise layout with tightly packed widgets, but a bit of an organisational nightmare
-- Allows for evertything to be controlled by the values above, but have to synch up dialog width if the generic widths change, since widget text may be clipped
-- Probably also need to revise the integer values for widths to include TR_GROUP_HBORDERS and TR_GROUP_HGAP at some point (in case they're changed) !!!!
local TR_BANK_WIDTH = TR_WIDTH
local TR_BANK_BUTTON_HEIGHT = TR_SMALL_BUTTON_HEIGHT + 3
local TR_BANK_HEIGHT = (2*TR_BANK_BUTTON_HEIGHT) + TR_SMALL_GAP - 2
local TR_BLOCK_WIDTH = 204
local TR_PICKER_WIDTH = TR_WIDTH - TR_BLOCK_WIDTH - TR_GROUP_HGAP
local TR_PICKER_HEIGHT = (3*TR_SMALL_BUTTON_HEIGHT)+(2*TR_SMALL_GAP) + TR_GROUP_BORDERS
local TR_WIREMODE_WIDTH = 94
local TR_WIREEXACT_WIDTH = 78
local TR_WIRE_WIDTH = TR_LARGE_BUTTON_HEIGHT + TR_WIREMODE_WIDTH + TR_WIREEXACT_WIDTH + (2*TR_SMALL_GAP) + TR_GROUP_HBORDERS
local TR_WIRE_HEIGHT = TR_LARGE_BUTTON_HEIGHT + (2*TR_WIRE_BUTTON_HEIGHT) + (2*TR_SMALL_GAP) - 1 + TR_GROUP_BORDERS
local TR_WIREOPTIONS_WIDTH = TR_WIDTH - TR_WIRE_WIDTH - TR_GROUP_HGAP
local TR_OCCL_WIDTH = 118
local TR_CULLBOX_WIDTH = 110
local TR_GBUF_WIDTH = TR_WIDTH - TR_OCCL_WIDTH - TR_CULLBOX_WIDTH - (2*TR_GROUP_HGAP)
local TR_OCCL_HEIGHT = (2*TR_SMALL_BUTTON_HEIGHT) + (1*TR_SMALL_GAP) + TR_GROUP_BORDERS
local TR_WEATHER_WIDTH = 76
local TR_TIMESPINNER_WIDTH = 32
local TR_TIME_WIDTH = (2*TR_WEATHER_WIDTH) + (2*TR_TIMESPINNER_WIDTH) + TR_TRACKBAR_HEIGHT + (3*TR_SMALL_GAP) + TR_LARGE_GAP + TR_GROUP_HBORDERS
local TR_TIME_HEIGHT = (2*TR_SMALL_BUTTON_HEIGHT) + TR_SMALL_GAP - 1 + TR_GROUP_BORDERS
local TR_TEXVIEWER_WIDTH = TR_WIDTH - TR_TIME_WIDTH - TR_GROUP_HGAP
local TR_TEXVIEWER_TEXT_WIDTH = TR_TEXVIEWER_WIDTH - TR_LARGE_BUTTON_HEIGHT - TR_SMALL_GAP + 4 - TR_GROUP_HBORDERS
local TR_PREVIEW_WIDTH = 80
local TR_LIGHT_BUTTON_WIDTH = 48
local TR_LIGHT_TYPE_WIDTH = 32
local TR_LIGHT_INFO_WIDTH = TR_LIGHT_TYPE_WIDTH + TR_SMALL_GAP + TR_SMALL_BUTTON_HEIGHT + TR_GROUP_HBORDERS
local TR_LOCALLIGHTS_WIDTH = (2*TR_LIGHT_BUTTON_WIDTH) + TR_SMALL_GAP + TR_GROUP_HBORDERS
local TR_LIGHTING_TOGGLES_WIDTH = TR_WIDTH - TR_PREVIEW_WIDTH - TR_LIGHT_INFO_WIDTH - TR_LOCALLIGHTS_WIDTH - TR_GROUP_HGAP - 2
local TR_LIGHTING_HEIGHT = (2*(TR_SMALL_BUTTON_HEIGHT+4)) + TR_SMALL_GAP - 2 + TR_GROUP_BORDERS
local TR_LIGHT_GLOBAL_WIDTH = TR_LIGHTING_TOGGLES_WIDTH - TR_GROUP_HBORDERS - TR_LIGHT_TYPE_WIDTH - TR_LIGHT_BUTTON_WIDTH - TR_LARGE_GAP
local TR_OTHER_WIDTH = TR_WIDTH
local TR_OTHER_HEIGHT = (2*TR_LARGE_BUTTON_HEIGHT) + TR_SMALL_GAP + TR_GROUP_BORDERS
local TR_PASS_WIDTH = 130
local TR_COLLISION_WIDTH = 100
local TR_PASS_HEIGHT = ((TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP)*3) + TR_GROUP_BORDERS
local TR_GEO_WIDTH = TR_WIDTH - TR_PASS_WIDTH - TR_COLLISION_WIDTH - (2*TR_GROUP_HGAP)
local TR_GEO_HEIGHT = ((TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP)*3) - 2 + TR_GROUP_BORDERS
-- Button Dimensions (mostly) by Widget Group
local TR_CONNECT_WIDTH = 110
local TR_BANK_BUTTON_WIDTH = (TR_WIDTH - TR_CONNECT_WIDTH - TR_SMALL_GAP) / 4
local TR_PICKER_BUTTON_HEIGHT = (2*TR_SMALL_BUTTON_HEIGHT) + TR_SMALL_GAP
local TR_PICKEROPTIONS_BUTTON_WIDTH = 48
local TR_PICKERIMAP_BUTTON_WIDTH = 72
local TR_PICKERALL_BUTTON_WIDTH = (TR_PICKERIMAP_BUTTON_WIDTH - 28) + TR_SMALL_GAP
local TR_PICKER_BUTTON_WIDTH = TR_PICKER_WIDTH - TR_PICKEROPTIONS_BUTTON_WIDTH - TR_PICKERIMAP_BUTTON_WIDTH - TR_PICKERALL_BUTTON_WIDTH - (2*TR_SMALL_GAP) - TR_LARGE_GAP - TR_GROUP_HBORDERS -- 60
local TR_SELECTION_BUTTON_WIDTH = 56
local TR_PICKER_TEXT_WIDTH = TR_PICKER_WIDTH - TR_SELECTION_BUTTON_WIDTH - TR_SMALL_BUTTON_HEIGHT - (2*TR_SMALL_GAP) - 4 - TR_GROUP_HBORDERS + 2
local TR_PICKERHIGHLIGHT_WIDTH = (TR_PICKERALL_BUTTON_WIDTH + TR_PICKERIMAP_BUTTON_WIDTH) - 20
local TR_WARP_BUTTON_WIDTH = 60 + 8 - TR_SMALL_BUTTON_HEIGHT - TR_SMALL_GAP -- subtract debug cam button width
local TR_ISOLATEBLOCK_WIDTH = TR_BLOCK_WIDTH - (2*TR_WARP_BUTTON_WIDTH + TR_SMALL_GAP) - TR_SMALL_BUTTON_HEIGHT - TR_SMALL_GAP - TR_GROUP_HBORDERS
local TR_WARPSOURCE_WIDTH = TR_BLOCK_WIDTH - TR_ISOLATEBLOCK_WIDTH - (2*TR_SMALL_BUTTON_HEIGHT - TR_SMALL_GAP) - 9 - TR_GROUP_HBORDERS
local TR_WARPCOORDS_WIDTH = TR_BLOCK_WIDTH - 20 - TR_SMALL_GAP - TR_GROUP_HBORDERS
local TR_WIRE_BUTTON_WIDTH = 45
local TR_WIRE_LABEL_WIDTH = 34
local TR_WIRE_OVERRIDE_WIDTH = 16
local TR_WIRE_OPTIONSLIDER_WIDTH = 60
local TR_WIRE_TINYOPTIONTEXT_WIDTH = ((TR_WIREOPTIONS_WIDTH - (2*TR_SMALL_GAP) - TR_GROUP_HBORDERS)/3) - TR_WIRE_BUTTON_HEIGHT - TR_SMALL_GAP + 4
local TR_WIRE_OPTIONTEXT_WIDTH = TR_WIREOPTIONS_WIDTH + 3 - TR_WIRE_OPTIONSLIDER_WIDTH - TR_SMALL_GAP - TR_WIRE_BUTTON_HEIGHT - TR_GROUP_HBORDERS
local TR_WIRE_HALFOPTION_WIDTH = ( (TR_WIREOPTIONS_WIDTH - TR_SMALL_GAP - TR_GROUP_HBORDERS) / 2 ) - TR_WIRE_BUTTON_HEIGHT
local TR_WIREOPTION_BUTTON_WIDTH = TR_WIREOPTIONS_WIDTH - TR_GROUP_HBORDERS
local TR_WIREOPTION_HALFBUTTON_WIDTH = (TR_WIREOPTION_BUTTON_WIDTH - TR_SMALL_GAP) / 2
local TR_WIREOPTION_THIRDBUTTON_WIDTH = ( TR_WIREOPTION_BUTTON_WIDTH - (2*TR_SMALL_GAP)) / 3
local TR_WIREOPTION_DENSITY_WIDTH = TR_WIREOPTIONS_WIDTH - 30 - (5*TR_WIRE_BUTTON_HEIGHT) - TR_LARGE_GAP - TR_GROUP_BORDERS
local TR_WIRENAME_WIDTH = TR_WIREMODE_WIDTH + TR_WIREEXACT_WIDTH + 2 + TR_SMALL_GAP
local TR_WIRE_BAR_WIDTH = ( TR_WIRE_WIDTH - (2*TR_WIRE_LABEL_WIDTH) - TR_LARGE_GAP - TR_GROUP_HBORDERS - 2 ) / 2
local TR_DIFFUSE_OVERRIDE_WIDTH = TR_WIRE_HEIGHT - TR_GROUP_BORDERS - 1
local TR_TWEAK_WIDTH = 180
local TR_TWEAKTYPE_WIDTH = 80
local TR_LODTREE_WIDTH = 76
local TR_LOD_BUTTON_HEIGHT = TR_LARGE_BUTTON_HEIGHT - 8
local TR_LODTYPE_WIDTH = 80
local TR_LODLEVELS_WIDTH = TR_LODTYPE_WIDTH + TR_GROUP_HBORDERS
local TR_LODINFO_WIDTH = TR_LODTREE_WIDTH + TR_GROUP_HBORDERS
local TR_LODEDIT_WIDTH = TR_TWEAKTYPE_WIDTH + TR_GROUP_HBORDERS
local TR_LODHIERARCHY_WIDTH = TR_WIDTH - TR_LODLEVELS_WIDTH - TR_LODINFO_WIDTH - TR_LODEDIT_WIDTH - 1 - (2*TR_GROUP_HGAP)
local TR_LOD_BUTTON_WIDTH = (TR_LODHIERARCHY_WIDTH - TR_GROUP_HBORDERS - TR_SMALL_GAP) / 2
local TR_LOD_BUTTONTHREE_WIDTH = (TR_LODHIERARCHY_WIDTH - TR_GROUP_HBORDERS - (2*TR_SMALL_GAP)) / 3
local TR_LOD_HEIGHT = ((3*TR_LOD_BUTTON_HEIGHT) - 20) + TR_SMALL_GAP + TR_LARGE_GAP + TR_GROUP_BORDERS
local TR_OCCL_BUTTON_WIDTH = TR_OCCL_WIDTH - TR_GROUP_HBORDERS
local TR_OCCLMODE_WIDTH = 66
local TR_OCCLFLIP_BUTTON_WIDTH = TR_OCCL_BUTTON_WIDTH - TR_OCCLMODE_WIDTH - TR_SMALL_GAP
local TR_CULLBOX_EDITOR_WIDTH = 34
local TR_CULLBOX_ON_WIDTH = TR_CULLBOX_WIDTH - TR_CULLBOX_EDITOR_WIDTH - TR_SMALL_GAP-TR_GROUP_HBORDERS
local TR_CULL_BUTTON_WIDTH = ( TR_CULLBOX_WIDTH - TR_SMALL_GAP - TR_GROUP_HBORDERS ) / 2
local TR_GBUF_MODE_WIDTH = TR_GBUF_WIDTH - 60 - (2*TR_SMALL_GAP) - TR_TRACKBAR_HEIGHT - 4 - TR_GROUP_HBORDERS
local TR_GBUF_TRACKBAR_WIDTH = (60 + TR_GBUF_MODE_WIDTH) - ( 32 + 40 + 40 + 1 ) - (2*TR_SMALL_GAP)
local TR_TIMELOCK_WIDTH = 40
local TR_TIMEBAR_WIDTH = TR_TIME_WIDTH - TR_TIMELOCK_WIDTH - (2*TR_SMALL_GAP) - TR_TRACKBAR_HEIGHT - 5 - TR_GROUP_HBORDERS
local TR_GEOTYPE_BUTTON_WIDTH = (TR_GEO_WIDTH - TR_GROUP_HBORDERS - (2*TR_SMALL_GAP)) / 3
local TR_GEOPROP_BUTTON_WIDTH = (TR_GEO_WIDTH - TR_GROUP_HBORDERS - (2*TR_SMALL_GAP) - TR_LARGE_GAP) / 4
local TR_GEOOTHER_BUTTON_WIDTH = (TR_GEO_WIDTH - TR_LARGE_GAP - TR_SMALL_GAP - TR_GROUP_HBORDERS) / 3
local TR_PASS_BUTTON_WIDTH = (TR_PASS_WIDTH - TR_SMALL_GAP - TR_GROUP_HBORDERS) / 2
-- Banner Setup
dotNetControl rsBannerPanel "System.Windows.Forms.Panel" height:32 pos:[0,0] width:RsTinyRAG.width
local banner = makeRsBanner dn_Panel:rsBannerPanel versionNum:1.04 versionName:"Toothsome Lizards" filename:( getThisScriptFilename() )
-- Tooltip to show dotNet Trackbar Value when mouse is hovering-over
local ttpTrackbarTooltip = dotNetObject "System.Windows.Forms.Tooltip"
-- CONNECTION + TOP CONTROL ROW --
groupBox gbxBankTogglesGroupBox "SHOW/HIDE" visible:false width:TR_BANK_WIDTH height:TR_BANK_HEIGHT pos:TR_GROUP_POS
checkButton chkCONNECT "CONNECT TO RAG" width:TR_CONNECT_WIDTH height:(2*TR_BANK_BUTTON_HEIGHT) highlightColor:CONNECT_COLOUR checked:false \
pos:(gbxBankTogglesGroupBox.pos)
tooltip:"Connect to RAG"
checkButton chkPickerBank "Block / Picker" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkCONNECT.pos+[TR_CONNECT_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide Block Warp and Picker groups\n\nIncludes:\n Pick by name, Block Isolation,\n Debug Camera warp\n\nRight-click to Show/Hide all other rows"
checkButton chkTimeBank "Time / TexViewer" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:TIME_COLOUR checked:false
pos:(chkPickerBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide Weather, Time, VFX, and Texture Viewer groups\n\nIncludes:\n Time / Weather controls,\n Search by TXD / Texture name\n\nRight-click to Show/Hide all other rows"
checkButton chkWireframeBank "Wireframe" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:false
pos:(chkTimeBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide Wireframe groups\n\nIncludes:\n Wireframe Mode selection + Options,\n Wireframe alpha controls\n Overdraw / Texture Density Modes\n\nRight-click to Show/Hide all other rows"
checkButton chkLightingBank "Preview / Lights" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:LIGHT_COLOUR checked:false
pos:(chkWireframeBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide Lighting groups\n\nIncludes:\n Light Info & Budgets,\n Link to Light Cost wire mode\n Light Toggles\n\nRight-click to Show/Hide all other rows"
checkButton chkLODBank "LOD" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:LOD_COLOUR checked:false
pos:(chkPickerBank.pos+[0,TR_BANK_BUTTON_HEIGHT])
tooltip:"Show/Hide LOD Hierarchy group\n\nIncludes:\n LOD Toggles, LOD Multiplier,\n Info Display, LOD Distance Tweaking\n\nRight-click to Show/Hide all other rows"
checkButton chkOcclCullBank "Occlusion / GBuff" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:OCCL_COLOUR checked:false
pos:(chkLODBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide Occlusion, CullBoxes and GBuffer groups\n\nIncludes:\n Occlusion / Cullbox toggles,\n GBuffer Display and Overrides\n\nRight-click to Show/Hide all other rows"
checkBUtton chkToggleBank "Toggles" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:TOGGLE_COLOUR checked:false
pos:(chkOcclCullBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide Geo Type and Render Pass Toggle groups\n\nIncludes:\n Entity Type Toggles,\n Render Pass / VFX Toggles\n\nRight-click to Show/Hide all other rows"
checkButton chkOtherBank "Misc / Diagnostic" width:TR_BANK_BUTTON_WIDTH height:TR_BANK_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR checked:false
pos:(chkToggleBank.pos+[TR_BANK_BUTTON_WIDTH,0])
tooltip:"Show/Hide (Placeholder) Other groups\n\nIncludes so far:\n Floating Object, Object Density, Light Entities\n POM Toggles,\n DrawList, GBuf Budget, HD Texture List\n\nRight-click to Show/Hide all other rows"
local BANK_WIDGETS = #( gbxBankTogglesGroupBox, chkPickerBank, chkLightingBank, chkWireframeBank, chkTimeBank, chkOcclCullBank, chkLODBank, chkToggleBank ) -- , chkOtherBank ) DISCONNECTING OTHER BANK FROM RIGHT-CLICK AS IT'S NOT FINALISED YET !!!!
local ALLBANK_WIDGETS = #( gbxBankTogglesGroupBox, chkCONNECT, chkPickerBank, chkLightingBank, chkWireframeBank, chkTimeBank, chkOcclCullBank, chkLODBank, chkToggleBank, chkOtherBank )
-- BLOCK / WARP + PICKER ROW --
groupBox gbxBlockGroupBox "BLOCK / WARP" width:TR_BLOCK_WIDTH height:TR_PICKER_HEIGHT pos:TR_GROUP_POS
checkButton chkIsolateBlock "ISOLATE" width:TR_ISOLATEBLOCK_WIDTH height:(TR_LARGE_BUTTON_HEIGHT-17) highlightColor:BLOCK_COLOUR checked:false
pos:(gbxBlockGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Isolate a Block if a valid blockID is entered in text box below."
checkButton chkDebugCamera "C" width:TR_SMALL_BUTTON_HEIGHT height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkIsolateBlock.pos+[TR_ISOLATEBLOCK_WIDTH+TR_SMALL_GAP,0])
tooltip:"Enable debug pad and switch to Free Cam"
checkButton chkWarpCamera "WARP" width:TR_WARP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkDebugCamera.pos+[TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP,0])
tooltip:"Attempts to Auto-Warp the RAG Debug Camera to whatever\nis selected in the drop down below when the Dialog changes it.\n(Not Max Selection, since there's no callback)\n\nRight-click to Warp without waiting for an update."
checkButton chkFindObjects "FIND" width:TR_WARP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkWarpCamera.pos+[TR_WARP_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Attempts to point the RAG Debug Camera vaguely towards whatever\nis selected in the drop down below when the Dialog changes it.\n(Not Max Selection, since there's no callback)\n\nRight-click to change camera focus without waiting for an update."
dropdownList ddlWarpSource items:#("BlockID", "Coords", "Selection", "Picker", "Viewport") width:TR_WARPSOURCE_WIDTH height:6
pos:(chkDebugCamera.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Change the source of coordinates to Find/Warp To"
checkButton chkStreamFromCamera "S" width:TR_SMALL_BUTTON_HEIGHT height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR
pos:(ddlWarpSource.pos+[TR_WARPSOURCE_WIDTH+TR_SMALL_GAP,0])
tooltip:"If active, Streaming is from RAG Camera position.\nOtherwise stream from Player's position (the default RAG option)."
checkButton chkCamPosHelper "+" width:TR_SMALL_BUTTON_HEIGHT height:TR_SMALL_BUTTON_HEIGHT highlightColor:CAMERA_HELPER_COLOUR
pos:(chkStreamFromCamera.pos+[TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP,0])
tooltip:"Get Camera Position from RAG whenever Dialog updates it.\nRight-click to get current RAG Debug Camera Position"
editText txtBlockID "" width:(TR_ISOLATEBLOCK_WIDTH+2) enabled:true visible:true
pos:(chkIsolateBlock.pos+[-3,TR_LARGE_BUTTON_HEIGHT-17])
tooltip:"Enter BlockID to ISOLATE/WARP to/FIND." -- pos:(chkIsolateBlock.pos+[-3,TR_LARGE_BUTTON_HEIGHT-17])
label lblWarpCoords "Coords" width:40 height:16 pos:(chkIsolateBlock.pos+[1,TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP+5])
editText txtWarpCoords "" width:(TR_WARPCOORDS_WIDTH-30) enabled:true visible:true
pos:(lblWarpCoords.pos+[31,-2]) -- (chkIsolateBlock.pos+[0,TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP+3])
toolTip:"Enter set of coordinates to WARP to/FIND."
dropdownList ddlWarpToLocation "" items:(for location in warpPoints collect location.label) width:22 height:(warpPoints.count+1) enabled:(warpPoints.count > 0)
pos:(txtWarpCoords.pos+[TR_WARPCOORDS_WIDTH-32,-2])
tooltip:"Preset coordinates to Warp to.\n(Will mainly contain MJT junction points." --pos:(chkIsolateBlock.pos+[0,TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP+2])
local BLOCK_WIDGETS = #( gbxBlockGroupBox, chkIsolateBlock, txtBlockID, chkWarpCamera, chkFindObjects, chkDebugCamera, ddlWarpSource,
ddlWarpToLocation, lblWarpCoords, txtWarpCoords, chkStreamFromCamera, chkCamPosHelper
)
groupBox gbxPickerGroupBox "PICKER OPTIONS" width:TR_PICKER_WIDTH height:TR_PICKER_HEIGHT pos:(gbxBlockGroupBox.pos+[TR_BLOCK_WIDTH+TR_GROUP_HGAP,0]) --offset:[-2,-7]
checkButton chkPickerToggle "PICKER" width:TR_PICKER_BUTTON_WIDTH height:TR_PICKER_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(gbxPickerGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide Picker"
label lblPickerFilter "Names" width:32 height:16 pos:(chkPickerToggle.pos+[1,TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP+5])
editText txtPickerFilter "" width:(TR_PICKER_TEXT_WIDTH-32)
pos:(lblPickerFilter.pos+[29,-2])
tooltip:"Enter string to select matching object names in RAG Picker"
button btnPickSelection "Selection" width:TR_SELECTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT
pos:(txtPickerFilter.pos+[TR_PICKER_TEXT_WIDTH-30,-2])
tooltip:"Select by names from current Max object selection\n\nThere's no exact match option in RAG>Picker\n(so \"area_object\" matches \"area_object_lod\" as well)"
checkButton chkObjectPosHelper "+" width:TR_SMALL_BUTTON_HEIGHT height:TR_SMALL_BUTTON_HEIGHT highlightColor:OBJECT_HELPER_COLOUR
pos:(btnPickSelection.pos+[TR_SELECTION_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Create a helper at average object position\nwhen Dialog changes RAG Picker selection\nRight-click to update WARP Coordinates."
checkButton chkPickerIsolate "Isolate" width:TR_PICKEROPTIONS_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkPickerToggle.pos+[TR_PICKER_BUTTON_WIDTH+TR_SMALL_GAP,0]) tooltip:"Isolate object(s) in picker list"
checkButton chkPickerHide "Hide" width:TR_PICKEROPTIONS_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkPickerIsolate.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Hide object(s) in picker list"
dropDownList ddlPickerScope "" items:#("Sphere","Frustrum") width:TR_PICKERIMAP_BUTTON_WIDTH height:3
pos:(chkPickerIsolate.pos+[TR_PICKEROPTIONS_BUTTON_WIDTH+TR_LARGE_GAP,0])
tooltip:"Switch between spherical\nand view frustrum searches."
dropDownList ddlPickerHighlight "" items:#("All", "One") selection:1 width:TR_PICKERALL_BUTTON_WIDTH height:3
pos:(ddlPickerScope.pos+[TR_PICKERIMAP_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Draw boxes, isolate and hide ALL objects in Picker list\nor just the selected ONE."
checkButton chkIMAPBounds "Imap" checked:false width:TR_PICKERALL_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:BLOCK_COLOUR
pos:(chkPickerHide.pos+[TR_PICKEROPTIONS_BUTTON_WIDTH+TR_LARGE_GAP,0])
tooltip:"Show IMAP bounds around selected objects."
checkButton chkPickerAddToSelection "Add" width:TR_PICKERIMAP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:BLOCK_COLOUR checked:false
pos:(chkIMAPBounds.pos+[TR_PICKERALL_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Add to existing Picker selection\ninstead of clearing it first.\nDefault is OFF."
local PICKER_WIDGETS = #( gbxPickerGroupBox, chkPickerToggle, lblPickerFilter, txtPickerFilter, btnPickSelection, chkObjectPosHelper, chkPickerIsolate, chkPickerHide,
chkPickerAddToSelection, chkIMAPBounds, ddlPickerScope, ddlPickerHighlight
)
-- WIREFRAME / WIREFRAME OPTIONS ROW --
groupBox gbxWireframeGroupBox "WIREFRAME" width:TR_WIRE_WIDTH height:TR_WIRE_HEIGHT pos:TR_GROUP_POS
checkButton chkWireToggle "WIRE" width:TR_WIRE_BUTTON_WIDTH height:TR_LARGE_BUTTON_HEIGHT highlightcolor:WIRE_COLOUR
pos:(gbxWireframeGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle in-game wire on/off"
dropdownList ddlWireMode "" items:#() width:TR_WIREMODE_WIDTH height:1
pos:(chkWireToggle.pos+[TR_WIRE_BUTTON_WIDTH+TR_SMALL_GAP,0]) tooltip:"Change RAG wire mode.\neg.Picker, LOD Level, etc."
checkButton chkWireMatchExact "Exact Match" width:TR_WIREEXACT_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:true highlightcolor:WIRE_COLOUR
pos:(ddlWireMode.pos+[TR_WIREMODE_WIDTH+TR_SMALL_GAP,0])
tooltip:"If active, matches exact name from the text box."
editText txtWireframeFilterName "" width:(TR_WIRENAME_WIDTH-25)
pos:(ddlWireMode.pos+[22,TR_SMALL_BUTtON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Text filter for Wireframe Modes"
label lblWireframeFiltername "Filter" pos:(txtWireframeFilterName.pos+[-25,2])
checkButton chkWireLabel "Wire" width:TR_WIRE_LABEL_WIDTH height:TR_WIRE_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(chkWireToggle.pos+[0,TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Wire opacity slider.\n(Right-click might do something if I get round to it."
checkButton chkFillLabel "Fill" width:TR_WIRE_LABEL_WIDTH height:TR_WIRE_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(chkWireLabel.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Fill opacity slider.\n(Right-click might do something if I get round to it."
dotnetcontrol trkWireOpacity "system.windows.forms.trackbar" enabled:true pos:(chkWireLabel.pos+[TR_WIRE_LABEL_WIDTH+1,1])
dotnetcontrol trkFillOpacity "system.windows.forms.trackbar" enabled:true pos:(chkFillLabel.pos+[TR_WIRE_LABEL_WIDTH+1,1])
checkButton chkOpacityLabel "Mult." width:TR_WIRE_LABEL_WIDTH height:TR_WIRE_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(trkWireOpacity.pos+[TR_WIRE_BAR_WIDTH+TR_LARGE_GAP,-1])
tooltip:"Overall wireframe opacity slider.\nUsually doesn't have to be a very large value.\n(Right-click might do something if I get round to it."
checkButton chkHiddenLabel "Hidn." width:TR_WIRE_LABEL_WIDTH height:TR_WIRE_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(chkOpacityLabel.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Hidden line/fill opacity slider (only really works for near objects).\n(Right-click might do something if I get round to it."
dotnetcontrol trkOpacityMultiplier "system.windows.forms.trackbar" enabled:true pos:(chkOpacityLabel.pos+[TR_WIRE_LABEL_WIDTH+1,1])
dotnetcontrol trkWireHidden "system.windows.forms.trackbar" enabled:true pos:(chkHiddenLabel.pos+[TR_WIRE_LABEL_WIDTH+1,1])
local WIREFRAME_WIDGETS = #( gbxWireframeGroupBox, chkWireToggle, ddlWireMode, lblWireframeFiltername, txtWireframeFilterName, chkWireMatchExact,
chkWireLabel, trkWireOpacity, chkHiddenLabel, trkWireHidden, chkFillLabel, trkFillOpacity, chkOpacityLabel, trkOpacityMultiplier
)
-- WIRE OPTIONS : TXD NAMES --
groupBox gbxWireOptionsGroupBox "OPTIONS" width:TR_WIREOPTIONS_WIDTH height:TR_WIRE_HEIGHT pos:(gbxWireframeGroupBox.pos+[TR_WIRE_WIDTH+TR_GROUP_HGAP,0])
-- WIRE OPTIONS : TXD WIDGETS
checkButton chkTXD1Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.txd1 checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[24,0])
tooltip:"Toggle wireframe for first TXD"
checkButton chkTXD2Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.txd2 checked:true
pos:(chkTXD1Colour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for second TXD"
checkButton chkTXD3Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.txd3 checked:true
pos:(chkTXD2Colour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for third TXD"
checkButton chkTXD4Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.txd4 checked:true
pos:(chkTXD3Colour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for fourth TXD"
label lblTxd1 "Txd1" pos:(chkTXD1Colour.pos+[-25,2])
label lblTxd2 "Txd2" pos:(chkTXD2Colour.pos+[-26,2])
label lblTxd3 "Txd3" pos:(chkTXD3Colour.pos+[-26,2])
label lblTxd4 "Txd4" pos:(chkTXD4Colour.pos+[-26,2])
editText txtTXD1Name "" width:(TR_WIRE_OPTIONTEXT_WIDTH-22)
pos:(chkTXD1Colour.pos+[TR_WIRE_BUTTON_HEIGHT-4,1])
tooltip:"Enter Text to colour wireframe by TXD Name."
editText txtTXD2Name "" width:(TR_WIRE_OPTIONTEXT_WIDTH-22)
pos:(chkTXD2Colour.pos+[TR_WIRE_BUTTON_HEIGHT-4,1])
tooltip:"Enter Text to colour wireframe by TXD Name."
editText txtTXD3Name "" width:(TR_WIRE_OPTIONTEXT_WIDTH-22)
pos:(chkTXD3Colour.pos+[TR_WIRE_BUTTON_HEIGHT-4,1])
tooltip:"Enter Text to colour wireframe by TXD Name."
editText txtTXD4Name "" width:(TR_WIRE_OPTIONTEXT_WIDTH-22)
pos:(chkTXD4Colour.pos+[TR_WIRE_BUTTON_HEIGHT-4,1])
tooltip:"Enter Text to colour wireframe by TXD Name."
dotnetcontrol trkTXD1Multiplier "system.windows.forms.trackbar" enabled:true pos:(txtTXD1Name.pos+[TR_WIRE_OPTIONTEXT_WIDTH-23,0])
dotnetcontrol trkTXD2Multiplier "system.windows.forms.trackbar" enabled:true pos:(txtTXD2Name.pos+[TR_WIRE_OPTIONTEXT_WIDTH-23,0])
dotnetcontrol trkTXD3Multiplier "system.windows.forms.trackbar" enabled:true pos:(txtTXD3Name.pos+[TR_WIRE_OPTIONTEXT_WIDTH-23,0])
dotnetcontrol trkTXD4Multiplier "system.windows.forms.trackbar" enabled:true pos:(txtTXD4Name.pos+[TR_WIRE_OPTIONTEXT_WIDTH-23,0])
local WIRE_TXD_CONTROLS = #( gbxWireOptionsGroupBox, chkTXD1Colour, chkTXD2Colour, chkTXD3Colour, chkTXD4Colour )
-- WIRE OPTIONS : LOD LEVEL WIDGETS
checkButton chkOrphanColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.orphan checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[33,0])
tooltip:"Toggle wireframe for Orphan HD objects"
checkButton chkHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.hd checked:true
pos:(chkOrphanColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for HD objects"
checkButton chkLODColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.lod checked:true
pos:(chkHDColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for LOD objects"
checkButton chkSLOD1Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.slod1 checked:true
pos:(chkLODColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for SLOD1 objects"
label lblOrphanLabel "Orphan" pos:(chkOrphanColour.pos+[-36,2])
label lblHDLabel "HD" pos:(chkHDColour.pos+[-36,2])
label lblLODLabel "LOD" pos:(chkLODColour.pos+[-36,2])
label lblSLOD1Label "SLOD1" pos:(chkSLOD1Colour.pos+[-36,2])
dotnetcontrol trkOrphanMultiplier "system.windows.forms.trackbar" pos:(chkOrphanColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])-- pos:(txtOrphanLabel.pos+[TR_WIRE_HALFOPTION_WIDTH-28,0])
dotnetcontrol trkHDMultiplier "system.windows.forms.trackbar" pos:(chkHDColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])-- pos:(txtHDLabel.pos+[TR_WIRE_HALFOPTION_WIDTH-28,0])
dotnetcontrol trkLODMultiplier "system.windows.forms.trackbar" pos:(chkLODColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
dotnetcontrol trkSLOD1Multiplier "system.windows.forms.trackbar" pos:(chkSLOD1Colour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
groupBox gbxLODContainerWidgets "" width:(((TR_WIREOPTIONS_WIDTH-TR_LARGE_GAP)/2) - TR_GROUP_HBORDERS + 2) height:(TR_WIRE_HEIGHT+8-TR_GROUP_BORDERS)
pos:(trkOrphanMultiplier.pos+[TR_WIRE_OPTIONSLIDER_WIDTH,-7]) -- [(TR_WIREOPTIONS_WIDTH-TR_LARGE_GAP)/2),8])
checkButton chkSLOD2Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.slod2 checked:true
pos:(gbxLODContainerWidgets.pos+TR_FIRST_OFFSET+[32,0])
tooltip:"Toggle wireframe for SLOD2 objects" -- [TR_WIRE_HALFOPTION_WIDTH+TR_SMALL_GAP+TR_WIRE_BUTTON_HEIGHT+30,0])
checkButton chkSLOD3Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.slod3 checked:true
pos:(chkSLOD2Colour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for SLOD3 objects"
checkButton chkSLOD4Colour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.slod4 checked:true
pos:(chkSLOD3Colour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for SLOD4 objects"
label lblSLOD2Label "SLOD2" pos:(chkSLOD2Colour.pos+[-33,2])
label lblSLOD3Label "SLOD3" pos:(chkSLOD3Colour.pos+[-33,2])
label lblSLOD4Label "SLOD4" pos:(chkSLOD4Colour.pos+[-33,2])
dotnetcontrol trkLOSLODsMultiplier "system.windows.forms.trackbar" pos:(chkSLOD2Colour.pos+[TR_WIRE_BUTTON_HEIGHT+2,0]) -- pos:(txtSLOD4Label.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+2])
local WIRE_LOD_CONTROLS = #( gbxWireOptionsGroupBox, chkOrphanColour, chkHDColour, chkLODColour, chkSLOD1Colour, chkSLOD2Colour, chkSLOD3Colour, chkSLOD4Colour )
-- WIRE OPTION : RENDER BUCKET WIDGETS
checkButton chkOpaqueColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.opaque checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[36,0])
tooltip:"Toggle wireframe for Opaque materials"
checkButton chkAlphaColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.alpha checked:true
pos:(chkOpaqueColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for Alpha materials"
checkButton chkDecalColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.decal checked:true
pos:(chkAlphaColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for Decal materials"
label lblOpaqueLabel "Opaque" pos:(chkOpaqueColour.pos+[-39,2])
label lblAlphaLabel "Alpha" pos:(chkAlphaColour.pos+[-39,2])
label lblDecalLabel "Decal" pos:(chkDecalColour.pos+[-39,2])
dotnetcontrol trkOpaqueMultiplier "system.windows.forms.trackbar" pos:(chkOpaqueColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
dotnetcontrol trkAlphaMultiplier "system.windows.forms.trackbar" pos:(chkAlphaColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
dotnetcontrol trkDecalMultiplier "system.windows.forms.trackbar" pos:(chkDecalColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
checkButton chkCutoutColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.cutout checked:true
pos:(chkDecalColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for Cutout materials"
checkButton chkWaterColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.water checked:true
pos:(chkCutoutColour.pos+[TR_WIREOPTIONS_WIDTH-31-TR_WIRE_BUTTON_WIDTH,0])
tooltip:"Toggle wireframe for Water materials"
label lblCutoutLabel "Cutout" pos:(chkCutoutColour.pos+[-39,2])
label lblWaterLabel "Water" pos:(chkWaterColour.pos+[-30,2])
dotnetcontrol trkCutoutMultiplier "system.windows.forms.trackbar" pos:(chkCutoutColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,1])
dotnetcontrol trkWaterMultiplier "system.windows.forms.trackbar" pos:(chkWaterColour.pos+[1,(TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1)*-3]) -- pos:(chkWaterColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,0])
local WIRE_BUCKET_CONTROLS = #( gbxWireOptionsGroupBox, chkOpaqueColour, chkAlphaColour, chkDecalColour, chkCutoutColour, chkWaterColour )
-- WIRE OPTIONS : HD STATE WIDGETS
checkButton chkUsingHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.usingHD checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[TR_WIRE_OPTIONTEXT_WIDTH-32,0])
tooltip:"Toggle wireframe for objects Using HD texture\n(ignoring GTXD +HI textures)"
checkButton chkSharedHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.sharedHD checked:true
pos:(chkUsingHDColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for objects using Shared HD textures\n(Using GTXD +HI, but not using object's +HI)"
checkButton chkCapableHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.capableHD checked:true
pos:(chkSharedHDColour.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle wireframe for objects with HD textures,\nbut not using them yet\n(including GTXD +HI textures)"
label lblUsingHDLabel "Using +HI TXD" pos:(chkUsingHDColour.pos+[32-TR_WIRE_OPTIONTEXT_WIDTH,2])
label lblSharedHDLabel "Using Shared +HI" pos:(chkSharedHDColour.pos+[32-TR_WIRE_OPTIONTEXT_WIDTH,2])
label lblCapableHDLabel "Has +HI TXD" pos:(chkCapableHDColour.pos+[32-TR_WIRE_OPTIONTEXT_WIDTH,2])
dotnetcontrol trkUsingHDMultiplier "system.windows.forms.trackbar" pos:(chkUsingHDColour.pos+[TR_SMALL_BUTTON_HEIGHT+1,0])
dotnetcontrol trkSharedHDMultiplier "system.windows.forms.trackbar" pos:(chkSharedHDColour.pos+[TR_SMALL_BUTTON_HEIGHT+1,0])
dotnetcontrol trkCapableHDMultiplier "system.windows.forms.trackbar" pos:(chkCapableHDColour.pos+[TR_SMALL_BUTTON_HEIGHT+1,0])
checkButton chkIsHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.isHD checked:true
pos:(lblCapableHDLabel.pos+[TR_WIRE_TINYOPTIONTEXT_WIDTH-15,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Toggle wireframe for HD Entities"
checkButton chkSwitchingHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.switchingHD checked:true
pos:(chkIsHDColour.pos+[TR_WIRE_BUTTON_HEIGHT+TR_WIRE_TINYOPTIONTEXT_WIDTH+TR_SMALL_GAP+8,0])
tooltip:"Toggle wireframe for objects switching to HD textures"
checkButton chkNotHDColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.notHD checked:true
pos:(chkSwitchingHDColour.pos+[TR_WIRE_BUTTON_HEIGHT+TR_WIRE_TINYOPTIONTEXT_WIDTH+TR_SMALL_GAP+8,0])
tooltip:"Toggle wireframe for objects with no HD textures"
label lblIsHDLabel "Entity" pos:(chkIsHDColour.pos+[15-TR_WIRE_TINYOPTIONTEXT_WIDTH,2])
label lblSwitchingHDLabel "Switch" pos:(chkSwitchingHDColour.pos+[15-TR_WIRE_TINYOPTIONTEXT_WIDTH,2])
label lblNotHDLabel "No HD" pos:(chkNotHDColour.pos+[15-TR_WIRE_TINYOPTIONTEXT_WIDTH,2])
local WIRE_HDSTATE_CONTROLS = #( gbxWireOptionsGroupBox, chkUsingHDColour, chkSharedHDColour, chkCapableHDColour, chkIsHDColour, chkSwitchingHDColour, chkNotHDColour )
-- WIRE OPTIONS : SHADER
checkButton chkUseShaderFilter "Filter Text" width:TR_WIREOPTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:true highlightColor:WIRE_COLOUR
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Highlight shaders matching Filter Text\nto the left."
checkButton chkDefaultShader "Default" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkUseShaderFilter.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight Default shaders"
checkButton chkStandard2lyrShader "Standard 2lyr" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkDefaultShader.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight Standard 2 Layer shaders"
checkButton chkPXMShader "PXM" width:TR_WIREOPTION_THIRDBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkDefaultShader.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight shaders with PXM in their name"
checkButton chkWaterShader "Water" width:TR_WIREOPTION_THIRDBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkPXMShader.pos+[TR_WIREOPTION_THIRDBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight Shaders with Water in their name"
checkButton chkMudShader "Mud" width:TR_WIREOPTION_THIRDBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkWaterShader.pos+[TR_WIREOPTION_THIRDBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight Mud Shaders"
checkButton chkUberShader "Uber" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkPXMShader.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight Uber Shaders"
dotnetControl trkUberLookup "system.windows.forms.trackbar" pos:(chkUberShader.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+1,1])
-- WIRE OPTIONS : OBJECT PROPERTIES
checkButton chkIsProp "Is Prop" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:true highlightColor:WIRE_COLOUR
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Highlight objects flagged as PROP"
checkButton chkIsFrag "Is Frag" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkIsProp.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight objects flagged as FRAG"
checkButton chkLowPriority "Low Priority" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkIsProp.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight objects with the Low Priority flag set.\n(NOTE: Not Priority Level)"
checkButton chkIsDoor "Is Door" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkLowPriority.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight Objects flagged as DOOR"
checkButton chkNoShadow "No Shadow" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkLowPriority.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight objects with Don't Render in Shadow flag set."
checkButton chkNoReflect "No Reflect" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkNoShadow.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight Objects with Don't Render in Reflection flag set."
checkButton chkIsDynamic "Is Dynamic" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkNoShadow.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Highlight objects with Is Dynamic flag set."
checkButton chkAlphaFading "Alpha < 255" width:TR_WIREOPTION_HALFBUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR
pos:(chkIsDynamic.pos+[TR_WIREOPTION_HALFBUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Highlight fading objects\n(Usually objects that are switching between LODs)."
-- WIRE OPTIONS : PRIORITY LEVEL
checkButton chkPriorityRequired "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT checked:true highlightColor:RAGColours.priRequired
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[54,0])
tooltip:"Wireframe colour for Props with\nPriority Level set to Required."
checkButton chkPriorityHigh "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT checked:true highlightColor:RAGColours.priHigh
pos:(chkPriorityRequired.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Wireframe colour for Props with\nPriority Level set to High."
checkButton chkPriorityMedium "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT checked:true highlightColor:RAGColours.priMedium
pos:(chkPriorityHigh.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Wireframe colour for Props with\nPriority Level set to Medium."
checkButton chkPriorityLow "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT checked:true highlightColor:RAGColours.priLow
pos:(chkPriorityMedium.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Wireframe colour for Props with\nPriority Level set to Low."
label lblPriorityRequired "Required" pos:(chkPriorityRequired.pos+[-48,1])
label lblPriorityHigh "High" pos:(chkPriorityHigh.pos+[-48,1])
label lblPriorityMedium "Medium" pos:(chkPriorityMedium.pos+[-48,1])
label lblPriorityLow "Low" pos:(chkPriorityLow.pos+[-48,1])
dotnetControl trkPriorityRequired "system.windows.forms.trackbar" pos:(chkPriorityRequired.pos+[TR_WIRE_BUTTON_HEIGHT+2,0])
dotnetControl trkPriorityHigh "system.windows.forms.trackbar" pos:(chkPriorityHigh.pos+[TR_WIRE_BUTTON_HEIGHT+2,0])
dotnetControl trkPriorityMedium "system.windows.forms.trackbar" pos:(chkPriorityMedium.pos+[TR_WIRE_BUTTON_HEIGHT+2,0])
dotnetControl trkPriorityLow "system.windows.forms.trackbar" pos:(chkPriorityLow.pos+[TR_WIRE_BUTTON_HEIGHT+2,0])
--dotnetControl trkPriorityStatic "system.windows.forms.trackbar" pos:(chkPriorityStatic.pos+[51,1])
--dotnetControl trkPriorityNotAProp "system.windows.forms.trackbar" pos:(chkPriorityNotAProp.pos+[51,1])
--dotnetControl trkPriorityInvalid "system.windows.forms.trackbar" pos:(chkPriorityInvalid.pos+[51,1])
local WIREOPTION_PRIORITY_CONTROLS = #( gbxWireOptionsGroupBox, chkPriorityRequired, chkPriorityHigh, chkPriorityMedium, chkPriorityLow )
-- WIRE OPTIONS : TEX DENSITY
checkButton chkTexDensityXMinColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.densityXmin checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle wireframe for Extreme Min Texture Density"
checkButton chkTexDensityMinColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.densityMin checked:true
pos:(chkTexDensityXMinColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,0])
tooltip:"Toggle wireframe for Min Texture Density"
checkButton chkTexDensityMidColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.densityMid checked:true
pos:(chkTexDensityMinColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,0])
tooltip:"Toggle wireframe for Mid Texture Density"
checkButton chkTexDensityMaxColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.densityMax checked:true
pos:(chkTexDensityMidColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,0])
tooltip:"Toggle wireframe for Max Texture Density"
checkButton chkTexDensityXMaxColour "" width:TR_WIRE_BUTTON_HEIGHT height:TR_WIRE_BUTTON_HEIGHT highlightColor:RAGcolours.densityXMax checked:true
pos:(chkTexDensityMaxColour.pos+[TR_WIRE_BUTTON_HEIGHT+1,0])
tooltip:"Toggle wireframe for Water materials"
dotnetcontrol trkTexDensityXMinMultiplier "system.windows.forms.trackbar" pos:(chkTexDensityXMinColour.pos+[1,TR_WIRE_BUTTON_HEIGHT+1])
dotnetcontrol trkTexDensityMinMultiplier "system.windows.forms.trackbar" pos:(chkTexDensityMinColour.pos+[1,TR_WIRE_BUTTON_HEIGHT+1])
dotnetcontrol trkTexDensityMidMultiplier "system.windows.forms.trackbar" pos:(chkTexDensityMidColour.pos+[1,TR_WIRE_BUTTON_HEIGHT+1])
dotnetcontrol trkTexDensityMaxMultiplier "system.windows.forms.trackbar" pos:(chkTexDensityMaxColour.pos+[1,TR_WIRE_BUTTON_HEIGHT+1])
dotnetcontrol trkTexDensityXMaxMultiplier "system.windows.forms.trackbar" pos:(chkTexDensityXMaxColour.pos+[1,TR_WIRE_BUTTON_HEIGHT+1])
editText txtTextureMinSize "" width:40
pos:(chkTexDensityXMaxColour.pos+[TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+2,1])
tooltip:"Value for Minimum Texture resolution.\nPower of 2, range is between 1 and 4096 (default is 32).\nLinked to trackbar to the right."
editText txtTextureDensityMin "" width:40
pos:(txtTextureMinSize.pos+[-4,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+3])
tooltip:"Value for Minimum Texture Density.\nRange is from 0 to 4096 (default is 64).\nLinked to trackbar to the right."
editText txtTextureDensityMax "" width:40
pos:(txtTextureDensityMin.pos+[-4,17+TR_SMALL_GAP])
tooltip:"Value for Maximum Texture Density.\nRange is from 0 to 4096 (default is 1024)).\nLinked to trackbar to the right."
dotnetControl trkTextureMinSize "system.windows.forms.trackbar" pos:(txtTextureMinSize.pos+[39,0])
dotnetControl trkTextureDensityMin "system.windows.forms.trackbar" pos:(txtTextureDensityMin.pos+[39,0])
dotnetControl trkTextureDensityMax "system.windows.forms.trackbar" pos:(txtTextureDensityMax.pos+[39,0])
checkButton chkUseLogScale "Log" width:38 height:TR_WIRE_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true \
pos:(txtTextureDensityMax.pos+[-1,17+TR_SMALL_GAP])
tooltip:"Use Logarithmic scale for wireframe colour interpolation."
dotnetControl trkDensityShift "system.windows.forms.trackbar" pos:(chkUseLogScale.pos+[41,0])
local WIREOPTION_TEXDENSITY_CONTROLS = #( gbxWireOptionsGroupBox, chkTexDensityXMinColour, chkTexDensityMinColour, chkTexDensityMidColour, chkTexDensityMaxColour, chkTexDensityXMaxColour )
-- WIRE OPTIONS : COLOUR PER...
checkButton chkColourPerEntity "Color Per Entity" width:TR_WIREOPTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:true highlightColor:WIRE_COLOUR \
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Draw wireframe on everything visible\nwith a unique colour per object."
checkButton chkColourPerTXD "Color Per TXD" width:TR_WIREOPTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR \
pos:(chkColourPerEntity.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Draw wireframe on everything visible with a unique colour per TXD Name."
checkButton chkColourPerShader "Color Per Shader" width:TR_WIREOPTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR \
pos:(chkColourPerTXD.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Draw wireframe on everything visible, with a unique colour per Shader."
checkButton chkColourPerDrawCall "Color Per Draw Calls" width:TR_WIREOPTION_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT checked:false highlightColor:WIRE_COLOUR \
pos:(chkColourPerShader.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Draw wireframe on everything visible, with a unique colour per Draw Call."
-- WIRE OPTIONS : OVERDRAW
checkButton chkOverdraw "Overdraw" width:100 height:TR_SMALL_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[0,8])
tooltip:"If OFF, sets the Overdraw wireframe Opacity to 0\n(ignoring the value of the Opacity trackbar to the right)."
button btnOverdrawMin "Minimum" width:60 height:TR_SMALL_BUTTON_HEIGHT
pos:(chkOverdraw.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_LARGE_GAP])
tooltip:"Reset the Minimum Value spinner to the default ( 0 ). "
button btnOverdrawMax "Maximum" width:60 height:TR_SMALL_BUTTON_HEIGHT
pos:(btnOverdrawMin.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Reset the Maimum Value spinner to the default ( 20 )"
dotnetControl trkOverdrawOpacity "system.windows.forms.trackbar" pos:(chkOverdraw.pos+[100+TR_SMALL_GAP,1])
spinner spnOverdrawMin "" range:[0,200,0] type:#Integer width:(TR_WIREOPTION_BUTTON_WIDTH-60-TR_SMALL_GAP)
pos:(btnOverdrawMin.pos+[60+TR_SMALL_GAP,1])
tooltip:"Value for the Minimum number of overlapping \ndrawcalls in screen-space (blue).\nRange from 0 to 200 (default is 0)."
spinner spnOverdrawMax "" range:[0,200,20] type:#Integer width:(TR_WIREOPTION_BUTTON_WIDTH-60-TR_SMALL_GAP)
pos:(btnOverdrawMax.pos+[60+TR_SMALL_GAP,1])
tooltip:"Value for the Maximum number of overlapping\ndrawcalls in screen-space (red).\nRange from 0 to 200 (default is 20)."
-- WIRE OPTIONS : LIGHT COSTS
checkButton chkLightCost "Opacity" width:100 height:TR_SMALL_BUTTON_HEIGHT highlightColor:WIRE_COLOUR checked:true
pos:(gbxWireOptionsGroupBox.pos+TR_FIRST_OFFSET+[0,8])
tooltip:"If OFF, sets the Light Cost Opacity to 0\n(ignoring the value of the Opacity trackbar to the right)."
button btnLightCostMin "Minimum" width:60 height:TR_SMALL_BUTTON_HEIGHT
pos:(chkLightCost.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_LARGE_GAP])
tooltip:"Reset the Minimum Light Cost value to the default ( 1 )."
button btnLightCostMax "Maximum" width:60 height:TR_SMALL_BUTTON_HEIGHT
pos:(btnLightCostMin.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Reset the Maximum Light Cost value to the default ( 8 )."
dotnetControl trkLightCostOpacity "system.windows.forms.trackbar" pos:(chkOverdraw.pos+[100+TR_SMALL_GAP,1])
spinner spnLightCostMin "" range:[1,32,1] type:#Integer width:(TR_WIREOPTION_BUTTON_WIDTH-60-TR_SMALL_GAP)
pos:(btnLightCostMin.pos+[60+TR_SMALL_GAP,1])
tooltip:"Value for the Minimum number of overlapping light volumes in world-space (blue overlay).\nRange is from 1 to 32 (default is 1)."
spinner spnLightCostMax "" range:[1,32,8] type:#Integer width:(TR_WIREOPTION_BUTTON_WIDTH-60-TR_SMALL_GAP)
pos:(btnLightCostMax.pos+[60+TR_SMALL_GAP,1])
tooltip:"Value for the Maximum number of overlapping light volumes in world-space (red overlay).\nRange is from 1 to 32 (default is 8)."
-- Option arrays - Option Groups defined here (used when switching between modes), WIRE_OPTION_WIDGETS is the array of the OptionGroups
local WIREOPTION_TXD_WIDGETS = #( chkTXD1Colour, chkTXD2Colour, chkTXD3Colour, chkTXD4Colour, lblTxd1, lblTxd2, lblTxd3, lblTxd4,
txtTXD1Name, txtTXD2Name, txtTXD3Name, txtTXD4Name, trkTXD1Multiplier, trkTXD2Multiplier, trkTXD3Multiplier, trkTXD4Multiplier )
local WIREOPTION_LOD_WIDGETS = #( chkOrphanColour, chkHDColour, chkLODColour, chkSLOD1Colour, gbxLODContainerWidgets, chkSLOD2Colour, chkSLOD3Colour, chkSLOD4Colour,
lblOrphanLabel, lblHDLabel, lblLODLabel, lblSLOD1Label, lblSLOD2Label, lblSLOD3Label, lblSLOD4Label,
trkOrphanMultiplier, trkHDMultiplier, trkLODMultiplier, trkSLOD1Multiplier, trkLoSLODsMultiplier )
local WIREOPTION_BUCKET_WIDGETS = #( chkOpaqueColour, chkWaterColour, chkAlphaColour, chkDecalColour, chkCutoutColour, lblOpaqueLabel, lblAlphaLabel, lblDecalLabel, lblWaterLabel, lblCutoutLabel,
trkOpaqueMultiplier, trkAlphaMultiplier, trkDecalMultiplier, trkCutoutMultiplier, trkWaterMultiplier )
local WIREOPTION_HD_WIDGETS = #( chkIsHDColour, chkUsingHDColour, chkSharedHDColour, chkCapableHDColour, chkSwitchingHDColour, chkNotHDColour,
lblIsHDLabel, lblUsingHDLabel, lblSharedHDLabel, lblCapableHDLabel, lblSwitchingHDLabel, lblNotHDLabel, trkUsingHDMultiplier, trkSharedHDMultiplier, trkCapableHDMultiplier )
local WIREOPTION_SHADER_WIDGETS = #( chkUseShaderFilter, chkPXMShader, chkUberShader, chkStandard2lyrShader, chkWaterShader, chkMudShader, chkDefaultShader, trkUberLookUp )
local WIREOPTION_ATTRIBUTES_WIDGETS = #( chkIsProp, chkIsFrag, chkLowPriority, chkIsDoor, chkNoShadow, chkNoReflect, chkIsDynamic, chkAlphaFading )
local WIREOPTION_TEXDENSITY_WIDGETS = #( chkTexDensityXMinColour, chkTexDensityMinColour, chkTexDensityMidColour, chkTexDensityMaxColour, chkTexDensityXMaxColour, txtTextureMinSize, trkTextureMinSize,
trkTexDensityXMinMultiplier, trkTexDensityMinMultiplier, trkTexDensityMidMultiplier, trkTexDensityMaxMultiplier, trkTexDensityXMaxMultiplier,
txtTextureDensityMin, txtTextureDensityMax, trkTextureDensityMin, trkTextureDensityMax, chkUseLogScale, trkDensityShift )
local WIREOPTION_OVERDRAW_WIDGETS = #( chkOverdraw, btnOverdrawMin, btnOverdrawMax, spnOverdrawMin, spnOverdrawMax, trkOverDrawOpacity )
local WIREOPTION_LIGHTCOST_WIDGETS = #( chkLightCost, btnLightCostMin, btnLightCostMax, spnLightCostMin, spnLightCostMax, trkLightCostOpacity )
local WIREOPTION_MULTICOLOUR_WIDGETS = #( chkColourPerEntity, chkColourPerTXD, chkColourPerShader, chkColourPerDrawCall )
local WIREOPTION_PRIORITYLEVEL = #( chkPriorityRequired, chkPriorityHigh, chkPriorityMedium, chkPriorityLow, lblPriorityRequired, lblPriorityHigh, lblPriorityMedium, lblPriorityLow,
trkPriorityRequired, trkPriorityHigh, trkPriorityMedium, trkPriorityLow )
local WIREOPTION_WIDGETS = #( WIREOPTION_TXD_WIDGETS,
WIREOPTION_LOD_WIDGETS,
WIREOPTION_BUCKET_WIDGETS,
WIREOPTION_HD_WIDGETS,
WIREOPTION_SHADER_WIDGETS,
WIREOPTION_ATTRIBUTES_WIDGETS,
WIREOPTION_TEXDENSITY_WIDGETS,
WIREOPTION_MULTICOLOUR_WIDGETS,
WIREOPTION_OVERDRAW_WIDGETS,
WIREOPTION_PRIORITYLEVEL,
WIREOPTION_LIGHTCOST_WIDGETS
)
local WIREOPTION_ALL_WIDGETS = #( gbxWireOptionsGroupBox, chkTXD1Colour, chkTXD2Colour, chkTXD3Colour, chkTXD4Colour, lblTxd1, lblTxd2, lblTxd3, lblTxd4,
txtTXD1Name, txtTXD2Name, txtTXD3Name, txtTXD4Name, trkTXD1Multiplier, trkTXD2Multiplier, trkTXD3Multiplier, trkTXD4Multiplier,
chkOrphanColour, chkHDColour, chkLODColour, chkSLOD1Colour, gbxLODContainerWidgets, chkSLOD2Colour, chkSLOD3Colour, chkSLOD4Colour,
lblOrphanLabel, lblHDLabel, lblLODLabel, lblSLOD1Label, lblSLOD2Label, lblSLOD3Label, lblSLOD4Label,
trkOrphanMultiplier, trkHDMultiplier, trkLODMultiplier, trkSLOD1Multiplier, trkLOSLODsMultiplier,
chkOpaqueColour, chkWaterColour, chkAlphaColour, chkDecalColour, chkCutoutColour, lblOpaqueLabel, lblAlphaLabel, lblDecalLabel, lblCutoutLabel, lblWaterLabel,
trkOpaqueMultiplier, trkAlphaMultiplier, trkDecalMultiplier, trkCutoutMultiplier, trkWaterMultiplier,
chkIsHDColour, chkUsingHDColour, chkSharedHDColour, chkCapableHDColour, chkSwitchingHDColour, chkNotHDColour,
lblIsHDLabel, lblUsingHDLabel, lblSharedHDLabel, lblCapableHDLabel, lblSwitchingHDLabel, lblNotHDLabel, trkUsingHDMultiplier, trkSharedHDMultiplier, trkCapableHDMultiplier,
chkUseShaderFilter, chkPXMShader, chkUberShader, trkUberLookup, chkStandard2lyrShader, chkWaterShader, chkMudShader, chkDefaultShader,
chkIsProp, chkIsFrag, chkLowPriority, chkIsDoor, chkNoShadow, chkNoReflect, chkIsDynamic, chkAlphaFading,
chkPriorityRequired, chkPriorityHigh, chkPriorityMedium, chkPriorityLow, lblPriorityRequired, lblPriorityHigh, lblPriorityMedium, lblPriorityLow,
trkPriorityRequired, trkPriorityHigh, trkPriorityMedium, trkPriorityLow,
chkTexDensityXMinColour, chkTexDensityMinColour, chkTexDensityMidColour, chkTexDensityMaxColour, chkTexDensityXMaxColour,
trkTexDensityXMinMultiplier, trkTexDensityMinMultiplier, trkTexDensityMidMultiplier, trkTexDensityMaxMultiplier, trkTexDensityXMaxMultiplier, txtTextureMinSize, trkTextureMinSize,
txtTextureDensityMin, txtTextureDensityMax, trkTextureDensityMin, trkTextureDensityMax, chkUseLogScale, trkDensityShift,
chkOverdraw, btnOverdrawMin, btnOverdrawMax, spnOverdrawMin, spnOverdrawMax, trkOverDrawOpacity,
chkLightCost, btnLightCostMin, btnLightCostMax, spnLightCostMin, spnLightCostMax, trkLightCostOpacity,
chkColourPerEntity, chkColourPerTXD, chkColourPerShader, chkColourPerDrawCall
)
-- TIME / WEATHER + TEXTURE VIEWER ROW --
groupBox gbxTimecycleGroupBox "TIME / WEATHER" width:TR_TIME_WIDTH height:TR_TIME_HEIGHT pos:TR_GROUP_POS
spinner spnTODHours "" range:[0,23,12] type:#Integer width:TR_TIMESPINNER_WIDTH
pos:(gbxTimecycleGroupBox.pos+TR_FIRST_OFFSET+[0,4])
tooltip:"Show/Change the Time of Day (Hours)"
spinner spnToDMinutes "" range:[0,59,0] type:#Integer width:TR_TIMESPINNER_WIDTH
pos:(spnTODHours.pos+[10+TR_SMALL_GAP,0])
tootip:"Show/Change the Time of Day (Minutes)"
dropdownList ddlWeatherPrev "" items:weatherItems height:(weatherItems.count+1) selection:7 width:TR_WEATHER_WIDTH
pos:(spnToDMinutes.pos+[10+TR_LARGE_GAP,-5]) enabled:true
tooltip:"Change the Previous Weather Type.\nRight-click disables the other widget, so this widget sets both Previous and Next."
dropdownList ddlWeatherNext "" items:weatherItems height:(weatherItems.count+1) selection:7 width:TR_WEATHER_WIDTH enabled:true
pos:(ddlWeatherPrev.pos+[TR_WEATHER_WIDTH+TR_SMALL_GAP,0])
tooltip:"Change the Next Weather Type."
checkButton chkTimeLock "Lock" checked:false width:TR_TIMELOCK_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:TIME_COLOUR
pos:(spnTODHours.pos+[12-TR_TIMESPINNER_WIDTH,TR_SMALL_BUTTON_HEIGHT-4+TR_SMALL_GAP])
tooltip:"Stop time from advancing\n(only in game, not RL)..."
dotnetcontrol trkTimeOfDay "system.windows.forms.trackbar" pos:(chkTimeLock.pos+[TR_TIMELOCK_WIDTH+TR_SMALL_GAP,1])
dotnetcontrol trkWeatherTransition "system.windows.forms.trackbar" pos:(ddlWeatherNext.pos+[TR_WEATHER_WIDTH+TR_SMALL_GAP+2,0])
local TIMECYCLE_WIDGETS = #( gbxTimecycleGroupBox, spnTODHours, spnToDMinutes, ddlWeatherPrev, ddlWeatherNext, chkTimeLock, trkTimeOfDay, trkWeatherTransition )
groupBox gbxTexViewerGroupBox "TEXTURE VIEWER" width:TR_TEXVIEWER_WIDTH height:TR_TIME_HEIGHT pos:(gbxTimecycleGroupBox.pos+[TR_TIME_WIDTH+TR_GROUP_HGAP,0])
checkButton chkTexViewerToggle "SHOW" width:TR_LARGE_BUTTON_HEIGHT height:TR_LARGE_BUTTON_HEIGHT highlightcolor:TIME_COLOUR checked:false
pos:(gbxTexViewerGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Open Texture Viewer window in RAG.\nAlso shows/hides the debug text with\ntexture names for the hovered-over material."
dropDownList ddlTexViewerSearchType"" items:#("TXDs","Textures") width:(TR_TEXVIEWER_TEXT_WIDTH-42-TR_SMALL_GAP) height:3
pos:(chkTexViewerToggle.pos+[TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP,0])
tooltip:"Change search between TXDs and Textures."
checkButton chkTexViewerExact "Exact" width:40 height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TIME_COLOUR
pos:(ddlTexViewerSearchType.pos+[TR_TEXVIEWER_TEXT_WIDTH-42,0])
tooltip:"Texture Viewer search results will only match Exact text below."
editText txtTexViewerSearch "" width:TR_TEXVIEWER_TEXT_WIDTH
pos:(chkTexViewerToggle.pos+[TR_LARGE_BUTTON_HEIGHT+TR_SMALL_GAP-3,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP+2])
tooltip:"Enter text to search for TXDs or Textures.\nWill only return results for loaded TXDs."
local TEXVIEWER_WIDGETS = #( gbxTexViewerGroupBox, chkTexViewerToggle, ddlTexViewerSearchType, chkTexViewerExact, txtTexViewerSearch )
-- OCCLUSION + GBUFFER + CULLBOXES ROW --
groupBox gbxOcclusionGroupBox "OCCLUSION" width:TR_OCCL_WIDTH height:TR_OCCL_HEIGHT pos:TR_GROUP_POS
checkButton chkOcclOff "ON" width:TR_OCCL_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR checked:true
pos:(gbxOcclusionGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle occlusion ON / OFF"
dropDownList ddlOcclMode "" items:#("Hide","Show","Overlay") width:TR_OCCLMODE_WIDTH height:4
pos:(chkOcclOff.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
toolTip:"Show/Hide occlusion mesh in-game."
checkButton chkOcclFlip "Flip" width:TR_OCCLFLIP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR checked:false
pos:(ddlOcclMode.pos+[TR_OCCLMODE_WIDTH+TR_SMALL_GAP,1])
tooltip:"Draw only objects that are normally occluded."
local OCCLUSION_WIDGETS = #( gbxOcclusionGroupBox, chkOcclOff, ddlOcclMode, chkOcclFlip )
groupBox gbxGBuffGroupBox "G BUFFER" width:TR_GBUF_WIDTH height:TR_OCCL_HEIGHT pos:(gbxOcclusionGroupBox.pos+[TR_OCCL_WIDTH+TR_GROUP_HGAP,0])
dropdownList ddlGBufferLocation "" items:#("Off","Corner","Full") width:60 height:4
pos:(gbxGBuffGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show selected GBuffer pass\nin either the corner or fullscreen."
dropdownList ddlGBuffer "" items:#("Albedo","Normals","Specular","Ambient/Emissive","Velocity","Depth","Shadow") selection:1 width:TR_GBUF_MODE_WIDTH height:8 \
pos:(ddlGBufferLocation.pos+[60+TR_SMALL_GAP,0])
tooltip:"Change GBuffer mode"
checkButton chkLightOverride "Lights" width:40 height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR
pos:(ddlGBufferLocation.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP+1])
tooltip:"Toggle Lighting On/Off"
checkButton chkDiffuseOverride "Diffuse" width:40 height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR
pos:(chkLightOverride.pos+[40+TR_SMALL_GAP+3,0])
tooltip:"Toggle Diffuse Textures On/Off"
checkButton chkTintOverride "Tint" width:32 height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR
pos:(chkDiffuseOverride.pos+[40+1,0])
tooltip:"Toggle Tint Textures On/Off\n(Results may vary, as Tinted Textures aren't always Tint Textures)"
dotNetControl trkDiffuseOverride "system.windows.forms.trackbar" pos:(chkTintOverride.pos+[33,1])
dotNetControl trkDarkOverride "system.windows.forms.trackbar" pos:(ddlGBuffer.pos+[TR_GBUF_MODE_WIDTH+TR_SMALL_GAP+3,0])
local GBUF_WIDGETS = #( gbxGBuffGroupBox, ddlGBuffer, ddlGBufferLocation, chkLightOverride, chkDiffuseOverride, trkDiffuseOverride, chkTintOverride, trkDarkOverride )
local GBUF_CONTROLS = #( gbxGBuffGroupBox, chkLightOverride, chkDiffuseOverride, chkTintOverride )
groupBox gbxCullBoxGroupBox "CULLBOXES" width:TR_CULLBOX_WIDTH height:TR_OCCL_HEIGHT pos:(gbxGBuffGroupBox.pos+[TR_GBUF_WIDTH+TR_GROUP_HGAP,0])
checkButton chkCullBoxesOn "ON" width:TR_CULLBOX_ON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR checked:true
pos:(gbxCullBoxGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle IMAP culling ON / OFF"
checkButton chkCullBoxEditor "Edit" width:TR_CULLBOX_EDITOR_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:OCCL_COLOUR checked:false
pos:(chkCullBoxesOn.pos+[TR_CULLBOX_ON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Open in-game IPL Cullbox Editor"
button btnFindCullBox "Find" width:TR_CULL_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT
pos:(chkCullBoxesOn.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Point debug camera at editor's selected Cullbox"
button btnWarpToCullBox "Warp" width:TR_CULL_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT
pos:(btnFindCullBox.pos+[TR_CULL_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Warp debug camera to selected Cullbox"
local CULLBOX_WIDGETS = #( gbxCullBoxGroupBox, chkCullBoxesOn, chkCullBoxEditor, btnFindCullBox, btnWarpToCullBox )
-- PREVIEW + LIGHTING ROW --
groupBox gbxPreviewGroupBox "PREVIEW" width:TR_PREVIEW_WIDTH height:TR_LIGHTING_HEIGHT pos:TR_GROUP_POS
checkButton chkPreviewEnable "PREVIEW" width:(TR_PREVIEW_WIDTH-TR_GROUP_HBORDERS) height:(TR_SMALL_BUTTON_HEIGHT+8) highlightColor:LIGHT_COLOUR checked:false
pos:(gbxPreviewGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Enable Preview"
button btnFlushScene "Flush" width:(TR_PREVIEW_WIDTH-TR_GROUP_HBORDERS) height:TR_SMALL_BUTTON_HEIGHT
pos:(chkPreviewEnable.pos+[0,TR_SMALL_BUTTON_HEIGHT+8+TR_SMALL_GAP])
tooltip:"Flush Scene to update Preview."
local PREVIEW_WIDGETS = #( gbxPreviewGroupBox, chkPreviewEnable, btnFlushScene )
groupBox gbxLightInfoGroupBox "LIGHT INFO" width:TR_LIGHT_INFO_WIDTH height:TR_LIGHTING_HEIGHT pos:(gbxPreviewGroupBox.pos+[TR_PREVIEW_WIDTH+TR_GROUP_HGAP,0])
checkButton chkShowBudget "Budget" width:(TR_LIGHT_TYPE_WIDTH+TR_SMALL_GAP+TR_SMALL_BUTTON_HEIGHT) height:(TR_SMALL_BUTTON_HEIGHT+8) highlightColor:LIGHT_COLOUR checked:false
pos:( gbxLightInfoGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide Budget windows.\nRrequired for LOCAL light Tint\n(Clicking one will toggle the other on automatically)."
checkButton chkLightInfo "Type" width:TR_LIGHT_TYPE_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightColor:LIGHT_COLOUR checked:false
pos:(chkShowBudget.pos+[0,TR_SMALL_BUTTON_HEIGHT+8+TR_SMALL_GAP])
tooltip:"Show Type Labels next to light entities."
checkButton chkLightCosts "C" width:TR_SMALL_BUTTON_HEIGHT height:TR_SMALL_BUTTON_HEIGHT highlightColor:LIGHT_COLOUR checked:false
pos:( chkLightInfo.pos+[TR_LIGHT_TYPE_WIDTH+TR_SMALL_GAP,0])
tooltip:"Toggle Light Costs visualisation ON/OFF.\nOverrides current wireframe mode.\n(Options appear in Wireframe Option group.)"
local LIGHT_INFO_WIDGETS = #( gbxLightInfoGroupBox, chkLightCosts, chkShowBudget, chkLightInfo )
groupBox gbxLightingTogglesGroupBox "MAIN LIGHT TOGGLES" width:TR_LIGHTING_TOGGLES_WIDTH height:TR_LIGHTING_HEIGHT pos:(gbxLightInfoGroupBox.pos+[TR_LIGHT_INFO_WIDTH+1,0])
checkButton chkGlobalLightToggle "GLOBAL" width:(TR_LIGHT_GLOBAL_WIDTH) height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(gbxLightingTogglesGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle GlOBAL light ON/OFF."
checkButton chkTintLOD "Tint" width:TR_LIGHT_TYPE_WIDTH height:(TR_SMALL_BUTTON_HEIGHT-2) highlightColor:CONTROL_COLOUR checked:false
pos:(chkGlobalLightToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP+4]) tooltip:"Toggle RED Tint on LOD lights."
checkButton chkLODLightToggle "LOD" width:(TR_LIGHT_GLOBAL_WIDTH-TR_LIGHT_TYPE_WIDTH) height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkTintLOD.pos+[TR_LIGHT_TYPE_WIDTH,0])
tooltip:"Show/Hide LOD Lights."
checkButton chkTintLocal "Tint" width:TR_LIGHT_TYPE_WIDTH height:(TR_SMALL_BUTTON_HEIGHT-2) highlightColor:CONTROL_COLOUR checked:false
pos:(chkGlobalLightToggle.pos+[TR_LIGHT_GLOBAL_WIDTH+TR_LARGE_GAP,0])
tooltip:"Toggle coloured tint on LOCAL Lights.\nRequires Budget window to be active\n(Clicking one will toggle the other on automatically)"
checkButton chkLocalLightToggle "LOCAL" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkTintLocal.pos+[TR_LIGHT_TYPE_WIDTH,0])
tooltip:"Show/Hide LOCAL lights.(Will toggle ON Point, Spot, Capsule and Other if none are ON)."
checkButton chkHighlightDistant "Show" width:TR_LIGHT_TYPE_WIDTH height:(TR_SMALL_BUTTON_HEIGHT-2) highlightColor:CONTROL_COLOUR checked:false
pos:(chkTintLocal.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP+4])
tooltip:"Show/Hide Debug Highlights on Distant LOD Lights."
checkButton chkDistantLightToggle "Distant" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkHighlightDistant.pos+[TR_LIGHT_TYPE_WIDTH,0])
tooltip:"Show/Hide Distant LOD Lights."
local LIGHTING_TOGGLE_WIDGETS = #( gbxLightingTogglesGroupBox, chkGlobalLightToggle, chkLODLightToggle, chkLocalLightToggle, chkDistantLightToggle,
chkTintLOD, chkTintLocal, chkHighlightDistant )
groupBox gbxLocalTogglesGroupBox "LOCAL LIGHTS" width:TR_LOCALLIGHTS_WIDTH height:TR_LIGHTING_HEIGHT pos:(gbxLightingTogglesGroupBox.pos+[TR_LIGHTING_TOGGLES_WIDTH+1,0])
checkButton chkPointLightToggle "Point" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(gbxLocalTogglesGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide LOCAL Point Lights."
checkButton chkSpotLightToggle "Spot" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkPointLightToggle.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+4])
tooltip:"Show/Hide LOCAL Spot Lights.\nRequires LOCAL on, so will automatically toggle it."
checkButton chkCapsuleLightToggle "Capsule" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkPointLightToggle.pos+[TR_LIGHT_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide LOCAL Capsule Lights.\nRequires LOCAL on, so will automatically toggle it."
checkButton chkOtherLightToggle "Other" width:TR_LIGHT_BUTTON_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+4) highlightColor:LIGHT_COLOUR checked:true
pos:(chkCapsuleLightToggle.pos+[0,TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP+4])
tooltip:"Show/Hide Other Types of LOCAL Lights.\nRequires LOCAL on, so will automatically toggle it."
local LOCAL_TOGGLE_WIDGETS = #( gbxLocalTogglesGroupBox, chkPointLightToggle, chkSpotLightToggle, chkCapsuleLightToggle, chkOtherLightToggle )
local LIGHT_TOGGLE_CONTROLS = #( gbxLightingTogglesGroupBox, chkGlobalLightToggle, chkLODLightToggle, chkLocalLightToggle, chkDistantLightToggle )
local LOCALLIGHT_TOGGLE_CONTROLS = #( gbxLocalTogglesGroupBox, chkPointLightToggle, chkSpotLightToggle, chkCapsuleLightToggle, chkOtherLightToggle )
-- LOD HIERARCHY ROW --
groupBox gbxLODHierarchyGroupBox "LOD TYPE TOGGLES" width:TR_LODHIERARCHY_WIDTH height:TR_LOD_HEIGHT pos:TR_GROUP_POS
checkButton chkOrphanToggle "Orphan" width:(TR_LOD_BUTTON_WIDTH-12) height:(TR_LOD_BUTTON_HEIGHT-2) highlightcolor:(buttonColours.orphan * DARK_SCHEME_MULTIPLIER) checked:true
pos:(gbxLODHierarchyGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide Orphan HD objects.\nRight-click to Show / Hide ALL other LOD Levels."
checkButton chkHDToggle "HD" width:(TR_LOD_BUTTON_WIDTH+12)height:TR_LOD_BUTTON_HEIGHT highlightcolor:(buttonColours.hd * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkOrphanToggle.pos+[TR_LOD_BUTTON_WIDTH+TR_SMALL_GAP-12,0])
tooltip:"Show/Hide HD objects.\nRight-click to Show / Hide ALL other LOD Levels."
checkButton chkLODToggle "LOD" width:(TR_LOD_BUTTON_WIDTH+12) height:(TR_LOD_BUTTON_HEIGHT-6) highlightcolor:(buttonColours.lod * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkOrphanToggle.pos+[0,TR_LOD_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show/Hide LOD objects.\nRight-click to Show / Hide ALL other LOD Levels."
checkButton chkSLOD1Toggle "SLOD1" width:(TR_LOD_BUTTON_WIDTH-12) height:(TR_LOD_BUTTON_HEIGHT-8) highlightcolor:(buttonColours.slod1 * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkLODToggle.pos+[TR_LOD_BUTTON_WIDTH+12+TR_SMALL_GAP,0])
tooltip:"Show/Hide SLOD1 objects.\nRight-click to Show / Hide ALL other LOD Levels."
checkButton chkSLOD2Toggle "SLOD2" width:TR_LOD_BUTTONTHREE_WIDTH height:(TR_LOD_BUTTON_HEIGHT-12) highlightcolor:(buttonColours.slod2 * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkLODToggle.pos+[0,TR_LOD_BUTTON_HEIGHT+TR_LARGE_GAP-8])
tooltip:"Show/Hide SLOD2 objects.\nRight-click to Show/Hide ALL other LOD Levels."
checkButton chkSLOD3Toggle "SLOD3" width:TR_LOD_BUTTONTHREE_WIDTH height:(TR_LOD_BUTTON_HEIGHT-12) highlightcolor:(buttonColours.slod3 * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkSLOD2Toggle.pos+[TR_LOD_BUTTONTHREE_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide SLOD3 objects.\nRight-click to Show / Hide ALL other LOD Levels."
checkButton chkSLOD4Toggle "SLOD4" width:TR_LOD_BUTTONTHREE_WIDTH height:(TR_LOD_BUTTON_HEIGHT-12) highlightcolor:(buttonColours.slod4 * DARK_SCHEME_MULTIPLIER) checked:true
pos:(chkSLOD3Toggle.pos+[TR_LOD_BUTTONTHREE_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide SLOD4 objects.\nRight-click to Show / Hide ALL other LOD Levels."
groupBox gbxLODLevelsGroupBox "LEVELS" width:TR_LODLEVELS_WIDTH height:TR_LOD_HEIGHT pos:(gbxLODHierarchyGroupBox.pos+[TR_LODHIERARCHY_WIDTH+1,0])
dropdownList ddlLODLevel "" items:#("HD","LOD","SLOD1","SLOD2","SLOD3","SLOD4") width:80 height:7
pos:(gbxLODLevelsGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Select a LOD Level to Isolate/Hide."
dropdownList ddlLODFunction "" items:#("Draw All","Switch To","Cull Only", "Cull Other") width:80 height:5
pos:(ddlLODLevel.pos+[0,TR_SMALL_BUTTON_HEIGHT+1])
tooltip:"Isolate/Hide the LOD Level selected in the drop down to the left."
checkButton chkLODMultiplierToggle "Multilpier" width:80 height:(TR_SMALL_BUTTON_HEIGHT+10) highlightcolor:buttonColours.alpha checked:false
pos:(ddlLODFunction.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_LARGE_GAP])
tooltip:"Switch on the LOD multiplier (using value to the right).\nWARNING : Large values (ie. over 4) are prone to locking up the game\nas you'll be trying to load a lot more objects."
spinner spnLODMultiplier "" range:[0.0,10.0,4.0] type:#float width:80
pos:(chkLODMultiplierToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+11])
tooltip:"Value to multiply ALL LOD Distances by.\n(BEWARE VALUES OVER 4)."
groupBox gbxLODInfoGroupBox "INFO" width:TR_LODINFO_WIDTH height:TR_LOD_HEIGHT pos:(gbxLODLevelsGroupBox.pos+[TR_LODLEVELS_WIDTH+TR_GROUP_HGAP,0])
checkButton chkLODSphere "LOD Sphere" width:TR_LODTREE_WIDTH height:TR_LARGE_BUTTON_HEIGHT highlightcolor:LOD_COLOUR checked:false
pos:(gbxLODInfoGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show LOD sphere for the highlighted object in RAG Picker."
checkButton chkLODTree "Tree" width:TR_LODTREE_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:LOD_COLOUR checked:false
pos:(chkLODSphere.pos+[0,TR_LARGE_BUTTON_HEIGHT+TR_LARGE_GAP])
tooltip:"Show LOD Tree for selected object in RAG"
checkButton chkLODInfo "Info" width:TR_LODTREE_WIDTH height:(TR_SMALL_BUTTON_HEIGHT+2) highlightColor:LOD_COLOUR checked:false
pos:(chkLODTree.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show LOD hierarchy info for selected objects in the in-game debug text (B)."
groupBox gbxLODEditGroupBox "LOD TWEAK" width:TR_LODEDIT_WIDTH height:TR_LOD_HEIGHT pos:(gbxLODINFOGroupBox.pos+[TR_LODINFO_WIDTH+TR_GROUP_HGAP,0])
checkButton chkEnableTweak "Edit Distances" width:TR_TWEAKTYPE_WIDTH height:(TR_LARGE_BUTTON_HEIGHT) highlightColor:LOD_COLOUR checked:false
pos:(gbxLODEditGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Temporarily tweak the LOD Distance for the selected objects in RAG."
dropDownList ddlTweakType "" items:#("Selected","Children") selection:1 width:TR_TWEAKTYPE_WIDTH height:3
pos:(chkEnableTweak.pos+[0,TR_LARGE_BUTTON_HEIGHT+TR_LARGE_GAP])
tooltip:"Swap between selected Object's LOD Distance,\nand selected object's child LOD Distance."
spinner spnTweakValue "" range:[0,12000,0] type:#integer height:TR_SMALL_BUTTON_HEIGHT width:TR_TWEAKTYPE_WIDTH
pos:(ddlTweakType.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP+2])
tooltip:"New LOD Distance.\nShould switch to existing LOD Distance when first editted.\nWill revert to existing LOD Distance when object unloads from memory."
local LODHIERARCHY_WIDGETS = #( gbxLODHierarchyGroupBox, chkOrphanToggle, chkHDToggle, chkLODToggle, chkSLOD1Toggle, chkSLOD2Toggle, chkSLOD3Toggle, chkSLOD4Toggle )
local LODLEVELS_WIDGETS = #( gbxLODLevelsGroupBox, ddlLODLevel, ddlLODFunction, chkLODMultiplierToggle, spnLODMultiplier )
local LODINFO_WIDGETS = #( gbxLODInfoGroupBox, chkLODSphere, chkLODTree, chkLODInfo )
local LODEDIT_WIDGETS = #( gbxLODEditGroupBox, chkEnableTweak, ddlTweakType, spnTweakValue )
local LOD_WIDGETS = #( gbxLODHierarchyGroupBox, chkOrphanToggle, chkHDToggle, chkLODToggle, chkSLOD1Toggle, chkSLOD2Toggle, chkSLOD3Toggle, chkSLOD4Toggle,
ddlLODLevel, ddlLODFunction, chkLODMultiplierToggle, spnLODMultiplier, chkLODSphere, chkLODTree, chkLODInfo,
gbxLODEditGroupBox, chkEnableTweak, ddlTweakType, spnTweakValue
)
local LOD_CONTROLS = #( gbxLODHierarchyGroupBox, chkOrphanToggle, chkHDToggle, chkLODToggle, chkSLOD1Toggle, chkSLOD2Toggle, chkSLOD3Toggle, chkSLOD4Toggle ) -- Just the LOD Level buttons for switching states
-- GEO / RENDER PASS / COLLISON TOGGLE ROW --
groupBox gbxGeoTypeGroupBox "GEO TYPE TOGGLES" width:TR_GEO_WIDTH height:TR_GEO_HEIGHT pos:TR_GROUP_POS
checkButton chkVisBuildingsToggle "Building" width:TR_GEOTYPE_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(gbxGeoTypeGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide objects flagged as BUILDING\n(probably still includes TERRAIN LODs).\nRight-click to Show/Hide ALL other types."
checkButton chkVisInteriorToggle "Interior" width:TR_GEOTYPE_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(TOGGLE_COLOUR*0.8) checked:true enabled:true
pos:(chkVisBuildingsToggle.pos+[TR_GEOTYPE_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as INTERIOR\nRight-click to Show/Hide ALL other types."
checkButton chkVisTerrainToggle "Terrain" width:TR_GEOTYPE_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(chkVisInteriorToggle.pos+[TR_GEOTYPE_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as TERRAIN\nRight-click to Show/Hide ALL other types."
checkButton chkVisIPTreesToggle "Tree" width:TR_GEOPROP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(chkVisBuildingsToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as TREE\nRight-click to Show/Hide ALL other types."
checkButton chkVisIPGrassToggle "Grass" width:TR_GEOPROP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(chkVisIPTreesToggle.pos+[TR_GEOPROP_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as GRASS\nRight-click to Show/Hide ALL other types."
checkButton chkVisObjectsToggle "Object" width:TR_GEOPROP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(chkVisIPGrassToggle.pos+[TR_GEOPROP_BUTTON_WIDTH+TR_LARGE_GAP,0])
tooltip:"Show/Hide objects flagged as OBJECT (PROPS)\nRight-click to Show/Hide ALL other types."
checkButton chkVisDummiesToggle "Dummy" width:TR_GEOPROP_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:TOGGLE_COLOUR checked:true enabled:true
pos:(chkVisObjectsToggle.pos+[TR_GEOPROP_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as DUMMY (PROPS)\nRight-click to Show/Hide ALL other types."
checkButton chkVisWaterToggle "Water" width:TR_GEOOTHER_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(TOGGLE_COLOUR*0.8) checked:true enabled:true
pos:(chkVisIPTreesToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP,0])
tooltip:"Show/Hide objects flagged as WATER\nRight-click to Show/Hide ALL other types."
checkButton chkVisVehiclesToggle "Vehicles" width:TR_GEOOTHER_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(TOGGLE_COLOUR*0.7) checked:true
pos:(chkVisWaterToggle.pos+[TR_GEOOTHER_BUTTON_WIDTH+TR_LARGE_GAP,0])
tooltip:"Show/Hide VEHICLEs\nRight-click to Show/Hide ALL other types."
checkButton chkVisPedsToggle "Peds" width:TR_GEOOTHER_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(TOGGLE_COLOUR*0.7) checked:true enabled:true
pos:(chkVisVehiclesToggle.pos+[TR_GEOOTHER_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide PEDs\nRight-click to Show/Hide ALL other types."
local GEOTYPE_WIDGETS = #( gbxGeoTypeGroupBox,chkVisBuildingsToggle, chkVisInteriorToggle, chkVisTerrainToggle,
chkVisIPTreesToggle, chkVisIPGrassToggle, chkVisObjectsToggle, chkVisDummiesToggle, chkVisWaterToggle, chkVisVehiclesToggle, chkVisPedsToggle
)
groupBox gbxRenderPassGroup "RENDER PASS TOGGLES" width:TR_PASS_WIDTH height:TR_GEO_HEIGHT pos:(gbxGeoTypeGroupBox.pos+[TR_GEO_WIDTH+TR_GROUP_HGAP,0])
checkButton chkVisOpaqueToggle "Opaque" width:(TR_PASS_BUTTON_WIDTH+16) height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(buttonColours.opaque * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(gbxRenderPassGroup.pos+TR_FIRST_OFFSET)
tooltip:"Show/Hide OPAQUE materials\nRight-click to Show/Hide ALL other types."
checkButton chkVisDecalToggle "Decal" width:(TR_PASS_BUTTON_WIDTH-16) height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(buttonColours.decal * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(chkVisOpaqueToggle.pos+[TR_PASS_BUTTON_WIDTH+16+TR_SMALL_GAP,0])
tooltip:"Show/Hide DECAL materials\nRight-click to Show/Hide ALL other types."
checkButton chkVisAlphaToggle "Alpha" width:TR_PASS_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(buttonColours.alpha * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(chkVisOpaqueToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show/Hide ALPHA materials\nRight-click to Show/Hide ALL other types."
checkButton chkVisCutoutToggle "Cutout" width:TR_PASS_BUTTON_WIDTH height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(buttonColours.cutout * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(chkVisAlphaToggle.pos+[TR_PASS_BUTTON_WIDTH+TR_SMALL_GAP,0])
tooltip:"Show/Hide CUTOUT materials\nRight-click to Show/Hide ALL other types."
checkButton chkVisFXToggle "VFX" width:(TR_PASS_BUTTON_WIDTH-16) height:TR_SMALL_BUTTON_HEIGHT highlightColor:(buttonColours.shadow * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(chkVisAlphaToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Toggle Fog/VFX ON and OFF."
checkButton chkShadowToggle "Shadow" width:(TR_PASS_BUTTON_WIDTH+16) height:TR_SMALL_BUTTON_HEIGHT highlightcolor:(buttonColours.shadow * DARK_SCHEME_MULTIPLIER) checked:true enabled:true
pos:(chkVisFXToggle.pos+[TR_PASS_BUTTON_WIDTH-16+TR_SMALL_GAP,0])
tooltip:"Show/Hide SHADOWS\nRight-click to Show/Hide ALL other types."
local RENDERPASS_WIDGETS = #( gbxRenderPassGroup, chkVisOpaqueToggle, chkVisAlphaToggle, chkVisDecalToggle, chkVisCutoutToggle)
local ALLPASS_WIDGETS = #( gbxRenderPassGroup, chkVisOpaqueToggle, chkVisAlphaToggle, chkVisDecalToggle, chkVisCutoutToggle, chkVisFXToggle, chkShadowToggle )
groupBox gbxCollisionGroup "COLLISION" width:TR_COLLISION_WIDTH height:TR_GEO_HEIGHT pos:(gbxRenderPassGroup.pos+[TR_PASS_WIDTH+TR_GROUP_HGAP,0])
checkButton chkSolidCollision "Solid" width:(TR_COLLISION_WIDTH-TR_GROUP_HBORDERS) height:TR_SMALL_BUTTON_HEIGHT highlightColor:TOGGLE_COLOUR checked:false
pos:(gbxCollisionGroup.pos+TR_FIRST_OFFSET)
tooltip:"Draw active basic Collision as solid."
dropdownList ddlCollisionType "" items:#("OFF", "MOVER", "WEAPON") selection:1 width:(TR_COLLISION_WIDTH-TR_GROUP_HBORDERS) height:4
pos:(chkSolidCollision.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show basic Collision type overlay.\nRight-click to turn both overlays OFF."
dropdownList ddlOtherType "" items:#("OFF", "Pavement", "Deep Snow", "Mud", "PedDensity") selection:1 width:(TR_COLLISION_WIDTH-TR_GROUP_HBORDERS) height:6
pos:(ddlCollisionType.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show other Collision type overlay.\nRight-click to turn both overlays OFF."
local COLLISION_WIDGETS = #( gbxCollisionGroup, chkSolidCollision, ddlCollisionType, ddlOtherType )
-- PLACEHOLDER ROW - TO BE ORGANISED ONCE THE WIDGET SELECTION IS FINALISED !!!! --
-- WILL PROBABLY HAVE OPTIMISATION, POM GROUPS + MAYBE VIRTUAL MAP REINSTATED FROM SCENEANALYSER
-- + ANY REQUESTED WIDGETS FROM FEEDBACK
groupBox gbxOtherGroupBox "PLACEHOLDER SPACE FOR OTHER WIDGET GROUPS TO BE ORGANISED LATER" width:TR_OTHER_WIDTH height:TR_OTHER_HEIGHT pos:TR_GROUP_POS
checkButton chkFloatingObjects "Floating Objects" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR checked:false
pos:(gbxOtherGroupBox.pos+TR_FIRST_OFFSET)
tooltip:"Toggle Floating/Intersecting object info overlay OFF/ON."
checkButton chkObjectDensityToggle "Object Density" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightcolor:CONTROL_COLOUR checked:false
pos:(chkFloatingObjects.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Draw Object Density Boxes"
checkButton chkShowEntities "Light Entities" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR checked:false
pos:( chkObjectDensityToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show/Hide boxes around loaded light entities."
checkButton chkDrawListToggle "Draw List" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightcolor:CONTROL_COLOUR checked:false
pos:(chkFloatingObjects.pos+[90+TR_SMALL_GAP,0])
tooltip:"Show Draw List Stats"
checkButton chkBudgetToggle "GBUF Budgets" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightcolor:CONTROL_COLOUR checked:false
pos:(chkDrawListToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show GPU Budget diagnostics"
checkButton chkHDTexturesToggle "HD Tex List" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightcolor:CONTROL_COLOUR checked:false enabled:true
tooltip:"Show HD Texture List"
pos:(chkBudgetToggle.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
checkButton chkPOMEnable "Disable POM" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR
pos:(chkDrawListToggle.pos+[90+TR_SMALL_GAP,0])
tooltip:"Disables POM."
checkButton chkShowPOMBlend "POM Blend Mask" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR
pos:(chkPOMEnable.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Shows/Hides the POM Blend Mask vert channel."
checkButton chkShowPOMCurve "POM Curve Mask" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR
pos:(chkShowPOMBlend.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show/Hide the POM Curve Mask vert channel."
checkButton chkShowPOMFade "Show POM Fade" width:90 height:TR_SMALL_BUTTON_HEIGHT highlightColor:CONTROL_COLOUR
pos:(chkShowPOMCurve.pos+[0,TR_SMALL_BUTTON_HEIGHT+TR_SMALL_GAP])
tooltip:"Show/Hide the POM Distance Fade Settings."
local OTHER_WIDGETS = #( gbxOtherGroupBox, chkFloatingObjects, chkObjectDensityToggle, chkShowEntities, chkDrawListToggle, chkBudgetToggle, chkHDTexturesToggle,
chkPOMEnable, chkShowPOMBlend, chkShowPOMCurve, chkShowPOMFade
)
-- HERE ARE A FEW OF MY LESS FAVOURITE THINGS --
/* groupBox gbxVectorMapGroupBox "Vector Map" width:TR_VECTOR_MAP_WIDTH height:TR_SMALL_HEIGHT pos:(gbxWireframeGroupBox.pos+[(TR_WIRE_WIDTH-TR_VECTOR_MAP_WIDTH),96])
checkButton chkVisMap "Basic" width:34 height:TR_SMALL_BUTTON_HEIGHT highlightColor:DEFAULT_COLOUR checked:false pos:(gbxVectorMapGroupBox.pos+TR_FIRST_OFFSET) tooltip:""
checkButton chkVisMapDebug "More" width:32 height:TR_SMALL_BUTTON_HEIGHT highlightColor:DEFAULT_COLOUR checked:false pos:(chkVisMap.pos+[36,0]) tooltip:""
checkButton chkVisMapDupes "Dupes" width:40 height:TR_SMALL_BUTTON_HEIGHT highlightColor:DEFAULT_COLOUR checked:false pos:(chkVisMapDebug.pos+[34,0]) tooltip:""
checkButton chkVisMapInfo "Info" width:28 height:TR_SMALL_BUTTON_HEIGHT highlightColor:DEFAULT_COLOUR checked:false pos:(chkVisMapDupes.pos+[42,0]) tooltip:""
button btnVMapZoomOut "-" width:18 height:TR_SMALL_BUTTON_HEIGHT pos:(chkVisMapInfo.pos+[36,0]) tooltip:""
button btnVMapZoomIn "+" width:18 height:TR_SMALL_BUTTON_HEIGHT pos:(btnVMapZoomOut.pos+[20,0]) tooltip:""
*/
-- Row order defined here... wireOptionRow setup properly in open event to avoid problems if new rows are added !!!!
local wireOptionRow = 1 -- Setting obviously wrong to detect any unforseen problems early (will mangle the WIRE_OPTIONS UI so it's visible outside WIREFRAME)
local ALL_WIDGETS = #(
#(ALLBANK_WIDGETS, gbxBankTogglesGroupBox),
#(BLOCK_WIDGETS, PICKER_WIDGETS, chkPickerBank),
#(TIMECYCLE_WIDGETS, TEXVIEWER_WIDGETS, chkTimeBank),
#(WIREFRAME_WIDGETS, WIREOPTION_ALL_WIDGETS, chkWireframeBank),
#(PREVIEW_WIDGETS, LIGHTING_TOGGLE_WIDGETS, LOCAL_TOGGLE_WIDGETS, LIGHT_INFO_WIDGETS, chkLightingBank),
#(LODHIERARCHY_WIDGETS, LODLEVELS_WIDGETS, LODINFO_WIDGETS, LODEDIT_WIDGETS, chkLODBank),
#(OCCLUSION_WIDGETS, GBUF_WIDGETS, CULLBOX_WIDGETS, chkOcclCullBank),
#(GEOTYPE_WIDGETS, ALLPASS_WIDGETS, COLLISION_WIDGETS, chkToggleBank),
#(OTHER_WIDGETS, chkOtherBank)
)
---- FUNCTIONS ----
-- DEBUG FUNCTIONS --
fn AddLabelsToTooltips =
( -- DEBUG FUNCTION that appends the widget name to its tooltip (because there are too many widgets to remember their names)
for widgetRow in ALL_WIDGETS do
(
for groupID = 1 to (widgetRow.count-1) do
( -- 1 to (widgetRow.count-1) as the control widgets are appended to the widget groups (and should always be in the first widget group)
for widget in widgetRow[groupID] do
(
if ((classOf widget) != GroupBoxControl) and ((classOf widget) != dotnetcontrol) then
(
--try
--( -- NOt sure if there are any that refuse to have tooltips... so may have to re-instate try (only for DEBUG, so not too bothered about performance for this one)
if ( widget.tooltip != "" ) then
(
widget.tooltip += ( "\n\nDEBUG WIDGET INFO: " + widget.name )
)
else
(
widget.tooltip = ( "DEBUG WIDGET INFO: " + widget.name )
)
--)
--catch()
)
)
)
)
)
fn TraceMessage caller start:true =
( -- Writes a trace message to the listener when called (text is indented so it's easier to see which function has called the current function)
local mesg = stringstream ""
if start then
(
if ( TRACE > 1 ) then ( for tab = 1 to ( TRACE - 1 ) do ( format " " to:mesg ) )
format "%\n" caller to:mesg
format ( mesg as string )
TRACE += 1
)
else
(
TRACE -= 1
)
)
-- CONTROL FUNCTIONS --
fn InitDotNetTrackbarControl ctrl value:100 width:TR_WIRE_BAR_WIDTH height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:0 maxVal:100 intervals:4 vertical:false =
( -- Set up DOTNET Trackbar ctrl according to passed arguments
local buttColour = (colorMan.getColor #button) * 255
ctrl.autoSize = false
ctrl.minimum = minVal
ctrl.maximum = maxVal
ctrl.value = value
ctrl.size = dotNetObject "System.Drawing.Size" width height
ctrl.TickFrequency = (maxVal - minVal) / intervals -- 25
ctrl.largeChange = (maxVal - minVal) / intervals
ctrl.TickStyle = ( dotNetClass"System.Windows.Forms.TickStyle").bottomright
ctrl.enabled = true
ctrl.backColor = ( (dotNetClass "system.drawing.color").fromARGB buttColour[1] buttColour[2] buttColour[3] )
if vertical then ( ctrl.orientation = (dotNetClass "system.windows.forms.orientation").vertical )
)
fn GetInitialWidgetOffsets =
( -- Setup the initial widget offsets from their group box position (used when moving groups vertically)
local allWidgetOffsets = #()
for widgetRow in ALL_WIDGETS do
(
local widgetRowOffsets = #()
--for widgetGroup in widgetRow do
for groupID = 1 to (widgetRow.count-1) do
(
local widgetOffsets = #()
--for widgetId = 1 to widgetGroup.count do
for widgetId = 1 to widgetRow[groupID].count do
(
append widgetOffsets (widgetRow[groupID][widgetID].pos - widgetRow[groupID][1].pos)
)
append widgetRowOffsets widgetOffsets
)
append allWidgetOffsets widgetRowOffsets
)
allWidgetOffsets
)
fn SkipSEPARATOR ctrl separatorLine previousSelection =
( -- Skips over DDL lines in the direction of travel, when they're a separatorLine
-- Passing 3 arguments, since might have different widths of DDL controls with different separators at some point
if (ctrl.selected == separatorLine) then
(
local increment = if (ctrl.selection > previousSelection) then (1) else (-1)
ctrl.selection = ctrl.selection + increment
)
ctrl.selection
)
-- GENERAL RAG FUNCTIONS --
-- fn SetupRAGBanks =
-- ( -- Only called once, so duping to CheckRAGConnection, since the condition is always true there
-- Enable all the 'Create X widgets' for referenced RAG widget banks if they don't alreday exist (camera test not the best...)
-- if ( RemoteConnection.IsConnected() ) then
-- (
-- if ( ( RemoteConnection.ReadStringWidget "Scene/PostScan/Lod Level" ) == "Couldn't find widget 'Scene/PostScan/Lod Level'" ) then ( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
-- if ( ( RemoteConnection.ReadFloatWidget "Camera/Free camera/Position Z" ) == 0.0 ) then ( RemoteConnection.WriteBoolWidget "Camera/Create camera widgets" true )
-- if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then ( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
-- if ( ( RemoteConnection.ReadStringWidget "Streaming & Memory/Memory/Memory Usage/Per-Module Info/Master Module Display/Resource Search" ) == "Couldn't find widget 'Streaming & Memory/Memory/Memory Usage/Per-Module Info/Master Module Display/Resource Search'") then
-- ( RemoteConnection.WriteBoolWidget "Streaming & Memory/Create streaming memory widgets" true )
-- if ( RemoteConnection.ReadStringWidget "TimeCycle/Game/Weather and Time Overrides/Override Prev Type" == "Couldn't find widget 'TimeCycle/Game/Weather and Time Overrides/Override Prev Type'") then
-- ( RemoteConnection.WriteBoolWidget "TimeCycle/Create Timecycle Widgets" true )
-- if ( RemoteConnection.ReadStringWidget "Visual Effects/GPU Particles/Debug Render Mode Drop Particles" == "Couldn't find widget 'Visual Effects/GPU Particles/Debug Render Mode Drop Particles'") then
-- ( RemoteConnection.WriteBoolWidget "Visual Effects/Create Vfx Widgets" true )
-- RemoteConnection.SendSyncCommand()
-- )
-- )
-- fn SetUpRAG =
-- ( -- Only called once, so duping to CheckRAGConnection, since the condition is always true there
-- if ( chkConnect.checked ) then
-- (
-- SetUpRAGBanks() -- Hit all the Create Widget buttons if they exist in RAG
-- RsTinyRAG.SetRAGPickerWidgets updateRAG:false
-- RsTinyRAG.SetLightingWidgets updateRAG:false
-- RsTinyRAG.SetRAGWireframeWidgets updateRAG:false
-- RsTinyRAG.SetRAGLODWidgets()
-- RsTinyRAG.SetRAGTimeCycleWidgets updateRAG:false
-- RsTinyRAG.SetRAGTexViewerWidgets updateRAG:false
-- RsTinyRAG.SetRAGBlockWidgets updateRAG:false
-- RsTinyRAG.SetRAGMiscModeWidgets updateRAG:false
-- RsTinyRAG.SetRAGVisibilityWidgets updateRAG:false
-- RsTinyRAG.SetOtherRAGWidgets updateRAG:false
-- RsTinyRAG.SetRAGVisibilityWidgets updateRAG:false
-- RemoteConnection.SendSyncCommand()
-- )
-- )
fn CheckRAGConnection connectDialog:false =
( -- Check RAG connection
-- if (TRACE > 0) then ( TraceMessage "CheckRAGConnection" start:true ) -- Somewhat spammy, so enable only if checking specifically for connection problems (slowness, etc)
if connectDialog or (chkCONNECT.text == "CONNECTED") then
( -- Only runs if a connect was specifically asked for, or it has been connected previously
-- If it's not already connected, try to connect (again)
local connectRequired = not ( RemoteConnection.IsConnected() )
if connectRequired then ( format "Connecting to RAG...\n" ; RemoteConnection.Connect() )
if ( RemoteConnection.IsConnected() ) then
( -- Succesful connection - Setup CONNECT widget
chkCONNECT.text = "CONNECTED"
chkCONNECT.checked = true
if connectRequired or connectDialog then
(
if connectRequired then ( format "Success!\n" )
--SetupRAG() -- Only 1 call of these functions, so...
-- SetUpRAGBanks() -- Hit all the Create Widget buttons if they exist in RAG
-- Duped over from SetUpRAGBanks()
if ( ( RemoteConnection.ReadStringWidget "Scene/PostScan/Lod Level" ) == "Couldn't find widget 'Scene/PostScan/Lod Level'" ) then
( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
if ( ( RemoteConnection.ReadFloatWidget "Camera/Free camera/Position Z" ) == 0.0 ) then
( RemoteConnection.WriteBoolWidget "Camera/Create camera widgets" true )
if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then
( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
if ( ( RemoteConnection.ReadStringWidget "Streaming & Memory/Memory/Memory Usage/Per-Module Info/Master Module Display/Resource Search" ) == "Couldn't find widget 'Streaming & Memory/Memory/Memory Usage/Per-Module Info/Master Module Display/Resource Search'") then
( RemoteConnection.WriteBoolWidget "Streaming & Memory/Create streaming memory widgets" true )
if ( RemoteConnection.ReadStringWidget "TimeCycle/Game/Weather and Time Overrides/Override Prev Type" == "Couldn't find widget 'TimeCycle/Game/Weather and Time Overrides/Override Prev Type'") then
( RemoteConnection.WriteBoolWidget "TimeCycle/Create Timecycle Widgets" true )
if ( RemoteConnection.ReadStringWidget "Visual Effects/GPU Particles/Debug Render Mode Drop Particles" == "Couldn't find widget 'Visual Effects/GPU Particles/Debug Render Mode Drop Particles'") then
( RemoteConnection.WriteBoolWidget "Visual Effects/Create Vfx Widgets" true )
RemoteConnection.SendSyncCommand()
-- Partly Duped over from SetupRAG()
RsTinyRAG.SetRAGPickerWidgets updateRAG:false
RsTinyRAG.SetLightingWidgets updateRAG:false
RsTinyRAG.SetRAGWireframeWidgets updateRAG:false
RsTinyRAG.SetRAGLODWidgets()
RsTinyRAG.SetRAGTimeCycleWidgets updateRAG:false
RsTinyRAG.SetRAGTexViewerWidgets updateRAG:false
RsTinyRAG.SetRAGBlockWidgets updateRAG:false
RsTinyRAG.SetRAGMiscModeWidgets updateRAG:false
RsTinyRAG.SetRAGVisibilityWidgets updateRAG:false
RsTinyRAG.SetOtherRAGWidgets updateRAG:false
RemoteConnection.SendSyncCommand()
)
)
else
( -- Failed to connect - update CONNECT widget, and dump to a messageBox
if connectRequired then ( format "FAILED TO CONNECT!\n" )
if ( chkCONNECT.checked ) then
(
local message = "Connection to RAG lost.\nCheck game and RAG are running."
messageBox message title:"Connection Lost"
)
chkCONNECT.text = "CONNECT TO RAG"
chkCONNECT.checked = false
)
)
-- if (TRACE > 0) then ( TraceMessage "CheckRAGConnection" start:false )
)
fn DrawDebugInfo =
(
chkDrawListToggle.checked or chkLODInfo.checked
)
fn StringToPosition posString =
( -- Convert a string to a position (either point2, point3, with optional brackets and either space or comma separators)
-- Returns [0.0,0.0,0.0] if anything goes wrong with the x or y coords
local posArray = filterString posString "[(, )]"
local newPos = [0.0, 0.0, 0.0]
if (posArray.count > 1) then
(
local newX = posArray[1] as float
local newY = posArray[2] as float
if (newX != undefined) and (newY != undefined) then
(
newPos = [newX, newY, 20.0]
if (posArray.count > 2) then
(
local newZ = posArray[3] as float
if (newZ != undefined) then ( newPos.z = newZ )
)
)
)
newPos
)
fn PositionToString pos =
( -- Shortens the camera string to integer values from float with 4 decimal places
local posString = stringstream ""
format "%,%,%" ((pos.x + 0.5) as integer) ((pos.y + 0.5) as integer) ((pos.z + 0.5) as integer) to:posString
posString as string
)
fn UpdateRAGPositionHelper helperPos cameraHelper:true coordChange:false =
( -- Create CAMERA or OBJECT position helpers in Max
local previousActiveLayer = LayerManager.current
local objectLayer = LayerManager.getLayerFromName "SA_OBJECT_ANALYSIS"
if ( objectLayer == undefined ) then ( objectLayer = LayerManager.newLayerFromName "SA_OBJECT_ANALYSIS" )
objectLayer.current = true
-- Setup object properties for either Object or Camera helper
local objectName = "RAG_OBJECT_POSITION"
local wireColour = OBJECT_HELPER_COLOUR -- color 70 250 40
local showWidget = chkObjectPosHelper
if cameraHelper then
(
objectName = "RAG_CAMERA_POSITION"
wireColour = CAMERA_HELPER_COLOUR -- color 60 190 255
showWidget = chkCamPosHelper
)
-- Create a new helper if it doesn't already exist
RAGhelper = getNodeByName objectName
if (RAGhelper == undefined) then
(
RAGhelper = point name:objectName cross:on size:30 constantscreensize:on wirecolor:wireColour showFrozenInGray:off
)
RAGhelper.position = [helperPos.x, helperPos.y, helperPos.z]
if (showWidget.checked) then
(
unhide RAGhelper doLayer:true
if coordChange then
(
txtWarpCoords.text = PositionToString helperPos
ddlWarpSource.selection = 2
RsTinyRAG.SetRAGBlockWidgets()
)
)
else
(
hide RAGhelper
)
-- Restore previous active layer
previousActiveLayer.current = true
)
-- PICKER FUNCTIONS --
-- PICKER_WIDGETS = #( gbxPickerGroupBox, chkPickerToggle, txtPickerFilter, chkPickerIsolate, chkPickerHide, chkPickerAddToSelection, chkIMAPBounds, ddlPickerHighlight, btnPickerScope )
fn GetRAGObjectPos required:false coordChange:false =
( -- Fudgily read the position of an uncontrollably random object from the current RAG Picker selection (annoyingly can't seem to switch mode on then off in a single pass)
local newPos = [0.0,0.0,0.0]
if chkObjectPosHelper.checked or required then
(
CheckRAGConnection()
if (chkCONNECT.checked) then
(
RemoteConnection.WriteBoolWidget "Picker/Transform Manipulation Enabled" true
RemoteConnection.SendSyncCommand()
RemoteConnection.WriteBoolWidget "Picker/Restore Original Transform" true
RemoteConnection.SendSyncCommand()
newPos = [(RemoteConnection.ReadFloatWidget "Picker/World Offset X"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Y"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Z")]
if (newPos != [0.0,0.0,0.0]) then ( UpdateRAGPositionHelper newPos cameraHelper:false coordChange:coordChange)
--RemoteConnection.WriteBoolWidget "Picker/Transform Manipulation Enabled" false
)
)
else
(
if (chkCONNECT.checked) then
(
RemoteConnection.WriteBoolWidget "Picker/Transform Manipulation Enabled" false
)
)
-- format "%\n" newPos
newPos
)
fn SetRAGPickerWidgets updateRAG:true =
(
if (TRACE > 0) then ( TraceMessage "SetRAGPickerWidgets" start:true )
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if updateRAG then
(
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Hide UI" false
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Enable UI" true
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Enable picking" chkPickerToggle.checked
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Display Physical Bounds For Node Of Selected Entity" chkIMAPBounds.checked
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Display Streaming Bounds For Node Of Selected Entity" chkIMAPBounds.checked
-- RemoteConnection.WriteBoolWidget "Picker/Picker Options/Display bounds of hover entity" chkIMAPBounds.checked
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Display bounds of entities in list" ( ddlPickerHighlight.selected == "All" )
local isolateHideMode = if (chkPickerHide.checked) then ( "Hide " ) else ( "Isolate " )
isolateHideMode += if ( ddlPickerHighlight.selected == "All" ) then ( "Entities in List" ) else ( "Selected Entity" )
RemoteConnection.WriteStringWidget "Picker/Picker Options/Show//hide mode" isolateHideMode
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Show//hide enabled" ( chkPickerIsolate.checked or chkPickerHide.checked )
)
else
(
chkPickerToggle.checked = RemoteConnection.ReadBoolWidget "Picker/Picker Options/Enable picking"
chkIMAPBounds.checked = RemoteConnection.ReadBoolWidget "Picker/Picker Options/Display Physical Bounds For Node Of Selected Entity"
local isolateHideMode = RemoteConnection.ReadStringWidget "Picker/Picker Options/Show//hide mode"
local modeActive = (RemoteConnection.ReadBoolWidget "Picker/Picker Options/Show//hide enabled")
chkPickerHide.checked = modeActive and (matchPattern isolateHideMode pattern:"Hide*")
chkPickerIsolate.checked = modeActive and (matchPattern isolateHideMode pattern:"Isolate*")
)
-- Moved out of updateRAG condition, since it's always false if it's not visible in RAG (which defaults to Add)
-- chkPickerAddToSelection.checked = false
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/New search clears list" (not chkPickerAddToSelection.checked)
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Display name of hover entity" true
)
if (TRACE > 0) then ( TraceMessage "SetRAGPickerWidgets" start:false )
)
fn SelectByName objectNames =
( -- Multiple select by name in RAG/Picker (very slow if several names passed in the argument string, since have to synch after each)
if (not chkPickerToggle.checked) then
(
chkPickerToggle.checked = true
SetRAGPickerWidgets()
)
RemoteConnection.WriteStringWidget "Picker/Picker Options/Picker Type" "Intersecting Entities"
RemoteConnection.WriteBoolWidget "Picker/Transform Manipulation Enabled" true
RemoteConnection.SendSyncCommand()
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/Spherical Search" ( ddlPickerScope.selected == "Sphere" )
RemoteConnection.WriteIntWidget "Picker/Picker Options/Intersecting Entities/Spherical Search radius" 4500
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/New search clears list" (not chkPickerAddToSelection.checked)
RemoteConnection.SendSyncCommand()
local averagePos = [0,0,0]
-- First object
RemoteConnection.WriteStringWidget "Picker/Picker Options/Intersecting Entities/Search filter" objectNames[1]
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/Refresh search" true
RemoteConnection.SendSyncCommand()
local newPos = [(RemoteConnection.ReadFloatWidget "Picker/World Offset X"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Y"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Z")]
averagePos += newPos
-- Remaining objects
--for objectName in objectNames do
if (objectNames.count > 1) then
(
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/New search clears list" false
for objectID = 2 to objectNames.count do
(
RemoteConnection.WriteStringWidget "Picker/Picker Options/Intersecting Entities/Search filter" objectNames[objectID]
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/Refresh search" true
RemoteConnection.SendSyncCommand()
local newPos = [(RemoteConnection.ReadFloatWidget "Picker/World Offset X"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Y"), (RemoteConnection.ReadFloatWidget "Picker/World Offset Z")]
averagePos += newPos
--RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/New search clears list" false
--RemoteConnection.SendSyncCommand()
)
)
if (objectNames.count > 0) then ( averagePos /= objectNames.count )
if ( averagePos != [0,0,0] ) then
(
--txtBlockID.text = PositionToString averagePos
UpdateRAGPositionHelper averagePos cameraHelper:false
)
RemoteConnection.WriteBoolWidget "Picker/Picker Options/Intersecting Entities/New search clears list" (not chkPickerAddToSelection.checked)
RemoteConnection.WriteStringWidget "Picker/Picker Options/Picker Type" "Entity Render"
RemoteConnection.WriteBoolWidget "Picker/Transform Manipulation Enabled" false
)
-- BLOCK/WARP FUNCTIONS --
-- BLOCK_WIDGETS = #( gbxBlockGroupBox, chkIsolateBlock, ddlWarpToLocation, txtBlockID, chkCamPosHelper, btnWarpToSelection, chkAutoWarp, chkWarpStreamFromCamera, chkFindObj, btnGetCameraPosition )
fn ExpandBounds bBox min:[0,0,0] max:[0,0,0] =
( -- Expand one bounding box to cover another bounding box
bBox.min.x = amin bBox.min.x min.x
bBox.min.y = amin bBox.min.y min.y
bBox.min.z = amin bBox.min.z min.z
bBox.max.x = amax bBox.max.x max.x
bBox.max.y = amax bBox.max.y max.y
bBox.max.z = amax bBox.max.z max.z
bBox
)
fn GetSelectionBounds objects:selection =
( -- Get the bounding box that covers the selection (currently only Max selection, needs SceneAnalyser integration)
local bBox = datapair min:[0,0,0] max:[0,0,0]
if (objects.count > 0) then
(
if ((classOf objects) == ObjectSet) then
(
bBox = datapair min:(objects[1].min) max:(objects[1].max)
for obj in objects do ( ExpandBounds bBox min:obj.min max:obj.max )
)
)
bBox
)
fn GetSelectionCoords objects:selection =
( -- Gets centre point of the current selection (currently only Max selection, needs SceneAnalyser integration)
local coords = [0,0,0]
if (objects.count > 0 ) then
(
local bBox = GetSelectionBounds objects:objects
coords = (bBox.min + bBox.max) * 0.5
)
coords
)
fn GetOrientation camPos focusPos =
( -- Calculate rotation point3 from camPos facing towards focusPos
local XYVector = [focusPos.x,focusPos.y,0.0] - [camPos.x,camPos.y,0.0]
local YZVector = [0.0,(length XYVector),(focusPos.z - camPos.z)]
local newOrient = [0.0,0.0,0.0]
newOrient.z = acos ( dot (normalize XYVector) [0.0,1.0,0.0] )
newOrient.z = if (XYVector.x < 0.0) then (newOrient.z) else (0.0 - newOrient.z)
newOrient.x = acos( dot (normalize YZVector) [0,1.0,0])
newOrient.x = if (YZVector.z > 0.0) then (newOrient.x) else (0.0 - newOrient.x)
newOrient
)
fn GetViewPortCoords =
(
local coordSysTM = Inverse ( getViewTM() )
if (coordSysTM.row3 == [0,0,1]) then
(
coordSysTM.row3 = [0.0,-0.03,0.9995]
coordSysTM.row4.z = amax 50.0 coordSysTM.row4.z
)
local camRot = GetOrientation coordSysTM.row3 [0.0,0.0,0.0]
--RsTinyRAG.SetCameraCoords camPos:coordSysTM.row4 camRot:camRot
local result = dataPair camPos:coordSysTM.row4 camRot:camRot
result
)
fn GetCameraOrientation =
(
local camRot = point3 0.0 0.0 0.0
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if ( ( RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/WorldMtx d X" ) == 0.0 ) then
(
RemoteConnection.WriteBoolWidget "Camera/Create camera widgets" true
RemoteConnection.SendSyncCommand()
)
if ( (RemoteConnection.ReadStringWidget "Camera/Debug director/Active mode") == "Free" ) then
(
camRot.x = RemoteConnection.ReadFloatWidget "Camera/Free camera/Orientation X"
camRot.y = RemoteConnection.ReadFloatWidget "Camera/Free camera/Orientation Y"
camRot.z = RemoteConnection.ReadFloatWidget "Camera/Free camera/Orientation Z"
)
)
camRot
)
fn GetCameraCoords coordChange:false =
( -- Read the free camera position (2 possible RAG banks in case first one fails)
local camPos = point3 0.0 0.0 0.0
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if ( ( RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/WorldMtx d X" ) == 0.0 ) then
(
RemoteConnection.WriteBoolWidget "Camera/Create camera widgets" true
RemoteConnection.SendSyncCommand()
)
if ( (RemoteConnection.ReadStringWidget "Camera/Debug director/Active mode") == "Free" ) then
(
camPos.x = RemoteConnection.ReadFloatWidget "Camera/Free camera/Position X"
camPos.y = RemoteConnection.ReadFloatWidget "Camera/Free camera/Position Y"
camPos.z = RemoteConnection.ReadFloatWidget "Camera/Free camera/Position Z"
)
else
(
camPos.x = RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/CamMtx d X"
camPos.y = RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/CamMtx d Y"
camPos.z = RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/CamMtx d Z"
)
if (camPos != [0.0,0.0,0.0]) then ( UpdateRAGPositionHelper camPos cameraHelper:true coordChange:coordChange )
)
camPos
)
fn SetCameraCoords camPos:[0,0,0] camRot:[0,0,0] =
( -- Change camera position or rotation (either optional)
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if ( ( RemoteConnection.ReadFloatWidget "Camera/Renderer/CamMtx/WorldMtx d X" ) == 0.0 ) then
(
RemoteConnection.WriteBoolWidget "Camera/Create camera widgets" true
RemoteConnection.SendSyncCommand()
)
local camString = stringStream ""
if (camPos == [0,0,0]) then ( camPos = GetCameraCoords() )
format "% % %" camPos.x camPos.y camPos.z to:camString
if (camRot != [0,0,0]) then
(
--camRot = GetCameraOrientation()
format " % % %" camRot.x camRot.y camRot.z to:camString
)
--format "SetCameraCoords -> Debug/Warp Camera x y z p r y = %\n" (camString as string)
RemoteConnection.WriteStringWidget "Debug/Warp Player x y z h vx vy vz" (camString as String)
--RemoteConnection.WriteStringWidget "Debug/Warp Camera x y z p r y" (camString as string) -- This way better than directly changing the Free camera widget values individually
--RemoteConnection.WriteBoolWidget "Debug/Warp camera now" true
RemoteConnection.SendSyncCommand()
)
)
fn WarpToSelection bBox minLODDistance:300000 =
( -- Get vaguely relevant position and rotation from selected bounding box, calls GetOrientation and SetCameraCoords
if (bBox != undefined) then
(
local selectionCentre = (bBox.min + bBox.max) * 0.5
-- First face selection centre to get the correct rotation from initial position, then warp
local camPos = GetCameraCoords()
local camRot = GetOrientation camPos selectionCentre
camRot.x = 5.0
local totalDistance = distance camPos selectionCentre
local objectRadius = (distance bBox.max bBox.min) * 0.65
if ( (objectRadius == 0.0) or ((minLODDistance > 0) and ((minLODDIstance * 0.9) < objectRadius)) ) then ( objectRadius = minLODDIstance * 0.9 )
local ratio = objectRadius / totalDistance
-- Try to frame
local warpPos = selectionCentre
if (chkFindObjects.checked) then
(
warpPos -= ((selectionCentre - camPos) * ratio)
warpPos.z = selectionCentre.z + abs (selectionCentre.z - warpPos.z)
camRot = GetOrientation warpPos selectionCentre
)
-- Override camera rotation if there's an active RAG_OBJECT_POSITION
if (chkObjectPosHelper.checked) then
(
local helperPos = getNodeByName "RAG_OBJECT_POSITION"
if (helperPos != undefined) then ( camRot = GetOrientation warpPos helperPos.pos )
)
SetCameraCoords camPos:warpPos camRot:camRot
)
)
fn LookAtPoint coords =
( -- Turn RAG free camera to point towards coords, calls GetOrientation and SetCameraCoords
local newOrient = [0,0,0]
local cameraPos = GetCameraCoords()
newOrient = GetOrientation cameraPos coords
SetCameraCoords camPos:cameraPos camRot:newOrient
newOrient
)
fn SetRAGBlockWidgets updateRAG:true warpCamera:true =
(
if (TRACE > 0) then ( TraceMessage "SetRAGBlockWidgets" start:true )
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if updateRAG then
(
chkDebugCamera.checked = (chkDebugCamera.checked or chkWarpCamera.checked or chkFindObjects.checked) -- Force free cam on if WARP or FIND is checked
local activeCamera = if chkDebugCamera.checked then ( "Free" ) else ( "None" )
RemoteConnection.WriteBoolWidget "Input/Pad/Debug pad" chkDebugCamera.checked -- Turn on the debug pad regardless
RemoteConnection.WriteStringWidget "Camera/Debug director/Active mode" activeCamera -- switch to debug cam
local blockText = toLower txtBlockID.text
if (txtBlockID.text != "") then ( RemoteConnection.WriteStringWidget "Blocks/Block" blockText )
local validBlock = ( blockText == (RemoteConnection.ReadStringWidget "Blocks/Block") )
RemoteConnection.WriteBoolWidget "Blocks/Isolate Block" ( chkIsolateBlock.checked and validBlock )
local camPos = GetCameraCoords()
local newPos = case of
(
(not chkDebugCamera.checked) : ( camPos )
(ddlWarpSource.selected == "BlockID"):( if validBlock then (StringToPosition (RemoteConnection.ReadStringWidget "Blocks/Block Coordinates")) else ([0,0,0]) )
(ddlWarpSource.selected == "Coords"):( StringToPosition txtWarpCoords.text )
(ddlWarpSource.selected == "Selection"):( GetSelectionCoords() )
(ddlWarpSource.selected == "Picker"):( GetRAGObjectPos required:true )
(ddlWarpSource.selected == "Viewport"):( (GetViewPortCoords()) )
default:( [0,0,0] )
)
-- format "Camera = % | camPos = % | newPos = %\n" activeCamera camPos newPos
-- if (newPos != undefined) then ( txtWarpCoords.text = PositionToString newPos )
if (newPos != [0,0,0]) then
(
if (ddlWarpSource.selected == "Viewport") then
(
if warpCamera then
(
case of
(
(chkWarpCamera.checked):( SetCameraCoords camPos:newPos.camPos camRot:newPos.camRot )
(chkFindObjects.checked):( LookAtPoint newPos.camPos )
default:()
)
)
UpdateRAGPositionHelper newPos.camPos cameraHelper:true
)
else
(
if warpCamera then
(
case of
(
(chkWarpCamera.checked):( SetCameraCoords camPos:newPos )
(chkFindObjects.checked):( LookAtPoint newPos )
default:()
)
)
UpdateRAGPositionHelper newPos cameraHelper:true
)
)
RemoteConnection.WriteBoolWidget "Camera/Free camera/Override streaming focus" chkStreamFromCamera.checked
if (ddlWireMode.selected == "BLOCK ID") then ( RsTinyRAG.SetRAGWireframeMode() )
)
else
(
chkDebugCamera.checked = ( (RemoteConnection.ReadStringWidget "Camera/Debug director/Active mode") == "Free" )
txtBlockID.text = ( RemoteConnection.ReadStringWidget "Blocks/Block" )
chkIsolateBlock.checked = ( RemoteConnection.ReadBoolWidget "Blocks/Isolate Block" )
if chkIsolateBlock.checked then
(
local blockText = ( RemoteConnection.ReadStringWidget "Blocks/Block" )
if (blockText == "") then ( blockText = ( RemoteConnection.ReadStringWidget "Blocks/Block Name" ) )
if (blockText != "") then ( txtBlockID.text = blockText )
)
chkStreamFromCamera.checked = ( RemoteConnection.ReadBoolWidget "Camera/Free camera/Override streaming focus" )
)
)
if (TRACE > 0) then ( TraceMessage "SetRAGBlockWidgets" start:false )
)
-- LIGHTING FUNCTIONS --
fn SetLightingWidgets updateRAG:true checkLocalStates:false =
(
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeOpacity" start:true )
CheckRAGConnection()
if ( chkCONNECT.checked) then
(
-- Show Light Costs (+ new wiremode option) - "_LiveEdit_/Lights Edit/Light Cost/Show light cost" +
-- "_LiveEdit_/Lights Edit/Light Cost/Light cost opacity",
-- "_LiveEdit_/Lights Edit/Light Cost/Light cost min",
-- "_LiveEdit_/Lights Edit/Light Cost/Light cost max"
-- Entities - "Lighting/Misc/Light entities/Show debug"
-- Budget - "Lighting/Budget/Draw Budget", "Lighting/Budget/Budget Type", "Lighting/Budget/Light Settings/Show Standard Lights Info", "Lighting/Budget/Light Settings/Show Misc Lights Info"
-- Timers - "Lighting/Budget/Enable GPU budget timers"
-- Toggles -
-- Global - "Lighting/Budget/Light Settings/Enable global directional light"
-- Local - "Lighting/Budget/Light Settings/Enable local lights" (+ "Lighting/Budget/Light Settings/Colour Lights")
-- Point - "Lighting/Budget/Light Settings/Disable local point-type lights"
-- Spot - "Lighting/Budget/Light Settings/Disable local spot-type lights"
-- Capsule - "Lighting/Budget/Light Settings/Disable local capsule-type lights"
-- LOD - "Lighting/Budget/Light Settings/Enable local LOD lights" (+ "Lighting/Budget/Light Settings/LOD lights force red color")
-- DISTANT - "Lighting/LOD / Distant Lights/Enable distant LOD lights" (+ "Lighting/LOD / Distant Lights/Distant lights/Debug render")
-- Debug Info - "Lighting/LOD / Distant Lights/Debug/Show LOD light types"
local anyActiveLocalLight = chkPointLightToggle.checked or chkSpotLightToggle.checked or chkCapsuleLightToggle.checked or chkOtherLightToggle.checked
if checkLocalStates then
(
chkLocalLightToggle.checked = anyActiveLocalLight
)
if (not chkLocalLightToggle.checked) then
(
chkPointLightToggle.checked = chkSpotLightToggle.checked = chkCapsuleLightToggle.checked = chkOtherLightToggle.checked = false
)
else
(
if (not anyActiveLocalLight) then
(
chkPointLightToggle.checked = chkSpotLightToggle.checked = chkCapsuleLightToggle.checked = chkOtherLightToggle.checked = true
)
)
if updateRAG then
(
-- Info Widgets
RemoteConnection.WriteBoolWidget "Lighting/Budget/Draw Budget" chkShowBudget.checked
if chkShowBudget.checked then
(
RemoteConnection.WriteStringWidget "Renderer/Budget/Budget Type" "Lights"
)
RemoteConnection.WriteBoolWidget "Lighting/Budget/Budget Type" chkShowBudget.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Show Standard Lights Info" chkShowBudget.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Show Misc Lights Info" chkShowBudget.checked
RemoteConnection.WriteBoolWidget "Lighting/Misc/Light entities/Show debug" chkShowEntities.checked
RemoteConnection.WriteBoolWidget "Lighting/LOD // Distant Lights/Debug/Show LOD light types" chkLightInfo.checked
--RemoteConnection.WriteBoolWidget "Debug/Rendering/Debug Text" ( chkLODInfo.checked or chkLightInfo.checked )
-- Toggles
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Enable global directional light" chkGlobalLightToggle.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Enable local lights" chkLocalLightToggle.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Enable local LOD lights" chkLODLightToggle.checked
RemoteConnection.WriteBoolWidget "Lighting/LOD // Distant Lights/Enable distant LOD lights" chkDistantLightToggle.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local point-type lights" ( not chkPointLightToggle.checked )
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local spot-type lights" ( not chkSpotLightToggle.checked )
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local capsule-type lights" ( not chkCapsuleLightToggle.checked )
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local other light types" ( not chkOtherLightToggle.checked )
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local AO volume-type lights" ( not chkOtherLightToggle.checked )
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Disable local volumetric lights" ( not chkOtherLightToggle.checked )
-- Light Tint / Highlight
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/Colour Lights" chkTintLocal.checked
RemoteConnection.WriteBoolWidget "Lighting/Budget/Light Settings/LOD lights force red color" chkTintLOD.checked
RemoteConnection.WriteBoolWidget "Lighting/LOD // Distant Lights/Distant lights/Debug render" chkHighlightDistant.checked
)
else
(
-- Info Widgets
chkShowBudget.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Draw Budget" )
chkShowEntities.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Misc/Light entities/Show debug" )
chkLightInfo.checked = ( RemoteConnection.ReadBoolWidget "Lighting/LOD // Distant Lights/Debug/Show LOD light types" )
-- Toggles
chkGlobalLightToggle.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Enable global directional light" )
chkLocalLightToggle.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Enable local lights" )
chkLODLightToggle.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Enable local LOD lights" )
chkDistantLightToggle.checked = ( RemoteConnection.ReadBoolWidget "Lighting/LOD // Distant Lights/Enable distant LOD lights" )
chkPointLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local point-type lights") )
chkSpotLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local spot-type lights") )
chkCapsuleLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local capsule-type lights") )
chkOtherLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local other light types") )
chkOtherLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local AO volume-type lights") )
chkOtherLightToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Disable local volumetric lights") )
-- Light Tint / Highlight
chkTintLocal.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/Colour Lights" )
chkTintLOD.checked = ( RemoteConnection.ReadBoolWidget "Lighting/Budget/Light Settings/LOD lights force red color" )
chkHighlightDistant.checked = ( RemoteConnection.ReadBoolWidget "Lighting/LOD // Distant Lights/Distant lights/Debug render" )
)
)
if (TRACE > 0) then ( TraceMessage "SetRAGBlockWidgets" start:false )
)
-- WIREFRAME FUNCTIONS --
-- WIREFRAME_WIDGETS = #( gbxWireframeGroupBox, chkWireToggle, ddlWireMode, ddlWireOption, txtWireframeFilterName, chkWireMatchExact,
-- chkWireLabel, trkWireOpacity, chkHiddenLabel, trkWireHidden, chkFillLabel, trkFillOpacity, chkOpacityLabel, trkOpacityMultiplier, trkDiffuseOverride )
-- WIREOPTION_TXD_WIDGETS = #( gbxWireOptionsGroupBox, chkTXD1Colour, chkTXD2Colour, chkTXD3Colour, chkTXD4Colour, txtTXD1Name, txtTXD2Name, txtTXD3Name, txtTXD4Name )
fn GetAlphaValue val =
(
-- Options filed in the Bin of History
--local result = (0.1*(val as float)^2) ^ 2
--local result = (val as float) ^ 3
-- local result = (1 - (cos (0.1*val))) ^ 2
-- Vaguely OK curve for no good reason, other than not-awful mid-range:
local result = (0.2 * val) ^ 2.5
result
)
fn TrackbarValueToAlpha ctrl =
(
local rangeScale = 255.0 / (GetAlphaValue ctrl.maximum)
local rangeOffset = 1 - (GetAlphaValue ctrl.minimum)
local result = amax 0 ( amin 255 (rangeOffset + (GetAlphaValue ctrl.value) * rangeScale) )
result
)
fn ShowOptionWidgets =
( -- Show / Hide relevant options for current wireframe mode (TXD Names if no relevant options)
if (TRACE > 0) then ( TraceMessage ShowOptionWidgets start:true )
PREVIOUS_WIREMODE = SkipSEPARATOR ddlWireMode SEPARATOR PREVIOUS_WIREMODE
local optionsEnabled = true
local wireOptionMode = wireModes[ddlWireMode.selection].optionMode
if (wireOptionMode == 0) then
(
wireOptionMode = 1
-- optionsEnabled = false
)
gbxWireOptionsGroupBox.text = wireModes[ddlWireMode.selection].groupLabel
local groupPos = WIREOPTION_ALL_WIDGETS[1].pos
for widgetID = 2 to WIREOPTION_ALL_WIDGETS.count do
(
local widget = WIREOPTION_ALL_WIDGETS[widgetID]
local inGroup = findItem WIREOPTION_WIDGETS[wireOptionMode] widget
widget.visible = (inGroup > 0) -- and optionsEnabled
widget.enabled = optionsEnabled
widget.pos.x = groupPos.x + initialWidgetOffsets[wireOptionRow][2][widgetID].x + ((if widget.visible then 0 else 1) * 2000)
)
txtTextureMinSize.text = (2 ^ trkTextureMinSize.value) as String
txtTextureDensityMin.text = trkTextureDensityMin.value as String
txtTextureDensityMax.text = trkTextureDensityMax.value as String
if (TRACE > 0) then ( TraceMessage ShowOptionWidgets start:false )
)
fn SetRAGWireframeOpacity updateRAG:true =
( -- Set up Wireframe Opacity values from the 4 trackbars (taking whether in Overdraw mode into account)
-- Change button tooltips to show slider values ()
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeOpacity" start:true )
CheckRAGConnection()
if ( chkCONNECT.checked) then
(
if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then ( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
if updateRAG then
(
RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Draw" ( chkWireToggle.checked and (not chkLightCosts.checked) ) -- Legacy V toggle
RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Enabled" ( chkWireToggle.checked and (not chkLightCosts.checked) )
)
else
(
-- If we suddenly want to restore Opacity values from RAG on Dialog open... restore these 2, add add the missing 2... !!!
--trkOpacityMultiplier.value = (RemoteConnection.ReadFloatWidget "Renderer/Wireframe/Rendering/Opacity") * 100.0
--trkWireOpacity.value = (RemoteConnection.ReadFloatWidget "Renderer/Wireframe/Rendering/Wire Opacity") * 100.0
chkWireToggle.checked = (RemoteConnection.ReadBoolWidget "Renderer/Wireframe/Enabled")
)
RemoteConnection.WriteBoolWidget "_LiveEdit_/Lights Edit/Light Cost/Show light cost" chkLightCosts.checked
local opacityMult = if (ddlWireMode.selected == "Tex Density") then ( 1.0 ) else ( amax ((0.0 + trkOpacityMultiplier.value) / trkOpacityMultiplier.maximum) (if chkOpacityLabel.checked then 0 else 1) )
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Opacity" opacityMult
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Wire Opacity" ( (0.0 + trkWireOpacity.value) / trkWireOpacity.maximum * (if chkWireLabel.checked then 1 else 0) )
-- Overdraw Mode specific conditions... RAG has it's own Overdraw Opacity slider, which conflicts with the other sliders
if ( ddlWireMode.selected == "Overdraw" ) then
(
--local maxOverdraw = trkWireHidden.value as integer
--chkHiddenLabel.text = maxOverdraw as string
RemoteConnection.WriteFloatWidget "Renderer/Overdraw/Overdraw Opacity" ( ((0.0 + trkOverdrawOpacity.value) / trkOverdrawOpacity.maximum) * (if chkOverdraw.checked then 1 else 0) )
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Fill Opacity" 0.0 -- These 2 are the conflicting widgets, which need set to 0.0 for bad things not to happen
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Invisible Opacity" 0.0
)
else
(
--chkHiddenLabel.text = "Hidn."
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Fill Opacity" ( (0.0 + trkFillOpacity.value) / trkFillOpacity.maximum * (if chkFillLabel.checked then 1 else 0) )
RemoteConnection.WriteFloatWidget "Renderer/Wireframe/Rendering/Invisible Opacity" ( (0.0 + trkWireHidden.value) / trkWireHidden.maximum * (if chkHiddenLabel.checked then 1 else 0) )
)
)
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeOpacity" start:false )
)
fn SetRAGWireframeMode updateRAG:true =
(
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeMode" start:true )
-- messageBox "I AM PAUSE"
local textFilterModes = #{2,3,4,5} -- Not convinced this does anything anymore !!!!!
PREVIOUS_WIREMODE = SkipSEPARATOR ddlWireMode SEPARATOR PREVIOUS_WIREMODE
CheckRAGConnection()
if ( chkConnect.checked ) then
(
-- Make sure Wireframe widget bank is loaded
if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then ( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
local textureDensityActive = ((RemoteConnection.ReadStringWidget "Renderer/Wireframe/Channel") == "Diffuse Texture Density" )
RemoteConnection.WriteBoolWidget "_LiveEdit_/Lights Edit/Light Cost/Show light cost" chkLightCosts.checked
RemoteConnection.WriteFloatWidget "Renderer/Shader Model 5/Terrain/Lookups Select RawCpv//Final//RawTexture" ( ((trkuberLookup.value as float) / 100.0) * (if chkUberShader.checked then 1 else 0) )
if updateRAG then
(
if (chkWireToggle.checked or chkLightCosts.checked) then
(
local overdrawActive = false
local textureDensityActive = ( (RemoteConnection.ReadStringWidget "Renderer/Wireframe/Channel") == "Diffuse Texture Density" )
local wireFilterString = if (txtWireframeFilterName.text != "") and (textFilterModes[ddlWireMode.selection]) then ( txtWireframeFilterName.text )
else
(
if (selection.count > 0) then ( selection[1].name ) else ( "" )
)
RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Mode Params/Match Filter Text Exactly" chkWireMatchExact.checked
Remoteconnection.WriteStringWidget "Renderer/Wireframe/Channel" "" -- Clear Tex Density
newWireMode = wireModes[ddlWireMode.selection].RAGvalue
case ddlWireMode.selected of
(
("Picker"):
(
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.picker
)
("IMAP"):
(
if (wireFilterString == "") then ( wireFilterString = "NOT_SET")
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.IMAP
)
("BLOCK ID"):
(
wireFilterString = if (txtBlockID.text == "") then ( "NOT_SET" ) else ( txtBlockID.text )
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.IMAP
)
("Shaders..."):
(
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.shader
case of
(
( chkPXMShader.checked ):( wireFilterString = "pxm" )
( chkUberShader.checked ):( wireFilterString = "uber" )
( chkStandard2lyrShader.checked ):( wireFilterString = "standard_2lyr" )
( chkWaterShader.checked ):( wireFilterString = "water" )
( chkMudShader.checked ):( wireFilterString = "mud" )
( chkDefaultShader.checked ):( wireFilterString = "default" )
default:()
)
)
("Attributes..."):
(
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.attribute
case of
(
(chkIsProp.checked):( newWireMode = "Is Prop" )
(chkIsFrag.checked):( newWireMode = "Is Frag" )
(chkLowPriority.checked):( newWireMode = "Is Entity Low Priority Stream" )
(chkIsDoor.checked):( newWireMode = "Is Object Door")
(chkNoShadow.checked):( newWireMode = "Is Entity Don't Render in Shadows" )
(chkNoReflect.checked):( newWireMode = "Is Entity Don't Render in Environment Reflections" )
(chkIsDynamic.checked):( newWireMode = "Is Entity Dynamic")
(chkAlphaFading.checked):( newWireMode = "Is Entity Alpha < 255")
default:()
)
)
("TXD Name"):
(
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.txd
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 1" txtTXD1Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 2" txtTXD2Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 3" txtTXD3Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 4" txtTXD4Name.text
)
("Texture"):
(
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.texture
)
("Overdraw"):
(
overdrawActive = true
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Filter" ""
--RemoteConnection.WriteFloatWidget "Renderer/Overdraw/Overdraw Opacity" ( trkFillOpacity.value / 100.0 )
RemoteConnection.WriteIntWidget "Renderer/Overdraw/Overdraw Min" ( amin spnOverdrawMin.value spnOverdrawMax.value )
RemoteConnection.WriteIntWidget "Renderer/Overdraw/Overdraw Max" ( amax spnOverdrawMin.value spnOverdrawMax.value )
)
("Light Costs"):
(
RemoteConnection.WriteFloatWidget "_LiveEdit_/Lights Edit/Light Cost/Light cost opacity" ( (trkLightCostOpacity.value / 100.0) * (if chkLightCost.checked then 1 else 0) )
RemoteConnection.WriteIntWidget "_LiveEdit_/Lights Edit/Light Cost/Light cost min" ( amin spnLightCostMin.value spnLightCostMax.value )
RemoteConnection.WriteIntWidget "_LiveEdit_/Lights Edit/Light Cost/Light cost max" ( amax spnLightCostMin.value spnLightCostMax.value )
)
("Tex Density"):
(
newWireMode = ""
Remoteconnection.WriteStringWidget "Renderer/Wireframe/Channel" "Diffuse Texture Density"
RemoteConnection.WriteBoolWidget "Debug/Texture Density/Density Extreme Min Color Enabled " true
RemoteConnection.WriteBoolWidget "Debug/Texture Density/Density Extreme Max Color Enabled " true
RemoteConnection.WriteBoolWidget "Debug/Texture Density/Density Use Logarithmic Scale" chkUseLogScale.checked
RemoteConnection.WriteFloatWidget "Debug/Texture Density/Density Min (texels per meter)" trkTextureDensityMin.value
RemoteConnection.WriteFloatWidget "Debug/Texture Density/Density Max (texels per meter)" trkTextureDensityMax.value
RemoteConnection.WriteFloatWidget "Debug/Texture Density/Density Range Shift" (0.05 * trkDensityShift.value)
txtTextureMinSize.text = ((2 ^ trkTextureMinSize.value) as String)
txtTextureDensityMin.text = trkTextureDensityMin.value as String
txtTextureDensityMax.text = trkTextureDensityMax.value as String
)
("Color Per..."):
(
case of
(
(chkColourPerTXD.checked):( newWireMode = "Random Colour Per Texture Dict" )
(chkColourPerShader.checked):( newWireMode = "Random Colour Per Shader" )
(chkColourPerDrawCall.checked):( newWireMode = "Random Colour Per Draw Call" )
default:( newWireMode = "Random Colour Per Entity" )
)
)
default:
(
-- Set up Default Options
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Rendering/Colour Near" RAGcolours.default
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 1" txtTXD1Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 2" txtTXD2Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 3" txtTXD3Name.text
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 4" txtTXD4Name.text
)
)
RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode" newWireMode
if (wireFilterString != "") then ( RemoteConnection.WriteStringWidget "Renderer/Wireframe/Mode Params/Filter" wireFilterString )
-- Setup Widgets that depend on Overdraw state
RemoteConnection.WriteBoolWidget "Renderer/Overdraw/Render Overdraw" overdrawActive
RemoteConnection.WriteBoolWidget "Renderer/Overdraw/Render Overdraw Cost" overdrawActive
RemoteConnection.WriteFloatWidget "Renderer/Overdraw/Overdraw Opacity" ( (0.0 + trkOverdrawOpacity.value) / trkOverdrawOpacity.maximum )
)
)
else
(
local RAGwireMode = (RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode")
if ( textureDensityActive ) then (RAGwireMode = "Tex Density")
local dialogWireModes = for mode in wireModes collect mode.RAGvalue
local wireMode = findItem dialogWireModes RAGwireMode
if (wireMode > 0) then
(
if (wireModes[wireMode].item == SEPARATOR) then ( wireMode += 1 )
ddlWireMode.selection = wireMode
)
if (textFilterModes[ddlWireMode.selection]) then ( txtWireframeFilterName.text = RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode Params/Filter" )
chkWireMatchExact.checked = RemoteConnection.ReadBoolWidget "Renderer/Wireframe/Mode Params/Match Filter Text Exactly"
txtTXD1Name.text = RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 1"
txtTXD2Name.text = RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 2"
txtTXD3Name.text = RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 3"
txtTXD4Name.text = RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd 4"
chkUseLogScale.checked = RemoteConnection.ReadBoolWidget "Debug/Texture Density/Density Use Logarithmic Scale"
trkTextureDensityMin.value = RemoteConnection.ReadFloatWidget "Debug/Texture Density/Density Min (texels per meter)"
trkTextureDensityMax.value = RemoteConnection.ReadFloatWidget "Debug/Texture Density/Density Max (texels per meter)"
trkDensityShift.value = (20.0 * RemoteConnection.ReadFloatWidget "Debug/Texture Density/Density Range Shift")
trkuberLookup.value = ( RemoteConnection.ReadFloatWidget "Renderer/Shader Model 5/Terrain/Lookups Select RawCpv//Final//RawTexture" ) * 100.0
txtTextureMinSize.text = ((2 ^ trkTextureMinSize.value) as String)
txtTextureDensityMin.text = trkTextureDensityMin.value as String
txtTextureDensityMax.text = trkTextureDensityMax.value as String
)
ShowOptionWidgets()
)
if ( (ddlWireMode.selected == "Light Costs") and (not chkLightCosts.checked) ) then ( ddlWireMode.selection = 1 )
-- Show / Hide relevant options for current wireframe mode (TXD Names if no relevant options)
local wireOptionMode = wireModes[ddlWireMode.selection].optionMode
gbxWireOptionsGroupBox.text = wireModes[ddlWireMode.selection].groupLabel
local groupPos = WIREOPTION_ALL_WIDGETS[1].pos
for widgetID = 2 to WIREOPTION_ALL_WIDGETS.count do
(
local widget = WIREOPTION_ALL_WIDGETS[widgetID]
local inGroup = if (wireOptionMode > 0) then ( findItem WIREOPTION_WIDGETS[wireOptionMode] widget ) else ( 0 )
widget.visible = (inGroup > 0)
widget.pos.x = groupPos.x + initialWidgetOffsets[wireOptionRow][2][widgetID].x + ((if widget.visible then 0 else 1) * 2000)
)
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeMode" start:false )
)
fn SetRAGWireframeWidgets updateRAG:true =
( -- Setup Wire colours, call SetRAGWireframeOpacity() and SetRAGWireframeMode()
-- Setup the RAG colour alpha values by the Trackbar values (function converts linear value to something more exponential in the [0,255] range)
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeWidgets" start:true )
RAGcolours.orphan.a = (if chkOrphanColour.checked then 1 else 0) * (TrackbarValueToAlpha trkOrphanMultiplier)
RAGcolours.hd.a = (if chkHDColour.checked then 1 else 0) * (TrackbarValueToAlpha trkHDMultiplier)
RAGcolours.lod.a = (if chkLODColour.checked then 1 else 0) * (TrackbarValueToAlpha trkLODMultiplier)
RAGcolours.slod1.a = (if chkSLOD1Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkSLOD1Multiplier)
RAGcolours.slod2.a = (if chkSLOD2Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkLoSLODsMultiplier)
RAGcolours.slod3.a = (if chkSLOD3Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkLoSLODsMultiplier)
RAGcolours.slod4.a = (if chkSLOD4Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkLoSLODsMultiplier)
RAGcolours.opaque.a = (if chkOpaqueColour.checked then 1 else 0) * (TrackbarValueToAlpha trkOpaqueMultiplier)
RAGcolours.alpha.a = (if chkAlphaColour.checked then 1 else 0) * (TrackbarValueToAlpha trkAlphaMultiplier)
RAGcolours.decal.a = (if chkDecalColour.checked then 1 else 0) * (TrackbarValueToAlpha trkDecalMultiplier)
RAGcolours.cutout.a = (if chkCutoutColour.checked then 1 else 0) * (TrackbarValueToAlpha trkCutoutMultiplier)
RAGcolours.water.a = (if chkWaterColour.checked then 1 else 0) * (TrackbarValueToAlpha trkWaterMultiplier)
RAGcolours.txd1.a = (if chkTXD1Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkTXD1Multiplier)
RAGcolours.txd2.a = (if chkTXD2Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkTXD2Multiplier)
RAGcolours.txd3.a = (if chkTXD3Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkTXD3Multiplier)
RAGcolours.txd4.a = (if chkTXD4Colour.checked then 1 else 0) * (TrackbarValueToAlpha trkTXD4Multiplier)
RAGcolours.isHD.a = (if chkIsHDColour.checked then 1 else 0) * 255
RAGcolours.usingHD.a = (if chkUsingHDColour.checked then 1 else 0) * (TrackbarValueToAlpha trkUsingHDMultiplier)
RAGcolours.sharedHD.a = (if chkSharedHDColour.checked then 1 else 0) * (TrackbarValueToAlpha trkSharedHDMultiplier)
RAGcolours.capableHD.a = (if chkCapableHDColour.checked then 1 else 0) * (TrackbarValueToAlpha trkCapableHDMultiplier)
RAGcolours.switchingHD.a = (if chkSwitchingHDColour.checked then 1 else 0) * 255
RAGcolours.notHD.a = (if chkNotHDColour.checked then 1 else 0) * 255
RAGcolours.densityXmin.a = (if chkTexDensityXMinColour.checked then 1 else 0) * (TrackbarValueToAlpha trkTexDensityXMinMultiplier)
RAGcolours.densityMin.a = (if chkTexDensityMinCOlour.checked then 1 else 0) * (TrackbarValueToAlpha trkTexDensityMinMultiplier)
RAGcolours.densityMid.a = (if chkTexDensityMidColour.checked then 1 else 0) * (TrackbarValueToAlpha trkTexDensityMidMultiplier)
RAGcolours.densityMax.a = (if chkTexDensityMaxColour.checked then 1 else 0) * (TrackbarValueToAlpha trkTexDensityMaxMultiplier)
RAGcolours.densityXMax.a = (if chkTexDensityXMaxColour.checked then 1 else 0) * (TrackbarValueToAlpha trkTexDensityXMaxMultiplier)
RAGcolours.priRequired.a = (if chkPriorityRequired.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityRequired)
RAGcolours.priHigh.a = (if chkPriorityHigh.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityHigh)
RAGcolours.priMedium.a = (if chkPriorityMedium.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityMedium)
RAGcolours.priLow.a = (if chkPriorityLow.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityLow)
RAGcolours.priStatic.a = 255 -- (if chkPriorityStatic.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityStatic)
RAGcolours.priNotAProp.a = 5 -- (if chkPriorityStatic.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityNotAProp)
RAGcolours.priInvalid.a = 255 -- (if chkPriorityStatic.checked then 1 else 0) * (TrackbarValueToAlpha trkPriorityInvalid)
CheckRAGConnection()
if chkConnect.checked then
(
-- Make sure Wireframe widget bank is loaded
if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then ( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
SetRAGWireframeOpacity updateRAG:updateRAG
if (chkWireToggle.checked) then
(
SetRAGWireframeMode updateRAG:updateRAG
-- Setup Wirecolours
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_ORPHANHD" RAGcolours.orphan
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_HD" RAGcolours.hd
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_LOD" RAGcolours.lod
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_SLOD1" RAGcolours.slod1
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_SLOD2" RAGcolours.slod2
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_SLOD3" RAGcolours.slod3
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/LOD Type Colours/LODTYPES_DEPTH_SLOD4" RAGcolours.slod4
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/HD Entity" RAGColours.isHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/Currently Using HD Txd" RAGColours.usingHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/Currently Using HD Txd (shared)" RAGColours.sharedHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/HD Txd Capable" RAGColours.capableHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/HD Txd Capable (switching ..)" RAGColours.switchingHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Model HD State Colours/Not HD Txd Capable" RAGColours.notHD
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Render Bucket Colours/RB_OPAQUE" RAGColours.opaque
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Render Bucket Colours/RB_ALPHA" RAGColours.alpha
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Render Bucket Colours/RB_DECAL" RAGColours.decal
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Render Bucket Colours/RB_CUTOUT" RAGColours.cutout
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Render Bucket Colours/RB_WATER" RAGColours.water
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd Colour 1" ( RAGcolours.txd1 )
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd Colour 2" ( RAGcolours.txd2 )
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd Colour 3" ( RAGcolours.txd3 )
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Uses Parent Txd Colours/Uses Parent Txd Colour 4" ( RAGcolours.txd4 )
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/PRI_REQUIRED" RAGcolours.priRequired
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/PRI_OPTIONAL_HIGH" RAGcolours.priHigh
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/PRI_OPTIONAL_MEDIUM" RAGcolours.priMedium
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/PRI_OPTIONAL_LOW" RAGcolours.priLow
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/STATIC" RAGcolours.priStatic
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/NOT_A_PROP" RAGcolours.priNotAProp
RemoteConnection.WriteVector4Widget "Renderer/Wireframe/Mode Params/Prop Priority Level Colours/PRI_INVALID" RAGcolours.priInvalid
RemoteConnection.WriteVector4Widget "Debug/Texture Density/Density Extreme Min Color " RAGcolours.densityXmin
RemoteConnection.WriteVector4Widget "Debug/Texture Density/Density Min Color" RAGcolours.densityMin
RemoteConnection.WriteVector4Widget "Debug/Texture Density/Density Mid Color" RAGcolours.densityMid
RemoteConnection.WriteVector4Widget "Debug/Texture Density/Density Max Color" RAGcolours.densityMax
RemoteConnection.WriteVector4Widget "Debug/Texture Density/Density Extreme Max Color " RAGcolours.densityXMax
--RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Render Trees" false
RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Render Tree Imposters" false
)
else
(
ShowOptionWidgets()
)
)
if (TRACE > 0) then ( TraceMessage "SetRAGWireframeWidgets" start:false )
)
-- LOD HIERARCHY FUNCTIONS --
-- LOD_WIDGETS = #( gbxLODHierarchyGroupBox, chkOrphanToggle, chkHDToggle, chkLODToggle, chkSLOD1Toggle, chkSLOD2Toggle, chkSLOD3Toggle, chkSLOD4Toggle,
-- ddlLODLevel, ddlLODFunction, chkLODMultiplierToggle, spnLODMultiplier, chkLODTree, chkLODInfo, chkLODSphere, chkEnableTweak, ddlTweakType, spnTweakValue )
fn SetRAGLODWidgets sender:undefined =
( -- Setup RAG LOD filters, Multiplier, Info widgets
if (TRACE > 0) then ( TraceMessage "SetRAGLODWidgets" start:true )
local DEBUG = false
if DEBUG then ( format "Hello LOD Widgets from %\n" sender )
CheckRAGConnection()
if ( chkCONNECT.checked ) then
(
-- Make sure bank is loaded
if ( ( RemoteConnection.ReadStringWidget "Scene/PostScan/Lod Level" ) == "Couldn't find widget 'Scene/PostScan/Lod Level'" ) then ( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
-- Update LOD Multiplier Widgets
if ( chkLODMultiplierToggle.checked ) then
(
RemoteConnection.WriteBoolWidget "Scene/LOD Debug/LOD Scales/Override scales" true
RemoteConnection.WriteFloatWidget "Scene/LOD Debug/LOD Scales/Global LOD scale" (spnLODMultiplier.value as float )
)
else
(
RemoteConnection.WriteFloatWidget "Scene/LOD Debug/LOD Scales/Global LOD scale" (1.0 as float)
RemoteConnection.WriteBoolWidget "Scene/LOD Debug/LOD Scales/Override scales" false
)
-- Update LOD Level filter Widgets
local switchToActive = #{2,4}[ddlLODFunction.selection]
local widgetID = findItem LOD_WIDGETS sender
if ( switchToActive and (widgetID > 0) ) then
(
if (#{9,10}[widgetID]) then
( -- 'Switch To' or 'Cull Other' selected, so ensure selected LOD Level is visible
if DEBUG then ( format "Turning on %\n" sender )
LOD_WIDGETS[ddlLODLevel.selection+2].checked = true
if (ddlLODLevel.selection == 1) then ( LOD_WIDGETS[2].checked = true )
)
else
( -- Otherwise, change the LOD Level selection if 'Switch To' or 'Cull Other' is active
local activeLevel = findItem LOD_CONTROLS sender
if ( (activeLevel > 0) and (sender.checked) ) then
(
if DEBUG then ( format "Switching ddlLODLevel to %\n" activeLevel )
ddlLODLevel.selection = ( amax 1 (activeLevel-2) )
)
)
)
RemoteConnection.WriteStringWidget "Scene/PostScan/Lod Level" ddlLODLevel.selected
RemoteConnection.WriteBoolWidget "Scene/PostScan/Switch to level" ( ddlLODFunction.selected == "Switch To" )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull only level" ( ddlLODFunction.selected == "Cull Only" )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull all except level" ( ddlLODFunction.selected == "Cull Other" )
-- Update Visibility Widgets
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull orphan HD" ( not chkOrphanToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull lodded HD" ( not chkHDToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull LOD" ( not chkLODToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull SLOD1" ( not chkSLOD1Toggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull SLOD2" ( not chkSLOD2Toggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull SLOD3" ( not chkSLOD3Toggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Cull SLOD4" ( not chkSLOD4Toggle.checked ) -- Also toggle SLOD4 since out of room for a SLOD4 toggle button !!!
-- Update Tree Info Widgets
RemoteConnection.WriteBoolWidget "Scene/PostScan/Draw LOD range for selected entity" chkLODSphere.checked
RemoteConnection.WriteBoolWidget "Scene/LOD Debug/Tree Info/Display tree for selected" chkLODTree.checked
RemoteConnection.WriteBoolWidget "Scene/LOD Debug/Tree Info/Display info on selected" chkLODInfo.checked
RemoteConnection.WriteBoolWidget "Debug/Rendering/Debug Text" ( DrawDebugInfo() )-- chkLODInfo.checked
)
if (TRACE > 0) then ( TraceMessage "SetRAGLODWidgets" start:false )
)
fn SetRAGLODTweak valueChanged:false =
( -- Setup RAG LOD Distance Tweak widgets
local DEBUG = true
CheckRAGConnection()
if ( chkCONNECT.checked ) then
(
-- Make sure bank is loaded
if ( ( RemoteConnection.ReadStringWidget "Scene/PostScan/Lod Level" ) == "Couldn't find widget 'Scene/PostScan/Lod Level'" ) then ( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
RemoteConnection.WriteBoolWidget "Scene/LOD Debug/LOD Distances/Enable LOD dist tweaking" chkEnableTweak.checked
spnTweakValue.enabled = chkEnableTweak.checked
-- Find which LOD Distance is being tweaked from ddlTweakType.selected (Should be either "Children" or "Selected" )
local distanceWidget = case ddlTweakType.selected of
(
( "Children" ):( "Scene/LOD Debug/LOD Distances/Dist for children of selected entity" )
( "Selected" ):( "Scene/LOD Debug/LOD Distances/Dist for selected entity" )
default:( "Scene/LOD Debug/LOD Distances/Dist for selected entity" )
)
if valueChanged then
( -- Function has been called from spnTweakValue event, so need to write the LOD Distance to distanceWidget, rather than read it
RemoteConnection.WriteIntWidget distanceWidget spnTweakValue.value
)
else
(
local initialValue = RemoteConnection.ReadIntWidget distanceWidget
format "%\n" initialValue
if ( initialValue != undefined ) and ( (superClassOf initialValue) == Number ) then ( spnTweakValue.value = initialValue )
)
)
)
-- WEATHER/TIME FUNCTIONS --
-- TIMECYCLE_WIDGETS = #( gbxTimecycleGroupBox, spnTODHours, spnToDMinutes, ddlWeatherPrev, ddlWeatherNext, chkTimeLock, trkTimeOfDay )
fn SetRAGTimeCycleWidgets updateRAG:true updateSpinners:true lockTime:false =
( -- Update Time widgets with values from either RAG or Dialog (time may be from spinners or trackbar)
-- Get ToD from Dialog widgets (will be overwritten if RAG is the source of Time)
if (TRACE > 0) then ( TraceMessage "SetRAGTimeCycleWidgets" start:true )
local DEBUG = false
local timeVal = if updateSpinners then ( mod (trkTimeOfDay.value * 6.0) 1440.0 )
else ( (60.0 * spnToDHours.value) + (mod spnToDMinutes.value 60.0) )
local weatherTransition = trkWeatherTransition.value / 100.0
local prevRAGTime = 0
CheckRAGConnection()
if (chkConnect.checked) then
(
if ( RemoteConnection.ReadStringWidget "TimeCycle/Game/Weather and Time Overrides/Override Prev Type" == "Couldn't find widget 'TimeCycle/Game/Weather and Time Overrides/Override Prev Type'") then
( RemoteConnection.WriteBoolWidget "TimeCycle/Create Timecycle Widgets" true )
prevRAGTime = RemoteConnection.ReadIntWidget "TimeCycle/Game/Weather and Time Overrides/Curr Time"
if updateRAG then
( -- Value source is Dialog
RemoteConnection.WriteBoolWidget "TimeCycle/Game/Weather and Time Overrides/Override Time" chkTimeLock.checked
RemoteConnection.WriteFloatWidget "TimeCycle/Game/Weather and Time Overrides/Time Speed Mult" (if chkTimeLock.checked then 1 else 0)
RemoteConnection.WriteIntWidget "TimeCycle/Game/Weather and Time Overrides/Curr Time" timeVal
RemoteConnection.WriteFloatWidget "TimeCycle/Game/Weather and Time Overrides/Override Interp" weatherTransition
local nextWeatherType = if ddlWeatherNext.enabled then ( ddlWeatherNext.selected ) else ( ddlWeatherPrev.selected )
-- Not sure that the Weather/Weather System ddl can be written to...
local weatherPath = if (chkTimeLock.checked) or (true) then ("TimeCycle/Game/Weather and Time Overrides/Override ") else ("Weather/Weather System/Info/Prev Type")
RemoteConnection.WriteStringWidget (weatherPath+"Prev Type") ddlWeatherPrev.selected
RemoteConnection.WriteStringWidget (weatherPath+"Next Type") nextWeatherType
)
else
( -- Value source is RAG, so overwrite timeVal with RAG value
timeVal = (RemoteConnection.ReadIntWidget "TimeCycle/Game/Weather and Time Overrides/Curr Time") as Float
weatherTransition = amax (RemoteConnection.ReadFloatWidget "TimeCycle/Game/Weather and Time Overrides/Override Interp") 0.0
local timePaused = ( (RemoteConnection.ReadFloatWidget "TimeCycle/Game/Weather and Time Overrides/Time Speed Mult") == 0.0 )
chkTimeLock.checked = timePaused and (RemoteConnection.ReadBoolWidget "TimeCycle/Game/Weather and Time Overrides/Override Time")
local weatherType = findItem ddlWeatherPrev.items (RemoteConnection.ReadStringWidget "Weather/Weather System/Info/Prev Type")
if (weatherType > 0) then
( -- Should be in the list, unless list has been updated, so check before setting...
ddlWeatherPrev.selection = weatherType
)
else
(
format "Unknown weather type needs added to dropdown Items : %\n" ( RemoteConnection.ReadStringWidget "Weather/Weather System/Info/Prev Type" )
)
weatherType = findItem ddlWeatherNext.items (RemoteConnection.ReadStringWidget "Weather/Weather System/Info/Next Type")
if (weatherType > 0) then
(
ddlWeatherNext.selection = weatherType
)
else
(
format "Unknown weather type needs added to dropdown Items : %\n" ( RemoteConnection.ReadStringWidget "Weather/Weather System/Info/Next Type" )
)
-- Worth checking the time is paused as well as override flag set (probably), since the Dialog widget controls both
)
)
if DEBUG then ( format "TIMEVAL:% -> TRK: % | SPN: %:% | RAG: %\n" timeVal trkTimeofDay.value spnToDHours.value spnToDMinutes.value prevRAGTime )
-- Update all Dialog time value widgets (possibly RAG over-written)
trkTimeOfDay.value = (timeVal as Float) / 6.0
spnToDHours.value = floor (trkTimeOfDay.value / 10.0)
spnToDMinutes.value = mod timeVal 60
trkWeatherTransition.value = weatherTransition * 100.0
if (TRACE > 0) then ( TraceMessage "SetRAGTimeCycleWidgets" start:false )
)
-- TEXTURE VIEWER FUNCTIONS --
fn SetRAGTexViewerWidgets updateRAG:true runSearch:false =
( -- Set up Texture Viewer texture/TXD search widgets
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if updateRAG then
(
RemoteConnection.WriteBoolWidget "Texture Viewer/Visible" chkTexViewerToggle.checked
-- RemoteConnection.WriteBoolWidget "Texture Viewer/Enable Picking" chkTexViewerToggle.checked -- Flag toggles, but doesn't open window >(
RemoteConnection.WriteBoolWidget "Texture Viewer/Search Params/Exact Name Match" chkTexViewerExact.checked
local searchType = if (ddlTexViewerSearchType.selected == "TXDs") then ( "Texture Dictionaries" ) else ( "Textures" )
RemoteConnection.WriteStringWidget "Texture Viewer/Search Type" searchType
if (txtTexViewerSearch.text != "") then
(
RemoteConnection.WriteStringWidget "Texture Viewer/Search Name" txtTexViewerSearch.text
RemoteConnection.WriteStringWidget "Texture Viewer/Search Filter" txtTexViewerSearch.text
if runSearch then
(
RemoteConnection.WriteBoolWidget "Texture Viewer/Search" true
RemoteConnection.WriteBoolWidget "Texture Viewer/Load Texture//Txd/Load All List Entries" true
)
)
)
else
(
chkTexViewerToggle.checked = RemoteConnection.ReadBoolWidget "Texture Viewer/Visible"
chkTexViewerExact.checked = RemoteConnection.ReadBoolWidget "Texture Viewer/Search Params/Exact Name Match"
local searchType = findItem #("Texture Dictionaries","Textures") (RemoteConnection.ReadStringWidget "Texture Viewer/Search Type")
ddlTexViewerSearchType.selection = ( if (searchType == 2) then ( 2 ) else ( 1 ) ) -- Ignore "Models - Broken".. set to "Textures" instead
)
if chkTexViewerToggle.checked then
(
RemoteConnection.WriteStringWidget "Texture Viewer/Hover Entity Shader Mode" "Hover Shader Only"
)
else
(
RemoteConnection.WriteStringWidget "Texture Viewer/Hover Entity Shader Mode" "Off"
)
)
)
-- OCCLUSION/CULLBOX/GBUFFER FUNCTIONS --
-- OCCLUSION_WIDGETS = #( gbxOcclusionGroupBox, chkOcclOff, ddlOcclMode, chkOcclFlip )
-- CULLBOX_WIDGETS = #( gbxCullBoxGroupBox, chkCullBoxesOn, chkCullBoxEditor, btnFindCullBox, btnWarpToCullBox )
-- GBUF_WIDGETS = #( gbxGBuffGroupBox, ddlGBuffer, ddlGBufferLocation )
fn SetRAGMiscModeWidgets updateRAG:true =
( -- Setup Occlusion, Cullbox and GBuffer widgets
CheckRAGConnection()
if (chkCONNECT.checked) then
(
if updateRAG then
(
-- OCCLUDION WIDGETS --
RemoteConnection.WriteBoolWidget "Renderer/Occlusion/Force Disable Occlusion" (not chkOcclOff.checked)
RemoteConnection.WriteBoolWidget "Renderer/Occlusion/Flip Result" chkOcclFlip.checked
RemoteConnection.WriteBoolWidget "Renderer/Occlusion/Display Occluders" (ddlOcclMode.selected == "Show")
RemoteConnection.WriteBoolWidget "Renderer/Occlusion/Overlay Occluders" (ddlOcclMode.selected == "Overlay")
-- CULL BOX WIDGETS --
RemoteConnection.WriteBoolWidget "Scene/Map Data Cull Box Editor/Culling enabled" chkCullBoxesOn.checked
RemoteConnection.WriteBoolWidget "Scene/Map Data Cull Box Editor/Enabled" chkCullBoxEditor.checked
RemoteConnection.WriteFloatWidget "Scene/Map Data Cull Box Editor/Solid Box Alpha" 0.25
RemoteConnection.WriteBoolWidget "Scene/Map Data Cull Box Editor/Draw Selected Box Only" true
RemoteConnection.WriteBoolWidget "Scene/Map Data Cull Box Editor/Show boxes at camera pos" true
-- GBUFFER WIDGETS --
local gbufMode = "None"
local darkThreshold = 32 -- Slider value to toggle lighting / sky enabled flags
if (ddlGBufferLocation.selected != "Off") then ( gbufMode = ddlGBuffer.selected )
local afterAlpha = (ddlGBufferLocation.selected == "Corner") -- #{1,3,6,7}[ddlGBuffer.selection] -- not sure why these ones... only seems to enable in corner mode these days
local rgba = #{3,4,5}[ddlGBuffer.selection] and (gbufMode != "None")
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Debug Display/Show RGBA" rgba
RemoteConnection.WriteStringWidget "Renderer/Debug/Gbuffer/Debug Display/GBuffer" gbufMode
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Debug Display/GBuffer show corner" ( ddlGBufferLocation.selected == "Corner" )
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Debug Display/GBuffer show after alpha" afterAlpha -- Was a bit crashy at one point, so enabling with trepidation...
local DiffOverrideVal = if ( chkDiffuseOverride.checked ) then ( (trkDarkOverRide.value * 2.55) ) else ( 255 )
local TintOverrideVal = if ( chkTintOverride.checked ) then ( (trkDarkOverRide.value * 2.55) ) else ( 255 ) -- Sometimes seems in-line with base if RGB not multiplied by the trackbar value
RemoteConnection.WriteBoolWidget "Renderer/Wireframe/Map Editor Mode Enabled" ( (trkDarkOverRide.value == 0) and chkLightOverride.checked ) -- Fully disables everything except wire
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Diffuse/Advanced/Override diffuse base enabled" chkDiffuseOverride.checked
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Diffuse/Advanced/Override diffuse tint enabled" chkTintOverride.checked
RemoteConnection.WriteVector4Widget "Renderer/Debug/Gbuffer/Overrides/Diffuse/Advanced/Override diffuse base" ( color DiffOverrideVal DiffOverrideVal DiffOverrideVal (trkDiffuseOverride.value * 2.55) )
RemoteConnection.WriteVector4Widget "Renderer/Debug/Gbuffer/Overrides/Diffuse/Advanced/Override diffuse tint" ( color TintOverrideVal TintOverrideVal TintOverrideVal (trkDiffuseOverride.value * 2.55) )
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Specular/Enable" (not chkLightOverride.checked)
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Normals/Disable Normal Mapping" (not chkLightOverride.checked)
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Ambient/Override Ambient" chkLightOverride.checked
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Ambient/Natural" ( (trkDarkOverride.value as float) / trkDarkOverride.maximum )
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Emissive/Override Emissive" chkLightOverride.checked
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Emissive/Amount" ( (trkDarkOverride.value as float) / trkDarkOverride.maximum )
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Override shadow" chkLightOverride.checked
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Amount" ( 1.0 - ((trkDarkOverride.value as float) / trkDarkOverride.maximum) )
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Intensity" ((trkDarkOverride.value as float) / trkDarkOverride.maximum)
-- RemoteConnection.WriteBoolWidget "Visual Effects/Sky/Render Sky" ((not chkDiffuseOverride.checked) or (trkDarkOverride.value > darkThreshold))
RemoteConnection.WriteBoolWidget "Lighting/Enable Directional" ((not chkLightOverride.checked) and chkGlobalLightToggle.checked) -- or (trkDarkOverride.value > darkThreshold))
RemoteConnection.WriteBoolWidget "Lighting/Enable Local Lights" ((not chkLightOverride.checked) and chkLocalLightToggle.checked) -- or (trkDarkOverride.value > darkThreshold))
RemoteConnection.WriteBoolWidget "Lighting/Enable IBL Reflection" (not chkLightOverride.checked) -- or (trkDarkOverride.value > darkThreshold))
RemoteConnection.WriteBoolWidget "Lighting/LOD // Distant Lights/Enable LOD lights" ((not chkLightOverride.checked) and chkLODLightToggle.checked) -- or (trkDarkOverride.value > darkThreshold))
RemoteConnection.WriteBoolWidget "Lighting/LOD // Distant Lights/Enable distant LOD lights" ((not chkLightOverride.checked) and chkDistantLightToggle.checked) -- or (trkDarkOverride.value > darkThreshold))
)
else
(
-- OCCLUSION WIDGETS --
chkOcclOff.checked = not ( RemoteConnection.ReadBoolWidget "Renderer/Occlusion/Force Disable Occlusion" )
chkOcclFlip.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Occlusion/Flip Result" )
ddlOcclMode.selection = case of
(
(RemoteConnection.ReadBoolWidget "Renderer/Occlusion/Display Occluders"):( 2 )
(RemoteConnection.ReadBoolWidget "Renderer/Occlusion/Overlay Occluders"):( 3 )
default:( 1 )
)
-- CULL BOX WIDGETS --
chkCullBoxesOn.checked = ( RemoteConnection.ReadBoolWidget "Scene/Map Data Cull Box Editor/Culling enabled" )
chkCullBoxEditor.checked = ( RemoteConnection.ReadBoolWidget "Scene/Map Data Cull Box Editor/Enabled" )
-- GBUFFER WIDGETS --
local gbufMode = findItem ddlGbuffer.items (RemoteConnection.ReadStringWidget "Renderer/Debug/Gbuffer/Debug Display/GBuffer")
if (gbufMode == 0) then
( -- Not always "None"... there are a few modes not in the items, so just pick "Albedo" and "Off"
ddlGBufferLocation.selection = 1
ddlGBuffer.selection = 1
)
else
(
ddlGBuffer.selection = gbufmode
ddlGBufferLocation.selection = (if (RemoteConnection.ReadBoolWidget "Renderer/Debug/Gbuffer/Debug Display/GBuffer show corner") then ( 2 ) else ( 1 ) )
)
)
)
)
-- GEO TOGGLE FUNCTIONS -- + -- RENDER PASS FUNCTIONS --
fn SetRAGVisibilityWidgets updateRAG:true =
( -- Toggle object visibilities in RAG by Geo Type Toggles widget states
if (TRACE > 0) then ( TraceMessage "SetRAGVisibilityWidgets" start:true )
CheckRAGConnection()
if (chkConnect.checked) then
(
if ( RemoteConnection.ReadStringWidget "Scene/Map Optimization Helper/Mode" == "Couldn't find widget 'Scene/Map Optimization Helper/Mode'") then
( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
if ( RemoteConnection.ReadStringWidget "Visual Effects/GPU Particles/Debug Render Mode Drop Particles" == "Couldn't find widget 'Visual Effects/GPU Particles/Debug Render Mode Drop Particles'") then
( RemoteConnection.WriteBoolWidget "Visual Effects/Create Vfx Widgets" true )
if updateRAG then
(
-- GEO TYPE TOGGLES --
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Building types/Turn off Terrain" ( not chkVisTerrainToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Building types/Turn off buildings" ( not chkVisBuildingsToggle.checked )
RemoteConnection.WriteBoolWidget "Optimization/Don't render interior" ( not ( chkVisInteriorToggle.checked ) )
RemoteConnection.WriteBoolwidget "Optimization/Disable Tree bucket" ( not chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off SLOD Trees" ( not chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Entity Batches" ( not chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Renderer/Instance Lists/Render Settings/Prop Instance Lists/Render Instance Lists" ( chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Grass Batches" ( not chkVisIPGrassToggle.checked )
RemoteConnection.WriteBoolWidget "Renderer/Instance Lists/Render Settings/Grass Instance Lists/Render Instance Lists" ( chkVisIPGrassToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off objects" ( not chkVisObjectsToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off dummy objects" ( not chkVisDummiesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Vehicles" ( not chkVisVehiclesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Peds" ( not chkVisPedsToggle.checked )
RemoteConnection.WriteBoolWidget "Optimization/Draw Water Quads" chkVisWaterToggle.checked
RemoteConnection.WriteBoolWidget "Optimization/Disable Water bucket" ( not chkVisWaterToggle.checked )
-- RENDER PASS TOGGLES --
RemoteConnection.WriteBoolWidget "Optimization/Disable Opaque bucket" ( not ( chkVisOpaqueToggle.checked ) )
RemoteConnection.WriteBoolWidget "Optimization/Disable Alpha bucket" ( not ( chkVisAlphaToggle.checked ) )
RemoteConnection.WriteBoolWidget "Optimization/Disable Decal bucket" ( not ( chkVisDecalToggle.checked ) )
RemoteConnection.WriteBoolWidget "Optimization/Disable Cutout bucket" ( not ( chkVisCutoutToggle.checked ) )
--RemoteConnection.WriteBoolWidget "Renderer/Debug/Render Phases/Cascaded Shadows/Disable" ( not chkShadowToggle.checked ) -- Rather too crashy for my liking... GBuf override less so.
RemoteConnection.WriteBoolWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Override shadow" (not chkShadowToggle.checked)
if (not chkLightOverride.checked) then
(
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Intensity" 1.0
RemoteConnection.WriteFloatWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Amount" 1.0
)
local cloudCover = (if chkVisFXToggle.checked then 1 else 0) as Float
RemoteConnection.WriteFloatWidget "Visual Effects/Scattering and Transmittance System/Density Scale" ( cloudCover )
RemoteConnection.WriteBoolWidget "Visual Effects/Particles/Framework/Disable All" ( not chkVisFXToggle.checked )
RemoteConnection.WriteBoolWidget "Optimization/turn off bloom" ( not chkVisFXToggle.checked )
-- COLLISION TOGGLES --
RemoteConnection.WriteBoolWidget "Optimization/Polygon Density/Solid" chkSolidCollision.checked
for typeID = 2 to collisionHash.count do
(
RemoteConnection.WriteBoolWidget collisionHash[typeID].RAGvalue ( ddlCollisionType.selection == typeID )
)
for typeID = 2 to otherCollisionHash.count do
(
RemoteConnection.WriteBoolWidget otherCollisionHash[typeID].RAGvalue ( ddlOtherType.selection == typeID )
)
)
else
(
-- GEO TYPE TOGGLES --
chkVisTerrainToggle.checked = not ( RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Building types/Turn off Terrain" )
chkVisBuildingsToggle.checked= not ( RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Building types/Turn off buildings" )
chkVisInteriorToggle.checked = not ( RemoteConnection.ReadBoolWidget "Optimization/Don't render interior" )
chkVisIPTreesToggle.checked = not ( (RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Entity Batches") or
(RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Entity Batches") )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off SLOD Trees" ( not chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Entity Batches" ( not chkVisIPTreesToggle.checked )
RemoteConnection.WriteBoolWidget "Renderer/Instance Lists/Render Settings/Prop Instance Lists/Render Instance Lists" ( chkVisIPTreesToggle.checked )
chkVisIPGrassToggle.checked = ( not (RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Grass Batches") ) or
(RemoteConnection.ReadBoolWidget "Renderer/Instance Lists/Render Settings/Grass Instance Lists/Render Instance Lists")
RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Entity Batches/Turn off Grass Batches" ( not chkVisIPGrassToggle.checked )
RemoteConnection.WriteBoolWidget "Renderer/Instance Lists/Render Settings/Grass Instance Lists/Render Instance Lists" ( chkVisIPGrassToggle.checked )
chkVisObjectsToggle.checked = not ( RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off objects" )
chkVisDummiesToggle.checked = not ( RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off dummy objects" )
chkVisVehiclesToggle.checked = not (RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Vehicles")
chkVisPedsToggle.checked = not (RemoteConnection.ReadBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Peds")
-- Legacy from single Ped+Vehicle button
--RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Vehicles" ( not chkVisVehiclesToggle.checked )
--RemoteConnection.WriteBoolWidget "Scene/PostScan/Entity Visibility Toggles/Dynamic Entities/Turn off Peds" ( not chkVisPedsToggle.checked )
chkVisWaterToggle.checked = (RemoteConnection.ReadBoolWidget "Optimization/Draw Water Quads") or
( not (RemoteConnection.ReadBoolWidget "Optimization/Disable Water bucket") )
RemoteConnection.WriteBoolWidget "Optimization/Draw Water Quads" chkVisWaterToggle.checked
RemoteConnection.WriteBoolWidget "Optimization/Disable Water bucket" ( not chkVisWaterToggle.checked )
-- RENDER PASS TOGGLES --
chkVisOpaqueToggle.checked = not ( RemoteConnection.ReadBoolWidget "Optimization/Disable Opaque bucket" )
chkVisAlphaToggle.checked = not ( RemoteConnection.ReadBoolWidget "Optimization/Disable Alpha bucket" )
chkVisDecalToggle.checked = not ( RemoteConnection.ReadBoolWidget "Optimization/Disable Decal bucket" )
chkVisCutoutToggle.checked = not ( RemoteConnection.ReadBoolWidget "Optimization/Disable Cutout bucket" )
--chkShadowToggle.checked = not ( RemoteConnection.ReadBoolWidget "Renderer/Debug/Render Phases/Cascaded Shadows/Disable" ) -- Rather too crashy for my liking... GBuf override less so.
chkShadowToggle.checked = not ( RemoteConnection.ReadBoolWidget "Renderer/Debug/Gbuffer/Overrides/Shadow/Override shadow" )
local cloudCover = ( (RemoteConnection.ReadFloatWidget "Visual Effects/Scattering and Transmittance System/Density Scale") == 1.0 ) or
( not (RemoteConnection.ReadBoolWidget "Visual Effects/Particles/Framework/Disable All") )
chkVisFXToggle.checked = cloudCover
RemoteConnection.WriteFloatWidget "Visual Effects/Scattering and Transmittance System/Density Scale" ( (if cloudCover then 1 else 0) as Float )
RemoteConnection.WriteBoolWidget "Visual Effects/Particles/Framework/Disable All" ( not chkVisFXToggle.checked )
RemoteConnection.WriteBoolWidget "Optimization/turn off bloom" ( not chkVisFXToggle.checked )
-- COLLISION TOGGLES --
chkSolidCollision.checked = ( RemoteConnection.ReadBoolWidget "Optimization/Polygon Density/Solid" )
local activeCollision = #{}
for hashID = 2 to collisionHash.count while activeCollision.isEmpty do
(
local colActive = RemoteConnection.ReadBoolWidget collisionHash[hashID].RAGvalue
if (colActive != undefined) then
(
activeCollision[HashID] = colActive -- ( RemoteConnection.ReadBoolWidget collisionHash[hashID].RAGvalue )
)
)
if (activeCollision.isEmpty) then ( ddlCollisionType.selection = 1)
else ( ddlCollisionType.selection = (activeCollision as array)[1] )
local activeOtherCollision = #{}
for hashID = 2 to otherCollisionHash.count while activeOtherCollision.isEmpty do
(
local colActive = RemoteConnection.ReadBoolWidget otherCollisionHash[hashID].RAGvalue
if (colActive != undefined) then
(
activeOtherCollision[HashID] = colActive -- ( RemoteConnection.ReadBoolWidget otherCollisionHash[hashID].RAGvalue )
)
)
if (activeOtherCollision.isEmpty) then ( ddlOtherType.selection = 1)
else ( ddlOtherType.selection = (activeOtherCollision as array)[1] )
)
)
if (TRACE > 0) then ( TraceMessage "SetRAGVisibilityWidgets" start:false )
)
-- PREVIEW AND OTHER FUNCTIONS --
fn SetOtherRAGWidgets updateRAG:true =
(
if ( ( RemoteConnection.ReadStringWidget "Renderer/Wireframe/Mode" ) == "Couldn't find widget 'Renderer/Wireframe/Mode'" ) then ( RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true )
if ( ( RemoteConnection.ReadStringWidget "Scene/PostScan/Lod Level" ) == "Couldn't find widget 'Scene/PostScan/Lod Level'" ) then ( RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true )
RemoteConnection.SendSyncCommand()
if updateRAG then
(
RemoteConnection.WriteBoolWidget "Preview Folder/Enable" chkPreviewEnable.checked
RemoteConnection.WriteBoolWidget "Optimization/Potentially Floating Objects/Draw" chkFloatingObjects.checked
RemoteConnection.WriteBoolWidget "Renderer/Draw Lists/Draw List Framework/Draw Lists/Show Rendering Stats" false
RemoteConnection.WriteBoolWidget "Renderer/Draw Lists/Draw List Framework/Draw Lists/Show Context Stats" false
RemoteConnection.WriteBoolWidget "Renderer/Draw Lists/Draw List Framework/Draw Lists/Show Draw List Stats" chkDrawListToggle.checked
-- if chkDrawListToggle.checked then ( RemoteConnection.WriteBoolWidget "Debug/Rendering/Debug Text" true )
RemoteConnection.WriteBoolWidget "Debug/Rendering/Debug Text" ( DrawDebugInfo() )
RemoteConnection.WriteBoolWidget "Renderer/Debug/Render Phases/Entity Selector/Enable Entity Select Render Pass" false
RemoteConnection.WriteBoolWidget "Objects/Object Density Tool/Enable Object Density Tool" chkObjectDensityToggle.checked
RemoteConnection.WriteBoolWidget "Renderer/Budget/Enable GPU budget timers" chkBudgetToggle.checked
RemoteConnection.WriteBoolWidget "Scene/HD Assets/Textures/List HD txds" chkHDTexturesToggle.checked
RemoteConnection.WriteBoolWidget "Renderer/Shader Model 5/POM // Displacement/Disable POM" chkPOMEnable.checked
RemoteConnection.WriteBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Blend Mask" chkShowPOMBlend.checked
RemoteConnection.WriteBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Curve Mask" chkShowPOMCurve.checked
RemoteConnection.WriteBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Distance Fade Settings" chkShowPOMFade.checked
)
else
(
chkDrawListToggle.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Draw Lists/Draw List Framework/Draw Lists/Show Draw List Stats" )
chkObjectDensityToggle.checked = ( RemoteConnection.ReadBoolWidget "Objects/Object Density Tool/Enable Object Density Tool" )
chkBudgetToggle.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Budget/Enable GPU budget timers" )
chkHDTexturesToggle.checked = ( RemoteConnection.ReadBoolWidget "Scene/HD Assets/Textures/List HD txds" )
chkPreviewEnable.checked = ( RemoteConnection.ReadBoolWidget "Preview Folder/Enable" )
chkFloatingObjects.checked = ( RemoteConnection.ReadBoolWidget "Optimization/Potentially Floating Objects/Draw" )
chkPOMEnable.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Shader Model 5/POM // Displacement/Disable POM" )
chkShowPOMBlend.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Blend Mask" )
chkShowPOMCurve.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Curve Mask" )
chkShowPOMFade.checked = ( RemoteConnection.ReadBoolWidget "Renderer/Shader Model 5/POM // Displacement/Visualise POM Distance Fade Settings" )
)
)
fn FlushPreview =
(
RemoteConnection.WriteBoolWidget "Preview Folder/Flush scene" true
)
-- GENERAL WIDGET FUNCTIONS --
fn UpdateGroupVisibility =
( -- Show / Hide widget groups depending on state of their control button, move them vertically, resize dialog
if (TRACE > 0) then ( TraceMessage "UpdateGroupVisibility" start:true )
local nextRowYPos = BANK_WIDGETS[1].pos.y + TR_BANK_HEIGHT + (TR_GROUP_GAP/2) -- Keep note of where the next visible group should be vertically
-- Disabled the Connected check after setting initial states to off
-- if ( chkCONNECT.checked or DEBUG_ADD_WIDGET_LABELS ) then
-- (
for rowID = 2 to ALL_WIDGETS.count do
(
-- local areWidgetsOn = BANK_WIDGETS[rowID].checked -- and ( chkCONNECT.checked or DEBUG_ADD_WIDGET_LABELS )
local widgetRow = ALL_WIDGETS[rowID]
local areWidgetsOn = widgetRow[widgetRow.count].checked
local deactivatedWidgetOffset = (if areWidgetsOn then 0 else 1) * 2000
for groupID = 1 to (widgetRow.count-1) do
(
local widgetGroup = widgetRow[groupID]
local widgetOffsets = initialWidgetOffsets[rowID][groupID]
for widgetID = 1 to widgetGroup.count do
(
local widget = widgetGroup[widgetID]
widget.visible = areWidgetsOn
widget.pos.y = nextRowYPos + widgetOffsets[widgetID].y + deactivatedWidgetOffset
-- if ( widgetID > 1 ) and ( not widget.visible ) then ( widget.pos.x = widgetGroup[1].pos.x + widgetOffsets[widgetID].x + deactivatedWidgetOffset )
)
)
if areWidgetsOn then ( nextRowYPos += (ALL_WIDGETS[rowID][1][1].height + TR_GROUP_GAP) )
)
-- )
RsTinyRAG.height = nextRowYPos
--SetRAGWireframeMode()
ShowOptionWidgets()
if (TRACE > 0) then ( TraceMessage "UpdateGroupVisibility" start:false )
)
fn IsolateGroup clickedWidget widgetGroup force:false =
( -- Show/Hide grouped widgets (called from right-clicking a grouped widget)
-- Are all other widgets unchecked (not counting the first widget, which is always the groupBox)
if (TRACE > 0) then ( TraceMessage "IsolateGroup" start:true )
local othersOn = true
for widgetID = 2 to widgetGroup.count do
(
if ( (widgetGroup[widgetID] != clickedWidget) and ((classOf widgetGroup[widgetID]) == CheckButtonControl) ) then (othersOn = othersOn and not widgetGroup[widgetID].checked)
)
othersOn = (not force) and othersOn
for widget in widgetGroup do
( -- If all others Off, then everything on,
if ((classOf widget) == CheckButtonControl) then ( widget.checked = othersOn )
)
clickedWidget.checked = true
if ((findItem BANK_WIDGETS clickedWidget) > 0 ) then ( UpdateGroupVisibility() )
if (TRACE > 0) then ( TraceMessage "IsolateGroup" start:false )
)
fn TrackBarValueAsPercentage ctrl =
(
local result = formattedPrint ((ctrl.value as Float) / ctrl.maximum * 100.0) format:"#.1f"
result += "%"
result
)
fn setTrackBarValue textWidget ctrl logNeeded:false =
( -- Mostly convert textWidget to power of 2 and set dotnetTrackbar.value
-- Keeping open so an integer value can be passed in the first argument to similarly set it (if I add any trackbars with no text)
local isTextWidget = ((classOf textWidget) == EditTextControl)
local newValue = if isTextWidget then ( textWidget.text as Integer ) else ( textWidget as Integer )
if (newValue != undefined) then
(
if logNeeded then ( newValue = ((log newValue) / 0.693147) as Integer )
ctrl.value = amin ctrl.maximum ( amax ctrl.minimum newValue )
)
-- Set textWidget.value with rounded power of 2 value, since anything else is vaguely illegal
if isTextWidget then ( textWidget.text = if logNeeded then ((2 ^ (ctrl.value)) as String) else (ctrl.value as String) )
)
fn TrackbarMouseEvent ctrl sender arg updateFunction:undefined =
( -- Right-click jump to nearest tick
local DEBUG = false
if (arg.button == sender.mouseButtons.right) then
(
-- Horrible maths to find the actual value clicked
-- since arg.x is the value relative to the left edge of the widget, not the area between min/max ticks
-- and vertical timebars are even worse
-- (8.0 plucked from pixelCounting in PS)
local ratio = if (ctrl.orientation.toString() == "Horizontal") then
( -- Horizontal Trackbar case
(arg.x - 8.0) / (ctrl.width - 16.0)
)
else
( -- Vertical TrackBar case
1.0 - ((arg.y - 8.0) / (ctrl.height - 16.0))
)
ratio = amax 0.0 ( amin 1.0 ratio )
local clickedVal = ratio * (ctrl.maximum - ctrl.minimum)
-- Find the value corresponding to the closest tick (multiple of ctrl.largeChange)
--local newVal = amin ( amax ((floor (clickedVal / ctrl.largeChange + 0.5)) * ctrl.largeChange) ctrl.minimum ) ctrl.maximum
local newVal = (floor (clickedVal / ctrl.largeChange + 0.5)) * ctrl.largeChange + ctrl.minimum
if DEBUG then ( format "(MIN:% | MAX:% | STEP:%) RATIO:% -> CLICKED:% -> NEWVAL:%\n" ctrl.minimum ctrl.maximum ctrl.largeChange ratio clickedVal newVal )
ctrl.value = newVal
-- local isTCWidget = findItem TIMECYCLE_WIDGETS ctrl
if (updateFunction != undefined) then ( updateFunction() )
)
else
if (arg.button == sender.mouseButtons.left) then
(
if (updateFunction != undefined) then ( updateFunction() )
)
local newTip = case ctrl of
(
(trkTimeOfDay):( "Time : " + ((spnToDHours.value as String)+":"+ (if (spnToDminutes.value < 10) then ((spnToDMinutes.value as String)+"0") else (spnToDMinutes.value as String)) ) )
(trkWeatherTransition):( "Weather Transition : " + (ctrl.value as String) + "% " + ddlWeatherNext.selected )
(trkWireOpacity):( "Wire Opacity : " + (TrackBarValueAsPercentage ctrl) )
(trkWireHidden):( "Hidden Wire Opacity : " + (TrackBarValueAsPercentage ctrl) )
(trkFillOpacity):( "Fill Opacity : " + (TrackBarValueAsPercentage ctrl) )
(trkOpacityMultiplier):( "Opacity Multiplier : " + (TrackBarValueAsPercentage ctrl) )
(trkUberLookup):( "Uber Lookup Opacity : " + (TrackBarValueAsPercentage ctrl) )
(trkDiffuseOverride):( "Texture Override : " + (TrackBarValueAsPercentage ctrl) )
(trkDarkOverride):( "Override Greyscale : " + (TrackBarValueAsPercentage ctrl) )
(trkTextureMinSize):( "Texture Minimum Size : " + ((2 ^ ctrl.value) as String) )
(trkTextureDensityMin):( "Minimum Texture Density : " + (ctrl.value as String) )
(trkTextureDensityMax):("Maximum Texture Density : " + (ctrl.value as String) )
(trkDensityShift):("Denisty Range Shift : " + ((0.05 * ctrl.value) as String) )
(trkLightCostOpacity):( "Light Cost Opacity :" + (TrackBarValueAsPercentage ctrl) )
default:( "Alpha : " + (((TrackBarValueToAlpha ctrl) as Integer) as String) )
)
ttpTrackbarTooltip.SetToolTip ctrl newTip
ttpTrackbarTooltip.showAlways = true
)
---- EVENTS ----
-- BANK WIDGET EVENTS --
on chkCONNECT changed NewState do ( CheckRAGConnection connectDialog:true ; UpdateGroupVisibility() )
on chkPickerBank changed NewState do ( UpdateGroupVisibility() )
on chkLightingBank changed NewState do ( UpdateGroupVisibility() )
on chkWireframeBank changed NewState do ( UpdateGroupVisibility() )
on chkLODBank changed NewState do ( UpdateGroupVisibility() )
on chkTimeBank changed NewState do ( UpdateGroupVisibility() )
on chkOcclCullBank changed NewState do ( UpdateGroupVisibility() )
on chkToggleBank changed NewState do ( UpdateGroupVisibility() )
on chkOtherBank changed NewState do ( UpdateGroupVisibility() )
on chkPickerBank rightclick do ( IsolateGroup chkPickerBank BANK_WIDGETS )
on chkLightingBank rightclick do ( IsolateGroup chkLightingBank BANK_WIDGETS )
on chkWireframeBank rightclick do ( IsolateGroup chkWireframeBank BANK_WIDGETS )
on chkLODBank rightclick do ( IsolateGroup chkLODBank BANK_WIDGETS )
on chkTimeBank rightclick do ( IsolateGroup chkTimeBank BANK_WIDGETS )
on chkOcclCullBank rightClick do ( IsolateGroup chkOcclCullBank BANK_WIDGETS )
on chkToggleBank rightclick do ( IsolateGroup chkToggleBank BANK_WIDGETS )
on chkOtherBank rightclick do ( IsolateGroup chkOtherBank BANK_WIDGETS ; UpdateGroupVisibility() ) -- DISCONNECTING OTHER WIDGET FROM RIGHTCLICK AS IT'S NOT FINALISED
-- PICKER EVENTS --
-- PICKER_WIDGETS = #( gbxPickerGroupBox, chkPickerToggle, txtPickerFilter, chkPickerIsolate, chkPickerHide, chkPickerAddToSelection, chkIMAPBounds, ddlPickerHighlight, btnPickerScope )
on chkPickerToggle changed newState do ( SetRAGPickerWidgets() )
on txtPickerFilter entered newValue do ( SelectByName (filterString txtPickerFilter.text " ,") )
on btnPickSelection pressed do ( SelectByName (for obj in selection collect obj.name) )
on chkPickerIsolate changed newState do ( chkPickerHide.checked = false ; SetRAGPickerWidgets() )
on chkPickerHide changed newState do ( chkPickerIsolate.checked = false ; SetRAGPickerWidgets() )
on chkPickerAddToSelection changed newState do ( SetRAGPickerWidgets() )
on chkIMAPBounds changed newState do ( SetRAGPickerWidgets() )
on ddlPickerHighlight selected newSelection do ( SetRAGPickerWidgets() )
on ddlPickerSource selected newSelection do ( SetRAGPickerWidgets() )
on chkObjectPosHelper changed newState do ( GetRAGObjectPos() )
on chkObjectPosHelper rightclick do ( chkObjectPosHelper.checked = true ; GetRAGObjectPos coordChange:true )
fn CheckWarpText widget =
( -- To cope with block/coord text entered into the wrong widget
-- Parse text, overwrite other if it matches that type, then clear the original widget text
local warpText = widget.text
if (warpText != "") then
(
local textWithoutCoords = filterString warpText "[0123456789,-] "
local numCoords = filterString widget.text ","
if ( (textWithoutCoords.count == 0) and (numCoords.count>1) ) then
( -- We got some Coordinates...
ddlWarpSource.selection = ( findItem ddlWarpSource.items "Coords" ) -- Should be 2, but just in case
if (widget == txtBlockID) then
(
txtWarpCoords.text = widget.text
widget.text = ""
)
SetRAGBlockWidgets()
)
else
(
if ( (matchPattern warpText pattern:"*_*") and not (matchPattern warpText pattern:"*,*") ) then
(
ddlWarpSource.selection = ( findItem ddlWarpSource.items "BlockID" )
if (widget == txtWarpCoords) then
(
txtBlockID.text = widget.text
widget.text = ""
)
SetRAGBlockWidgets()
)
)
)
)
-- BLOCK/WARP EVENTS --
-- BLOCK_WIDGETS = #( gbxBlockGroupBox,chkIsolateBlock, ddlWarpToLocation, txtBlockID, btnWarpToSelection, chkAutoWarp, chkWarpStreamFromCamera, btnGetCameraPosition )
-- BLOCK_WIDGETS = #( gbxBlockGroupBox, chkIsolateBlock, ddlWarpToLocation, txtBlockID, chkCamPosHelper, btnWarpToSelection, chkAutoWarp,
-- chkWarpStreamFromCamera, chkFindObj, btnGetCameraPosition )
on chkIsolateBlock changed newState do ( SetRAGBlockWidgets warpCamera:false )
-- on txtBlockID entered newValue do ( ddlWarpSource.selection = 1 ; SetRAGBlockWidgets() )
-- on txtWarpCoords entered newValue do ( ddlWarpSource.selection = 2 ; SetRAGBlockWidgets() )
on txtBlockID entered newValue do ( CheckWarpText txtBlockID )
on txtWarpCoords entered newValue do ( CheckWarpText txtWarpCoords )
on chkDebugCamera changed newState do ( if (not newState) then (chkWarpCamera.checked = chkFindObjects.checked = false) ; SetRAGBlockWidgets() )
on chkWarpCamera changed newState do ( SetRAGBlockWidgets() )
on chkWarpCamera rightclick do if true then ( SetRAGBlockWidgets() ) else ( WarpToSelection (GetSelectionBounds()) )
on chkFindObjects changed newState do ( SetRAGBlockWidgets() )
on chkFindObjects rightlcick do if true then ( SetRAGBlockWidgets() ) else ( LookAtPoint (GetSelectionCoords()) )
on ddlWarpSource selected newSelection do ( SetRAGBlockWidgets() )
on ddlWarpToLocation selected newSelection do ( txtWarpCoords.text = warpPoints[newSelection].location as String ; ddlWarpSource.selection = 2 ; SetRAGBlockWidgets() )
on chkStreamFromCamera changed newState do ( SetRAGBlockWidgets warpCamera:false )
on chkCamPosHelper changed newState do ( GetCameraCoords() )
on chkCamPosHelper rightclick do ( chkCamPosHelper.checked = true ; GetCameraCoords coordChange:true )
-- LIGHTING EVENTS --
on chkLightCosts changed newState do ( if newState then ( ddlWireMode.selection = ( findItem ddlWireMode.items "Light Costs" ) ) ; SetRAGWireframeMode updateRAG:newState )-- SetLightingWidgets() )
on chkShowBudget changed newState do ( if (not newState) then ( chkTintLocal.checked = false ) ; SetLightingWidgets() )
on chkShowEntities changed newState do ( SetLightingWidgets() )
on chkLightInfo changed newState do ( SetLightingWidgets() )
on chkGlobalLightToggle changed newState do ( SetLightingWidgets() )
on chkLocalLightToggle changed newState do ( SetLightingWidgets() )
on chkLODLightToggle changed newState do ( SetLightingWidgets() )
on chkDistantLightToggle changed newState do ( SetLightingWidgets() )
on chkGlobalLightToggle rightclick do ( IsolateGroup chkGlobalLightToggle LIGHT_TOGGLE_CONTROLS ; SetLightingWidgets() )
on chkLocalLightToggle rightclick do ( IsolateGroup chkLocalLightToggle LIGHT_TOGGLE_CONTROLS ; SetLightingWidgets() )
on chkLODLightToggle rightclick do ( IsolateGroup chkLODLightToggle LIGHT_TOGGLE_CONTROLS ; SetLightingWidgets() )
on chkDistantLightToggle rightclick do ( IsolateGroup chkDistantLightToggle LIGHT_TOGGLE_CONTROLS ; SetLightingWidgets() )
on chkPointLightToggle changed newState do ( SetLightingWidgets checkLocalStates:true )
on chkSpotLightToggle changed newState do ( SetLightingWidgets checkLocalStates:true )
on chkCapsuleLightToggle changed newState do ( SetLightingWidgets checkLocalStates:true )
on chkOtherLightToggle changed newState do ( SetLightingWidgets checkLocalStates:true )
on chkPointLightToggle rightclick do ( IsolateGroup chkPointLightToggle LOCALLIGHT_TOGGLE_CONTROLS ; chkLocalLightToggle.checked = true ; SetLightingWidgets() )
on chkSpotLightToggle rightclick do ( IsolateGroup chkSpotLightToggle LOCALLIGHT_TOGGLE_CONTROLS ; chkLocalLightToggle.checked = true ; SetLightingWidgets() )
on chkCapsuleLightToggle rightclick do ( IsolateGroup chkCapsuleLightToggle LOCALLIGHT_TOGGLE_CONTROLS ; chkLocalLightToggle.checked = true ; SetLightingWidgets() )
on chkOtherLightToggle rightclick do ( IsolateGroup chkOtherLightToggle LOCALLIGHT_TOGGLE_CONTROLS ; chkLocalLightToggle.checked = true ; SetLightingWidgets() )
on chkTintLocal changed newState do ( chkShowBudget.checked = (chkShowBudget.checked or chkTintLocal.checked) ; SetLightingWidgets() )
on chkTintLOD changed newState do ( SetLightingWidgets() )
on chkHighlightDistant changed newState do ( SetLightingWidgets() )
-- WIREFRAME EVENTS --
-- WIREFRAME_WIDGETS = #( gbxWireframeGroupBox, chkWireToggle, ddlWireMode, ddlWireOption, txtWireframeFilterName, chkWireMatchExact,
-- chkWireLabel, trkWireOpacity, chkHiddenLabel, trkWireHidden, chkFillLabel, trkFillOpacity, chkOpacityLabel, trkOpacityMultiplier, trkDiffuseOverride )
-- WIREOPTION_TXD_WIDGETS = #( gbxWireOptionsGroupBox, pkrTXD1Colour, pkrTXD2Colour, pkrTXD3Colour, pkrTXD4Colour, txtTXD1Name, txtTXD2Name, txtTXD3Name, txtTXD4Name )
on chkWireToggle changed newState do ( SetRAGWireframeWidgets() )
on chkWireMatchExact changed newState do ( SetRAGWireframeWidgets() )
on ddlWireMode selected newSelection do ( chkLightCosts.checked = (ddlWireMode.selected == "Light Costs") ; ShowOptionWidgets() ; SetRAGWireframeWidgets() ) -- SetRAGWireframeMode() )
on txtWireframeFilterName entered newValue do ( SetRAGWireframeMode() )
on chkWireLabel changed newState do ( SetRAGWireframeOpacity() )
on chkFillLabel changed newState do ( SetRAGWireframeOpacity() )
on chkOpacityLabel changed newState do ( SetRAGWireframeOpacity() )
on chkHiddenLabel changed newState do ( SetRAGWireframeOpacity() )
on trkWireOpacity mouseMove sender arg do ( TrackbarMouseEvent trkWireOpacity sender arg updateFunction:SetRAGWireframeOpacity ) -- ( if (arg.button == sender.mouseButtons.left) then (SetRAGWireframeOpacity()) )
on trkfillOpacity mouseMove sender arg do ( TrackbarMouseEvent trkfillOpacity sender arg updateFunction:SetRAGWireframeOpacity ) -- ( if (arg.button == sender.mouseButtons.left) then (SetRAGWireframeOpacity()) )
on trkWireHidden mouseMove sender arg do ( TrackbarMouseEvent trkWireHidden sender arg updateFunction:SetRAGWireframeOpacity ) -- ( if (arg.button == sender.mouseButtons.left) then (SetRAGWireframeOpacity()) )
on trkOpacityMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkOpacityMultiplier sender arg updateFunction:SetRAGWireframeOpacity ) -- ( if (arg.button == sender.mouseButtons.left) then (SetRAGWireframeOpacity()) )
on trkWireOpacity mouseUp sender arg do ( TrackbarMouseEvent trkWireOpacity sender arg updateFunction:SetRAGWireframeOpacity )
on trkfillOpacity mouseUp sender arg do ( TrackbarMouseEvent trkfillOpacity sender arg updateFunction:SetRAGWireframeOpacity )
on trkWireHidden mouseUp sender arg do ( TrackbarMouseEvent trkWireHidden sender arg updateFunction:SetRAGWireframeOpacity )
on trkOpacityMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkOpacityMultiplier sender arg updateFunction:SetRAGWireframeOpacity )
-- WIREFRAME OPTIONS --
-- LOD LEVEL OPTIONS --
on chkOrphanColour changed newState do ( SetRAGWireframeWidgets() )
on chkHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkLODColour changed newState do ( SetRAGWireframeWidgets() )
on chkSLOD1Colour changed newState do ( SetRAGWireframeWidgets() )
on chkSLOD2Colour changed newState do ( SetRAGWireframeWidgets() )
on chkSLOD3Colour changed newState do ( SetRAGWireframeWidgets() )
on chkSLOD4Colour changed newState do ( SetRAGWireframeWidgets() )
on chkOrphanColour rightclick do ( IsolateGroup chkOrphanColour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkHDColour rightclick do ( IsolateGroup chkHDColour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkLODColour rightclick do ( IsolateGroup chkLODColour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkSLOD1Colour rightclick do ( IsolateGroup chkSLOD1Colour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkSLOD2Colour rightclick do ( IsolateGroup chkSLOD2Colour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkSLOD3Colour rightclick do ( IsolateGroup chkSLOD3Colour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on chkSLOD4Colour rightclick do ( IsolateGroup chkSLOD4Colour WIRE_LOD_CONTROLS ; SetRAGWireframeWidgets() )
on trkOrphanMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkOrphanMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkOrphanMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkOrphanMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkHDMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkHDMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkLODMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkLODMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkLODMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkLODMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkSLOD1Multiplier mouseMove sender arg do ( TrackbarMouseEvent trkSLOD1Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkSLOD1Multiplier mouseUp sender arg do ( TrackbarMouseEvent trkSLOD1Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkLoSLODsMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkLoSLODsMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkLoSLODsMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkLoSLODsMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
-- RENDER PASS OPTIONS --
on chkOpaqueColour changed newState do ( SetRAGWireframeWidgets() )
on chkWaterColour changed newState do ( SetRAGWireframeWidgets() )
on chkAlphaColour changed newState do ( SetRAGWireframeWidgets() )
on chkDecalColour changed newState do ( SetRAGWireframeWidgets() )
on chkCutoutColour changed newState do ( SetRAGWireframeWidgets() )
on chkOpaqueColour rightclick do ( IsolateGroup chkOpaqueColour WIRE_BUCKET_CONTROLS ; SetRAGWireframeWidgets() )
on chkWaterColour rightclick do ( IsolateGroup chchkWaterColourkHDColour WIRE_BUCKET_CONTROLS ; SetRAGWireframeWidgets() )
on chkAlphaColour rightclick do ( IsolateGroup chkAlphaColour WIRE_BUCKET_CONTROLS ; SetRAGWireframeWidgets() )
on chkDecalColour rightclick do ( IsolateGroup chkDecalColour WIRE_BUCKET_CONTROLS ; SetRAGWireframeWidgets() )
on chkCutoutColour rightclick do ( IsolateGroup chkCutoutColour WIRE_BUCKET_CONTROLS ; SetRAGWireframeWidgets() )
on trkOpaqueMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkOpaqueMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkOpaqueMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkOpaqueMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkAlphaMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkAlphaMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkAlphaMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkAlphaMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkDecalMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkDecalMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkDecalMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkDecalMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkCutoutMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkCutoutMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkCutoutMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkCutoutMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkWaterMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkWaterMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkWaterMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkWaterMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
-- TXD NAME OPTIONS --
on chkTXD1Colour changed newState do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeWidgets() )
on chkTXD2Colour changed newState do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeWidgets() )
on chkTXD3Colour changed newState do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeWidgets() )
on chkTXD4Colour changed newState do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeWidgets() )
on chkTXD1Colour rightclick do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; IsolateGroup chkTXD1Colour WIRE_TXD_CONTROLS ; SetRAGWireframeWidgets() )
on chkTXD2Colour rightclick do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; IsolateGroup chkTXD2Colour WIRE_TXD_CONTROLS ; SetRAGWireframeWidgets() )
on chkTXD3Colour rightclick do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; IsolateGroup chkTXD3Colour WIRE_TXD_CONTROLS ; SetRAGWireframeWidgets() )
on chkTXD4Colour rightclick do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; IsolateGroup chkTXD4Colour WIRE_TXD_CONTROLS ; SetRAGWireframeWidgets() )
on txtTXD1Name entered newValue do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeMode() )
on txtTXD2Name entered newValue do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeMode() )
on txtTXD3Name entered newValue do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeMode() )
on txtTXD4Name entered newValue do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; SetRAGWireframeMode() )
on trkTXD1Multiplier mouseMove sender arg do ( TrackbarMouseEvent trkTXD1Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD1Multiplier mouseUp sender arg do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; TrackbarMouseEvent trkTXD1Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD2Multiplier mouseMove sender arg do ( TrackbarMouseEvent trkTXD2Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD2Multiplier mouseUp sender arg do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; TrackbarMouseEvent trkTXD2Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD3Multiplier mouseMove sender arg do ( TrackbarMouseEvent trkTXD3Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD3Multiplier mouseUp sender arg do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; TrackbarMouseEvent trkTXD3Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD4Multiplier mouseMove sender arg do ( TrackbarMouseEvent trkTXD4Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTXD4Multiplier mouseUp sender arg do ( ddlWireMode.selection = (findItem ddlWireMode.items "TXD Name") ; TrackbarMouseEvent trkTXD4Multiplier sender arg updateFunction:SetRAGWireframeWidgets )
-- HD STATE OPTIONS --
on chkIsHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkUsingHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkSharedHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkCapableHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkSwitchingHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkNotHDColour changed newState do ( SetRAGWireframeWidgets() )
on chkIsHDColour rightclick do ( IsolateGroup chkIsHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on chkUsingHDColour rightclick do ( IsolateGroup chkUsingHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on chkSharedHDColour rightclick do ( IsolateGroup chkSharedHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on chkCapableHDColour rightclick do ( IsolateGroup chkCapableHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on chkSwitchingHDColour rightclick do ( IsolateGroup chkSwitchingHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on chkNotHDColour rightclick do ( IsolateGroup chkNotHDColour WIRE_HDSTATE_CONTROLS ; SetRAGWireframeWidgets() )
on trkUsingHDMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkUsingHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkUsingHDMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkUsingHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkSharedHDMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkSharedHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkSharedHDMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkSharedHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkCapableHDMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkCapableHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkCapableHDMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkCapableHDMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
-- SHADER OPTIONS --
on chkUseShaderFilter changed newState do ( IsolateGroup chkUseShaderFilter WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkPXMShader changed newState do ( IsolateGroup chkPXMShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkUberShader changed newState do ( IsolateGroup chkUberShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkStandard2lyrShader changed newState do ( IsolateGroup chkStandard2lyrShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkWaterShader changed newState do ( IsolateGroup chkWaterShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkMudShader changed newState do ( IsolateGroup chkMudShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on chkDefaultShader changed newState do ( IsolateGroup chkDefaultShader WIREOPTION_SHADER_WIDGETS force:true ; SetRAGWireframeMode() )
on trkUberLookup mouseMove sender arg do ( TrackbarMouseEvent trkUberLookup sender arg updateFunction:SetRAGWireframeWidgets )
on trkUberLookup mouseUp sender arg do ( TrackbarMouseEvent trkUberLookup sender arg updateFunction:SetRAGWireframeWidgets )
-- OBJECT ATTRIBUTES --
on chkIsProp changed newState do ( IsolateGroup chkIsProp WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkIsFrag changed newState do ( IsolateGroup chkIsFrag WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkLowPriority changed newState do ( IsolateGroup chkLowPriority WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkIsDoor changed newState do ( IsolateGroup chkIsDoor WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkNoShadow changed newState do ( IsolateGroup chkNoShadow WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkNoReflect changed newState do ( IsolateGroup chkNoReflect WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkIsDynamic changed newState do ( IsolateGroup chkIsDynamic WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
on chkAlphaFading changed newState do ( IsolateGroup chkAlphaFading WIREOPTION_ATTRIBUTES_WIDGETS force:true ; SetRAGWireframeMode() )
-- PROP PRIORITY LEVEL --
on chkPriorityRequired changed newState do ( SetRAGWireframeWidgets() )
on chkPriorityHigh changed newState do ( SetRAGWireframeWidgets() )
on chkPriorityMedium changed newState do ( SetRAGWireframeWidgets() )
on chkPriorityLow changed newState do ( SetRAGWireframeWidgets() )
-- on chkPriorityStatic changed newState do ( SetRAGWireframeWidgets() )
-- on chkPriorityNotAProp changed newState do ( SetRAGWireframeWidgets() )
-- on chkPriorityInvalid changed newState do ( SetRAGWireframeWidgets() )
on chkPriorityRequired rightclick do ( IsolateGroup chkPriorityRequired WIREOPTION_PRIORITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkPriorityHigh rightclick do ( IsolateGroup chkPriorityHigh WIREOPTION_PRIORITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkPriorityMedium rightclick do ( IsolateGroup chkPriorityMedium WIREOPTION_PRIORITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkPriorityLow rightclick do ( IsolateGroup chkPriorityLow WIREOPTION_PRIORITY_CONTROLS ; SetRAGWireframeWidgets() )
on trkPriorityRequired mouseMove sender arg do ( TrackbarMouseEvent trkPriorityRequired sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityRequired mouseUp sender arg do ( TrackbarMouseEvent trkPriorityRequired sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityHigh mouseMove sender arg do ( TrackbarMouseEvent trkPriorityHigh sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityHigh mouseUp sender arg do ( TrackbarMouseEvent trkPriorityHigh sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityMedium mouseMove sender arg do ( TrackbarMouseEvent trkPriorityMedium sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityMedium mouseUp sender arg do ( TrackbarMouseEvent trkPriorityMedium sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityLow mouseMove sender arg do ( TrackbarMouseEvent trkPriorityLow sender arg updateFunction:SetRAGWireframeWidgets )
on trkPriorityLow mouseUp sender arg do ( TrackbarMouseEvent trkPriorityLow sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityStatic mouseMove sender arg do ( TrackbarMouseEvent trkPriorityStatic sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityStatic mouseUp sender arg do ( TrackbarMouseEvent trkPriorityStatic sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityNotAProp mouseMove sender arg do ( TrackbarMouseEvent trkPriorityNotAProp sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityNotAProp mouseUp sender arg do ( TrackbarMouseEvent trkPriorityNotAProp sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityInvalid mouseMove sender arg do ( TrackbarMouseEvent trkPriorityInvalid sender arg updateFunction:SetRAGWireframeWidgets )
-- on trkPriorityInvalid mouseUp sender arg do ( TrackbarMouseEvent trkPriorityInvalid sender arg updateFunction:SetRAGWireframeWidgets )
-- TEXTURE DENSITY --
on chkTexDensityXMinColour changed newState do ( SetRAGWireframeWidgets() )
on chkTexDensityMinColour changed newState do ( SetRAGWireframeWidgets() )
on chkTexDensityMidColour changed newState do ( SetRAGWireframeWidgets() )
on chkTexDensityMaxColour changed newState do ( SetRAGWireframeWidgets() )
on chkTexDensityXMaxColour changed newState do ( SetRAGWireframeWidgets() )
-- Doesn't make a great deal of sense to isolate any of these, but since it's a general thing, doing it anyway
on chkTexDensityXMinColour rightclick do ( IsolateGroup chkTexDensityXMinColour WIREOPTION_TEXDENSITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkTexDensityMinColour rightclick do ( IsolateGroup chkTexDensityMinColour WIREOPTION_TEXDENSITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkTexDensityMidColour rightclick do ( IsolateGroup chkTexDensityMidColour WIREOPTION_TEXDENSITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkTexDensityMaxColour rightclick do ( IsolateGroup chkTexDensityMaxColour WIREOPTION_TEXDENSITY_CONTROLS ; SetRAGWireframeWidgets() )
on chkTexDensityXMaxColour rightclick do ( IsolateGroup chkTexDensityXMaxColour WIREOPTION_TEXDENSITY_CONTROLS ; SetRAGWireframeWidgets() )
on trkTexDensityXMinMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkTexDensityXMinMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityXMinMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkTexDensityXMinMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMinMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkTexDensityMinMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMinMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkTexDensityMinMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMidMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkTexDensityMidMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMidMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkTexDensityMidMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMaxMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkTexDensityMaxMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityMaxMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkTexDensityMaxMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityXMaxMultiplier mouseMove sender arg do ( TrackbarMouseEvent trkTexDensityXMaxMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on trkTexDensityXMaxMultiplier mouseUp sender arg do ( TrackbarMouseEvent trkTexDensityXMaxMultiplier sender arg updateFunction:SetRAGWireframeWidgets )
on txtTextureMinSize entered newValue do ( setTrackBarValue txtTextureMinSize trkTextureMinSize logNeeded:true ; SetRAGWireframeWidgets() )
on trkTextureMinSize mouseMove sender arg do ( TrackbarMouseEvent trkTextureMinSize sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on trkTextureMinSize mouseUp sender arg do ( TrackbarMouseEvent trkTextureMinSize sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on txtTextureDensityMin entered newValue do ( setTrackBarValue txtTextureDensityMin trkTextureDensityMin ; SetRAGWireframeWidgets() )
on txtTextureDensityMax entered newValue do ( setTrackBarValue txtTextureDensityMax trkTextureDensityMax ; SetRAGWireframeWidgets() )
on trkTextureDensityMin mouseMove sender arg do ( TrackbarMouseEvent trkTextureDensityMin sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on trkTextureDensityMin mouseUp sender arg do ( TrackbarMouseEvent trkTextureDensityMin sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on trkTextureDensityMax mouseMove sender arg do ( TrackbarMouseEvent trkTextureDensityMax sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on trkTextureDensityMax mouseUp sender arg do ( TrackbarMouseEvent trkTextureDensityMax sender arg updateFunction:SetRAGWireframeWidgets ; ShowOptionWidgets() )
on chkUseLogScale changed newState do ( SetRAGWireframeWidgets() )
on trkDensityShift mouseMove sender arg do ( TrackbarMouseEvent trkDensityShift sender arg updateFunction:SetRAGWireframeWidgets )
on trkDensityShift mouseUp sender arg do ( TrackbarMouseEvent trkDensityShift sender arg updateFunction:SetRAGWireframeWidgets )
-- OVERDRAW --
--on trkOverdrawMin mouseMove sender arg do ( TrackbarMouseEvent trkOverdrawMin sender arg updateFunction:SetRAGWireframeWidgets )
--on trkOverdrawMin mouseUp sender arg do ( TrackbarMouseEvent trkOverdrawMin sender arg updateFunction:SetRAGWireframeWidgets )
--on trkOverdrawMax mouseMove sender arg do ( TrackbarMouseEvent trkOverdrawMax sender arg updateFunction:SetRAGWireframeWidgets )
--on trkOverdrawMax mouseUp sender arg do ( TrackbarMouseEvent trkOverdrawMax sender arg updateFunction:SetRAGWireframeWidgets )
on chkOverdraw changed newValue do ( SetRAGWireframeOpacity() )
on spnOverdrawMin changed newValue do ( SetRAGWireframeMode() )
on spnOverdrawMax changed newValue do ( SetRAGWireframeMode() )
on btnOverdrawMin pressed do ( spnOverdrawMin.value = 0 ; SetRAGWireframeMode() )
on btnOverdrawMax pressed do ( spnOverdrawMax.value = 20 ; SetRAGWireframeMode() )
on trkOverdrawOpacity mouseMove sender arg do ( TrackbarMouseEvent trkOverdrawOpacity sender arg updateFunction:SetRAGWireframeWidgets )
on trkOverdrawOpacity mouseUp sender arg do ( TrackbarMouseEvent trkOverdrawOpacity sender arg updateFunction:SetRAGWireframeWidgets )
-- LIGHT COSTS --
on chkLightCost changed newState do ( SetRAGWireframeMode() )
on spnLightCostMin changed newValue do ( SetRAGWireframeMode() )
on spnLightCostMax changed newWalue do ( SetRAGWireframeMode() )
on btnLightCostMin pressed do ( spnLightCostMin.value = 1 ; SetRAGWireframeMode() )
on btnLightCostMax pressed do ( spnLightCostMax.value = 8 ; SetRAGWireframeMode() )
on trkLightCostOpacity mouseMove sender arg do ( TrackbarMouseEvent trkLightCostOpacity sender arg updateFunction:SetRAGWireframeMode )
on trkLightCostOpacity mouseUp sender arg do ( TrackbarMouseEvent trkOverdrawOpacity sender arg updateFunction:SetRAGWireframeMode )
-- COLOR PER... --
on chkColourPerEntity changed newState do ( IsolateGroup chkColourPerEntity WIREOPTION_MULTICOLOUR_WIDGETS force:true ; SetRAGWireframeMode() )
on chkColourPerTXD changed newState do ( IsolateGroup chkColourPerTXD WIREOPTION_MULTICOLOUR_WIDGETS force:true ; SetRAGWireframeMode() )
on chkColourPerShader changed newState do ( IsolateGroup chkColourPerShader WIREOPTION_MULTICOLOUR_WIDGETS force:true ; SetRAGWireframeMode() )
on chkColourPerDrawCall changed newState do ( IsolateGroup chkColourPerDrawCall WIREOPTION_MULTICOLOUR_WIDGETS force:true ; SetRAGWireframeMode() )
-- OTHER EVENTS (IN THE CURRENTLY PLACEHOLDER ROW) --
on chkPreviewEnable changed newState do ( SetOtherRAGWidgets() )
on btnFlushScene pressed do ( FlushPreview() )
on chkFloatingObjects changed newState do ( SetOtherRAGWidgets() )
on chkObjectDensityToggle changed newState do ( SetOtherRAGWidgets() )
on chkDrawListToggle changed newState do ( SetOtherRAGWidgets() )
on chkBudgetToggle changed newState do ( SetOtherRAGWidgets() )
on chkHDTexturesToggle changed newState do ( SetOtherRAGWidgets() )
on chkPOMEnable changed newState do ( SetOtherRAGWidgets() )
on chkShowPOMBlend changed newState do ( SetOtherRAGWidgets() )
on chkShowPOMCurve changed newState do ( SetOtherRAGWidgets() )
on chkShowPOMFade changed newState do ( SetOtherRAGWidgets() )
-- LOD HIERARCHY EVENTS --
-- LOD_WIDGETS = #( gbxLODHierarchyGroupBox, chkOrphanToggle, chkHDToggle, chkLODToggle, chkSLOD1Toggle, chkSLOD2Toggle, chkSLOD3Toggle, chkSLOD4Toggle,
-- ddlLODLevel, ddlLODFunction, chkLODMultiplierToggle, spnLODMultiplier, chkLODTree, chkLODInfo, chkLODSphere, chkEnableTweak, ddlTweakType, spnTweakValue )
on chkOrphanToggle changed newState do ( SetRAGLODWidgets sender:chkOrphanToggle )
on chkHDToggle changed newState do ( SetRAGLODWidgets sender:chkHDToggle )
on chkLODToggle changed newState do ( SetRAGLODWidgets sender:chkLODToggle )
on chkSLOD1Toggle changed newState do ( SetRAGLODWidgets sender:chkSLOD1Toggle )
on chkSLOD2Toggle changed newState do ( SetRAGLODWidgets sender:chkSLOD2Toggle )
on chkSLOD3Toggle changed newState do ( SetRAGLODWidgets sender:chkSLOD3Toggle )
on chkSLOD4Toggle changed newState do ( SetRAGLODWidgets sender:chkSLOD4Toggle )
on chkOrphanToggle rightclick do ( IsolateGroup chkOrphanToggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkOrphanToggle )
on chkHDToggle rightclick do ( IsolateGroup chkHDToggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkHDToggle )
on chkLODToggle rightclick do ( IsolateGroup chkLODToggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkLODToggle )
on chkSLOD1Toggle rightclick do ( IsolateGroup chkSLOD1Toggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkSLOD1Toggle )
on chkSLOD2Toggle rightclick do ( IsolateGroup chkSLOD2Toggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkSLOD2Toggle )
on chkSLOD3Toggle rightclick do ( IsolateGroup chkSLOD3Toggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkSLOD3Toggle )
on chkSLOD4Toggle rightclick do ( IsolateGroup chkSLOD4Toggle LOD_CONTROLS ; SetRAGLODWidgets sender:chkSLOD4Toggle )
on ddlLODLevel selected newSelection do ( SetRAGLODWidgets sender:ddlLODLevel )
on ddlLODFunction selected newSelection do ( SetRAGLODWidgets sender:ddlLODFunction )
on chkLODMultiplierToggle changed newState do ( SetRAGLODWidgets() )
on spnLODMultiplier changed newValue do ( SetRAGLODWidgets() )
on chkLODSphere changed newState do ( SetRAGLODWidgets() )
on chkLODTree changed newState do ( SetRAGLODWidgets() )
on chkLODInfo changed newState do ( SetRAGLODWidgets() )
on chkEnableTweak changed newState do ( SetRAGLODTweak valueChanged:false )
on ddlTweakType selected newSelection do ( SetRAGLODTweak valueChanged:false )
on spnTweakValue changed newValue do ( SetRAGLODTweak valueChanged:true )
-- WEATHER/TIME EVENTS --
on spnTODHours changed newValue do ( chkTimeLock.checked = true ; SetRAGTimeCycleWidgets updateRAG:true updateSpinners:false )
on spnToDMinutes changed newValue do ( chkTimeLock.checked = true ; SetRAGTimeCycleWidgets updateRAG:true updateSpinners:false )
on spnToDMinutes rightclick do ( spnToDMinutes.value = 0.0 ; chkTimeLock.checked = true ; SetRAGTimeCycleWidgets updateRAG:true updateSpinners:false )
on ddlWeatherPrev selected newSelection do
(
if ((trkWeatherTransition.value == 100) and (ddlWeatherNext.enabled)) then ( trkWeatherTransition.value = 0 )
SetRAGTimeCycleWidgets updateRAG:true updateSpinners:true
)
on ddlWeatherPrev rightclick do ( ddlWeatherNext.enabled = not ddlWeatherNext.enabled ; SetRAGTimeCycleWidgets updateRAG:true updateSpinners:true )
on ddlWeatherNext selected newSelection do
(
if (trkWeatherTransition.value == 0) then ( trkWeatherTransition.value = 100 )
SetRAGTimeCycleWidgets updateRAG:true updateSpinners:true
)
on chkTimeLock changed newValue do ( SetRAGTimeCycleWidgets updateRAG:true updateSpinners:true )
on trkTimeOfDay mouseMove sender arg do ( TrackbarMouseEvent trkTimeOfDay sender arg updateFunction:SetRAGTimeCycleWidgets )
on trkTimeOfDay mouseUp sender arg do ( chkTimeLock.checked = true ; TrackbarMouseEvent trkTimeOfDay sender arg updateFunction:SetRAGTimeCycleWidgets )
on trkWeatherTransition mouseMove sender arg do ( TrackbarMouseEvent trkWeatherTransition sender arg updateFunction:SetRAGTimeCycleWidgets )
on trkWeatherTransition mouseUp sender arg do ( TrackbarMouseEvent trkWeatherTransition sender arg updateFunction:SetRAGTimeCycleWidgets )
-- TEXTURE VIEWER EVENTS --
on chkTexViewerToggle changed newState do ( SetRAGTexViewerWidgets() )
on ddlTexViewerSearchType selected newSelection do ( SetRAGTexViewerWidgets() )
on chkTexViewerExact changed newState do ( SetRAGTexViewerWidgets runSearch:true )
on txtTexViewerSearch entered newValue do ( SetRAGTexViewerWidgets runSearch:true )
-- OCCLUSION/CULLBOX/GBUFFER EVENTS --
-- OCCLUSION_WIDGETS = #( gbxOcclusionGroupBox, chkOcclOff, ddlOcclMode, chkOcclFlip )
-- CULLBOX_WIDGETS = #( gbxCullBoxGroupBox, chkCullBoxesOn, chkCullBoxEditor, btnFindCullBox, btnWarpToCullBox )
-- GBUF_WIDGETS = #( gbxGBuffGroupBox, ddlGBuffer, ddlGBufferLocation )
on chkOcclOff changed newState do ( SetRAGMiscModeWidgets() )
on ddlOcclMode selected newSelection do ( SetRAGMiscModeWidgets() )
on chkOcclFlip changed newState do ( SetRAGMiscModeWidgets() )
on chkCullBoxesOn changed newState do ( SetRAGMiscModeWidgets() )
on chkCullBoxEditor changed newState do ( SetRAGMiscModeWidgets() )
on btnFindCullBox pressed do ( SetRAGMiscModeWidgets() )
on btnWarpToCullBox pressed do ( SetRAGMiscModeWidgets() )
on ddlGBuffer selected newSelection do ( SetRAGMiscModeWidgets() )
on ddlGBufferLocation selected newSelection do ( SetRAGMiscModeWidgets() )
on chkLightOverride changed newState do ( SetRAGMiscModeWidgets() )
on chkDiffuseOverride changed newState do ( SetRAGMiscModeWidgets() )
on chkTintOverride changed newState do ( SetRAGMiscModeWidgets() )
on chkLightOverride rightclick do ( IsolateGroup chkLightOverride GBUF_CONTROLS ; SetRAGMiscModeWidgets() )
on chkDiffuseOverride rightclick do ( IsolateGroup chkDiffuseOverride GBUF_CONTROLS ; SetRAGMiscModeWidgets() )
on chkTintOverride rightclick do ( IsolateGroup chkTintOverride GBUF_CONTROLS ; SetRAGMiscModeWidgets() )
on trkDiffuseOverride mouseMove sender arg do ( TrackbarMouseEvent trkDiffuseOverride sender arg updateFunction:SetRAGMiscModeWidgets )
on trkDiffuseOverride mouseUp sender arg do ( TrackbarMouseEvent trkDiffuseOverride sender arg updateFunction:SetRAGMiscModeWidgets )
on trkDarkOverride mouseMove sender arg do ( TrackbarMouseEvent trkDarkOverride sender arg updateFunction:SetRAGMiscModeWidgets )
on trkDarkOverride mouseUp sender arg do ( TrackbarMouseEvent trkDarkOverride sender arg updateFunction:SetRAGMiscModeWidgets )
-- GEO TOGGLE EVENTS --
on chkVisBuildingsToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisInteriorToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisTerrainToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisIPTreesToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisIPGrassToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisWaterToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisObjectsToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisDummiesToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisVehiclesToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisPedsToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisBuildingsToggle rightclick do ( IsolateGroup chkVisBuildingsToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisInteriorToggle rightclick do ( IsolateGroup chkVisInteriorToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisTerrainToggle rightclick do ( IsolateGroup chkVisTerrainToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisIPTreesToggle rightclick do ( IsolateGroup chkVisIPTreesToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisIPGrassToggle rightclick do ( IsolateGroup chkVisIPGrassToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisObjectsToggle rightclick do ( IsolateGroup chkVisObjectsToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisDummiesToggle rightclick do ( IsolateGroup chkVisDummiesToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisWaterToggle rightclick do ( IsolateGroup chkVisWaterToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisVehiclesToggle rightclick do ( IsolateGroup chkVisVehiclesToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisPedsToggle rightclick do ( IsolateGroup chkVisPedsToggle GEOTYPE_WIDGETS ; SetRAGVisibilityWidgets() )
-- RENDER PASS EVENTS --
on chkVisOpaqueToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisAlphaToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisDecalToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisCutoutToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisFXToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkShadowToggle changed newState do ( SetRAGVisibilityWidgets() )
on chkVisOpaqueToggle rightclick do ( IsolateGroup chkVisOpaqueToggle RENDERPASS_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisAlphaToggle rightclick do ( IsolateGroup chkVisAlphaToggle RENDERPASS_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisDecalToggle rightclick do ( IsolateGroup chkVisDecalToggle RENDERPASS_WIDGETS ; SetRAGVisibilityWidgets() )
on chkVisCutoutToggle rightclick do ( IsolateGroup chkVisCutoutToggle RENDERPASS_WIDGETS ; SetRAGVisibilityWidgets() )
-- COLLISION EVENTS --
on chkSolidCollision changed newState do ( SetRAGVisibilityWidgets() )
on ddlCollisionType selected newSelection do ( SetRAGVisibilityWidgets() )
on ddlOtherType selected newSelection do ( if (newSelection > 1) then ( chkSolidCollision.checked = false ) ; SetRAGVisibilityWidgets() )
on ddlCollisionType rightclick do ( ddlCollisionType.selection = 1 ; ddlOtherType.selection = 1 ; SetRAGVisibilityWidgets() )
on ddlOtherType rightclick do ( ddlCollisionType.selection = 1 ; ddlOtherType.selection = 1 ; SetRAGVisibilityWidgets() )
-- Dialog Events --
on RsTinyRAG open do
(
banner.setup()
if DEBUG_ADD_WIDGET_LABELS then ( AddLabelsToTooltips() )
-- Initialise the dotNet trackbars
InitDotNetTrackbarControl trkWireOpacity value:20 width:TR_WIRE_BAR_WIDTH height:17 maxVal:100 intervals:5
InitDotNetTrackbarControl trkFillOpacity value:60 width:TR_WIRE_BAR_WIDTH height:17 maxVal:100 intervals:5
InitDotNetTrackbarControl trkOpacityMultiplier value:40 width:TR_WIRE_BAR_WIDTH height:17 maxVal:100 intervals:5
InitDotNetTrackbarControl trkWireHidden value:10 width:TR_WIRE_BAR_WIDTH height:17 maxVal:100 intervals:5
InitDotNetTrackbarControl trkOrphanMultiplier value:100 width:50 height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkHDMultiplier value:100 width:50 height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkLODMultiplier value:100 width:50 height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkSLOD1Multiplier value:100 width:50 height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkLoSLODsMultiplier value:100 width:(TR_WIRE_BUTTON_HEIGHT+TR_WIRE_HALFOPTION_WIDTH-33) height:17 minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTXD1Multiplier value:100 width:TR_WIRE_OPTIONSLIDER_WIDTH height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkTXD2Multiplier value:100 width:TR_WIRE_OPTIONSLIDER_WIDTH height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkTXD3Multiplier value:100 width:TR_WIRE_OPTIONSLIDER_WIDTH height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkTXD4Multiplier value:100 width:TR_WIRE_OPTIONSLIDER_WIDTH height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkUberLookup value:0 width:(TR_WIREOPTIONS_WIDTH-TR_WIREOPTION_HALFBUTTON_WIDTH-TR_GROUP_HBORDERS-4) height:18 minVal:-100 maxVal:100 intervals:4
InitDotNetTrackbarControl trkOpaqueMultiplier value:100 width:(TR_WIREOPTIONS_WIDTH-TR_WIRE_BUTTON_HEIGHT-TR_LARGE_GAP-TR_GROUP_HBORDERS-40-22) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkAlphaMultiplier value:100 width:(TR_WIREOPTIONS_WIDTH-TR_WIRE_BUTTON_HEIGHT-TR_LARGE_GAP-TR_GROUP_HBORDERS-40-22) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkDecalMultiplier value:100 width:(TR_WIREOPTIONS_WIDTH-TR_WIRE_BUTTON_HEIGHT-TR_LARGE_GAP-TR_GROUP_HBORDERS-40-22) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkCutoutMultiplier value:100 width:76 height:17 minVal:4 maxVal:100 intervals:3
InitDotNetTrackbarControl trkWaterMultiplier value:100 width:((TR_WIRE_BUTTON_HEIGHT+TR_SMALL_GAP)*3) height:17 minVal:4 maxVal:100 intervals:3 vertical:true
InitDotNetTrackbarControl trkUsingHDMultiplier value:100 width:(TR_WIRE_OPTIONSLIDER_WIDTH+30) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkSharedHDMultiplier value:100 width:(TR_WIRE_OPTIONSLIDER_WIDTH+30) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkCapableHDMultiplier value:100 width:(TR_WIRE_OPTIONSLIDER_WIDTH+30) height:17 minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkPriorityRequired value:52 width:(TR_WIREOPTION_BUTTON_WIDTH-TR_WIRE_BUTTON_HEIGHT-62) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkPriorityHigh value:100 width:(TR_WIREOPTION_BUTTON_WIDTH-TR_WIRE_BUTTON_HEIGHT-62) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkPriorityMedium value:100 width:(TR_WIREOPTION_BUTTON_WIDTH-TR_WIRE_BUTTON_HEIGHT-62) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkPriorityLow value:100 width:(TR_WIREOPTION_BUTTON_WIDTH-TR_WIRE_BUTTON_HEIGHT-62) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkTexDensityXMinMultiplier value:36 width:(TR_WIRE_HEIGHT - TR_GROUP_BORDERS - TR_WIRE_BUTTON_HEIGHT - 2) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTexDensityMinMultiplier value:52 width:(TR_WIRE_HEIGHT - TR_GROUP_BORDERS - TR_WIRE_BUTTON_HEIGHT - 2) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTexDensityMidMultiplier value:36 width:(TR_WIRE_HEIGHT - TR_GROUP_BORDERS - TR_WIRE_BUTTON_HEIGHT - 2) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTexDensityMaxMultiplier value:84 width:(TR_WIRE_HEIGHT - TR_GROUP_BORDERS - TR_WIRE_BUTTON_HEIGHT - 2) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTexDensityXMaxMultiplier value:84 width:(TR_WIRE_HEIGHT - TR_GROUP_BORDERS - TR_WIRE_BUTTON_HEIGHT - 2) height:(TR_WIRE_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6 vertical:true
InitDotNetTrackbarControl trkTextureMinSize value:6 width:TR_WIREOPTION_DENSITY_WIDTH height:17 minVal:0 maxVal:12 intervals:4
InitDotNetTrackbarControl trkTextureDensityMin value:64 width:TR_WIREOPTION_DENSITY_WIDTH height:17 minVal:0 maxVal:4096 intervals:8
InitDotNetTrackbarControl trkTextureDensityMax value:1024 width:TR_WIREOPTION_DENSITY_WIDTH height:17 minVal:0 maxVal:4096 intervals:8
InitDotNetTrackbarControl trkDensityShift value:0 width:TR_WIREOPTION_DENSITY_WIDTH height:17 minVal:(-100) maxVal:100 intervals:4
InitDotNetTrackbarControl trkTimeOfDay value:120 width:TR_TIMEBAR_WIDTH height:(TR_SMALL_BUTTON_HEIGHT-2) maxVal:240 intervals:6
InitDotNetTrackbarControl trkWeatherTransition value:0 width:TR_LARGE_BUTTON_HEIGHT height:TR_TRACKBAR_HEIGHT maxVal:100 intervals:4 vertical:true
InitDotNetTrackbarControl trkDiffuseOverride value:100 width:TR_GBUF_TRACKBAR_WIDTH height:(TR_SMALL_BUTTON_HEIGHT-2) minVal:0 maxVal:100 intervals:5
InitDotNetTrackbarControl trkDarkOverride value:100 width:TR_LARGE_BUTTON_HEIGHT height:(TR_SMALL_BUTTON_HEIGHT-2) minVal:0 maxVal:100 intervals:4 vertical:true
InitDotNetTrackbarControl trkOverdrawOpacity value:60 width:(TR_WIREOPTION_BUTTON_WIDTH-100-TR_SMALL_GAP) height:(TR_SMALL_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
InitDotNetTrackbarControl trkLightCostOpacity value:60 width:(TR_WIREOPTION_BUTTON_WIDTH-100-TR_SMALL_GAP) height:(TR_SMALL_BUTTON_HEIGHT-2) minVal:4 maxVal:100 intervals:6
-- Setup the initial widget offsets based on their position relative to their group
initialWidgetOffsets = GetInitialWidgetOffsets()
-- Find the Wireframe row, which shuold contain the WireOptions
for rowID = 1 to (ALL_WIDGETS.count) do
(
if (ALL_WIDGETS[rowID][(ALL_WIDGETS[rowID]).count] == chkWireframeBank) then ( wireOptionRow = rowID )
)
-- Set up the wire mode dropdrown (with fake separators)
ddlWireMode.selection = 1 -- Default to Picker Mode
for char = 1 to (TR_WIREMODE_WIDTH / 4) do (format "-" to:SEPARATOR)
ddlWiremode.items = (for mode in wireModes collect mode.item)
ddlWireMode.height = (ddlWireMode.items.count + 1) * 18
-- Set up the 2 collision type dropdowns
ddlCollisionType.items = (for type in collisionHash collect type.item)
ddlCollisionType.height = (collisionHash.count+1) * 18
ddlOtherType.items = (for type in otherCollisionHash collect type.item)
ddlOtherType.height = (otherCollisionHash.count+1) * 18
-- Show widgets based on connection status and control widget states
-- Check for existing connection, and set up widgets if already connected (using flag to set up CONNECT widget)
if ( RemoteConnection.isConnected() ) then
(
CheckRAGConnection connectDialog:true
)
--else
--(
-- ShowOptionWidgets()
--)
if (chkCONNECT.checked) then ( chkPickerBank.checked = true )
UpdateGroupVisibility()
--SetRAGWireframeMode()
)
on RsTinyRAG close do
(
free initialWidgetOffsets
RsTinyRAG = undefined
gc()
)
)
CreateDialog RsTinyRAG width:(RsTinyRAG.TR_WIDTH+(RsTinyRAG.TR_GROUP_HGAP)) height:1 lockWidth:true style:#(#style_titlebar, #style_border, #style_sysmenu, #style_minimizebox) --476 #style_resizing,
SetDialogPos RsTinyRAG RsTinyRAGPos