Skip to content

Commit 10378ff

Browse files
committed
ee
1 parent fce33da commit 10378ff

File tree

5 files changed

+466
-3
lines changed

5 files changed

+466
-3
lines changed

source/backend/ClientPrefs.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ import states.TitleState;
164164
public var pauseBPM:Int = 102;
165165
public var aprilFools:Bool = true;
166166
public var freeplayMenu:String = 'Mixtape';
167+
public var showMods:Bool = false;
167168
}
168169

169170
class ClientPrefs {
Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
package options;
2+
3+
import objects.AttachedText;
4+
import objects.CheckboxThingie;
5+
import options.GameplayChangersSubstate.GameplayOption;
6+
7+
import archipelago.APEntryState;
8+
import objects.AttachedText;
9+
import objects.CheckboxThingie;
10+
import objects.Note;
11+
12+
import options.Option.OptionType;
13+
14+
class CategoriesSubstate extends MusicBeatSubstate
15+
{
16+
private var curSelected:Int = 0;
17+
private var optionsArray:Array<Dynamic> = [];
18+
19+
private var checkboxGroup:FlxTypedGroup<CheckboxThingie>;
20+
21+
22+
private var grpOptions:FlxTypedGroup<Alphabet>;
23+
private var grpTexts:FlxTypedGroup<AttachedText>;
24+
25+
private var curOption(get, never):GameplayOption;
26+
function get_curOption() return optionsArray[curSelected];
27+
28+
function getOptions()
29+
{
30+
var option:GameplayOption = new GameplayOption('Show Mods as Categories', 'showMods', BOOL, false);
31+
32+
option.setValue(ClientPrefs.data.showMods);
33+
34+
// option.description = 'Show mods as categories in the mod menu.';
35+
36+
option.onChange = function actuallyChangeFucker()
37+
{
38+
ClientPrefs.data.showMods = option.getValue();
39+
FlxG.sound.play(Paths.sound('scrollMenu'));
40+
}; // Because for some unknonw reason, this isn't changing it automatically...
41+
42+
43+
optionsArray.push(option);
44+
}
45+
46+
public function getOptionByName(name:String)
47+
{
48+
for(i in optionsArray)
49+
{
50+
var opt:GameplayOption = i;
51+
if (opt.name == name)
52+
return opt;
53+
}
54+
return null;
55+
}
56+
57+
public function new()
58+
{
59+
super();
60+
61+
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
62+
bg.alpha = 0.6;
63+
add(bg);
64+
65+
// avoids lagspikes while scrolling through menus!
66+
grpOptions = new FlxTypedGroup<Alphabet>();
67+
add(grpOptions);
68+
69+
grpTexts = new FlxTypedGroup<AttachedText>();
70+
add(grpTexts);
71+
72+
checkboxGroup = new FlxTypedGroup<CheckboxThingie>();
73+
add(checkboxGroup);
74+
75+
getOptions();
76+
77+
for (i in 0...optionsArray.length)
78+
{
79+
var optionText:Alphabet = new Alphabet(150, 360, optionsArray[i].name, true);
80+
optionText.isMenuItem = true;
81+
optionText.setScale(0.8);
82+
optionText.targetY = i;
83+
grpOptions.add(optionText);
84+
85+
if(optionsArray[i].type == BOOL)
86+
{
87+
optionText.x += 60;
88+
optionText.startPosition.x += 60;
89+
optionText.snapToPosition();
90+
var checkbox:CheckboxThingie = new CheckboxThingie(optionText.x - 105, optionText.y, optionsArray[i].getValue() == true);
91+
checkbox.sprTracker = optionText;
92+
checkbox.offsetX -= 20;
93+
checkbox.offsetY = -52;
94+
checkbox.ID = i;
95+
checkboxGroup.add(checkbox);
96+
}
97+
else
98+
{
99+
optionText.snapToPosition();
100+
var valueText:AttachedText = new AttachedText(Std.string(optionsArray[i].getValue()), optionText.width + 40, 0, true, 0.8);
101+
valueText.sprTracker = optionText;
102+
valueText.copyAlpha = true;
103+
valueText.ID = i;
104+
grpTexts.add(valueText);
105+
optionsArray[i].setChild(valueText);
106+
}
107+
updateTextFrom(optionsArray[i]);
108+
}
109+
110+
changeSelection();
111+
reloadCheckboxes();
112+
}
113+
114+
var nextAccept:Int = 5;
115+
var holdTime:Float = 0;
116+
var holdValue:Float = 0;
117+
override function update(elapsed:Float)
118+
{
119+
if (controls.UI_UP_P)
120+
changeSelection(-1);
121+
122+
if (controls.UI_DOWN_P)
123+
changeSelection(1);
124+
125+
if (controls.BACK)
126+
{
127+
close();
128+
ClientPrefs.saveSettings();
129+
FlxG.sound.play(Paths.sound('cancelMenu'));
130+
}
131+
132+
if(nextAccept <= 0)
133+
{
134+
var usesCheckbox:Bool = (curOption.type == BOOL);
135+
if(usesCheckbox)
136+
{
137+
if(controls.ACCEPT)
138+
{
139+
FlxG.sound.play(Paths.sound('scrollMenu'));
140+
curOption.setValue((curOption.getValue() == true) ? false : true);
141+
curOption.change();
142+
reloadCheckboxes();
143+
}
144+
}
145+
else
146+
{
147+
if(controls.UI_LEFT || controls.UI_RIGHT)
148+
{
149+
var pressed = (controls.UI_LEFT_P || controls.UI_RIGHT_P);
150+
if(holdTime > 0.5 || pressed)
151+
{
152+
if(pressed)
153+
{
154+
var add:Dynamic = null;
155+
if(curOption.type != STRING)
156+
add = controls.UI_LEFT ? -curOption.changeValue : curOption.changeValue;
157+
158+
switch(curOption.type)
159+
{
160+
case INT, FLOAT, PERCENT:
161+
holdValue = curOption.getValue() + add;
162+
if(holdValue < curOption.minValue) holdValue = curOption.minValue;
163+
else if (holdValue > curOption.maxValue) holdValue = curOption.maxValue;
164+
165+
switch(curOption.type)
166+
{
167+
case INT:
168+
holdValue = Math.round(holdValue);
169+
curOption.setValue(holdValue);
170+
171+
case FLOAT, PERCENT:
172+
holdValue = FlxMath.roundDecimal(holdValue, curOption.decimals);
173+
curOption.setValue(holdValue);
174+
175+
default:
176+
}
177+
178+
case STRING:
179+
var num:Int = curOption.curOption; //lol
180+
if(controls.UI_LEFT_P) --num;
181+
else num++;
182+
183+
if(num < 0)
184+
num = curOption.options.length - 1;
185+
else if(num >= curOption.options.length)
186+
num = 0;
187+
188+
curOption.curOption = num;
189+
curOption.setValue(curOption.options[num]); //lol
190+
191+
if (curOption.name == "Scroll Type")
192+
{
193+
var oOption:GameplayOption = getOptionByName("Scroll Speed");
194+
if (oOption != null)
195+
{
196+
if (curOption.getValue() == "constant")
197+
{
198+
oOption.displayFormat = "%v";
199+
oOption.maxValue = 6;
200+
}
201+
else
202+
{
203+
oOption.displayFormat = "%vX";
204+
oOption.maxValue = 3;
205+
if(oOption.getValue() > 3) oOption.setValue(3);
206+
}
207+
updateTextFrom(oOption);
208+
}
209+
}
210+
//trace(curOption.options[num]);
211+
212+
default:
213+
}
214+
updateTextFrom(curOption);
215+
curOption.change();
216+
FlxG.sound.play(Paths.sound('scrollMenu'));
217+
}
218+
else if(curOption.type != STRING)
219+
{
220+
holdValue = Math.max(curOption.minValue, Math.min(curOption.maxValue, holdValue + curOption.scrollSpeed * elapsed * (controls.UI_LEFT ? -1 : 1)));
221+
222+
switch(curOption.type)
223+
{
224+
case INT:
225+
curOption.setValue(Math.round(holdValue));
226+
227+
case FLOAT, PERCENT:
228+
var blah:Float = Math.max(curOption.minValue, Math.min(curOption.maxValue, holdValue + curOption.changeValue - (holdValue % curOption.changeValue)));
229+
curOption.setValue(FlxMath.roundDecimal(blah, curOption.decimals));
230+
231+
default:
232+
}
233+
updateTextFrom(curOption);
234+
curOption.change();
235+
}
236+
}
237+
238+
if(curOption.type != STRING)
239+
holdTime += elapsed;
240+
}
241+
else if(controls.UI_LEFT_R || controls.UI_RIGHT_R)
242+
clearHold();
243+
}
244+
245+
if(controls.RESET)
246+
{
247+
for (i in 0...optionsArray.length)
248+
{
249+
var leOption:GameplayOption = optionsArray[i];
250+
leOption.setValue(leOption.defaultValue);
251+
if(leOption.type != BOOL)
252+
{
253+
if(leOption.type == STRING)
254+
leOption.curOption = leOption.options.indexOf(leOption.getValue());
255+
256+
updateTextFrom(leOption);
257+
}
258+
259+
if(leOption.name == 'Scroll Speed')
260+
{
261+
leOption.displayFormat = "%vX";
262+
leOption.maxValue = 3;
263+
if(leOption.getValue() > 3)
264+
leOption.setValue(3);
265+
266+
updateTextFrom(leOption);
267+
}
268+
leOption.change();
269+
}
270+
FlxG.sound.play(Paths.sound('cancelMenu'));
271+
reloadCheckboxes();
272+
}
273+
}
274+
275+
if(nextAccept > 0) {
276+
nextAccept -= 1;
277+
}
278+
super.update(elapsed);
279+
}
280+
281+
function updateTextFrom(option:GameplayOption) {
282+
var text:String = option.displayFormat;
283+
var val:Dynamic = option.getValue();
284+
if(option.type == PERCENT) val *= 100;
285+
var def:Dynamic = option.defaultValue;
286+
option.text = text.replace('%v', val).replace('%d', def);
287+
}
288+
289+
function clearHold()
290+
{
291+
if(holdTime > 0.5)
292+
FlxG.sound.play(Paths.sound('scrollMenu'));
293+
294+
holdTime = 0;
295+
}
296+
297+
function changeSelection(change:Int = 0)
298+
{
299+
curSelected = FlxMath.wrap(curSelected + change, 0, optionsArray.length - 1);
300+
for (num => item in grpOptions.members)
301+
{
302+
item.targetY = num - curSelected;
303+
item.alpha = 0.6;
304+
if (item.targetY == 0)
305+
item.alpha = 1;
306+
}
307+
for (text in grpTexts)
308+
{
309+
text.alpha = 0.6;
310+
if(text.ID == curSelected)
311+
text.alpha = 1;
312+
}
313+
FlxG.sound.play(Paths.sound('scrollMenu'));
314+
}
315+
316+
function reloadCheckboxes() {
317+
for (checkbox in checkboxGroup) {
318+
checkbox.daValue = (optionsArray[checkbox.ID].getValue() == true);
319+
}
320+
}
321+
}
322+

0 commit comments

Comments
 (0)