2546 lines
117 KiB
Plaintext
Executable File
2546 lines
117 KiB
Plaintext
Executable File
------------------------------------------------------------------------------------
|
|
--
|
|
-- File:: RsJunctionVisualiser.ms
|
|
-- Description:: Junction Test Visualisation/Generation/Analysis Tool
|
|
--
|
|
-- Author:: Martin Good <martin.good@rockstarnorth.com>
|
|
-- Date:: 06/03/2014
|
|
--
|
|
------------------------------------------------------------------------------------
|
|
|
|
filein (RsConfigGetWildWestDir() + "script/3dsMax/_config_files/Wildwest_header.ms")
|
|
filein (RsConfigGetWildWestDir() + "script/3dsMax/_common_functions/FN_RSTA_XML.ms")
|
|
fileIn "pipeline/util/RAG_funcs.ms"
|
|
filein "pipeline/util/assert.ms"
|
|
|
|
global RsJunctionViewerPos = [580,75] -- floater height and default position
|
|
|
|
try (RsJunctionViewerPos = GetDialogPos RsJunctionViewer ; DestroyDialog RsJunctionViewer) catch()
|
|
try (CloseRolloutFloater RsJunctionAddPreset) catch()
|
|
|
|
---- MAIN DIALOG ----
|
|
rollout RsJunctionViewer "Junction Test Viewer"
|
|
(
|
|
local ROwidth = 250
|
|
local FPPrecision = "#.2f"
|
|
|
|
-- STRUCTS --
|
|
struct Preset (Name, HMult, WMult, HOffset, WOffset, TrackedStat, MHStat, MWStat, ZeroZ)
|
|
struct Project (name, folder, platforms)
|
|
struct Thresholds (col1, col2, col3, col4, col5, col6, col7, col8, col9, val1, val2, val3, val4, val5, val6, val7, val8, val9)
|
|
struct versionformat (target, ToD, vNum) -- For parsed file name settings... for use in ParseFileName function...
|
|
struct texture (name, size, dims, form, TCS, type, template, sourceImage, sourceRes, errorFlag)
|
|
|
|
-- VARIABLES --
|
|
local PresetValues = #()
|
|
local Projects = #()
|
|
local defaultThresholds = Thresholds col1:[40, 0, 0] col2:[255, 0, 0] col3:[255, 165, 0]col4:[255, 255, 0] \
|
|
col5:[70, 255, 0] col6:[235, 235, 235] col7:[0, 210, 255] col8:[0, 96, 255] col9:[0, 22, 132] \
|
|
val1:4.0 val2:2.0 val3:0.5 val4:0.25 val5:0 val6:(0 - 0.01) val7:-10 val8:-20 val9:-40
|
|
local Threshes = #(defaultThresholds)
|
|
local TextureList = #()
|
|
|
|
local DefaultsFile = ::RsConfigGetWildwestDir() + "\script\3dsMax\Optimisation\RSJunctionVisualiser_Defaults.csv"
|
|
|
|
local DefaultPreset = Preset name:"Default Preset" HMult:1 WMult:1 HOffset:8 WOffset:8 TrackedStat:5 MHStat:5 MWStat:5 ZeroZ:false
|
|
local PresetValues = #(DefaultPreset)
|
|
local PresetNames = #(DefaultPreset.name)
|
|
|
|
local DefaultProject = Project name:" " folder:"X:\\" platforms:#("XBox360", "PS3", "PS4", "XB1", "PC")
|
|
local Projects = #(DefaultProject)
|
|
local ProjectNames = #(DefaultProject.name)
|
|
local BATNames = #("CLICK_ME_360_JUNC_TEST.bat", "CLICK_ME_PS3_JUNC_TEST.bat", "game_orbis_beta.bat", "game_durango_beta.bat", "game_win64_beta.bat")
|
|
|
|
-- Used to track dropdownlist changes
|
|
local ActivePreset = 1
|
|
local ActiveProject = 1
|
|
local ActiveThresh = 1
|
|
|
|
--local DefaultCurrCSVName = "X:\Juncs\Output\LIBERTY_Junc_out_360_OVERNEW.csv" -- my default location... proper junction tests may be in the following...
|
|
--local DefaultPrevCSVName = "X:\Juncs\Output\LIBERTY_Junc_out_360_v006.csv"
|
|
local DefaultCurrCSVName = "N:\RSGEDI\QA\GTA V\Art\Automated Map Junction Tests\Results\Readings v369\Junc_out_PS3_v369_DAY.csv" -- my default location... proper junction tests may be in the following...
|
|
local DefaultPrevCSVName = "N:\RSGEDI\QA\GTA V\Art\Automated Map Junction Tests\Results\Older Readings\Readings v340\Junc_out_xbox_v340_DAY.csv"
|
|
|
|
local DefaultWriteCSVLocation = "X:\Juncs\LIBERTY_Test_Junctions.csv"
|
|
local currCSVName = DefaultCurrCSVName
|
|
local prevCSVName = DefaultPrevCSVName
|
|
local writeCSVName = DefaultWriteCSVLocation
|
|
|
|
-- Flags due to separate rollouts... (may not need...)
|
|
local compare_tests = false
|
|
|
|
local OldVersion = versionformat target:"ps3" ToD:"Day" vNum:"v340"
|
|
local NewVersion = versionformat target:"ps3" ToD:"Day" vNum:"v369"
|
|
|
|
dotNetControl rsBannerPanel "System.Windows.Forms.Panel" height:32 pos:[0,0] width:RsJunctionViewer.width
|
|
local banner = makeRsBanner dn_Panel:rsBannerPanel versionNum:1.0 versionName:"Evaluation Version" colourScheme:#eval filename:(getThisScriptFilename())
|
|
|
|
subrollout Comp "Compare Junctions" height:26 width:ROwidth pos:[3,37] rolledup:true
|
|
progressbar CompVisSeparator "" value:100 width:ROwidth color:[40, 0,0] height:7 pos:[3,65]
|
|
subrollout Vis "Visualise Junctions" height:926 width:ROwidth pos:[3,72] rolledup:false
|
|
progressbar VisGenSeparator "" value:100 width:ROwidth color:[40, 0,0] height:7 pos:[3,1000]
|
|
subrollout Gen "Generate Junction File" height:26 width:ROwidth pos:[3,1008] rolledup:true
|
|
|
|
---- VISUALISER FUNCTIONS ----
|
|
|
|
fn loadSettings =
|
|
( -- Load initial settings from defaults file (::RsConfigGetWildwestDir() + "\script\3dsMax\Optimisation\RSJunctionVisualiser_Defaults.csv")
|
|
local defaults_file = openFile DefaultsFile
|
|
/* -- comment this out to override default file */
|
|
if defaults_file != undefined then
|
|
(
|
|
while not eof defaults_file do
|
|
(
|
|
local nextCSVline = readline defaults_file
|
|
local DefaultsData = filterstring nextCSVline ","
|
|
case DefaultsData[1] of
|
|
(
|
|
"DefaultWriteCSVLocation": (writeCSVName = DefaultWriteCSVLocation = DefaultsData[2] as string)
|
|
"DefaultCurrentCSVLocation": (currCSVName = DefaultCurrCSVName = DefaultsData[2] as string)
|
|
"DefaultPreviousCSVLocation": (prevCSVName = DefaultPrevCSVName = DefaultsData[2] as string)
|
|
|
|
"DefaultCol1Thresh(Highest)": (Threshes[1].val1 = DefaultsData[2] as float)
|
|
"DefaultCol2Thresh": (Threshes[1].val2 = DefaultsData[2] as float)
|
|
"DefaultCol3Thresh": (Threshes[1].val3 = DefaultsData[2] as float)
|
|
"DefaultCol4Thresh": (Threshes[1].val4 = DefaultsData[2] as float)
|
|
"DefaultCol5Thresh": (Threshes[1].val5 = DefaultsData[2] as float)
|
|
"DefaultCol6Thresh": (Threshes[1].val6 = DefaultsData[2] as float)
|
|
"DefaultCol7Thresh": (Threshes[1].val7 = DefaultsData[2] as float)
|
|
"DefaultCol8Thresh": (Threshes[1].val8 = DefaultsData[2] as float)
|
|
"DefaultCol9Thresh(Lowest)": (Threshes[1].val9 = DefaultsData[2] as float)
|
|
|
|
"Colour1 RGB":(Threshes[1].col1.x = DefaultsData[2] as float ; Threshes[1].col1.y = DefaultsData[3] as float ; Threshes[1].col1.z = DefaultsData[4] as float)
|
|
"Colour2 RGB":(Threshes[1].col2.x = DefaultsData[2] as float ; Threshes[1].col2.y = DefaultsData[3] as float ; Threshes[1].col2.z = DefaultsData[4] as float)
|
|
"Colour3 RGB":(Threshes[1].col3.x = DefaultsData[2] as float ; Threshes[1].col3.y = DefaultsData[3] as float ; Threshes[1].col3.z = DefaultsData[4] as float)
|
|
"Colour4 RGB":(Threshes[1].col4.x = DefaultsData[2] as float ; Threshes[1].col4.y = DefaultsData[3] as float ; Threshes[1].col4.z = DefaultsData[4] as float)
|
|
"Colour5 RGB":(Threshes[1].col5.x = DefaultsData[2] as float ; Threshes[1].col5.y = DefaultsData[3] as float ; Threshes[1].col5.z = DefaultsData[4] as float)
|
|
"Colour6 RGB":(Threshes[1].col6.x = DefaultsData[2] as float ; Threshes[1].col6.y = DefaultsData[3] as float ; Threshes[1].col6.z = DefaultsData[4] as float)
|
|
"Colour7 RGB":(Threshes[1].col7.x = DefaultsData[2] as float ; Threshes[1].col7.y = DefaultsData[3] as float ; Threshes[1].col7.z = DefaultsData[4] as float)
|
|
"Colour8 RGB":(Threshes[1].col8.x = DefaultsData[2] as float ; Threshes[1].col8.y = DefaultsData[3] as float ; Threshes[1].col8.z = DefaultsData[4] as float)
|
|
"Colour9 RGB":(Threshes[1].col9.x = DefaultsData[2] as float ; Threshes[1].col9.y = DefaultsData[3] as float ; Threshes[1].col9.z = DefaultsData[4] as float)
|
|
|
|
"Preset":
|
|
(
|
|
local newPreset = Preset name:DefaultsData[2]
|
|
newPreset.HMult = DefaultsData[3] as float ; newPreset.WMult = DefaultsData[4] as float
|
|
newPreset.HOffset = DefaultsData[5] as float ; newPreset.WOffset= DefaultsData[6] as float
|
|
newPreset.TrackedStat= DefaultsData[7] as integer ; newPreset.MWStat= DefaultsData[8] as integer ; newPreset.MHStat= DefaultsData[9] as integer
|
|
newPreset.ZeroZ= DefaultsData[10] as booleanClass
|
|
|
|
append PresetValues newPreset
|
|
append PresetNames newPreset.name
|
|
if ( DefaultsData[2] == "XBox360 Preset" ) then ActivePreset = PresetNames.count -- !!! This line sets default Preset to XBOX360
|
|
)
|
|
"Project":
|
|
(
|
|
local newProject = Project name:DefaultsData[2]
|
|
newProject.folder = DefaultsData[3]
|
|
local newPlatforms = #()
|
|
for pindex = 4 to DefaultsData.count do
|
|
(
|
|
append newPlatforms DefaultsData[pindex]
|
|
)
|
|
newProject.platforms = newPlatforms
|
|
|
|
append Projects newProject
|
|
append ProjectNames newProject.name
|
|
if ( DefaultsData[2] == "Liberty" ) then ActiveProject = ProjectNames.count -- !!! This line sets default Project build/dev location to LIBERTY
|
|
)
|
|
)
|
|
)
|
|
close defaults_file
|
|
)
|
|
)
|
|
fn ParseFileName FileNameString =
|
|
( -- Used by Comparison and Visualiser - returns Platform, Time Of Day and Version number gleaned from a filename
|
|
local FileVersion = versionformat target:"" ToD:"" vNum:0
|
|
|
|
local FileNameArray = filterstring (getFilenameFile FileNameString) "_"
|
|
for index = 1 to FileNameArray.count do
|
|
(
|
|
local nextbit = toLower FileNameArray[index]
|
|
case of
|
|
( -- !!! Extra casess needed for Future Proofing !!!! Possibly convert to dropdownlist.selection value
|
|
( nextbit == "ps4"):( FileVersion.target = "orbis" )
|
|
( nextbit == "orbis"):( FileVersion.target = "ps4" )
|
|
( nextbit == "xb1"):( FileVersion.target = "durango" )
|
|
( nextbit == "durango"):( FileVersion.target = "durango" )
|
|
( nextbit == "pc"):( FileVersion.target = "x64" )
|
|
( nextbit == "x64"):( FileVersion.target = "x64" )
|
|
( nextbit == "ps3"):( FileVersion.target = "ps3" )
|
|
( nextbit == "xbox"):( FileVersion.target = "xbox" )
|
|
( nextbit == "360"):( FileVersion.target = "xbox")
|
|
( nextbit == "day"):( FileVersion.ToD = "Day" )
|
|
( nextbit == "night"):( FileVersion.ToD = "Night" )
|
|
( substring nextbit 1 1 == "v"):( FileVersion.vNum = nextbit )
|
|
)
|
|
)
|
|
--format "%\n" FileVersion
|
|
return FileVersion
|
|
)
|
|
|
|
|
|
fn FMin Num1 Num2 =
|
|
( -- Returns minimum of the two values (Num2 by default)... I suspect that this exists somewhere, but my MaxScriptHelp search failed...
|
|
case of
|
|
(
|
|
(Num1 < Num2) : Num1
|
|
(default) : Num2
|
|
)
|
|
)
|
|
fn FMax Num1 Num2 =
|
|
( -- Returns maximum of the two values (Num2 by default)... I suspect that this exists somewhere, but my MaxScriptHelp search failed...
|
|
case of
|
|
(
|
|
(Num1 > Num2) : Num1
|
|
(default) : Num2
|
|
)
|
|
)
|
|
|
|
---- OPEN/CLOSE EVENTS ----
|
|
on RsJunctionViewer open do
|
|
(
|
|
banner.setup()
|
|
try (SetDialogPos RsJunctionViewer RsJunctionViewerPos) catch()
|
|
loadSettings()
|
|
)
|
|
on RsJunctionViewer close do
|
|
(
|
|
try (DestroyDialog RsJunctionRenamePreset) catch()
|
|
)
|
|
)
|
|
|
|
rollout RsJunctionRenamePreset "Choose Preset Name"
|
|
( -- New scale/position settings preset rename dialog
|
|
dotNetControl rsBannerPanel "System.Windows.Forms.Panel" height:32 pos:[0,0] width:RsJunctionRenamePreset.width
|
|
local banner = makeRsBanner dn_Panel:rsBannerPanel versionName:"Junction Viewer - Rename Preset" versionNum:1.0 colourScheme:#eval filename:(getThisScriptFilename())
|
|
|
|
edittext PresetName "" text:"THIS SHOULD BE OVERWRITTEN" width:(RsJunctionRenamePreset.width-4) align:#centre offset:[-13,0]
|
|
button SavePreset "SAVE PRESET TO DEFAULTS FILE" width:(RsJunctionRenamePreset.width-8) height:30 align:#centre offset:[-1,-2]
|
|
|
|
on PresetName changed NewName do
|
|
(
|
|
local NotFound = true
|
|
if ((findItem RsJunctionViewer.PresetNames NewName) == 0) then
|
|
(
|
|
SavePreset.enabled = true ; SavePreset.text = "SAVE PRESET TO DEFAULTS FILE"
|
|
)
|
|
else
|
|
(
|
|
SavePreset.enabled = false ; SavePreset.text = "Preset Name Already Exists"
|
|
)
|
|
RsJunctionViewer.PresetNames[RsJunctionViewer.ActivePreset] = PresetName.text
|
|
RsJunctionViewer.Vis.rollouts[1].MarkerPresets.items = RsJunctionViewer.PresetNames
|
|
)
|
|
on SavePreset pressed do
|
|
(
|
|
RsJunctionViewer.PresetNames[RsJunctionViewer.ActivePreset] = PresetName.text
|
|
RsJunctionViewer.Vis.rollouts[1].MarkerPresets.items = RsJunctionViewer.PresetNames
|
|
|
|
local message = "Couldn't open default settings file :\n"+RsJunctionViewer.DefaultDefaultFile+"\nto add the new preset.\n\n"
|
|
if doesFileExist RsJunctionViewer.DefaultDefaultFile then
|
|
(
|
|
if getFileAttribute RsJunctionViewer.DefaultDefaultFile #readOnly then
|
|
(
|
|
message += "File is read only..."
|
|
messageBox message title:"Couldn't update Defaults File"
|
|
)
|
|
else
|
|
(
|
|
local defaults_file = openFile DefaultDefaultFile mode:"a"
|
|
if defaults_file != undefined then
|
|
(
|
|
local newPresetString = "Preset,"+PresetName.text+","+(newPreset.HMult as string)+","+(newPreset.WMult as string)+","+(newPreset.HOffset as string)+","+(newPreset.WOffset as string)+","
|
|
newPresetString+=(newPreset.TrackedStat as string)+","+(newPreset.MWStat as string)+","+(newPreset.MHStat as string)+","+(newPreset.ZeroZ as string)+"\n"
|
|
--format "%\n" newPresetString
|
|
format "%" newPresetString to:defaults_file
|
|
close defaults_file
|
|
)
|
|
)
|
|
)
|
|
else
|
|
(
|
|
message += "File doesn't exist..."
|
|
messageBox message title:"Couldn't update Defaults File"
|
|
)
|
|
DestroyDialog RsJunctionAddPreset
|
|
)
|
|
|
|
---- ROLLOUT OPEN EVENT ----
|
|
on RsJunctionRenamePreset open do
|
|
(
|
|
banner.setup()
|
|
)
|
|
on PresetName entered ArgIgnore do
|
|
(
|
|
DestroyDialog RsJunctionRenamePreset
|
|
)
|
|
)
|
|
|
|
|
|
---- JUNCTION VIEWER MAIN ROLLOUTS ----
|
|
rollout Comparison "Compare Junction Test Results" rolledUp:true
|
|
( -- Runs the junction comparison script (if set up properly) on the existing junction memory dump files in N:
|
|
local ROwidth = 234
|
|
|
|
local scriptRootDir = "X:\Juncs\Costs\\"
|
|
local compareRootDir = "N:\RSGEDI\QA\GTA V\Art\Automated Map Junction Tests\Results\costs\\" -- All QA memory dumps should be in here somewhere
|
|
local compareTextDir = scriptRootDir + "Comparisons\\"
|
|
local compare_bat_name = scriptRootDir + "JunctionCompare.bat"
|
|
-- And where to dump the temporary uncompressed ZIP files
|
|
local compare_NewZIPTemp = scriptRootDir + "ZIPTemp\New"
|
|
local compare_OldZIPTemp = scriptRootDir + "ZIPTemp\Old"
|
|
local compareNotSetText = " Not set in Visualiser"
|
|
|
|
-- Adding all the bits together for filenames and paths...
|
|
local compareOldPath = compareRootDir + RsJunctionViewer.OldVersion.vNum + "\\" + RsJunctionViewer.OldVersion.ToD + "\\" -- Test results on N:
|
|
local compareNewPath = compareRootDir + RsJunctionViewer.NewVersion.vNum + "\\" + RsJunctionViewer.NewVersion.ToD + "\\"
|
|
local compareNewFileName = RsJunctionViewer.NewVersion.target + RsJunctionViewer.NewVersion.vNum + ".zip"
|
|
local compareOldFileName = RsJunctionViewer.OldVersion.target + RsJunctionViewer.OldVersion.vNum + ".zip"
|
|
|
|
local DefaultCompareOld = compareOldPath + compareOldFileName
|
|
local DefaultCompareNew = compareNewPath + compareNewFileName
|
|
|
|
local CompareOldZIP = DefaultCompareOld
|
|
local CompareNewZIP = DefaultCompareNew
|
|
|
|
|
|
group "Search for .ZIPs from Visualiser Settings"
|
|
(
|
|
button FindTestResults "Find Junction Test Versions" width:(ROwidth-16) height:30 align:#center offset:[0,-2] tooltip:"Uses the version file names from the CURRENT and PREVIOUS files in the Visualiser to find the corresponding junction streaming dump .ZIP files.\nMay fail to find them if the naming convention changes for either..."
|
|
dropdownlist TargetPlatform "" items:RsJunctionViewer.Projects[1].platforms selection:1 align:#left width:(ROwidth-84) height:16 offset:[-4,0] enabled:false
|
|
checkbox PlatformOverride "Override" checked:false align:#right offset:[8,-24] tooltip:"Manually override the target platform."
|
|
dropdownlist TargetToD "" items:#("Day","Night") selection:1 align:#left width:(ROwidth-84) height:16 offset:[-4,0] enabled:false
|
|
checkbox ToDOverride "Override" checked:false align:#right offset:[8,-24] tooltip:"Manually override the Day and Night test results. (Night is less common, so will fail regularly...)"
|
|
|
|
editText NewVersionNum "New Version" text:" NOT FOUND" fieldwidth:((ROwidth*0.5)-8) labelOnTop:true across:2 align:#left offset:[-5,0] readonly:true enabled:false
|
|
editText OldVersionNum "Old Version" text:" NOT FOUND" fieldwidth:((ROwidth*0.5)-8) labelOnTop:true align:#right offset:[5,0] readonly:true enabled:false
|
|
button ChangeNewVersion "Change New" across:2 align:#left width:((ROwidth*0.5)-10) height:26 offset:[-4,-2]
|
|
button ChangeOldVersion "Change Old" align:#right width:((ROwidth*0.5)-10) height:26 offset:[4,-2]
|
|
)
|
|
group "Run Junction Compare Script"
|
|
(
|
|
button ChangeCompBATFile "Change Junction Comparison Script" width:(ROwidth-16) tooltip:"Script for comparing junctions."
|
|
editText CompBATFileName "" text:compare_bat_name width:(ROwidth-10) offset:[-2,-5] align:#center readonly:true
|
|
button RunTest "Run Comparison Script" width:(ROwidth-16) height:60 offset:[0,2] tooltip:"Run the junction test .BATon your target PS3/XBox/etc. Needs set up outside this script, so results may vary...\nErrors will appear in the text box below."
|
|
radioButtons OpenTextFiles "Open after Comparison Script" labels:#("Files","Folder","None") default:2 tooltip:"Opens all the selected junctions' comparison files or the folder when 'Run Comparison Script' is pressed.\nDefault is 'Folder' to prevent spamming notepads. Won't kill previously openend explorer windows though."
|
|
editText ErrorText "Info / Errors" text:"" labelOnTop:true width:(ROwidth-16) height:20 align:#center readonly:true enabled:false
|
|
)
|
|
|
|
---- COMPARISON FUNCTIONS ----
|
|
fn SearchForZIPNames =
|
|
(
|
|
ErrorText.text = ""
|
|
ErrorText.enabled = false
|
|
|
|
PlatformOverride.enabled = true
|
|
ToDOverride.enabled = true
|
|
|
|
local OldPlatform = RsJunctionViewer.OldVersion.target
|
|
local NewPlatform = RsJunctionViewer.NewVersion.target
|
|
local OldTime = RsJunctionViewer.OldVersion.ToD
|
|
local NewTime = RsJunctionViewer.NewVersion.ToD
|
|
|
|
if PlatformOverride.state then
|
|
(
|
|
case TargetPlatform.selected of
|
|
(
|
|
"XB1":(OldPlatform = NewPlatform = "durango")
|
|
"PS4":(OldPlatform = NewPlatform = "orbis")
|
|
"PC":(OldPlatform = NewPlatform = "x64")
|
|
"PS3":(OldPlatform = NewPlatform = "ps3")
|
|
default:(OldPlatform = NewPlatform = "xbox")
|
|
)
|
|
)
|
|
if ToDOverride.state then
|
|
(
|
|
OldTime = NewTime = TargetToD.selected
|
|
)
|
|
|
|
compareOldPath = compareRootDir + RsJunctionViewer.OldVersion.vNum + "\\" + OldTime + "\\" -- Test results on N:
|
|
compareNewPath = compareRootDir + RsJunctionViewer.NewVersion.vNum + "\\" + NewTime + "\\"
|
|
compareOldFileName = OldPlatform + "_" + RsJunctionViewer.OldVersion.vNum
|
|
compareNewFileName = NewPlatform + "_" + RsJunctionViewer.NewVersion.vNum
|
|
|
|
format "New Path :%\nNew file : %\nOld Path : %\nOld file : %\n" compareNewPath CompareNewFileName compareOldPath compareOldFileName
|
|
|
|
local JunctionZIPName = compareNewPath + compareNewFileName + ".zip"
|
|
|
|
if doesFileExist JunctionZIPName then
|
|
(
|
|
--NewVersionNum.text = "Found " + RsJunctionViewer.NewVersion.target + RsJunctionViewer.NewVersion.vNum
|
|
NewVersionNum.text = "Found " + compareNewFileName
|
|
NewVersionNum.enabled = true
|
|
CompareNewZIP = JunctionZIPName
|
|
)
|
|
else
|
|
(
|
|
compareNewPath = compareRootDir + RsJunctionViewer.NewVersion.vNum + "\\" -- older test results don't have "Day" in the path...
|
|
JunctionZIPName = compareNewPath + compareNewFileName + ".zip"
|
|
|
|
if doesFileExist JunctionZIPName then
|
|
(
|
|
NewVersionNum.text = "Found " + compareNewFileName
|
|
NewVersionNum.enabled = true
|
|
CompareNewZIP = JunctionZIPName
|
|
)
|
|
else
|
|
(
|
|
if RsJunctionViewer.NewVersion.vNum == "NONE" then
|
|
(
|
|
NewVersionNum.text = compareNotSetText
|
|
)
|
|
else
|
|
(
|
|
NewVersionNum.text = "Can't find " + compareNewFileName
|
|
)
|
|
NewVersionNum.enabled = false
|
|
)
|
|
)
|
|
|
|
|
|
JunctionZIPName = compareOldPath + compareOldFileName + ".zip"
|
|
if doesFileExist JunctionZIPName then
|
|
(
|
|
OldVersionNum.text = "Found " + compareOldFileName
|
|
OldVersionNum.enabled = true
|
|
CompareOldZIP = JunctionZIPName
|
|
)
|
|
else
|
|
(
|
|
compareOldPath = compareRootDir + RsJunctionViewer.OldVersion.vNum + "\\" -- older test results use this path...
|
|
JunctionZIPName = compareOldPath + compareOldFileName + ".zip"
|
|
|
|
if doesFileExist JunctionZIPName then
|
|
(
|
|
OldVersionNum.text = "Found " + compareOldFileName
|
|
OldVersionNum.enabled = true
|
|
CompareOldZIP = JunctionZIPName
|
|
)
|
|
else
|
|
(
|
|
if RsJunctionViewer.OldVersion.vNum == "NONE" then
|
|
(
|
|
OldVersionNum.text = compareNotSetText
|
|
)
|
|
else
|
|
(
|
|
OldVersionNum.text = "Can't find " + compareOldFileName
|
|
)
|
|
OldVersionNum.enabled = false
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
---- COMPARISON EVENTS ----
|
|
on PlatformOverride changed Arg do
|
|
(
|
|
TargetPlatform.enabled = Arg
|
|
SearchForZIPNames()
|
|
)
|
|
on ToDOverride changed Arg do
|
|
(
|
|
TargetTod.enabled = Arg
|
|
SearchForZIPNames()
|
|
)
|
|
|
|
on TargetPlatform selected ArgIgnore do ( SearchForZIPNames() )
|
|
on TargetToD selected ArgIgnore do ( SearchForZIPNames() )
|
|
on FindTestResults pressed do ( SearchForZIPNames () )
|
|
|
|
on ChangeOldVersion pressed do
|
|
(
|
|
local zip_name = getOpenFileName caption:"Old ZIP file" filename:CompareOldZIP types:"ZIP (*.zip)|*.zip|All Files (*.*)|*.*|"
|
|
if zip_name == undefined then
|
|
(
|
|
CompareOldZIP = DefaultCompareOld
|
|
ErrorText.text = " Using default .ZIP file location"
|
|
)
|
|
else
|
|
(
|
|
CompareOldZIP = zip_name
|
|
ErrorText.text =""
|
|
|
|
local parsedZIPName = RsJunctionViewer.ParseFileName zip_name
|
|
format "Target : %, ToD : %, Version : %\n" parsedZIPName.target parsedZIPName.ToD parsedZIPName.vNum
|
|
OldVersionNum.text = "Using " + parsedZIPName.target + "_" parsedZIPName.vNum
|
|
OldVersionNum.enabled = true
|
|
PlatformOverride.enabled = false
|
|
PlatformOverride.state = false
|
|
ToDOverride.enabled = false
|
|
ToDOverride.state = false
|
|
TargetToD.enabled = false
|
|
TargetPlatform.enabled = false
|
|
case parsedZIPName.target of
|
|
(
|
|
"ps3":( TargetPlatform.selection = 2 )
|
|
"xbox":( TargetPlatform.selection = 1 )
|
|
)
|
|
)
|
|
)
|
|
on ChangeNewVersion pressed do
|
|
(
|
|
|
|
local zip_name = getOpenFileName caption:"New ZIP file" filename:CompareNewZIP types:"ZIP (*.zip)|*.zip|All Files (*.*)|*.*|"
|
|
if zip_name == undefined then
|
|
(
|
|
CompareNewZIP = DefaultCompareNew
|
|
--NewVersionNum.enabled = false -- technically should disable, but will run with default !!!
|
|
ErrorText.text = " Using default .ZIP file location"
|
|
)
|
|
else
|
|
(
|
|
CompareNewZIP = zip_name
|
|
ErrorText.text = ""
|
|
|
|
local parsedZIPName = RsJunctionViewer.ParseFileName zip_name
|
|
format "Target : %, ToD : %, Version : %\n" parsedZIPName.target parsedZIPName.ToD parsedZIPName.vNum
|
|
NewVersionNum.text = "Using " + parsedZIPName.target + "_" + parsedZIPName.vNum
|
|
NewVersionNum.enabled = true
|
|
PlatformOverride.enabled = false
|
|
PlatformOverride.state = false
|
|
ToDOverride.enabled = false
|
|
ToDOverride.state = false
|
|
TargetToD.enabled = false
|
|
TargetPlatform.enabled = false
|
|
case parsedZIPName.target of
|
|
(
|
|
"ps3":( TargetPlatform.selection = 1 )
|
|
"xbox":( TargetPlatform.selection = 2 )
|
|
)
|
|
)
|
|
)
|
|
|
|
on RunTest pressed do
|
|
(
|
|
ErrorText.text = ""
|
|
ErrorText.enabled = false
|
|
|
|
local TextNewFileName = TextOldFileName = ScriptOutputName = "NONE"
|
|
local CSVPlatform = RsJunctionViewer.NewVersion.target
|
|
|
|
if PlatformOverride.state then
|
|
(
|
|
case TargetPlatform.selected of
|
|
(
|
|
"XB1":(CSVPlatform = "durango")
|
|
"PS4":(CSVPlatform = "orbis")
|
|
"PC":(CSVPlatform = "x64")
|
|
"PS3":(CSVPlatform = "ps3")
|
|
default:(CSVPlatform = "xbox")
|
|
)
|
|
)
|
|
|
|
if selection.count > 0 and OldVersionNum.enabled and NewVersionNum.enabled and doesFileExist CompBATFileName.text then
|
|
(
|
|
if makedir compare_NewZIPTemp and makedir compare_OldZIPTemp and makedir compareTextDir then
|
|
(
|
|
format "Extracting Old ZIP : %\n" CompareOldZIP
|
|
unmaz CompareOldZIP compare_OldZIPTemp
|
|
|
|
format "Extracting New ZIP : %\n" CompareNewZIP
|
|
unmaz CompareNewZIP compare_NewZIPTemp
|
|
|
|
for SelectedJunction in selection do
|
|
(
|
|
local SelectedJunctionName =SelectedJunction.name + ".txt"
|
|
JunctionOldZIPName = compare_OldZipTemp + "\\" + SelectedJunctionName
|
|
JunctionNewZIPName = compare_NewZipTemp + "\\" + SelectedJunctionName
|
|
|
|
if doesFileExist JunctionOldZIPName then
|
|
(
|
|
|
|
TextOldFileName = compareTextDir + "old.txt"
|
|
if doesFileExist TextOldFileName then deleteFile TextOldFileName -- remove any old versions or it won't overwrite
|
|
local InfoText = "Copying ..\Old\\" + SelectedJunctionName + " --> old.txt | "
|
|
format "%" InfoText
|
|
copyFile JunctionOldZIPName TextOldFileName
|
|
|
|
-- NEW FILE COPY --
|
|
if doesFileExist JunctionNewZIPName then
|
|
(
|
|
TextNewFileName = compareTextDir + "new.txt"
|
|
if doesFileExist TextNewFileName then deleteFile TextNewFileName -- remove any old versions or it won't overwrite
|
|
local InfoText = "..\New\\" + SelectedJunctionName + " --> new.txt | "
|
|
format "%" InfoText
|
|
copyFile JunctionNewZIPName TextNewFileName
|
|
|
|
-- Run the comparison script .BAT
|
|
HiddenDOSCommand CompBATFileName.text
|
|
|
|
-- Rename the output file
|
|
ScriptOutputName = compareTextDir + "StreamingChanges.txt"
|
|
RenamedFileName = RsJunctionViewer.NewVersion.vNum + RsJunctionViewer.OldVersion.vNum + "_" + CSVPlatform + "_" + SelectedJunction.name + "_Changes.txt"
|
|
RenamedOutput = compareTextDir + RenamedFileName
|
|
|
|
copyFile ScriptOutputName RenamedOutput --rename fail... copy instead
|
|
format "% written.\n" RenamedFileName
|
|
|
|
-- Open the output file
|
|
if OpentextFiles.state == 1 then
|
|
(
|
|
HiddenDOSCommand RenamedOutput donotwait:true -- Open with default package... could get messy if set up strangely
|
|
--command = RenamedOutput --"%windir%\system32\\notepad.exe " + RenamedOutput -- Original, and moderately guaranteed to work (assuming notepad is there).
|
|
)
|
|
)
|
|
else
|
|
(
|
|
local InfoText = "Couldn't find " + SelectedJunctionName + " in New .zip file"
|
|
format "%\n" InfoText
|
|
ErrorText.text = InfoText
|
|
)
|
|
)
|
|
else
|
|
(
|
|
local InfoText = "Couldn't find " + SelectedJunctionName + " in New .zip file"
|
|
format "%\n" InfoText
|
|
ErrorText.text = InfoText
|
|
)
|
|
)
|
|
|
|
-- Delete any temp files regardless of success --
|
|
format "Removing Temp Files : %\n" compare_OldZIPTemp
|
|
local command = "del " + compare_OldZIPTemp + "\\*.txt" -- clean up the unzipped files now it's copied
|
|
HiddenDOSCommand command donotwait:true
|
|
|
|
format "Removing Temp Files : %\n" compare_NewZIPTemp
|
|
command = "del " + compare_NewZIPTemp + "\\*.txt" -- clean up the unzipped files now it's copied
|
|
HiddenDOSCommand command donotwait:true
|
|
|
|
if doesFileExist TextNewFileName then
|
|
(
|
|
command = "del " + TextNewFileName
|
|
HiddenDOSCommand command donotwait:true
|
|
)
|
|
if doesFileExist TextOldFileName then
|
|
(
|
|
command = "del " + TextOldFileName
|
|
HiddenDOSCommand command donotwait:true
|
|
)
|
|
if doesFileExist ScriptOutputName then
|
|
(
|
|
command = "del " + ScriptOutputName
|
|
HiddenDOSCommand command donotwait:true
|
|
)
|
|
|
|
if OpenTextFiles.state == 2 then
|
|
(
|
|
command = "explorer " + compareTextDir ; HiddenDOSCommand command donotwait:true
|
|
)
|
|
)
|
|
else
|
|
(
|
|
ErrorText.text = "Problem creating folder : "
|
|
if makedir compare_NewZIPTemp == false then Error.text += compare_NewZIPTemp + " "
|
|
if makedir compare_OldZIPTemp == false then Error.text += compare_OldZIPTemp + " "
|
|
if makedir compareTextDir == false then Error.text += compareTextDir
|
|
ErrorText.enabled = true
|
|
)
|
|
)
|
|
else
|
|
(
|
|
case of -- Fail cases
|
|
(
|
|
(selection.count == 0) : ( ErrorText.text = "Nothing Selected")
|
|
(OldVersionNum.enabled == false) : (ErrorText.text = "No Old Version .zip file selected")
|
|
(NewVersionNum.enabled == false) : ( ErrorText.text = "No New Version .zip file selected")
|
|
(doesFileExist CompBATFileName.text == false):( ErrorText.text = CompBATFileName.text + " does not exist." )
|
|
)
|
|
ErrorText.enabled = true
|
|
)
|
|
)
|
|
|
|
|
|
---- COMPARISON ROLLOUT EVENTS ----
|
|
on Comparison rolledUp Rolled do
|
|
(
|
|
if Rolled then (RsJunctionViewer.Comp.height = 424) else (RsJunctionViewer.Comp.height = 26)
|
|
RsJunctionViewer.Vis.pos.y = RsJunctionViewer.Comp.height + RsJunctionViewer.Comp.pos.y + 10
|
|
if (RsJunctionViewer.Vis.height > 26) then (RsJunctionViewer.Vis.height = RsJunctionViewer.height - (RsJunctionViewer.Vis.pos.y + RsJunctionViewer.Gen.height + 14))
|
|
|
|
RsJunctionViewer.Gen.pos.y = RsJunctionViewer.Vis.pos.y + RsJunctionViewer.Vis.height + 10
|
|
RsJunctionViewer.CompVisSeparator.position.y = RsJunctionViewer.Vis.pos.y - 7
|
|
RsJunctionViewer.VisGenSeparator.position.y = RsJunctionViewer.Gen.pos.y - 7
|
|
)
|
|
)
|
|
|
|
rollout Visualiser "Visualise Junction Test Results"
|
|
( -- Loads junction test results and displays them as boxes, sized and coloured by a selection of the test data
|
|
local ROwidth = 234
|
|
local CPwidth = 38
|
|
|
|
local LockGap = 0.01
|
|
local ThresholdGap = 0.05
|
|
local ThresholdLimit = 200.0
|
|
local Threshes = RsJunctionViewer.Threshes
|
|
|
|
local PrevThresh = #(Threshes[1].val1,Threshes[1].val2,Threshes[1].val3,Threshes[1].val4,Threshes[1].val5,Threshes[1].val6,Threshes[1].val7,Threshes[1].val8,Threshes[1].val9)
|
|
local CurrThresh = deepcopy PrevThresh
|
|
|
|
struct junction (name, xcoord, ycoord, zcoord, main, vram, main_compare, vram_compare, archetypes, archetypes_compare, bad_junc, tracked_stat, marker)
|
|
local active_juncs = #()
|
|
|
|
-- Values used for Stat Tracking
|
|
local WorstCount = 0
|
|
local WorstJunc = ThresholdLimit
|
|
local BestJunc = 0.0 - ThresholdLimit
|
|
local WorstThresh = 0.0
|
|
local TrackedMean = 0.0
|
|
|
|
local NotLoadedText = " Not Loaded"
|
|
|
|
struct JuncFileHeader (name, x, y, z, Main, VRAM, VRAMScene, MainScene, VRAMAvail, MainAvail, ArchNum)
|
|
local JuncField = JuncFileHeader name:-10000 x:-10000 y:-10000 z:-10000 Main:-10000 VRAM:-10000 \
|
|
VRAMScene:-10000 MainScene:-10000 VRAMAvail:-10000 MainAvail:-10000 ArchNum:-10000
|
|
|
|
group "Junction Test Files"
|
|
(
|
|
button LoadCurrentCSV "Load CURRENT Data" width:((ROWidth*0.65)-8) height:40 align:#left offset:[-4, -4]
|
|
button ChangeCurrentCSV "Browse" width:((ROWidth*0.35)-8) height:22 align:#right offset:[4,-45]
|
|
editText CurrFileCount "" text:" Not Loaded" width:((ROWidth*0.35)-3) align:#right offset:[5,-4] enabled:false readonly:true
|
|
editText CurrFileName "" text:(filenameFromPath RsJunctionViewer.currCSVName) width:(ROWidth-10) align:#left offset:[-9,-4] enabled:true readonly:true
|
|
|
|
button LoadPreviousCSV "Load PREVIOUS Data" width:((ROWidth*0.65)-8) height:40 align:#left offset:[-4, 0] enabled:false
|
|
button ChangePreviousCSV "Browse" width:((ROWidth*0.35)-8) height:22 align:#right offset:[4,-45] enabled:false
|
|
editText PrevFileCount "" text:" Not Loaded" width:((ROWidth*0.35)-3) align:#right offset:[5,-4] enabled:false readonly:true
|
|
editText PrevFileName "" text:(filenameFromPath RsJunctionViewer.prevCSVName) width:(ROWidth-10) align:#left offset:[-9,-4] enabled:true readonly:true
|
|
|
|
progressbar PrevSurround "" color:[60,220,60] value:100 width:((ROwidth*0.5)-34) height:24 align:#left offset:[-5,0] enabled:false
|
|
progressbar CurrSurround "" color:[60,220,60] value:100 width:((ROwidth*0.5)-34) height:24 align:#left offset:[((ROwidth*0.5)-37),-29] enabled:false
|
|
progressbar DiffSurround "" color:[60,220,60] value:100 width:51 height:24 align:#right offset:[4,-29] enabled:false
|
|
editText VersionPrevious "" text:NotLoadedText width:((ROwidth*0.5)-37) offset:[-5, -25] align:#left readonly:true enabled:false
|
|
editText VersionCurrent "" text:NotLoadedText width:((ROwidth*0.5)-37) offset:[((ROwidth*0.5)-37), -22] align:#left readonly:true enabled:false
|
|
editText CompareCount "" text:" N/A" width:48 align:#right offset:[1, -22] enabled:false readonly:true tooltip:"Number of junctions contained in both CURRENT and PREVIOUS files."
|
|
|
|
button UsePrevious "PREVIOUS" width:((ROwidth*0.5)-34) offset:[-5, 0] align:#left enabled:false
|
|
button UseCurrent "CURRENT" width:((ROwidth*0.5)-34) offset:[((ROwidth*0.5)-37), -26] align:#left enabled:false
|
|
button UseDiff "DIFF" width:51 align:#right offset:[4, -26] enabled:false
|
|
radioButtons TrackedVersion "" labels:#("CURRENT", "PREVIOUS","DIFF") default:3 columns:3 align:#centre offset:[6,-20] visible:false enabled:false tooltip:"Switch between the 2 versions, and the comparison."
|
|
)
|
|
group "Stat Tracking"
|
|
(
|
|
editText BestJunction "" text:" N/A" across:2 align:#left fieldwidth:((ROwidth/2)-45) offset:[-8,0] readonly:true enabled:false tooltip:"Lowest tracked stat value."
|
|
editText WorstJunction "Low ---> High" text:" N/A" align:#right offset:[5,0] fieldwidth:((ROwidth/2)-45) readonly:true enabled:false tooltip:"Highest tracked stat value."
|
|
|
|
spinner WorstJunctionCount "" range:[0,0,0] scale:1 type:#integer across:2 align:#left fieldwidth:((ROwidth/2)-56) offset:[-5,3] enabled:false tooltip:"Number of junctions over threshold."
|
|
spinner WorstThreshold "over " range:[BestJunc, WorstJunc, WorstThresh] type:#float align:#right fieldwidth:((ROwidth/2)-62) offset:[-46, 3] tooltip:"Worst junction threshold."
|
|
button SelectWorst "Select" align:#right offset:[2,-24] enabled:false tooltip:"Select worst junctions using the over count/threshold to the left."
|
|
|
|
checkbox AutoSelect "Auto-Select" checked:false across:2 align:#left enabled:false offset:[-3,-2]
|
|
radioButtons AutoSelectType "" labels:#("Worst", "Nth") columns:2 default:2 align:#right offset:[20,-2]
|
|
|
|
radioButtons DropJunctions "Drop Junctions" labels:#("Under 0 MB", "Best", "None") default:3 columns:3 offset:[-4, 0] enabled:false align:#left tooltip:"Lowers the junctions.\n 0 MB : all junctions below 0.0MB\n Over : all junctions below the over value\nNone : don't lower any"
|
|
|
|
checkbox HideBest "Hide Dropped" align:#left across:2 offset:[-4, -2] ticked:false enabled:false
|
|
spinner DropAmount "Drop By" range:[0.0, 1000.0, 1000.0] scale:10.0 align:#right width:114 offset:[4, -2] enabled:false tooltip:"Distance to drop junctions by."
|
|
|
|
--progressbar RAGSurround "" color:[0,255,0] value:100 width:((ROwidth*0.35)-5) height:32 align:#left offset:[-6,-2] enabled:false
|
|
--button RAGConnect "CONNECT" height:24 width:((ROwidth*0.35)-12) across:2 align:#left offset:[-2,-33] enabled:true
|
|
--button WarpTo "Warp Player" height:30 width:((ROwidth*0.65)-78) align:#right offset:[-64,-36] enabled:false
|
|
--button Analyse "ANALYSE" height:30 width:66 align:#right offset:[4,-35] enabled:true
|
|
progressbar RAGSurround "" color:[0,255,0] value:100 width:(ROwidth*0.35) height:32 align:#left offset:[-6,-2] enabled:false
|
|
button RAGConnect "CONNECT" height:24 width:((ROwidth*0.35)-7) across:2 align:#left offset:[-2,-33] enabled:true
|
|
button WarpTo "Warp To Selection" height:30 width:((ROwidth*0.65)-16) align:#right offset:[4,-36] enabled:false
|
|
)
|
|
group "Marker Scale and Position"
|
|
(
|
|
radioButtons WidthOptions "Marker Width" labels:#("Main","VRAM","Main+VRAM","Archetypes","None") default:RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].MWStat columns:1 align:#left offset:[-3,0] tooltip:"Statistic to track on junction marker heights"
|
|
radioButtons HeightOptions "Marker Height" labels:#("Main","VRAM","Main+VRAM","Archetypes","None") default:RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].MHStat columns:1 align:#left offset:[76,-96] tooltip:"Statistic to track on junction marker widths"
|
|
radioButtons TrackedStat "Track" labels:#("Main","VRAM","M+V","ATypes","None","Width","Height") default:RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].TrackedStat columns:1 align:#right offset:[8,-96]tooltip:"Stats to use for colour group.\nDefault is Total = Main + VRAM.\nHeight and Width options are affected by offsets."
|
|
checkbox TrackLink "Link Width/Height to Track" checked:false align:#left offset:[-1,-27]
|
|
|
|
spinner HeightMult "Height : Scale" range:[0.1,100.0,RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].HMult] type:#float scale:1.0 width:100 align:#left across:2 offset:[-3,7] tooltip:"Scale multiplier for junction marker heights."
|
|
spinner HeightOffset "Offset" range:[-1000,1000,RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].HOffset] type:#float width:80 align:#right offset:[-6,7] tooltip:"Value in MB to add/subtract from junction marker heights (Default 0.0)"
|
|
spinner WidthMult "Width : Scale" range:[0.1,100,RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].WMult] type:#float scale:1.0 width:100 align:#left offset:[-3,-2] across:2 tooltip:"Scale multiplier for junction marker widths."
|
|
spinner WidthOffset "Offset" range:[-1000,1000,RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].WOffset] type:#float width:80 align:#right offset:[-6,-2] tooltip:"Value in MB to add/subtract from junction marker widths (Default 8.0 : will need changed to 0.0 if valid data displayed in the widths)."
|
|
button ScaleLink " " width:10 height:16 align:#left offset:[110,-30]
|
|
button OffsetLink " " width:10 height:16 align:#right offset:[4,-22]
|
|
|
|
checkbox PositiveWidths "All Widths > 0" checked:true across:2 align:#left offset:[-4,10] tooltip:"Don't allow widths to go bellow 0. Makes top view easier to read."
|
|
checkbox ZeroZ "Zero Z Positions" checked:RsJunctionViewer.PresetValues[RsJunctionViewer.ActivePreset].ZeroZ align:#right offset:[8,10] tooltip:"Move junction markers between default positions and 0.0m on z-axis. (Default positions are written to/taken from junction test file)."
|
|
|
|
dropdownlist MarkerPresets "" items:RsJunctionViewer.PresetNames selection:RsJunctionViewer.ActivePreset align:#left width:((ROwidth*0.67)-8) height:16 offset:[-4,0]
|
|
button SaveNewPreset "SAVE NEW" width:((ROwidth*0.33)-8) height:22 align:#right offset:[4,-28]
|
|
)
|
|
group "Marker Colour Minimum Thresholds"
|
|
(
|
|
checkbox SmthGrad "Smooth Gradient" checked:true align:#left offset:[-2,-2] tooltip:"Distinct colour groups or smoother gradients across all values."
|
|
checkbox ScaleRanges "Scale Ranges" checked:false align:#right offset:[8,-20] enabled:false tooltip:"Makes several buttons affect the threshold values if ticked, forcing the range to the low and high values from Stat Tracking."
|
|
|
|
colorpicker Col1Picker color:[Threshes[1].col1.x,Threshes[1].col1.y,Threshes[1].col1.z] align:#left Offset:[-7,-2] width:CPwidth height:16
|
|
spinner Col1Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*7)),ThresholdLimit,Threshes[1].val1] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21] tooltip:"Most expensive junction bracket. Threshold value in MB (or archtypes / 1000)."
|
|
button Col1Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col1Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col2Picker color:[Threshes[1].col2.x,Threshes[1].col2.y,Threshes[1].col2.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col2Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*6)),ThresholdLimit-ThresholdGap,Threshes[1].val2] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21]
|
|
button Col2Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col2Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col3Picker color:[Threshes[1].col3.x,Threshes[1].col3.y,Threshes[1].col3.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col3Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*5)),ThresholdLimit-(ThresholdGap*2),Threshes[1].val3] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21]
|
|
button Col3Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col3Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col4Picker color:[Threshes[1].col4.x,Threshes[1].col4.y,Threshes[1].col4.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col4Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*4)),ThresholdLimit-(ThresholdGap*3),Threshes[1].val4] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21]
|
|
button Col4Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col4Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col5Picker color:[Threshes[1].col5.x,Threshes[1].col5.y,Threshes[1].col5.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col5Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*3)),ThresholdLimit-(ThresholdGap*4),Threshes[1].val5] enabled:false type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-11] tooltip:"Middle junction bracket."
|
|
button Col5Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col5Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col6Picker color:[Threshes[1].col6.x,Threshes[1].col6.y,Threshes[1].col6.z] align:#left Offset:[-7,-10] width:CPwidth height:16
|
|
|
|
colorpicker Col7Picker color:[Threshes[1].col7.x,Threshes[1].col7.y,Threshes[1].col7.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col7Thresh "" range:[0.0-(ThresholdLimit-(ThresholdGap*2)),ThresholdLimit-(ThresholdGap*5),Threshes[1].val7] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21]
|
|
button Col7Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col7Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col8Picker color:[Threshes[1].col8.x,Threshes[1].col8.y,Threshes[1].col8.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col8Thresh "" range:[0.0-(ThresholdLimit-ThresholdGap),ThresholdLimit-(ThresholdGap*6),Threshes[1].val8] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21]
|
|
button Col8Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col8Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
colorpicker Col9Picker color:[Threshes[1].col9.x,Threshes[1].col9.y,Threshes[1].col9.z] align:#left Offset:[-7,0] width:CPwidth height:16
|
|
spinner Col9Thresh "" range:[0.0-ThresholdLimit,ThresholdLimit-(ThresholdGap*7),Threshes[1].val9] type:#float fieldwidth:46 height:16 align:#left offset:[CPwidth-6,-21] tooltip:"Least expensive junction bracket. Threshold value in MB (or archtypes / 1000)."
|
|
button Col9Over "" width:14 height:16 align:#left offset:[CPwidth+54,-21] enabled:false tooltip:"Copy threshold value into 'over' in\n'Stat Tracking' group above."
|
|
editText Col9Count "" text:"" fieldwidth:36 height:16 align:#left offset:[CPwidth+67,-22] readonly:true
|
|
|
|
button ResetThresholdColours "Reset" align:#left width:(CPwidth-4) height:20 offset:[-3,0] enabled:false tooltip:"Reset the threshold colours to initial defaults."
|
|
button ResetThresholdValues "Reset" align:#left width:72 height:20 offset:[CPwidth-4,-25] enabled:false tooltip:"Reset the threshold values to intial defaults."
|
|
|
|
button UseWorst "Use High" align:#right width:(ROwidth - (CPwidth+132)) height:22 offset:[4,-205] enabled:false tooltip:"Use worst junction value from 'Tracked Stats' as high threshold.\nScales other threshold values if 'Scale Range' is set."
|
|
button ZeroMean "Avg." width:(ROwidth - (CPwidth+132)) height:22 align:#right offset:[4,11] enabled:false tooltip:"Set middle threshold value to average junction size (mean).\nScales other threshold values if 'Scale Range' is set."
|
|
button ZeroZero "Zero" Width:(ROwidth - (CPwidth+132)) height:22 align:#right offset:[4,-2] enabled:false tooltip:"Set middle threshold to 0.0\nScales other threshold values if 'Scale Range' is set."
|
|
|
|
checkbox LockZero "Lock" align:#left offset:[(CPwidth+114),0] checked:(not Col5Thresh.enabled) tooltip:"Lock the middle value (mostly).\nCan still change with Avg., Zero, = Count, = Size and Reset."
|
|
|
|
button EqualizeCount "= Count" width:(ROwidth - (CPwidth+132)) height:22 align:#right offset:[4,0] enabled:false tooltip:"Sets each threshold group to container roughly the same number of junctions."
|
|
button EqualizeSize "= Size" width:(ROwidth - (CPwidth+132)) height:22 align:#right offset:[4,-2] enabled:false tooltip:"Equally spaces out threshold values between high and low. Sets minimum and maximum values if 'Scale Ranges' is set."
|
|
button UseBest "Use Low" align:#right width:(ROwidth - (CPwidth+132)) height:22 offset:[4,15] enabled:false tooltip:"Use best junction value from 'Tracked Stats' as low threshold.\nScales other threshold values if 'Scale Ranges' is set."
|
|
|
|
dropdownList ResetOption "" items:#("Default Thresholds") selected:1 width:(CPwidth+110) height:20 align:#left offset:[-3,0]
|
|
button StoreThresholds "<-- STORE" width:(ROwidth - (CPwidth+132)) height:22 align:#right offset:[4,-28] enabled:false
|
|
)
|
|
|
|
---- VISUALISER FUNCTIONS ----
|
|
---- GENERAL FUNCTIONS ----
|
|
fn CompareJuncs junc1 junc2 =
|
|
( -- Compare junction Tracked Stat values - used in qsort
|
|
diff = junc1.tracked_stat - junc2.tracked_stat
|
|
case of
|
|
(
|
|
(diff < 0.0): 1
|
|
(diff > 0.0): -1
|
|
default: 0
|
|
)
|
|
)
|
|
|
|
---- UI HANDLING FUNCTIONS ----
|
|
fn KillWidgets =
|
|
( -- Disable widgets - only used briefly when Load Current hit, and re-activated if CSV loaded properly
|
|
LoadPreviousCSV.enabled = false
|
|
ChangePreviousCSV.enabled = false
|
|
|
|
WorstJunctionCount.range = [1, 1, 1]
|
|
WorstJunctionCount.enabled = false
|
|
WorstThreshold.range.x = 0.0 ; WorstThreshold.range.y = 0.0
|
|
BestJunction.text = " N/A"
|
|
WorstJunction.text = " N/A"
|
|
|
|
SelectWorst.enabled = false
|
|
AutoSelect.enabled = false
|
|
DropJunctions.enabled = false
|
|
BestJunction.enabled = false
|
|
WorstJunction.enabled = false
|
|
DropAmount.enabled = false
|
|
UseWorst.enabled = false
|
|
UseBest.enabled = false
|
|
ZeroZero.enabled = false
|
|
ZeroMean.enabled = false
|
|
EqualizeCount.enabled = false
|
|
EqualizeSize.enabled = false
|
|
ScaleRanges.enabled = false
|
|
Col1Over.enabled = false
|
|
Col2Over.enabled = false
|
|
Col3Over.enabled = false
|
|
Col4Over.enabled = false
|
|
Col5Over.enabled = false
|
|
Col7Over.enabled = false
|
|
Col8Over.enabled = false
|
|
Col9Over.enabled = false
|
|
)
|
|
fn ActivateWidgets =
|
|
( -- Active disabled widgets on successful Current CSV load
|
|
LoadPreviousCSV.enabled = true
|
|
ChangePreviousCSV.enabled =true
|
|
PrevFileName.text = filenameFromPath RsJunctionViewer.prevCSVName
|
|
PrevFileName.enabled = true
|
|
SelectWorst.enabled = true
|
|
AutoSelect.enabled = true
|
|
DropJunctions.enabled = true
|
|
BestJunction.enabled = true
|
|
WorstJunction.enabled = true
|
|
DropAmount.enabled = true
|
|
UseWorst.enabled = true
|
|
UseBest.enabled = true
|
|
ZeroZero.enabled =true
|
|
ZeroMean.enabled = true
|
|
EqualizeCount.enabled = true
|
|
EqualizeSize.enabled = true
|
|
ScaleRanges.enabled = true
|
|
Col1Over.enabled = true
|
|
Col2Over.enabled = true
|
|
Col3Over.enabled = true
|
|
Col4Over.enabled = true
|
|
Col5Over.enabled = true
|
|
Col7Over.enabled = true
|
|
Col8Over.enabled = true
|
|
Col9Over.enabled = true
|
|
)
|
|
|
|
|
|
---- FILE HANDLING FUNCTIONS ----
|
|
|
|
fn ReadHeader CSVstream =
|
|
( -- Parse CSV header to determine which columns are which... (extra data added part way through V, initial NG has no header...)
|
|
local header = readLine CSVstream
|
|
local headerNames = filterstring header ","
|
|
|
|
-- set default indices ludicrously low so they can all be tested in one if
|
|
JuncField.name = JuncField.x = JuncField.y = JuncField.z = JuncField.Main = JuncField.VRAM = JuncField.VRAMScene = JuncField.MainScene = JuncField.VRAMAvail = JuncField.MainAvail = JuncField.ArchNum = -10000
|
|
for index = 1 to headerNames.count do
|
|
(
|
|
case headerNames[index] of
|
|
(
|
|
"name": ( JuncField.name = index )
|
|
"x": ( JuncField.x = index )
|
|
"y": ( JuncField.y = index )
|
|
"z": ( JuncField.z = index )
|
|
"main":(JuncField.VRAM = index)
|
|
"vram":(JuncField.Main = index)
|
|
"physical":(JuncField.Main = index)
|
|
"virtual":(JuncField.VRAM = index)
|
|
"main_avail": ( JuncField.VRAMAvail = index ) -- yes... main and VRAM are swapped in the CSV (at least for 360)...
|
|
"vram_avail": ( JuncField.MainAvail = index )
|
|
"main_scene": (JuncField.VRAMScene = index )
|
|
"vram_scene": ( JuncField.MainScene = index )
|
|
"arch_num": ( JuncField.Archnum = index )
|
|
)
|
|
)
|
|
)
|
|
|
|
fn LoadCurrCSV =
|
|
( -- Load CURRENT data - Parse header, set up junction data... visualisation handled elsewhere in ProcessActiveCSV()
|
|
local csv_file = openFile RsJunctionViewer.currCSVName
|
|
-- Parse the file name to extract equivalent junction test result .zip info (hopefully... since the convension has changed from v315)
|
|
|
|
RsJunctionViewer.NewVersion.target = RsJunctionViewer.OldVersion.target = RsJunctionViewer.NewVersion.ToD = RsJunctionViewer.OldVersion.ToD = "NONE"
|
|
RsJunctionViewer.NewVersion.vNum = RsJunctionViewer.OldVersion.vNum = "NONE"
|
|
|
|
VersionCurrent.text = VersionPrevious.text = NotLoadedText
|
|
VersionCurrent.enabled = VersionPrevious.enabled = CurrSurround.enabled = PrevSurround.enabled = DiffSurround.enabled = false
|
|
|
|
local parsedCSVName = RsJunctionViewer.ParseFileName RsJunctionViewer.currCSVName
|
|
RsJunctionViewer.NewVersion = parsedCSVName
|
|
|
|
local NewVersionText = RsJunctionViewer.NewVersion.target + " " + RsJunctionViewer.NewVersion.vNum
|
|
|
|
if csv_file != undefined then
|
|
(
|
|
if active_juncs.count > 0 then
|
|
(
|
|
-- Delete old markers
|
|
local oldMarkers = #()
|
|
for junc in active_juncs do
|
|
(
|
|
if ( not isDeleted junc.marker) then append oldMarkers junc.marker
|
|
)
|
|
delete oldMarkers
|
|
)
|
|
active_juncs = #()
|
|
|
|
ReadHeader csv_file
|
|
|
|
-- Override Previous CSV data when new Current CSV is loaded --
|
|
TrackedVersion.state = 1
|
|
TrackedVersion.enabled = false
|
|
UseCurrent.enabled = UsePrevious.enabled = UseDiff.enabled = false
|
|
|
|
PrevFileName.text = " NONE SELECTED"
|
|
PrevFileName.enabled = false
|
|
PrevFileCount.text = NotLoadedText
|
|
PrevFileCount.enabled = false
|
|
CompareCount.text = " N/A"
|
|
CompareCount.enabled = false
|
|
|
|
local indexcheckstat = JuncField.Main + JuncField.VRAM
|
|
local indexchecksum = JuncField.VRAMScene + JuncField.MainScene + JuncField.VRAMAvail + JuncField.MainAvail
|
|
if indexcheckstat > indexchecksum then memorycheck = indexcheckstat else memorycheck = indexchecksum
|
|
|
|
if JuncField.Name + JuncField.X + JuncField.Y + JuncField.Z + memorycheck < 0 then -- everything else is ignorable
|
|
(
|
|
CurrFileName.text = " !!! PROBLEM WITH CSV !!!"
|
|
CurrFileName.enabled = false
|
|
CurrFileCount.text = NotLoadedText
|
|
CurrFileCount.enabled = false
|
|
|
|
local errorText = "Bad CURRENT CSV : Missing fields " -- report everything including the ignorable missing fields
|
|
if JuncField.Name < 0 then errorText += " - Name"
|
|
if JuncField.X < 0 then errorText += " - X_coord"
|
|
if JuncField.Y < 0 then errorText += " - Y_coord"
|
|
if JuncField.Z < 0 then errorText += " - Z_coord"
|
|
if JuncField.Main < 0 then errorText += " - Main"
|
|
if JuncField.VRAM < 0 then errorText += " - VRAM"
|
|
if JuncField.VRAMScene < 0 then errorText += " - VRAM_Scene"
|
|
if JuncField.MainScene < 0 then errorText += " - Main_Scene"
|
|
if JuncField.VRAMAvail < 0 then errorText += " - VRAM_Avail"
|
|
if JuncField.MainAvail < 0 then errorText += " - Main_Avail"
|
|
if JuncField.ArchNum < 0 then errorText += " - Archetype_Num"
|
|
|
|
errorText += "\nEither you've attempted to load something that isn't a junction test CSV, or the format has changed...\n"
|
|
messageBox errorText title:"Problem with CSV file"
|
|
|
|
KillWidgets() -- The penalty for trying to load an invalid CSV is you don't get to play no more
|
|
)
|
|
else
|
|
(
|
|
VersionCurrent.text = NewVersionText
|
|
VersionCurrent.enabled = true ; CurrSurround.enabled = true
|
|
|
|
local vram_actual = 0
|
|
local main_actual = 0
|
|
|
|
while not eof csv_file do
|
|
(
|
|
local nextCSVline = readline csv_file
|
|
local CSVdata = filterstring nextCSVline ","
|
|
|
|
--junc_main = CSVdata[JuncField.Main] as float -- Keeping these lines as a reminder about the extra unused data in the CSVs --
|
|
--junc_vram = CSVdata[JuncField.VRAM] as float
|
|
--junc_archmem = CSVdata[JuncField.ArchMem] as float
|
|
--junc_mainused = CSVdata[JuncField.MainUsed] as float
|
|
--junc_vramused = CSVdata[JuncField.VRAMUsed] as float
|
|
|
|
local junc_name = CSVdata[JuncField.Name]
|
|
local junc_x = CSVdata[JuncField.X] as float
|
|
local junc_y = CSVdata[JuncField.Y] as float
|
|
local junc_z = CSVdata[JuncField.Z] as float
|
|
|
|
if JuncField.ArchNum > 0 then junc_archnum = CSVdata[JuncField.ArchNum] as float else junc_archnum = 0 -- catch missing archetype data
|
|
local arch_num = junc_archnum / 1000
|
|
|
|
if (indexchecksum > 0) then
|
|
(
|
|
local junc_mainavail = CSVdata[JuncField.MainAvail] as float
|
|
local junc_vramavail = CSVdata[JuncField.VRAMAvail] as float
|
|
local junc_mainscene = CSVdata[JuncField.MainScene] as float
|
|
local junc_vramscene = CSVdata[JuncField.VRAMScene] as float
|
|
|
|
if ((junc_mainavail + junc_vramavail) > 0) then
|
|
(
|
|
vram_actual = (junc_vramscene - junc_vramavail) / 1024
|
|
main_actual = (junc_mainscene - junc_mainavail) / 1024
|
|
)
|
|
else
|
|
(
|
|
-- available memory = 0 --> next gen USED at least
|
|
-- default to VRAM and Main readin
|
|
vram_actual = CSVdata[JuncField.VRAM] as float / 1024
|
|
main_actual = CSVdata[JuncField.Main] as float / 1024
|
|
)
|
|
)
|
|
else
|
|
(
|
|
-- missing indices --> old data
|
|
-- default to VRAM and Main readin
|
|
vram_actual = CSVdata[JuncField.VRAM] as float / 1024
|
|
main_actual = CSVdata[JuncField.Main] as float / 1024
|
|
)
|
|
local next_junction = junction name:junc_name
|
|
local next_junction = junction name:junc_name xcoord:junc_x ycoord:junc_y zcoord:junc_z main:main_actual vram:vram_actual main_compare:0 vram_compare:0 archetypes:arch_num archetypes_compare:0 bad_junc:false tracked_stat:StatVal
|
|
|
|
appendIfUnique active_juncs next_junction
|
|
|
|
CurrSurround.value = mod active_juncs.count 100
|
|
VersionCurrent.enabled = true
|
|
)
|
|
|
|
close csv_file
|
|
|
|
CurrSurround.value = 100
|
|
VersionCurrent.enabled = true
|
|
UseCurrent.enabled = true
|
|
|
|
ActivateWidgets()
|
|
|
|
CurrFileCount.text = active_juncs.count as string
|
|
--CurrFileCount.enabled = true -- Might keep this one disabled unless we go mental with junction counts - box will display up to 9999 easily, probably up to 19999
|
|
)
|
|
)
|
|
else
|
|
(
|
|
CurrFileName.text = " !!! Missing CSV !!!"
|
|
KillWidgets()
|
|
) --else Undefined CSV File
|
|
)
|
|
fn LoadPrevCSV =
|
|
( -- Load PREVIOUS data - separate function, since it modifies the existing active_juncs array... common data only tracked properly, no check to see whether the locations match yet...
|
|
local csv_file = openFile RsJunctionViewer.prevCSVName
|
|
if csv_file != undefined then
|
|
(
|
|
ReadHeader csv_file
|
|
|
|
local indexcheckstat = JuncField.Main + JuncField.VRAM
|
|
local indexchecksum = JuncField.VRAMScene + JuncField.MainScene + JuncField.VRAMAvail + JuncField.MainAvail
|
|
if indexcheckstat > indexchecksum then memorycheck = indexcheckstat else memorycheck = indexchecksum
|
|
|
|
if JuncField.Name + JuncField.X + JuncField.Y + JuncField.Z + memorycheck < 0 then -- everything else is ignorable
|
|
(
|
|
--SwapCSVs.enabled = false
|
|
|
|
TrackedVersion.state = 1
|
|
TrackedVersion.enabled = false
|
|
UseCurrent.enabled = UsePrevious.enabled = UseDiff.enabled = false
|
|
|
|
PrevFileName.enabled = false
|
|
|
|
PrevFileName.text = " !!! PROBLEM WITH CSV !!!"
|
|
PrevFileCount.text = NotLoadedText
|
|
PrevFileCount.enabled = false
|
|
CompareCount.text = " N/A"
|
|
CompareCount.enabled = false
|
|
|
|
local errorText = "Bad PREVIOUS CSV : Missing fields "
|
|
if JuncField.Name < 0 then errorText += " - Name"
|
|
if JuncField.X < 0 then errorText += " - X_coord"
|
|
if JuncField.Y < 0 then errorText += " - Y_coord"
|
|
if JuncField.Z < 0 then errorText += " - Z_coord"
|
|
if JuncField.Main < 0 then errorText += " - Main"
|
|
if JuncField.VRAM < 0 then errorText += " - VRAM"
|
|
if JuncField.VRAMScene < 0 then errorText += " - VRAM_Scene"
|
|
if JuncField.MainScene < 0 then errorText += " - Main_Scene"
|
|
if JuncField.VRAMAvail < 0 then errorText += " - VRAM_Avail"
|
|
if JuncField.MainAvail < 0 then errorText += " - Main_Avail"
|
|
if JuncField.ArchNum < 0 then errorText += " - Archetype_Num"
|
|
|
|
errorText += "\nEither you've attempted to load something that isn't a junction test CSV, or the format has changed...\n"
|
|
messageBox errorText title:"Problem with CSV file"
|
|
)
|
|
else
|
|
(
|
|
-- Parse the file name to extract equivalent junction test result .zip info (hopefully... convension has changed from v315)
|
|
-- just need the version number here, since the other info should be set up from the other loadfile button...
|
|
RsJunctionViewer.OldVersion.vNum = "NONE"
|
|
RsJunctionViewer.OldVersion.target = RsJunctionViewer.OldVersion.ToD = ""
|
|
VersionPrevious.text = NotLoadedText
|
|
VersionPrevious.enabled = false
|
|
|
|
--parsedCSVName = RsJunctionViewer.ParseFileName RsJunctionViewer.prevCSVName
|
|
--RsJunctionViewer.compareOldTarget = parsedCSVName.target
|
|
--RsJunctionViewer.compareOldTimeOfDay = parsedCSVName.ToD
|
|
--RsJunctionViewer.compareOldVersion = parsedCSVName.vNum
|
|
RsJunctionViewer.OldVersion = RsJunctionViewer.ParseFileName RsJunctionViewer.prevCSVName
|
|
|
|
local OldVersionText = RsJunctionViewer.OldVersion.target + " " + RsJunctionViewer.OldVersion.vNum
|
|
local OldNum = (trimleft RsJunctionViewer.OldVersion.vNum "v") as integer
|
|
local NewNum = (trimleft RsJunctionViewer.NewVersion.vNum "v") as integer
|
|
if (RsJunctionViewer.NewVersion.target != RsJunctionViewer.OldVersion.target) then
|
|
(
|
|
case of
|
|
(
|
|
(OldNum < NewNum):(PrevSurround.color = [220, 180, 30]) -- not entirel sure, if named correctly probably wrong
|
|
(OldNum > NewNum):(PrevSurround.color = [255,130,20]) -- probably wrong
|
|
(OldNum == NewNum):(PrevSurround.color = [20,130,255]) -- possibly valid, but unusual
|
|
)
|
|
)
|
|
else
|
|
(
|
|
case of
|
|
(
|
|
(OldNum < NewNum):(PrevSurround.color = [60,220,60]) -- correct
|
|
(OldNum > NewNum):(PrevSurround.color = [255,180,20]) -- probably wrongish
|
|
(OldNum == NewNum):(PrevSurround.color = [60,60,60]) -- identical
|
|
)
|
|
)
|
|
|
|
VersionPrevious.text = OldVersionText
|
|
|
|
local previousJuncCount = 0
|
|
local foundJuncs = 0
|
|
|
|
PrevSurround.enabled = true
|
|
PrevSurround.value = 0
|
|
|
|
TrackedVersion.state = 3
|
|
TrackedVersion.enabled = true
|
|
VersionPrevious.enabled = true
|
|
PrevFileName.enabled = true
|
|
UseCurrent.enabled = UsePrevious.enabled = UseDiff.enabled = true
|
|
|
|
while not eof csv_file do
|
|
(
|
|
--SwapCSVs.enabled = true -- Removed button
|
|
|
|
local nextCSVline = readline csv_file
|
|
local CSVdata = filterstring nextCSVline ","
|
|
|
|
local vram_actual = 0
|
|
local main_actual = 0
|
|
|
|
local junc_name = CSVdata[JuncField.Name]
|
|
local junc_x = CSVdata[JuncField.X] as float
|
|
local junc_y = CSVdata[JuncField.Y] as float
|
|
local junc_z = CSVdata[JuncField.Z] as float
|
|
|
|
if JuncField.ArchNum > 0 then junc_archnum = CSVdata[JuncField.ArchNum] as float else junc_archnum = 0 -- catch missing archetype data
|
|
local arch_num = junc_archnum / 1000
|
|
|
|
if indexchecksum > 0 then
|
|
(
|
|
local junc_mainavail = CSVdata[JuncField.MainAvail] as float
|
|
local junc_vramavail = CSVdata[JuncField.VRAMAvail] as float
|
|
local junc_mainscene = CSVdata[JuncField.MainScene] as float
|
|
local junc_vramscene = CSVdata[JuncField.VRAMScene] as float
|
|
|
|
if ((junc_mainavail + junc_vramavail) > 0) then
|
|
(
|
|
vram_actual = (junc_vramscene - junc_vramavail) / 1024
|
|
main_actual = (junc_mainscene - junc_mainavail) / 1024
|
|
)
|
|
else
|
|
(
|
|
-- available memory = 0 --> next gen USED at least
|
|
-- default to VRAM and Main readin
|
|
vram_actual = CSVdata[JuncField.VRAM] as float / 1024
|
|
main_actual = CSVdata[JuncField.Main] as float / 1024
|
|
)
|
|
)
|
|
else
|
|
(
|
|
vram_actual = CSVdata[JuncField.VRAM] as float / 1024
|
|
main_actual = CSVdata[JuncField.Main] as float / 1024
|
|
)
|
|
|
|
previousJuncCount += 1
|
|
local found = false
|
|
local index = 0
|
|
|
|
while index < active_juncs.count do
|
|
(
|
|
index += 1
|
|
if junc_name == active_juncs[index].name then
|
|
(
|
|
if found then format "Duplicate junction names in CURRENT CSV : %\n" active_juncs[index].name
|
|
foundJuncs += 1 -- could add found test so that overlap never excedes previous count, but useful to have it displayed on the widget as well as the Listener error message above
|
|
found = true
|
|
|
|
active_juncs[index].main_compare = active_juncs[index].main - main_actual
|
|
active_juncs[index].vram_compare = active_juncs[index].vram - vram_actual
|
|
active_juncs[index].archetypes_compare = active_juncs[index].archetypes - arch_num
|
|
|
|
PrevSurround.value = (((foundJuncs as float)/ active_juncs.count) * 100) as integer
|
|
VersionPrevious.enabled = true
|
|
)
|
|
)
|
|
if found == false then format "Couldn't find % in CURRENT version\n" junc_name -- A bit spammy for some junction files, but probably useful enough debug info to keep this
|
|
)
|
|
|
|
close csv_file
|
|
|
|
PrevSurround.value = 100
|
|
VersionPrevious.enabled = true
|
|
PrevFileCount.text = previousJuncCount as string
|
|
--PrevFileCount.enabled = true -- Might keep this one disabled depending on whether we go mental with junction counts
|
|
DiffSurround.enabled = true
|
|
case of
|
|
(
|
|
(foundJuncs == 0):(DiffSurround.color = [255,30,20])
|
|
(active_juncs.count > foundJuncs):(DiffSurround.color = [60,220,60])
|
|
(active_juncs.count < foundJuncs):(DiffSurround.color = [255,160,20])
|
|
default:(DiffSurround.color = [60,220,60])
|
|
)
|
|
CompareCount.text = foundJuncs as string
|
|
CompareCount.enabled = false ; CompareCount.enabled = true
|
|
--CompareCount.enabled = true -- smaller number than the one above... still may have to be enabled
|
|
)
|
|
)
|
|
else
|
|
(
|
|
PrevFileName.text = " !!! Missing CSV !!!"
|
|
) --else Undefined CSV File
|
|
)
|
|
fn ProcessActiveCSV =
|
|
( -- Main processing function... Create missing junction marker boxes, track appropriate stats, set marker values according to track settings (animation doings disabled...)
|
|
if active_juncs.count > 0 then
|
|
(
|
|
ChangePreviousCSV.enabled = true
|
|
WorstJunc = -1000.0
|
|
BestJunc = 1000.0
|
|
WorstCount = 0
|
|
|
|
DropThresh = case DropJunctions.state of
|
|
(
|
|
1: (0.0)
|
|
2: (WorstThreshold.value)
|
|
3: (WorstJunc + 1.0)
|
|
)
|
|
)
|
|
else
|
|
(
|
|
KillWidgets() -- Probably off already, but no harm in doing it again
|
|
)
|
|
|
|
TrackedMean = 0.0
|
|
local ThreshCounts = #(0,0,0,0,0,0,0,0)
|
|
|
|
--CurrSurround.value = 0
|
|
--VersionCurrent.enabled = true
|
|
|
|
--for junc in active_juncs do
|
|
for index = 1 to active_juncs.count do
|
|
(
|
|
--CurrSurround.value = ((index as float / active_juncs.count) * 100) as integer -- Marginally useful, processing fairly quick... this was slowing it down perceptably
|
|
--VersionCurrent.enabled = true
|
|
|
|
local junc = active_juncs[index]
|
|
if (junc.marker == undefined) or (junc.marker.isDeleted) then
|
|
(
|
|
local next_box =getNodeByName junc.name exact:true
|
|
|
|
if next_box == undefined then
|
|
(
|
|
--format "Creating junction marker : %\n" junc.name
|
|
next_box = box length:4 width:4 height:4 -- Box is missing, so make a new one
|
|
next_box.name = junc.name
|
|
next_box.pos = [junc.xcoord, junc.ycoord, junc.zcoord]
|
|
) -- end if create missing box
|
|
junc.marker = next_box
|
|
)
|
|
else
|
|
(
|
|
local next_box = junc.marker
|
|
)
|
|
|
|
if classOf next_box.baseobject == box then
|
|
(
|
|
if next_box.modifiers.count == 2 then
|
|
(
|
|
delete next_box -- deleting and re-creating much faster than removing the modifiers
|
|
next_box = box length:4 width:4 height:4
|
|
next_box.name = junc.name
|
|
next_box.pos = [junc.xcoord, junc.ycoord, junc.zcoord]
|
|
)
|
|
|
|
if next_box.material != undefined then
|
|
(
|
|
next_box.material = undefined
|
|
)
|
|
|
|
local height_actual = 0
|
|
local width_actual = 0
|
|
case TrackedVersion.state of
|
|
(
|
|
1:
|
|
( -- CURRENT
|
|
case HeightOptions.state of
|
|
(
|
|
1: ( height_actual = junc.main )
|
|
2: ( height_actual = junc.vram )
|
|
3: ( height_actual = junc.main + junc.vram )
|
|
4: ( height_actual = junc.archetypes )
|
|
5: ( height_actual = 0.0 )
|
|
) -- end case setup Main on height/width
|
|
case WidthOptions.state of
|
|
(
|
|
1: ( width_actual = junc.main )
|
|
2: ( width_actual = junc.vram )
|
|
3: ( width_actual = junc.main + junc.vram )
|
|
4: ( width_actual = junc.archetypes )
|
|
5: ( width_actual = 0.0 )
|
|
) -- end case setup VRAM on height/width
|
|
)
|
|
|
|
2:
|
|
( -- PREVIOUS
|
|
case HeightOptions.state of
|
|
(
|
|
1: ( height_actual = junc.main - junc.main_compare )
|
|
2: ( height_actual = junc.vram - junc.vram_compare )
|
|
3: ( height_actual = (junc.main - junc.main_compare) + (junc.vram - junc.vram_compare) )
|
|
4: ( height_actual = junc.archetypes - junc.archetypes_compare )
|
|
5: ( height_actual = 0.0 )
|
|
) -- end case setup Main on height/width
|
|
case WidthOptions.state of
|
|
(
|
|
1: ( width_actual = junc.main - junc.main_compare )
|
|
2: ( width_actual = junc.vram - junc.vram_compare )
|
|
3: ( width_actual = (junc.main - junc.main_compare)+ (junc.vram - junc.vram_compare))
|
|
4: ( width_actual = junc.archetypes - junc.archetypes_compare )
|
|
5: ( width_actual = 0.0 )
|
|
) -- end case setup VRAM on height/width
|
|
)
|
|
default:
|
|
( -- DIFF
|
|
case HeightOptions.state of
|
|
(
|
|
1: ( height_actual = junc.main_compare )
|
|
2: ( height_actual = junc.vram_compare )
|
|
3: ( height_actual = junc.main_compare + junc.vram_compare )
|
|
4: ( height_actual = junc.archetypes_compare )
|
|
5: ( height_actual = 0.0 )
|
|
) -- end case setup Main on height/width
|
|
case WidthOptions.state of
|
|
(
|
|
1: ( width_actual = junc.main_compare )
|
|
2: ( width_actual = junc.vram_compare )
|
|
3: ( width_actual = junc.main_compare + junc.vram_compare )
|
|
4: ( width_actual = junc.archetypes_compare )
|
|
5: ( width_actual = 0.0 )
|
|
) -- end case setup VRAM on height/width
|
|
)
|
|
)
|
|
|
|
|
|
height_actual += HeightOffset.value
|
|
width_actual += WidthOffset.value -- !!! Replaced
|
|
|
|
if ZeroZ.state then ( next_box.pos.z = 0.0 ) else ( next_box.pos.z = junc.zcoord )
|
|
|
|
local ColVal = 0
|
|
case TrackedVersion.state of
|
|
(
|
|
1:
|
|
( -- CURRENT
|
|
ColVal = case TrackedStat.state of
|
|
(
|
|
1: junc.main
|
|
2: junc.vram
|
|
3: junc.main + junc.vram
|
|
4: junc.archetypes
|
|
5: 0.0
|
|
6: width_actual
|
|
7: height_actual
|
|
) -- end case choose value for colour from curent values
|
|
)
|
|
|
|
2:
|
|
( -- PREVIOUS
|
|
ColVal = case TrackedStat.state of
|
|
(
|
|
1: junc.main - junc.main_compare
|
|
2: junc.vram - junc.vram_compare
|
|
3: (junc.main - junc.main_compare) + (junc.vram - junc.vram_compare)
|
|
4: junc.archetypes - junc.archetypes_compare
|
|
5: 0.0
|
|
6: width_actual
|
|
7: height_actual
|
|
) -- end case choose value for colour from comparison values
|
|
)
|
|
|
|
default:
|
|
( -- DIFF
|
|
ColVal = case TrackedStat.state of
|
|
(
|
|
1: junc.main_compare
|
|
2: junc.vram_compare
|
|
3: junc.main_compare + junc.vram_compare
|
|
4: junc.archetypes_compare
|
|
5: 0.0
|
|
6: width_actual
|
|
7: height_actual
|
|
) -- end case choose value for colour from comparison values
|
|
)
|
|
)
|
|
|
|
if PositiveWidths.state then if width_actual < 0 then width_actual = 0
|
|
junc.tracked_stat = ColVal
|
|
|
|
TrackedMean += ColVal
|
|
|
|
if ColVal > WorstJunc then WorstJunc = ColVal
|
|
if ColVal < BestJunc then BestJunc = ColVal
|
|
if ColVal > WorstThreshold.value then
|
|
(
|
|
WorstCount += 1
|
|
junc.bad_junc = true
|
|
)
|
|
else
|
|
(
|
|
junc.bad_junc = false
|
|
)
|
|
|
|
if ColVal <= DropThresh then
|
|
(
|
|
next_box.pos.z -= DropAmount.value -- move in-budget boxes down
|
|
if HideBest.state then
|
|
(
|
|
next_box.ishidden = true
|
|
)
|
|
else
|
|
(
|
|
next_box.ishidden = false
|
|
)
|
|
)
|
|
else
|
|
(
|
|
next_box.ishidden = false
|
|
)
|
|
next_box.height = height_actual
|
|
next_box.width = width_actual
|
|
next_box.length = width_actual
|
|
next_box.scale = [WidthMult.value, WidthMult.value, HeightMult.value]
|
|
|
|
local VCoord = 0.0 -- not strictly needed
|
|
|
|
if not SmthGrad.state then
|
|
(
|
|
case of
|
|
(
|
|
(ColVal < Col9Thresh.value): (BoxColour = Col9Picker.color) -- dark blue ; UCoord = 0.4375
|
|
(ColVal < Col8Thresh.value): (BoxColour = Col8Picker.color ; ThreshCounts[8] += 1) -- blue ; UCoord = 0.4375
|
|
(ColVal < Col7Thresh.value): (BoxColour = Col7Picker.color ; ThreshCounts[7] += 1) -- cyan -- 6 swapped to 7 ; UCoord = 0.3125
|
|
(ColVal < Col5Thresh.value): (BoxColour = Col6Picker.color ; ThreshCounts[6] += 1) -- grey ; UCoord = 0.1875
|
|
(ColVal < Col4Thresh.value): (BoxColour = Col5Picker.color ; ThreshCounts[5] += 1) -- green ; UCoord = 0.0625
|
|
(ColVal < Col3Thresh.value): (BoxColour = Col4Picker.color ; ThreshCounts[4] += 1) -- yellow ; UCoord = -0.0625
|
|
(ColVal < Col2Thresh.value): (BoxColour = Col3Picker.color ; ThreshCounts[3] += 1) -- orange ; UCoord = -0.1875
|
|
(ColVal < Col1Thresh.value): (BoxColour = Col2Picker.color ; ThreshCounts[2] += 1) -- red ; UCoord = -0.3125
|
|
(ColVal >= Col1Thresh.value): (BoxColour = Col1Picker.color ; ThreshCounts[1] += 1) -- black ; UCoord = -0.4375
|
|
) -- end case wirecolour
|
|
) -- end if
|
|
else
|
|
(
|
|
case of
|
|
(
|
|
(ColVal < Col9Thresh.value): (
|
|
BoxColour = color Col9Picker.color.R Col9Picker.color.G Col9Picker.color.B
|
|
)
|
|
(ColVal < Col8Thresh.value): (
|
|
ColRatio = (ColVal - Col8Thresh.value) / (Col9Thresh.value - Col8Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col9Picker.color.R - Col8Picker.color.R)) + Col8Picker.color.R) ((ColRatio * (Col9Picker.color.G - Col8Picker.color.G)) + Col8Picker.color.G) ((ColRatio * (Col9Picker.color.B - Col8Picker.color.B)) + Col8Picker.color.B)
|
|
ThreshCounts[8] += 1
|
|
)
|
|
(ColVal < Col7Thresh.value): (
|
|
ColRatio = (ColVal - Col7Thresh.value) / (Col8Thresh.value - Col7Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col8Picker.color.R - Col7Picker.color.R)) + Col7Picker.color.R) ((ColRatio * (Col8Picker.color.G - Col7Picker.color.G)) + Col7Picker.color.G) ((ColRatio * (Col8Picker.color.B - Col7Picker.color.B)) + Col7Picker.color.B)
|
|
ThreshCounts[7] += 1
|
|
)
|
|
(ColVal < (Col5Thresh.value - LockGap)): (
|
|
ColRatio = (ColVal - (Col5Thresh.value - LockGap)) / (Col7Thresh.value - (Col5Thresh.value - LockGap))
|
|
BoxColour = color ((ColRatio * (Col7Picker.color.R - Col6Picker.color.R)) + Col6Picker.color.R) ((ColRatio * (Col7Picker.color.G - Col6Picker.color.G)) + Col6Picker.color.G) ((ColRatio * (Col7Picker.color.B - Col6Picker.color.B)) + Col6Picker.color.B)
|
|
ThreshCounts[6] += 1
|
|
)
|
|
(ColVal < Col5Thresh.value): (
|
|
ColRatio = (ColVal - Col5Thresh.value) / ((Col5Thresh.value - LockGap) - Col5Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col6Picker.color.R - Col5Picker.color.R)) + Col5Picker.color.R) ((ColRatio * (Col6Picker.color.G - Col5Picker.color.G)) + Col5Picker.color.G) ((ColRatio * (Col6Picker.color.B - Col5Picker.color.B)) + Col5Picker.color.B)
|
|
ThreshCounts[5] += 1
|
|
)
|
|
(ColVal < Col4Thresh.value): (
|
|
ColRatio = (ColVal - Col4Thresh.value) / (Col5Thresh.value - Col4Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col5Picker.color.R - Col4Picker.color.R)) + Col4Picker.color.R) ((ColRatio * (Col5Picker.color.G - Col4Picker.color.G)) + Col4Picker.color.G) ((ColRatio * (Col5Picker.color.B - Col4Picker.color.B)) + Col4Picker.color.B)
|
|
ThreshCounts[5] += 1
|
|
)
|
|
(ColVal < Col3Thresh.value): (
|
|
ColRatio = (ColVal - Col3Thresh.value) / (Col4Thresh.value - Col3Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col4Picker.color.R - Col3Picker.color.R)) + Col3Picker.color.R) ((ColRatio * (Col4Picker.color.G - Col3Picker.color.G)) + Col3Picker.color.G) ((ColRatio * (Col4Picker.color.B - Col3Picker.color.B)) + Col3Picker.color.B)
|
|
ThreshCounts[4] += 1
|
|
)
|
|
(ColVal < Col2Thresh.value): (
|
|
ColRatio = (ColVal - Col2Thresh.value) / (Col3Thresh.value - Col2Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col3Picker.color.R - Col2Picker.color.R)) + Col2Picker.color.R) ((ColRatio * (Col3Picker.color.G - Col2Picker.color.G)) + Col2Picker.color.G) ((ColRatio * (Col3Picker.color.B - Col2Picker.color.B)) + Col2Picker.color.B)
|
|
ThreshCounts[3] += 1
|
|
)
|
|
(ColVal < Col1Thresh.value): (
|
|
ColRatio = (ColVal - Col1Thresh.value) / (Col2Thresh.value - Col1Thresh.value)
|
|
BoxColour = color ((ColRatio * (Col2Picker.color.R - Col1Picker.color.R)) + Col1Picker.color.R) ((ColRatio * (Col2Picker.color.G - Col1Picker.color.G)) + Col1Picker.color.G) ((ColRatio * (Col2Picker.color.B - Col1Picker.color.B)) + Col1Picker.color.B)
|
|
ThreshCounts[2] += 1
|
|
)
|
|
(ColVal >=Col1Thresh.value): (
|
|
BoxColour = color Col1Picker.color.R Col1Picker.color.G Col1Picker.color.B
|
|
ThreshCounts[1] += 1
|
|
)
|
|
) -- end case pick colour using smooth gradient
|
|
) -- end else
|
|
|
|
next_box.wirecolor = BoxColour
|
|
) -- end if - Valid Box
|
|
else
|
|
(
|
|
format "Skipped % - not a Box primitive \n" junc_name
|
|
) -- end else - Invalid Box
|
|
)
|
|
|
|
qsort active_juncs CompareJuncs
|
|
|
|
if active_juncs.count > 0 then
|
|
(
|
|
WorstJunction.text = WorstJunc as string
|
|
BestJunction.text = BestJunc as string
|
|
|
|
if WorstCount == 0 then WorstCount = 1 --Happens when switching stat occasionally... needs to be > 0
|
|
|
|
WorstJunctionCount.range = [1, active_juncs.count, WorstCount]
|
|
WorstJunctionCount.enabled = true
|
|
WorstThreshold.range.x = BestJunc ; WorstThreshold.range.y = WorstJunc
|
|
|
|
ActivateWidgets()
|
|
|
|
TrackedMean = TrackedMean / active_juncs.count
|
|
) --end if - set up stat tracking widgets
|
|
|
|
if AutoSelect.state then
|
|
(
|
|
case AutoSelectType.state of
|
|
(
|
|
1:
|
|
(
|
|
clearselection()
|
|
local bad_juncs = #()
|
|
|
|
for index = 1 to WorstCount do
|
|
(
|
|
local badbox = active_juncs[index].marker--getnodebyname active_juncs[index].name exact:true
|
|
appendIfUnique bad_juncs badbox
|
|
)
|
|
select bad_juncs
|
|
)
|
|
2:
|
|
(
|
|
clearselection()
|
|
local badbox = active_juncs[WorstJunctionCount.value].marker--getnodebyname active_juncs[WorstJunctionCount.value].name exact:true
|
|
select badbox
|
|
if (RAGConnect.text == "CONNECTED") and (RemoteConnection.IsConnected()) then
|
|
( -- !!! Not sure this is a good idea... doesn't cause connection problems, so keeping it in...
|
|
local warpCoords = (selection[1].pos.x as string)+" "+(selection[1].pos.y as string)+" "+(selection[1].pos.z as string)
|
|
RemoteConnection.WriteStringWidget "Debug/Warp Player x y z h vx vy vz" warpCoords
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
Col1Count.text = ThreshCounts[1] as string
|
|
Col2Count.text = ThreshCounts[2] as string
|
|
Col3Count.text = ThreshCounts[3] as string
|
|
Col4Count.text = ThreshCounts[4] as string
|
|
Col5Count.text = ThreshCounts[5] as string
|
|
Col7Count.text = ThreshCounts[6] as string
|
|
Col8Count.text = ThreshCounts[7] as string
|
|
Col9Count.text = ThreshCounts[8] as string
|
|
)
|
|
|
|
---- THRESHOLD MANAGEMENT FUNCTIONS ----
|
|
fn UpdateThresholds Spinner =
|
|
( -- Here Be Horrible Logic... needs to trickle values down from 1 and up from 9 so spinners don't go out of bounds. Behaviour dependant on active spinner, previous state and whether ranges are scaled.
|
|
-- Check down from highest threshold...
|
|
if (Spinner != 2) then
|
|
(
|
|
if (Col2Thresh.value > (Col1Thresh.value - ThresholdGap)) then Col2Thresh.value = (Col1Thresh.value - ThresholdGap)
|
|
else if ((Col2Thresh.value < PrevThresh[2]) and (ScaleRanges.state == false)) then Col2Thresh.value = RsJunctionViewer.FMin (Col1Thresh.value - ThresholdGap) PrevThresh[2]
|
|
)
|
|
if (Spinner != 3) then
|
|
(
|
|
if (Col3Thresh.value > (Col2Thresh.value - ThresholdGap)) then Col3Thresh.value = (Col2Thresh.value - ThresholdGap)
|
|
else if ((Col3Thresh.value < PrevThresh[3]) and (ScaleRanges.state == false)) then Col3Thresh.value = RsJunctionViewer.FMin (Col2Thresh.value - ThresholdGap) PrevThresh[3]
|
|
)
|
|
if (Spinner != 4) then
|
|
(
|
|
if (Col4Thresh.value > (Col3Thresh.value - ThresholdGap)) then Col4Thresh.value = (Col3Thresh.value - ThresholdGap)
|
|
else if ((Col4Thresh.value < PrevThresh[4]) and (ScaleRanges.state == false)) then Col4Thresh.value = RsJunctionViewer.FMin (Col3Thresh.value - ThresholdGap) PrevThresh[4]
|
|
)
|
|
if (Spinner != 5) then
|
|
(
|
|
if (Col5Thresh.value > (Col4Thresh.value - ThresholdGap)) then (Col5Thresh.value = (Col4Thresh.value - ThresholdGap) )
|
|
else if ((Col5Thresh.value < PrevThresh[5]) and (ScaleRanges.state == false)) then Col5Thresh.value = RsJunctionViewer.FMin (Col4Thresh.value - ThresholdGap) PrevThresh[5]
|
|
)
|
|
if (Spinner != 7) then
|
|
(
|
|
if (Col7Thresh.value > (Col5Thresh.value - ThresholdGap)) then Col7Thresh.value = (Col5Thresh.value - ThresholdGap)
|
|
else if ((Col7Thresh.value < PrevThresh[7]) and (ScaleRanges.state == false)) then Col7Thresh.value = RsJunctionViewer.FMin (Col5Thresh.value - ThresholdGap) PrevThresh[7]
|
|
)
|
|
if (Spinner != 8) then
|
|
(
|
|
if (Col8Thresh.value > (Col7Thresh.value - ThresholdGap)) then Col8Thresh.value = (Col7Thresh.value - ThresholdGap)
|
|
else if ((Col8Thresh.value < PrevThresh[8]) and (ScaleRanges.state == false)) then Col8Thresh.value = RsJunctionViewer.FMin (Col7Thresh.value - ThresholdGap) PrevThresh[8]
|
|
)
|
|
if (Spinner != 9) then
|
|
(
|
|
if (Col9Thresh.value > (Col8Thresh.value - ThresholdGap)) then Col9Thresh.value = (Col8Thresh.value - ThresholdGap)
|
|
else if ((Col9Thresh.value < PrevThresh[9]) and (ScaleRanges.state == false)) then Col9Thresh.value = RsJunctionViewer.FMin (Col8Thresh.value - ThresholdGap) PrevThresh[9]
|
|
)
|
|
|
|
-- And up from lowest threshold
|
|
if (Spinner != 8) then
|
|
(
|
|
if Col8Thresh.value < (Col9Thresh.value + ThresholdGap) then Col8Thresh.value = (Col9Thresh.value + ThresholdGap)
|
|
else if ((Col8Thresh.value > PrevThresh[8]) and (ScaleRanges.state == false)) then Col8Thresh.value = RsJunctionViewer.FMax (Col9Thresh.value + ThresholdGap) PrevThresh[8]
|
|
)
|
|
if (Spinner != 7) then
|
|
(
|
|
if Col7Thresh.value < (Col8Thresh.value + ThresholdGap) then Col7Thresh.value = (Col8Thresh.value + ThresholdGap)
|
|
else if ((Col8Thresh.value > PrevThresh[7]) and (ScaleRanges.state == false)) then Col7Thresh.value = RsJunctionViewer.FMax (Col8Thresh.value + ThresholdGap) PrevThresh[7]
|
|
)
|
|
if (Spinner != 5) then
|
|
(
|
|
if Col5Thresh.value < (Col7Thresh.value + ThresholdGap) then (Col5Thresh.value = (Col7Thresh.value + ThresholdGap) )
|
|
else if ((Col5Thresh.value > PrevThresh[5]) and (ScaleRanges.state == false)) then Col5Thresh.value = RsJunctionViewer.FMax (Col7Thresh.value + ThresholdGap) PrevThresh[5]
|
|
)
|
|
if (Spinner != 4) then
|
|
(
|
|
if Col4Thresh.value < (Col5Thresh.value + ThresholdGap) then Col4Thresh.value = (Col5Thresh.value + ThresholdGap)
|
|
else if ((Col4Thresh.value > PrevThresh[4]) and (ScaleRanges.state == false)) then Col4Thresh.value = RsJunctionViewer.FMax (Col5Thresh.value + ThresholdGap) PrevThresh[4]
|
|
)
|
|
if (Spinner != 3) then
|
|
(
|
|
if Col3Thresh.value < (Col4Thresh.value + ThresholdGap) then Col3Thresh.value = (Col4Thresh.value + ThresholdGap)
|
|
else if ((Col3Thresh.value > PrevThresh[3]) and (ScaleRanges.state == false)) then Col3Thresh.value = RsJunctionViewer.FMax (Col4Thresh.value + ThresholdGap) PrevThresh[3]
|
|
)
|
|
if (Spinner != 2) then
|
|
(
|
|
if Col2Thresh.value < (Col3Thresh.value + ThresholdGap) then Col2Thresh.value = (Col3Thresh.value + ThresholdGap)
|
|
else if ((Col2Thresh.value > PrevThresh[2]) and (ScaleRanges.state == false)) then Col2Thresh.value = RsJunctionViewer.FMax (Col3Thresh.value + ThresholdGap) PrevThresh[2]
|
|
)
|
|
if (Spinner != 1) then
|
|
(
|
|
if Col1Thresh.value < (Col2Thresh.value + ThresholdGap) and (Spinner !=1) then Col1Thresh.value = (Col2Thresh.value + ThresholdGap)
|
|
else if ((Col1Thresh.value > PrevThresh[1]) and (ScaleRanges.state == false)) then Col1Thresh.value = RsJunctionViewer.FMax (Col2Thresh.value + ThresholdGap) PrevThresh[1]
|
|
)
|
|
)
|
|
fn ManageThresholds Spinner =
|
|
( -- Deals with scaling ranges when Spinner is changing, and calls UpdateThresholds to stop out of bounds spinners
|
|
local HighRatio = 0
|
|
local LowRatio = 0
|
|
local LowSpinner = 9
|
|
local HighSpinner = 1
|
|
|
|
StoreThresholds.enabled = ResetThresholdValues.enabled = true
|
|
|
|
if ScaleRanges.state then
|
|
(
|
|
-- Determine affected high/low range from the active spinner, and check if it's gone out of bounds
|
|
if LockZero.state then
|
|
(
|
|
case of
|
|
(
|
|
(Spinner < 5): ( LowSpinner = 9 ; HighSpinner = Spinner )
|
|
(Spinner > 5): ( LowSpinner = Spinner ; HighSpinner = 1 )
|
|
(Spinner == 5): ( LowSpinner = 9 ; HighSpinner = 1 )
|
|
)
|
|
HighRatio = (CurrThresh[HighSpinner] - CurrThresh[5]) / (PrevThresh[HighSpinner] - PrevThresh[5])
|
|
LowRatio = (CurrThresh[5] - CurrThresh[LowSpinner]) / (PrevThresh[5] - PrevThresh[LowSpinner])
|
|
|
|
Col9Thresh.value = ((PrevThresh[9] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col8Thresh.value = ((PrevThresh[8] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col7Thresh.value = ((PrevThresh[7] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col5Thresh.value = CurrThresh[5]
|
|
Col4Thresh.value = ((PrevThresh[4] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col3Thresh.value = ((PrevThresh[3] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col2Thresh.value = ((PrevThresh[2] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col1Thresh.value = ((PrevThresh[1] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
)
|
|
else
|
|
(
|
|
case of
|
|
(
|
|
(Spinner < 5): ( LowSpinner = HighSpinner = 9 )
|
|
(Spinner > 5): ( LowSpinner = HighSpinner = 1 )
|
|
(Spinner == 5): ( LowSpinner = 9 ; HighSpinner = 1 )
|
|
)
|
|
HighRatio = (CurrThresh[HighSpinner] - CurrThresh[Spinner]) / (PrevThresh[HighSpinner] - PrevThresh[Spinner])
|
|
LowRatio = (CurrThresh[Spinner] - CurrThresh[LowSpinner]) / (PrevThresh[Spinner] - PrevThresh[LowSpinner])
|
|
Col9Thresh.value = ((PrevThresh[9] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col8Thresh.value = ((PrevThresh[8] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col7Thresh.value = ((PrevThresh[7] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col5Thresh.value = ((PrevThresh[5] - PrevThresh[LowSpinner]) * LowRatio) + CurrThresh[LowSpinner]
|
|
Col4Thresh.value = ((PrevThresh[4] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col3Thresh.value = ((PrevThresh[3] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col2Thresh.value = ((PrevThresh[2] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
Col1Thresh.value = ((PrevThresh[1] - PrevThresh[HighSpinner]) * HighRatio) + CurrThresh[HighSpinner]
|
|
)
|
|
)
|
|
UpdateThresholds Spinner
|
|
ProcessActiveCSV()
|
|
)
|
|
fn UpdateThreshArrays =
|
|
( -- Called on spinner entered. Updates the previous and current threshold tables (used to deal with scaling ranges)
|
|
CurrThresh[9] = Col9Thresh.value
|
|
CurrThresh[8] = Col8Thresh.value
|
|
CurrThresh[7] = Col7Thresh.value
|
|
CurrThresh[6] = Col5Thresh.value - LockGap
|
|
CurrThresh[5] = Col5Thresh.value
|
|
CurrThresh[4] = Col4Thresh.value
|
|
CurrThresh[3] = Col3Thresh.value
|
|
CurrThresh[2] = Col2Thresh.value
|
|
CurrThresh[1] = Col1Thresh.value
|
|
PrevThresh = deepcopy CurrThresh
|
|
)
|
|
fn RecalculateRange =
|
|
( -- Called when tracked stat changes and ScaleRanges is ticked. Used to update the thresholds.
|
|
if LockZero.state then (Col5Thresh.value = CurrThresh[5] = 0.0 ) else (Col5Thresh.value = CurrThresh[5] = TrackedMean)
|
|
Col9Thresh.value = CurrThresh[9] = BestJunc
|
|
Col1Thresh.value = CurrThresh[1] = WorstJunc
|
|
ManageThresholds 5
|
|
)
|
|
|
|
---- TRACKING FUNCTIONS ----
|
|
fn SelectWorstJuncs =
|
|
(
|
|
clearselection()
|
|
local bad_juncs = #()
|
|
if AutoSelectType.state == 1 then
|
|
(
|
|
for index = 1 to WorstCount do
|
|
(
|
|
local badbox = active_juncs[index].marker
|
|
appendIfUnique bad_juncs badbox
|
|
)
|
|
)
|
|
else
|
|
(
|
|
local bad_juncs = active_juncs[WorstJunctionCount.value].marker
|
|
)
|
|
select bad_juncs
|
|
)
|
|
|
|
---- THRESHOLD RESET FUNCTIONS ----
|
|
fn ResetValues =
|
|
( -- Reset to Default values
|
|
Col1Thresh.value = PrevThresh[1] = Threshes[ResetOption.selection].val1
|
|
Col2Thresh.value = PrevThresh[2] = Threshes[ResetOption.selection].val2
|
|
Col3Thresh.value = PrevThresh[3] = Threshes[ResetOption.selection].val3
|
|
Col4Thresh.value = PrevThresh[4] = Threshes[ResetOption.selection].val4
|
|
Col5Thresh.value = PrevThresh[5] = Threshes[ResetOption.selection].val5
|
|
Col7Thresh.value = PrevThresh[7] = Threshes[ResetOption.selection].val7
|
|
Col8Thresh.value = PrevThresh[8] = Threshes[ResetOption.selection].val8
|
|
Col9Thresh.value = PrevThresh[9] = Threshes[ResetOption.selection].val9
|
|
|
|
CurrThresh = deepCopy PrevThresh
|
|
|
|
ResetThresholdValues.enabled = false
|
|
StoreThresholds.enabled = ResetThresholdColours.enabled
|
|
|
|
ProcessActiveCSV()
|
|
)
|
|
fn ResetColours =
|
|
( -- Reset to Default Colour scheme
|
|
Col1Picker.color = Threshes[ResetOption.selection].col1
|
|
Col2Picker.color = Threshes[ResetOption.selection].col2
|
|
Col3Picker.color = Threshes[ResetOption.selection].col3
|
|
Col4Picker.color = Threshes[ResetOption.selection].col4
|
|
Col5Picker.color = Threshes[ResetOption.selection].col5
|
|
Col6Picker.color = Threshes[ResetOption.selection].col6
|
|
Col7Picker.color = Threshes[ResetOption.selection].col7
|
|
Col8Picker.color = Threshes[ResetOption.selection].col8
|
|
Col9Picker.color = Threshes[ResetOption.selection].col9
|
|
|
|
ResetThresholdColours.enabled = false
|
|
StoreThresholds.enabled = ResetThresholdValues.enabled
|
|
|
|
ProcessActiveCSV()
|
|
)
|
|
|
|
|
|
|
|
---- VISUALISER EVENTS ----
|
|
---- FILE EVENTS ----
|
|
on ChangeCurrentCSV pressed do
|
|
(
|
|
RsJunctionViewer.currCSVName = getOpenFileName caption:"Select CSV to Visualise" filename:RsJunctionViewer.currCSVName types:"CSV (*.csv)|*.csv|All Files (*.*)|*.*|"
|
|
if RsJunctionViewer.currCSVName == undefined then
|
|
(
|
|
RsJunctionViewer.currCSVName = RsJunctionViewer.DefaultCurrCSVName
|
|
CurrFileName.text = filenameFromPath RsJunctionViewer.DefaultCurrCSVName
|
|
)
|
|
else
|
|
(
|
|
CurrFileName.text = filenameFromPath RsJunctionViewer.currCSVName
|
|
)
|
|
|
|
CurrFileName.enabled = true
|
|
LoadCurrCSV()
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on ChangePreviousCSV pressed do
|
|
(
|
|
RsJunctionViewer.prevCSVName = getOpenFileName caption:"Select Previous version CSV to Compare" filename:RsJunctionViewer.prevCSVName types:"CSV (*.csv)|*.csv|All Files (*.*)|*.*|"
|
|
if RsJunctionViewer.prevCSVName == undefined then
|
|
(
|
|
RsJunctionViewer.prevCSVName = RsJunctionViewer.DefaultCurrCSVName
|
|
PrevFileName.text = filenameFromPath RsJunctionViewer.DefaultPrevCSVName
|
|
)
|
|
else
|
|
(
|
|
PrevFileName.text = filenameFromPath RsJunctionViewer.prevCSVName
|
|
)
|
|
LoadPrevCSV()
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on LoadCurrentCSV pressed do
|
|
(
|
|
LoadCurrCSV()
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on LoadPreviousCSV pressed do
|
|
(
|
|
LoadPrevCSV()
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on UseCurrent pressed do
|
|
(
|
|
if TrackedVersion.state != 2 then
|
|
(
|
|
CurrSurround.enabled = true ; PrevSurround.enabled = false ; DiffSurround.enabled = false
|
|
VersionCurrent.enabled = false ; CompareCount.enabled = false ; VersionCurrent.enabled = true ; VersionPrevious.enabled = false
|
|
TrackedVersion.state = 2
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
)
|
|
on UsePrevious pressed do
|
|
(
|
|
if TrackedVersion.state != 1 then
|
|
(
|
|
CurrSurround.enabled = false ; PrevSurround.enabled = true ; DiffSurround.enabled = false
|
|
VersionCurrent.enabled = false ; CompareCount.enabled = false ; VersionPrevious.enabled = false ; VersionPrevious.enabled = true
|
|
TrackedVersion.state = 1
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
)
|
|
on UseDiff pressed do
|
|
(
|
|
if TrackedVersion.state != 3 then
|
|
(
|
|
CurrSurround.enabled = true ; PrevSurround.enabled = true ; DiffSurround.enabled = true
|
|
VersionCurrent.enabled = false ; VersionPrevious.enabled = false ; CompareCount.enabled = false
|
|
VersionCurrent.enabled = true ; VersionPrevious.enabled = true ; CompareCount.enabled = true
|
|
TrackedVersion.state = 3
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
)
|
|
|
|
|
|
---- STAT TRACKING EVENTS ----
|
|
on WorstThreshold changed ArgIgnore do ProcessActiveCSV()
|
|
on DropAmount changed ArgIgnore do ProcessActiveCSV()
|
|
on HideBest changed ArgIgnore do ProcessActiveCSV()
|
|
on DropJunctions changed DropType do
|
|
( -- Drop Worst Junctions + disable Hide if Off
|
|
if (DropType < 3) then
|
|
(
|
|
HideBest.enabled = true
|
|
)
|
|
else
|
|
(
|
|
HideBest.enabled = false
|
|
)
|
|
ProcessActiveCSV()
|
|
)
|
|
on WorstJunctionCount changed NewWorstCount do
|
|
( -- Gets the Tracked Stat value of the new N Worst Junctions and performs a Process
|
|
WorstThreshold.range.z = active_juncs[NewWorstCount].tracked_stat - 0.01
|
|
ProcessActiveCSV()
|
|
)
|
|
on SelectWorst pressed do ( SelectWorstJuncs() )
|
|
on AutoSelectType changed ArgIgnore do ( if AutoSelect.checked then SelectWorstJuncs() )
|
|
|
|
on RAGConnect pressed do
|
|
( -- Connect to RAG if it's present
|
|
if (RAGConnect.text == "CONNECT") then
|
|
(
|
|
RemoteConnection.Connect()
|
|
if ( RemoteConnection.IsConnected() ) then
|
|
(
|
|
ZeroZ.state = false
|
|
RAGConnect.text = "CONNECTED"
|
|
RAGSurround.enabled = true
|
|
WarpTo.enabled = true
|
|
--Analyse.enabled = true
|
|
)
|
|
else
|
|
(
|
|
messageBox "Couldn't connect to game.\nMake sure it's running with RAG..." beep:true
|
|
)
|
|
)
|
|
)
|
|
on RAGSurround clicked ArgIgnore do
|
|
( -- Draws over RAGConnect - so works as a Disconnect button
|
|
RAGSurround.enabled = false
|
|
RAGConnect.text = "CONNECT"
|
|
WarpTo.enabled = false
|
|
Analyse.enabled = false
|
|
)
|
|
on WarpTo pressed do
|
|
( -- Quick version without callback. Only warps to selection[1].pos - Also Auto-Disconnects if RAG is missing.
|
|
if (RAGConnect.text == "CONNECTED") and (RemoteConnection.IsConnected()) then
|
|
(
|
|
if selection.count > 0 then
|
|
(
|
|
local warpCoords = (selection[1].pos.x as string)+" "+(selection[1].pos.y as string)+" "+(selection[1].pos.z as string)
|
|
RemoteConnection.WriteStringWidget "Debug/Warp Player x y z h vx vy vz" warpCoords
|
|
)
|
|
)
|
|
else
|
|
(
|
|
if (RAGConnect.text == "CONNECTED") then
|
|
(
|
|
RAGConnect.text = "CONNECT"
|
|
RAGSurround.enabled = false
|
|
WarpTo.enabled = false
|
|
--Analyse.enabled = false
|
|
)
|
|
)
|
|
)
|
|
/*
|
|
on Analyse pressed do
|
|
(
|
|
RemoteConnection.Connect()
|
|
RemoteConnection.WriteBoolWidget "Scene/Create Scene widgets" true
|
|
RemoteConnection.WriteBoolWidget "Renderer/Create Renderer widgets" true
|
|
RemoteConnection.WriteBoolWidget "Streaming & Memory/Create streaming memory widgets" true
|
|
|
|
-- !!!! ANALYSER MOVED TO SEPARATE SCRIPT
|
|
)
|
|
*/
|
|
|
|
---- MARKER SCALE/POSITION EVENTS ----
|
|
on TrackedStat changed ArgIgnore do
|
|
(
|
|
if TrackLink.state then
|
|
(
|
|
case TrackedStat.state of
|
|
(
|
|
1:(HeightOptions.state = 1 ; WidthOptions.state = 1)
|
|
2:(HeightOptions.state = 2 ; WidthOptions.state = 2)
|
|
3:(HeightOptions.state = 3 ; WidthOptions.state = 3)
|
|
4:(HeightOptions.state = 4 ; WidthOptions.state = 4)
|
|
5:(HeightOptions.state = 5 ; WidthOptions.state = 5)
|
|
)
|
|
)
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on HeightOptions changed ArgIgnore do
|
|
(
|
|
if TrackLink.state then TrackedStat.state = 7
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on WidthOptions changed ArgIgnore do
|
|
(
|
|
if TrackLink.state then TrackedStat.state = 6
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on TrackLink changed TrackLinked do
|
|
(
|
|
if TrackLinked then
|
|
(
|
|
case TrackedStat.state of
|
|
(
|
|
1:(HeightOptions.state = 1 ; WidthOptions.state = 1)
|
|
2:(HeightOptions.state = 2 ; WidthOptions.state = 2)
|
|
3:(HeightOptions.state = 3 ; WidthOptions.state = 3)
|
|
4:(HeightOptions.state = 4 ; WidthOptions.state = 4)
|
|
5:(HeightOptions.state = 5 ; WidthOptions.state = 5)
|
|
)
|
|
)
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then ReCalculateRange()
|
|
)
|
|
on HeightMult changed NewScale do ( if ScaleLink.text == "&" then WidthMult.value = NewScale ; ProcessActiveCSV() )
|
|
on WidthMult changed NewScale do ( if ScaleLink.text == "&" then HeightMult.value = NewScale ; ProcessActiveCSV() )
|
|
on HeightOffset changed NewOffset do ( if OffsetLink.text == "&" then WidthOffset.value = NewOffset ; ProcessActiveCSV() )
|
|
on WidthOffset changed NewOffset do ( if OffsetLink.text == "&" then HeightOffset.value = NewOffset ; ProcessActiveCSV() )
|
|
on ScaleLink pressed do
|
|
(
|
|
if ScaleLink.text == " " then
|
|
(
|
|
ScaleLink.text = "&"
|
|
WidthMult.value = HeightMult.value
|
|
ProcessActiveCSV()
|
|
)
|
|
else
|
|
(
|
|
ScaleLink.text = " "
|
|
)
|
|
)
|
|
on OffsetLink pressed do
|
|
(
|
|
if OffsetLink.text == " " then
|
|
(
|
|
OffsetLink.text = "&"
|
|
WidthOffset.value = HeightOffset.value
|
|
ProcessActiveCSV()
|
|
)
|
|
else
|
|
(
|
|
OffsetLink.text = " "
|
|
)
|
|
)
|
|
|
|
on PositiveWidths changed ArgIgnore do ProcessActiveCSV()
|
|
on ZeroZ changed ArgIgnore do ProcessActiveCSV()
|
|
|
|
on MarkerPresets selected Arg do
|
|
(
|
|
ActivePreset = Arg
|
|
WidthOptions.state = RsJunctionViewer.PresetValues[Arg].MWStat
|
|
HeightOptions.state = RsJunctionViewer.PresetValues[Arg].MHStat
|
|
TrackedStat.state = RsJunctionViewer.PresetValues[Arg].TrackedStat
|
|
WidthMult.value = RsJunctionViewer.PresetValues[Arg].WMult
|
|
HeightMult.value = RsJunctionViewer.PresetValues[Arg].HMult
|
|
WidthOffset.value = RsJunctionViewer.PresetValues[Arg].WOffset
|
|
HeightOffset.value = RsJunctionViewer.PresetValues[Arg].HOffset
|
|
ScaleLink.text = " " ; OffsetLink.text = " "
|
|
|
|
if (RAGConnect.text == "CONNECT") then ZeroZ.state = RsJunctionViewer.PresetValues[Arg].ZeroZ
|
|
|
|
ProcessActiveCSV()
|
|
if ScaleRanges.state then RecalculateRange()
|
|
)
|
|
on SaveNewPreset pressed do
|
|
(
|
|
RsJunctionViewerPos = GetDialogPos RsJunctionViewer
|
|
RFPresetPos = RsJunctionViewerPos
|
|
RFPresetPos.x = (RsJunctionViewer.FMax (RsJunctionViewerPos.x - 32) 20) ; RFPresetPos.y = (RsJunctionViewer.FMin (RsJunctionViewerPos.y + RsJunctionViewer.Vis.pos.y + 580) 900)
|
|
|
|
try ( DestroyDialog RsJunctionRenamePreset ) catch()
|
|
CreateDialog RsJunctionRenamePreset width:(ROwidth+32) height:92 style:#(#style_titlebar, #style_border, #style_sysmenu,#style_toolwindow)
|
|
setDialogPos RsJunctionRenamePreset RFPresetPos
|
|
|
|
|
|
local NameExists=true
|
|
local presetNum = RsJunctionViewer.PresetNames.count + 1
|
|
while NameExists do
|
|
(
|
|
nameTest = "New Preset "+(presetNum as string)
|
|
if (findItem RsJunctionViewer.PresetNames nameTest) == 0 then (NameExists = false) else (presetNum += 1)
|
|
)
|
|
RsJunctionRenamePreset.PresetName.text = nameTest
|
|
|
|
newPreset = RsJunctionViewer.Preset name:nameTest
|
|
newPreset.HMult =HeightMult.value ; newPreset.WMult = WidthMult.value
|
|
newPreset.HOffset = HeightOffset.value ; newPreset.WOffset= WidthOffset.value
|
|
newPreset.TrackedStat= TrackedStat.state ; newPreset.MWStat= WidthOptions.state ; newPreset.MHStat= HeightOptions.state
|
|
newPreset.ZeroZ= ZeroZ.state
|
|
|
|
append RsJunctionViewer.PresetValues newPreset
|
|
append RsJunctionViewer.PresetNames newPreset.name
|
|
MarkerPresets.items = RsJunctionViewer.PresetNames
|
|
RsJunctionViewer.ActivePreset = RsJunctionViewer.PresetNames.count
|
|
MarkerPresets.selection = RsJunctionViewer.ActivePreset
|
|
)
|
|
|
|
|
|
---- MARKER COLOUR/THRESHOLD EVENTS ----
|
|
-- THRESHOLD VALUE EVENTS --
|
|
on Col9Thresh changed newValue do ( CurrThresh[9] = newValue ; ManageThresholds 9 )
|
|
on Col8Thresh changed newValue do ( CurrThresh[8] = newValue ; ManageThresholds 8 )
|
|
on Col7Thresh changed newValue do ( CurrThresh[7] = newValue ; ManageThresholds 7)
|
|
on Col5Thresh changed newValue do ( CurrThresh[5] = newValue ; CurrThresh[6] = newValue - LockGap ; ManageThresholds 5 )
|
|
on Col4Thresh changed newValue do ( CurrThresh[4] = newValue ; ManageThresholds 4 )
|
|
on Col3Thresh changed newValue do ( CurrThresh[3] = newValue ; ManageThresholds 3 )
|
|
on Col2Thresh changed newValue do ( CurrThresh[2] = newValue ; ManageThresholds 2 )
|
|
on Col1Thresh changed newValue do ( CurrThresh[1] = newValue ; ManageThresholds 1 )
|
|
|
|
on Col9Thresh entered do ( UpdateThreshArrays() )
|
|
on Col8Thresh entered do ( UpdateThreshArrays() )
|
|
on Col7Thresh entered do ( UpdateThreshArrays() )
|
|
on Col5Thresh entered do ( UpdateThreshArrays() )
|
|
on Col4Thresh entered do ( UpdateThreshArrays() )
|
|
on Col3Thresh entered do ( UpdateThreshArrays() )
|
|
on Col2Thresh entered do ( UpdateThreshArrays() )
|
|
on Col1Thresh entered do ( UpdateThreshArrays() )
|
|
|
|
-- COLOUR PICKER EVENTS --
|
|
on Col1Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col2Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col3Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col4Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col5Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col6Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col7Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col8Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
on Col9Picker changed NewColour do ( StoreThresholds.enabled = ResetThresholdColours.enabled = true ; ProcessActiveCSV() )
|
|
|
|
on SmthGrad changed ArgIgnore do ProcessActiveCSV()
|
|
-- THRESHOLD OVER EVENTS --
|
|
on Col9Over pressed do ( WorstThreshold.value = Col9Thresh.value ; ProcessActiveCSV() )
|
|
on Col8Over pressed do ( WorstThreshold.value = Col8Thresh.value ; ProcessActiveCSV() )
|
|
on Col7Over pressed do ( WorstThreshold.value = Col7Thresh.value ; ProcessActiveCSV() )
|
|
on Col5Over pressed do ( WorstThreshold.value = Col5Thresh.value ; ResetThresholdValues.enabled = true ; ProcessActiveCSV() )
|
|
on Col4Over pressed do ( WorstThreshold.value = Col4Thresh.value ; ProcessActiveCSV() )
|
|
on Col3Over pressed do ( WorstThreshold.value = Col3Thresh.value ; ProcessActiveCSV() )
|
|
on Col2Over pressed do ( WorstThreshold.value = Col2Thresh.value ; ProcessActiveCSV() )
|
|
on Col1Over pressed do ( WorstThreshold.value = Col1Thresh.value ; ProcessActiveCSV() )
|
|
|
|
-- THRESHOLD RESET EVENTS --
|
|
on ResetThresholdValues pressed do ResetValues()
|
|
on ResetThresholdColours pressed do ResetColours()
|
|
on ResetOption selected NewOption do
|
|
(
|
|
if NewOption != ActiveThresh then
|
|
(
|
|
ActiveThresh = NewOption
|
|
ResetValues() ; ResetColours()
|
|
ResetThresholdValues.enabled = ResetThresholdColours.enabled = false
|
|
)
|
|
)
|
|
on StoreThresholds pressed do
|
|
(
|
|
local newThresh = RsJunctionViewer.Thresholds col1:col1Picker.color
|
|
newThresh.col2 = col2Picker.color
|
|
newThresh.col3 = col3Picker.color
|
|
newThresh.col4 = col4Picker.color
|
|
newThresh.col5 = col5Picker.color
|
|
newThresh.col6 = col6Picker.color
|
|
newThresh.col7 = col7Picker.color
|
|
newThresh.col8 = col8Picker.color
|
|
newThresh.col9 = col9Picker.color
|
|
newThresh.val1 = col1Thresh.value
|
|
newThresh.val2 = col2Thresh.value
|
|
newThresh.val3 = col3Thresh.value
|
|
newThresh.val4 = col4Thresh.value
|
|
newThresh.val5 = col5Thresh.value
|
|
newThresh.val6 = col5Thresh.value - LockGap
|
|
newThresh.val7 = col7Thresh.value
|
|
newThresh.val8 = col8Thresh.value
|
|
newThresh.val9 = col9Thresh.value
|
|
append Threshes newThresh
|
|
local threshNames = ResetOption.items
|
|
local newThreshName = "Settings "+((threshNames.count + 1) as string)+" "
|
|
case TrackedStat.state of
|
|
(
|
|
1:( newThreshName += "(Main)")
|
|
2:( newThreshName += "(VRAM)")
|
|
3:( newThreshName += "(Main+VRAM)")
|
|
4:( newThreshName += "(Archetypes)")
|
|
5:( newThreshName += "(None)")
|
|
6:
|
|
(
|
|
case WidthOptions of
|
|
(
|
|
1:( newThreshName += "(Main)")
|
|
2:( newThreshName += "(VRAM)")
|
|
3:( newThreshName += "(Main+VRAM)")
|
|
4:( newThreshName += "(Archetypes)")
|
|
5:( newThreshName += "(None)")
|
|
)
|
|
)
|
|
7:
|
|
(
|
|
case HeightOptions of
|
|
(
|
|
1:( newThreshName += "(Main)")
|
|
2:( newThreshName += "(VRAM)")
|
|
3:( newThreshName += "(Main+VRAM)")
|
|
4:( newThreshName += "(Archetypes)")
|
|
5:( newThreshName += "(None)")
|
|
)
|
|
)
|
|
)
|
|
append threshNames newThreshName
|
|
ResetOption.items = threshNames
|
|
ResetOption.selection = ActiveThresh = ResetOption.items.count
|
|
)
|
|
|
|
-- THRESHOLD CONTROL BUTTONS EVENTS --
|
|
on LockZero changed LockedState do
|
|
( -- Lock/Unlock MidPoint value, sets thresholds to stop/permit ranges to pass it (if permitted, OOB prevented by ManageThresholds elsewhere)
|
|
Col5Thresh.enabled = not LockedState
|
|
if LockedState then
|
|
(
|
|
Col1Thresh.range.x = Col5Thresh.value + (ThresholdGap*4)
|
|
Col2Thresh.range.x = Col5Thresh.value + (ThresholdGap*3)
|
|
Col3Thresh.range.x = Col5Thresh.value + (ThresholdGap*2)
|
|
Col4Thresh.range.x = Col5Thresh.value + ThresholdGap
|
|
|
|
Col7Thresh.range.y = Col5Thresh.value - ThresholdGap
|
|
Col8Thresh.range.y = Col5Thresh.value - (ThresholdGap*2)
|
|
Col9Thresh.range.y = Col5Thresh.value - (ThresholdGap*3)
|
|
)
|
|
else
|
|
(
|
|
Col1Thresh.range.x = (ThresholdGap*7) - ThresholdLimit
|
|
Col2Thresh.range.x = (ThresholdGap*6) - ThresholdLimit
|
|
Col3Thresh.range.x = (ThresholdGap*5) - ThresholdLimit
|
|
Col4Thresh.range.x = (ThresholdGap*4) - ThresholdLimit
|
|
|
|
Col7Thresh.range.y = ThresholdLimit - (ThresholdGap*3)
|
|
Col8Thresh.range.y = ThresholdLimit - (ThresholdGap*2)
|
|
Col9Thresh.range.y = ThresholdLimit - ThresholdGap
|
|
)
|
|
)
|
|
on EqualizeCount pressed do
|
|
( -- Set thresholds so that there are approximately the same number of junctions in each bucket (if middle locked, then the 2 ranges are treaded separately)
|
|
if LockZero.state then
|
|
(
|
|
local HighBucketCount = (Col1Count.text as integer) + (Col2Count.text as integer) + (Col3Count.text as integer) + (Col4Count.text as integer) + (Col5Count.text as integer)
|
|
local HighBucketSize = HighBucketCount / 5.0
|
|
local LowBucketSize = (active_juncs.count - HighBucketCount) / 4.0
|
|
|
|
Col1Thresh.value = PrevThresh[1] = CurrThresh[1] = active_juncs[(HighBucketSize as integer)].tracked_stat
|
|
Col2Thresh.value = PrevThresh[2] = CurrThresh[2] = active_juncs[((HighBucketSize*2) as integer)].tracked_stat
|
|
Col3Thresh.value = PrevThresh[3] = CurrThresh[3] = active_juncs[((HighBucketSize*3) as integer)].tracked_stat
|
|
Col4Thresh.value = PrevThresh[4] = CurrThresh[4] = active_juncs[((HighBucketSize*4) as integer)].tracked_stat
|
|
-- Mid point shiould be set up already
|
|
Col7Thresh.value = PrevThresh[7] = CurrThresh[7] = active_juncs[HighBucketCount+(LowBucketSize as integer)].tracked_stat
|
|
Col8Thresh.value = PrevThresh[8] = CurrThresh[8] = active_juncs[HighBucketCount+((LowBucketSize*2) as integer)].tracked_stat
|
|
Col9Thresh.value = PrevThresh[9] = CurrThresh[9] = active_juncs[HighBucketCount+((LowBucketSize*3) as integer)].tracked_stat
|
|
)
|
|
else
|
|
(
|
|
local bucketSize = active_juncs.count / 9
|
|
|
|
Col1Thresh.value = PrevThresh[1] = CurrThresh[1] = active_juncs[(bucketSize as integer)].tracked_stat
|
|
Col2Thresh.value = PrevThresh[2] = CurrThresh[2] = active_juncs[((bucketSize * 2.0) as integer)].tracked_stat
|
|
Col3Thresh.value = PrevThresh[3] = CurrThresh[3] = active_juncs[((bucketSize * 3.0) as integer)].tracked_stat
|
|
Col4Thresh.value = PrevThresh[4] = CurrThresh[4] = active_juncs[((bucketSize * 4.0) as integer)].tracked_stat
|
|
Col5Thresh.value = PrevThresh[5] = CurrThresh[5] = active_juncs[((bucketSize * 5.0) as integer)].tracked_stat
|
|
PrevThresh[6] = CurrThresh[6] = Col5Thresh.value - LockGap
|
|
Col7Thresh.value = PrevThresh[7] = CurrThresh[7] = active_juncs[((bucketSize * 6.0) as integer)].tracked_stat
|
|
Col8Thresh.value = PrevThresh[8] = CurrThresh[8] = active_juncs[((bucketSize * 7.0) as integer)].tracked_stat
|
|
Col9Thresh.value = PrevThresh[9] = CurrThresh[9] = active_juncs[((bucketSize * 8.0) as integer)].tracked_stat
|
|
)
|
|
StoreThresholds.enabled = ResetThresholdValues.enabled = true
|
|
ProcessActiveCSV()
|
|
)
|
|
on EqualizeSize pressed do
|
|
( -- Set thresholds so the gaps between them are equal (if middle locked, then the 2 ranges are treaded separately)
|
|
local NewBest = 0
|
|
local NewWorst = 0
|
|
|
|
if ScaleRanges.state then
|
|
(
|
|
NewBest = BestJunc
|
|
NewWorst = WorstJunc
|
|
)
|
|
else
|
|
(
|
|
NewBest = Col9Thresh.value
|
|
NewWorst = Col1Thresh.value
|
|
)
|
|
if LockZero.state then
|
|
( -- Preserve middle value
|
|
local HighBucketSize = (NewWorst - Col5Thresh.value) / 4
|
|
local LowBucketSize = (Col5Thresh.value - NewBest) / 3
|
|
|
|
Col1Thresh.value = PrevThresh[1] = CurrThresh[1] = Col5Thresh.value + (HighBucketSize*4)
|
|
Col2Thresh.value = PrevThresh[2] = CurrThresh[2] = Col5Thresh.value + (HighBucketSize*3)
|
|
Col3Thresh.value = PrevThresh[3] = CurrThresh[3] = Col5Thresh.value + (HighBucketSize*2)
|
|
Col4Thresh.value = PrevThresh[4] = CurrThresh[4] = Col5Thresh.value + HighBucketSize
|
|
-- Midpoint should be set up already...
|
|
Col7Thresh.value = PrevThresh[7] = CurrThresh[7] = Col5Thresh.value - LowBucketSize
|
|
Col8Thresh.value = PrevThresh[8] = CurrThresh[8] = Col5Thresh.value - (LowBucketSize*2)
|
|
Col9Thresh.value = PrevThresh[9] = CurrThresh[9] = Col5Thresh.value - (LowBucketSize*3)
|
|
)
|
|
else
|
|
( -- Change middle value
|
|
local bucketSize = (NewWorst - NewBest) / 7
|
|
Col1Thresh.value = PrevThresh[1] = CurrThresh[1] = NewWorst
|
|
Col2Thresh.value = PrevThresh[2] = CurrThresh[2] = NewWorst - bucketSize
|
|
Col3Thresh.value = PrevThresh[3] = CurrThresh[3] = NewWorst - (bucketSize*2)
|
|
Col4Thresh.value = PrevThresh[4] = CurrThresh[4] = NewWorst - (bucketSize*3)
|
|
Col5Thresh.value = PrevThresh[5] = CurrThresh[5] = NewWorst - (bucketSize*4)
|
|
PrevThresh[6] = CurrThresh[6] = Col5Thresh.value - LockGap
|
|
Col7Thresh.value = PrevThresh[7] = CurrThresh[7] = NewWorst - (bucketSize*5)
|
|
Col8Thresh.value = PrevThresh[8] = CurrThresh[8] = NewWorst - (bucketSize*6)
|
|
Col9Thresh.value = PrevThresh[9] = CurrThresh[9] = NewWorst - (bucketSize*7)
|
|
)
|
|
StoreThresholds.enabled = ResetThresholdValues.enabled = true
|
|
ProcessActiveCSV()
|
|
)
|
|
on UseWorst pressed do ( Col1Thresh.value = CurrThresh[1] = WorstJunc ; ManageThresholds 1 ; UpdateThreshArrays() )
|
|
on UseBest pressed do ( Col9Thresh.value = CurrThresh[9] = BestJunc ; ManageThresholds 9 ; UpdateThreshArrays() )
|
|
on ZeroZero pressed do ( Col5Thresh.value = CurrThresh[5] = 0.0 ; ManageThresholds 5 ; UpdateThreshArrays() )
|
|
on ZeroMean pressed do ( Col5Thresh.value = CurrThresh[5] = TrackedMean ; ManageThresholds 5 ; UpdateThreshArrays() )
|
|
|
|
---- ROLLOUT EVENTS ----
|
|
on Visualiser rolledUp Rolled do
|
|
(
|
|
if Rolled then
|
|
(
|
|
RsJunctionViewer.Vis.height = RsJunctionViewer.height - (RsJunctionViewer.Vis.pos.y + RsJunctionViewer.Gen.height + 14)
|
|
)
|
|
else
|
|
(
|
|
RsJunctionViewer.Vis.height = 26
|
|
)
|
|
RsJunctionViewer.Gen.pos.y = RsJunctionViewer.Vis.height + RsJunctionViewer.Vis.pos.y + 10
|
|
RsJunctionViewer.CompVisSeparator.position.y = RsJunctionViewer.Vis.pos.y - 7
|
|
RsJunctionViewer.VisGenSeparator.position.y = RsJunctionViewer.Gen.pos.y - 7
|
|
)
|
|
|
|
)
|
|
|
|
rollout Generator "Junction Test File Generator" rolledUp:true
|
|
( -- Generates an input junction test CSV from current object selection, can run BAT file to output main/vram/archetype data on current platform if args set up properly
|
|
local ROwidth = 234
|
|
|
|
local writeCSVName = "X:\Juncs\LIBERTY_Test_Junctions.csv"
|
|
local DefaultWriteCSVLocation = "X:\Juncs\LIBERTY_Test_Junctions.csv"
|
|
|
|
group "Generate Junction Test From Selection"
|
|
(
|
|
progressBar CSVSurround "" color:[175,175,175] value:100 width:((ROwidth)-14) height:46 offset:[-4,0] enabled:false
|
|
button ChangeWriteCSV "Change Output CSV" width:((ROwidth*0.65)-11) height:22 align:#left offset:[0,-47] tooltip:"Change CSV file to write blank junction test locations to. Use for new junctions or running chunks of existing set."
|
|
button DefaultWriteCSV "Use Default" width:((ROwidth*0.35)-11) height:22 align:#right offset:[1,-27]
|
|
editText WriteFileName "" text:DefaultWriteCSVLocation width:(ROwidth-18) align:#left offset:[-4,-5] align:#center readonly:true
|
|
|
|
button SelectUnsetJunctions "Select Default Junction Markers" width:(ROwidth-16) height:30 offset:[0,4] tooltip:"Selects any junction marker with default height and width (taken from the offset values above), which will probably be unset in the current junction file.\nThese will be written out to the CSV when Generate CSV is pressed."
|
|
button WriteCSV "Generate CSV" width:(ROwidth-16) height:60 tooltip:"Generate the above junction test file from current selection. Ideally all Max box primitives, since the visualiser expects them..."
|
|
)
|
|
group "Run Junction Test"
|
|
(
|
|
progressBar BATSurround "" color:[175,175,175] value:100 width:((ROwidth)-14) height:68 offset:[-4,0] enabled:false
|
|
button ChangeBATFile "Change Target .BAT" across:2 align:#left width:((ROwidth*0.66)-12) height:21 offset:[0,-70] tooltip:"Change between PS3/Xbox 360 .BAT files.\nNOTE: .BAT file needs specifically set up with the correct args to output junction test results to a CSV.\nChange this with caution..."
|
|
dropdownlist PlatformSelection "" items:RsJunctionViewer.Projects[RsJunctionViewer.ActiveProject].platforms selection:2 width:((ROwidth*0.34)-8) height:20 align:#right offset:[2,-72]-- other options for NG on folder switch... "PS4", "XB1", "PC" (search for CLICK_ME_*_JUNC_TEST)
|
|
|
|
editText BATFilePath "" text:RsJunctionViewer.Projects[RsJunctionViewer.ActiveProject].folder across:2 align:#left width:((ROwidth*0.66)-8) height:20 offset:[-4,-4] align:#center readonly:true
|
|
dropdownlist ProjectSelection "" items:RsJunctionViewer.ProjectNames selection:2 width:((ROwidth*0.34)-8) height:20 align:#right offset:[2,-5]-- other options for NG on folder switch... "PS4", "XB1", "PC" (search for CLICK_ME_*_JUNC_TEST)
|
|
|
|
editText BATFileName "" text:RsJunctionViewer.BATnames[1] width:(ROwidth-18) height:20 offset:[-4,-6] align:#left readonly:true
|
|
|
|
progressBar RunSurround "" color:[255,0,0] value:100 width:((ROwidth)-14) height:46 offset:[-4,4] enabled:true
|
|
button RunTest "Run Junction Test" width:(ROwidth-22) height:40 offset:[1,-48] tooltip:"Run the junction test .BATon your target PS3/XBox/etc. Needs set up outside this script, so results may vary..."
|
|
)
|
|
|
|
|
|
---- GENERATOR FUNCTIONS ----
|
|
fn ChangeBatFileName =
|
|
(
|
|
-- This will need future proofed at some point... !!!
|
|
case PlatformSelection.selected of
|
|
(
|
|
"XBox360":(BATFileName.text = "CLICK_ME_360_JUNC_TEST.bat")
|
|
"PS3":(BATFileName.text = "CLICK_ME_PS3_JUNC_TEST.bat")
|
|
"PS4":(BATFileName.text = "game_orbis_beta.bat")
|
|
"XB1":(BATFileName.text = "game_durango_beta.bat")
|
|
"PC":(BATFileName.text = "game_win64_beta.bat")
|
|
default:(BATFileName.text = "UNKNOWN FORMAT" ; RunTest.enabled = false ; RunSurround.enabled = false)
|
|
)
|
|
local batName = BATFilePath.text + BATFileName.text
|
|
if doesFileExist batName then
|
|
(
|
|
RunTest.enabled = true ; RunSurround.enabled = true
|
|
)
|
|
else
|
|
(
|
|
RunTest.enabled = false ; RunSurround.enabled = false
|
|
)
|
|
)
|
|
|
|
|
|
---- GENERATOR EVENTS ----
|
|
---- GENERATOR FILE EVENTS ----
|
|
on ChangeWriteCSV pressed do
|
|
(
|
|
RsJunctionViewer.writeCSVName = getSaveFileName caption:"Select CSV To Save Selected Junctions" filename:RsJunctionViewer.writeCSVName types:"CSV (*.csv)|*.csv|All Files (*.*)|*.*|"
|
|
if RsJunctionViewer.writeCSVName != undefined then WriteFileName.text = RsJunctionViewer.writeCSVName
|
|
) -- end ChangeWriteCSV pressed
|
|
|
|
on DefaultWriteCSV pressed do ( WriteFileName.text = RsJunctionViewer.DefaultWriteCSVLocation )
|
|
|
|
on WriteCSV pressed do
|
|
(
|
|
if selection.count > 0 then
|
|
(
|
|
if (WriteFileName.text != undefined) and (doesFileExist (getFileNamePath WriteFileName.text)) then
|
|
(
|
|
local output_file = createfile WriteFileName.text
|
|
format "name,x,y,z\n" to:output_file --write header
|
|
for marker in selection do
|
|
(
|
|
format "%,%,%,%\n" marker.name marker.pos.x marker.pos.y marker.pos.z to:output_file
|
|
)
|
|
format "END,-1079,-3239,6\n" to:output_file --write footer
|
|
close output_file
|
|
)
|
|
)
|
|
) -- end WriteCSV pressed
|
|
|
|
on SelectUnsetJunctions pressed do
|
|
(
|
|
local defaultWidth = 0
|
|
local defaultHeight = 0
|
|
|
|
clearselection()
|
|
if (RsJunctionViewer.PresetValues.count > 0) then (defaultWidth = RsJunctionViewer.PresetValues[1].WOffset ; defaultHeight = RsJunctionViewer.PresetValues[1].WOffset) else (defaultWidth = 8 ; defaultHeight = 8)
|
|
select (for obj in objects where classOf obj == box and obj.width == defaultWidth and obj.height == defaultHeight collect obj)
|
|
)
|
|
|
|
|
|
---- GENERATOR JUNCTION TEST EVENTS ----
|
|
on ChangeBATFile pressed do
|
|
(
|
|
local batName = BATFilePath.text + BATFileName.text
|
|
local batFile = getOpenFileName caption:"Select Junction Test BAT" filename:batName types:"BAT File (Junction Test)|*.bat|" --All Files (*.*)|*.*|" -- Removing the all files filter... may restore later.
|
|
if (batFile != undefined) and (doesFileExist batFile) then
|
|
(
|
|
RunTest.enabled = true ; RunSurround.enabled = true -- assume that this is a valid Junction test file regardless...
|
|
|
|
BATFileName.text = fileNameFromPath batFile
|
|
BATFilePath.text = getFileNamePath batFile
|
|
ProjectSelection.selection = PlatformSelection.selection = 1 -- Platform not set until I figure out the best way to change it !!!
|
|
for pindex = 2 to Projects.count do
|
|
(
|
|
if (BATFilePath.text == Projects[pindex].folder) then
|
|
(
|
|
ProjectSelection.selection = pindex
|
|
PlatformSelection.items = Projects[pindex].platforms
|
|
)
|
|
)
|
|
)
|
|
)
|
|
on PlatformSelection selected newPlatform do
|
|
(
|
|
RunTest.enabled = true ; RunSurround.enabled = true
|
|
ChangeBatFileName()
|
|
)
|
|
on ProjectSelection selected newProject do
|
|
(
|
|
PlatformSelection.items = RsJunctionViewer.Projects[newProject].platforms
|
|
BATFilePath.text = RsJunctionViewer.Projects[newProject].folder
|
|
RunTest.enabled = true ; RunSurround.enabled = true
|
|
ChangeBatFileName()
|
|
)
|
|
|
|
on RunSurround clicked ArgIgnore do
|
|
( -- RunSurround higher priority than RunTest for some reason...
|
|
local batName = BATFilePath.text + BATFileName.text
|
|
if doesFileExist batName then
|
|
(
|
|
local message = "Run this file?\n\n"+batName
|
|
if (queryBox message title:"Junction Test Script Launch") then shellLaunch batName "" --Query not strictly neccessary... stops my dodgy mouse from running it on rollout open though
|
|
)
|
|
else
|
|
(
|
|
local message = "Can't find BAT file\n"+batName
|
|
messageBox message title:"Missing BAT File"
|
|
)
|
|
)
|
|
|
|
---- ROLLOUT EVENTS ----
|
|
on Generator rolledUp Rolled do
|
|
(
|
|
if Rolled then ( RsJunctionViewer.Gen.height = 362 ) else ( RsJunctionViewer.Gen.height = 26 )
|
|
if (RsJunctionViewer.Vis.height > 26) then (RsJunctionViewer.Vis.height = RsJunctionViewer.height - (RsJunctionViewer.Vis.pos.y + RsJunctionViewer.Gen.height + 14))
|
|
RsJunctionViewer.Gen.pos.y = RsJunctionViewer.Vis.pos.y + RsJunctionViewer.Vis.height + 10
|
|
RsJunctionViewer.CompVisSeparator.position.y = RsJunctionViewer.Vis.pos.y - 7
|
|
RsJunctionViewer.VisGenSeparator.position.y = RsJunctionViewer.Gen.pos.y - 7
|
|
)
|
|
)
|
|
|
|
CreateDialog RsJunctionViewer width:256 height:1038 style:#(#style_titlebar, #style_border, #style_sysmenu,#style_toolwindow)
|
|
AddSubRollout RsJunctionViewer.Comp Comparison
|
|
AddSubRollout RsJunctionViewer.Vis Visualiser
|
|
AddSubRollout RsJunctionViewer.Gen Generator |