@@ -6,65 +6,112 @@ local function CreateMenu(Menu)
66 ACF .SetClientData (" PrimaryClass" , " acf_baseplate" )
77 ACF .SetClientData (" SecondaryClass" , " N/A" )
88
9- local VerificationCtx = ACF .Classes .Entities .VerificationContext (" acf_baseplate" )
10- VerificationCtx :StartClientData (ACF .GetAllClientData (true ))
11-
129 Menu :AddTitle (" #acf.menu.baseplates.settings" )
1310
1411 Menu :AddWikiLink (" Baseplates" , " docs/getting_started/first_tank/baseplate_aio.html" )
1512
1613 Menu :AddLabel (" #acf.menu.baseplates.desc" )
1714
18- Menu :AddSimpleClassUserVar (VerificationCtx , " " , " BaseplateType" , " Name" , " Icon" )
19- local SizeX = Menu :AddNumberUserVar ( VerificationCtx , " #acf.menu.baseplates.plate_width" , " Width" )
20- local SizeY = Menu :AddNumberUserVar ( VerificationCtx , " #acf.menu.baseplates.plate_length" , " Length" )
21- local SizeZ = Menu :AddNumberUserVar ( VerificationCtx , " #acf.menu.baseplates.plate_thickness" , " Thickness" )
22- Menu :AddBooleanUserVar ( VerificationCtx , " #acf.menu.baseplates.disable_alt_e" , " DisableAltE" )
23- local ExplodeCollide = Menu :AddBooleanUserVar ( VerificationCtx , " #acf.menu.baseplates.explode_on_collisions" , " ExplodeOnCollisions" )
24- local ExplodeCollideInfo = Menu :AddHelp (" #acf.menu.baseplates.explode_on_collisions_info" )
25- local GForceTicks = Menu :AddNumberUserVar ( VerificationCtx , " #acf.menu.baseplates.gforce_ticks" , " GForceTicks" )
26- local GForceTicksInfo = Menu :AddHelp (" #acf.menu.baseplates.gforce_ticks_info" )
15+ local ClassList = Menu :AddComboBox ()
16+
17+ -- Set default baseplate size values before creating sliders to prevent nil value errors
18+ local DefaultWidth = ACF .GetClientNumber (" Width" , 36 )
19+ local DefaultLength = ACF .GetClientNumber (" Length" , 36 )
20+ local DefaultThickness = ACF .GetClientNumber (" Thickness" , 1.5 )
21+ local DefaultGForceTicks = ACF .GetClientNumber (" GForceTicks" , 4 )
22+
23+ ACF .SetClientData (" Width" , DefaultWidth , true )
24+ ACF .SetClientData (" Length" , DefaultLength , true )
25+ ACF .SetClientData (" Thickness" , DefaultThickness , true )
26+ ACF .SetClientData (" GForceTicks" , DefaultGForceTicks , true )
27+
28+ local SizeX = Menu :AddSlider (" #acf.menu.baseplates.plate_width" , 36 , 240 , 2 )
29+ local SizeY = Menu :AddSlider (" #acf.menu.baseplates.plate_length" , 36 , 420 , 2 )
30+ local SizeZ = Menu :AddSlider (" #acf.menu.baseplates.plate_thickness" , 0.5 , 3 , 2 )
31+ local DisableAltE = Menu :AddCheckBox (" #acf.menu.baseplates.disable_alt_e" )
32+ local ExplodeCollide = Menu :AddCheckBox (" #acf.menu.baseplates.explode_on_collisions" )
33+ local ExplodeCollideInfo = Menu :AddHelp (" #acf.menu.baseplates.explode_on_collisions_info" )
34+ local GForceTicks = Menu :AddSlider (" #acf.menu.baseplates.gforce_ticks" , 1 , 7 , 0 )
35+ local GForceTicksInfo = Menu :AddHelp (" #acf.menu.baseplates.gforce_ticks_info" )
2736
2837 local BaseplateBase = Menu :AddCollapsible (" #acf.menu.baseplates.baseplate_info" , nil , " icon16/shape_square_edit.png" )
2938 local BaseplateName = BaseplateBase :AddTitle ()
3039 local BaseplateDesc = BaseplateBase :AddLabel ()
3140
41+ function ClassList :OnSelect (Index , _ , Data )
42+ if self .Selected == Data then return end
43+
44+ self .ListData .Index = Index
45+ self .Selected = Data
46+
47+ BaseplateName :SetText (Data .Name )
48+ BaseplateDesc :SetText (Data .Description )
49+
50+ local IsAircraft = Data .ID == " Aircraft"
51+ local IsRecreational = Data .ID == " Recreational"
52+
53+ ExplodeCollide :SetVisible (IsRecreational )
54+ ExplodeCollideInfo :SetVisible (IsRecreational )
55+ GForceTicks :SetVisible (IsAircraft )
56+ GForceTicksInfo :SetVisible (IsAircraft )
57+
58+ ACF .SetClientData (" BaseplateType" , Data .ID )
59+ end
60+
3261 local PreviewSettings = {
3362 FOV = 120 ,
3463 Height = 120 ,
3564 AngOffset = Angle (0 , - 90 , 0 ),
3665 }
66+
3767 local BaseplatePreview = BaseplateBase :AddModelPreview (" models/holograms/cube.mdl" , true , " Primary" )
3868 BaseplatePreview :UpdateSettings (PreviewSettings )
3969 BaseplatePreview :UpdateModel (" models/holograms/cube.mdl" , " hunter/myplastic" )
4070
41- BaseplateName .ACF_OnUpdate = function (self , KeyChanged , _ , Value ) if KeyChanged == " BaseplateType" then self :SetText (Value .Name ) end end
42- BaseplateDesc .ACF_OnUpdate = function (self , KeyChanged , _ , Value ) if KeyChanged == " BaseplateType" then self :SetText (Value .Description ) end end
43-
44- ExplodeCollide .ACF_OnUpdate = function (self , KeyChanged , _ , Value )
45- if KeyChanged == " BaseplateType" then
46- self :SetVisible (Value == BaseplateTypes .Get (" Recreational" ))
47- self :GetParent ():InvalidateLayout ()
48- end
49- end
50- ExplodeCollideInfo .ACF_OnUpdate = ExplodeCollide .ACF_OnUpdate
51-
52- GForceTicks .ACF_OnUpdate = function (self , KeyChanged , _ , Value )
53- if KeyChanged == " BaseplateType" then
54- self :SetVisible (Value == BaseplateTypes .Get (" Aircraft" ))
55- self :GetParent ():InvalidateLayout ()
56- end
57- end
58- GForceTicksInfo .ACF_OnUpdate = GForceTicks .ACF_OnUpdate
59-
6071 local function UpdatePreviewSize ()
6172 local X , Y , Z = SizeX :GetValue (), SizeY :GetValue (), SizeZ :GetValue ()
6273 BaseplatePreview :SetModelScale (Vector (Y , X , Z )) -- Yes, X and Y are swapped on purpose...
6374 end
64- local function ProducerSelfUpdate (Self , _ , Producer ) if Self == Producer then UpdatePreviewSize () end end
65- SizeX .ACF_OnUpdate = ProducerSelfUpdate
66- SizeY .ACF_OnUpdate = ProducerSelfUpdate
67- SizeZ .ACF_OnUpdate = ProducerSelfUpdate
75+
76+ SizeX :SetClientData (" Width" , " OnValueChanged" )
77+ SizeX :DefineSetter (function (Panel , _ , _ , Value )
78+ local X = math .Round (Value , 2 )
79+
80+ Panel :SetValue (X )
81+ UpdatePreviewSize ()
82+ return X
83+ end )
84+
85+ SizeY :SetClientData (" Length" , " OnValueChanged" )
86+ SizeY :DefineSetter (function (Panel , _ , _ , Value )
87+ local Y = math .Round (Value , 2 )
88+
89+ Panel :SetValue (Y )
90+ UpdatePreviewSize ()
91+ return Y
92+ end )
93+
94+ SizeZ :SetClientData (" Thickness" , " OnValueChanged" )
95+ SizeZ :DefineSetter (function (Panel , _ , _ , Value )
96+ local Z = math .Round (Value , 2 )
97+
98+ Panel :SetValue (Z )
99+ UpdatePreviewSize ()
100+ return Z
101+ end )
102+
103+ GForceTicks :SetClientData (" GForceTicks" , " OnValueChanged" )
104+ GForceTicks :DefineSetter (function (Panel , _ , _ , Value )
105+ local Ticks = math .Round (Value , 0 )
106+
107+ Panel :SetValue (Ticks )
108+
109+ return Ticks
110+ end )
111+
112+ DisableAltE :SetClientData (" DisableAltE" , " OnChange" )
113+ ExplodeCollide :SetClientData (" ExplodeOnCollisions" , " OnChange" )
114+
68115 UpdatePreviewSize ()
69116
70117 local BaseplateConvertInfo = Menu :AddCollapsible (" #acf.menu.baseplates.convert" )
@@ -73,6 +120,10 @@ local function CreateMenu(Menu)
73120 BaseplateConvertText = BaseplateConvertText .. language .GetPhrase (" acf.menu.baseplates.convert_info" .. I )
74121 end
75122 BaseplateConvertInfo :AddLabel (BaseplateConvertText )
123+
124+ local Entries = BaseplateTypes .GetEntries ()
125+ ACF .LoadSortedList (ClassList , Entries , " Name" , " Icon" )
126+ ClassList :ChooseOptionID (2 )
76127end
77128
78129ACF .AddMenuItem (50 , " #acf.menu.entities" , " #acf.menu.baseplates" , " shape_square" , CreateMenu )
0 commit comments