Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 4931e54

Browse files
committed
hi
1 parent 7763d17 commit 4931e54

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+297
-291
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@
2626
- Custom mods examples
2727
- Modchart Examples
2828
- More stuff im forgeting
29-
- False paradise stuff... modchart still wip !! some modifiers are not working, dont play it yet
29+
- False paradise stuff... modchart still wip !! some modifiers are not working, dont play it yet
30+
31+
# 24/10/24
32+
- Improved Infinite Modifier
33+
- Optimization and code improvement
34+
- Bounce Mod

source/modchart/Manager.hx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class Manager extends FlxBasic
200200
});
201201
}
202202
drawCB.sort((a, b) -> {
203-
return Math.floor(b.z - a.z);
203+
return Math.round(b.z - a.z);
204204
});
205205

206206
for (item in drawCB) item.callback();
@@ -209,14 +209,14 @@ class Manager extends FlxBasic
209209
final lane = receptor.extra.get('lane') ?? 0;
210210
final field = receptor.extra.get('field') ?? 0;
211211

212-
final noteData = {
212+
final noteData:NoteData = {
213213
time: 0.,
214214
hDiff: 0.,
215215
receptor: lane,
216216
field: field,
217217
arrow: false
218218
};
219-
final visuals = modifiers.getVisuals(noteData);
219+
final visuals:Visuals = modifiers.getVisuals(noteData);
220220

221221
var lastScale = receptor.scale.clone();
222222

@@ -252,10 +252,12 @@ class Manager extends FlxBasic
252252
receptor.drawComplex(camera);
253253

254254
receptor.scale.copyFrom(lastScale);
255+
256+
lastScale.put();
255257
}
256258
function drawTapArrow(arrow:Note) @:privateAccess {
257259
final diff = arrow.strumTime - Conductor.songPosition;
258-
final noteData = {
260+
final noteData:NoteData = {
259261
time: arrow.strumTime,
260262
hDiff: diff,
261263
receptor: arrow.strumID,
@@ -300,6 +302,8 @@ class Manager extends FlxBasic
300302
arrow.drawComplex(camera);
301303

302304
arrow.scale.copyFrom(lastScale);
305+
306+
lastScale.put();
303307
}
304308
function drawHoldArrow(arrow:Note) @:privateAccess {
305309
var basePos = new Vector3D(
@@ -372,7 +376,7 @@ class Manager extends FlxBasic
372376
colorTransf
373377
);
374378
}
375-
function getNoteData(arrow:Note, posOff:Float = 0)
379+
function getNoteData(arrow:Note, posOff:Float = 0):NoteData
376380
{
377381
var pos = (arrow.strumTime - Conductor.songPosition) + posOff;
378382

source/modchart/Modifier.hx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class Modifier
2626
{
2727
return curPos;
2828
}
29-
public function visuals(data:Visuals, params:RenderParams)
29+
public function visuals(data:Visuals, params:RenderParams):Visuals
3030
{
3131
return data;
3232
}
@@ -36,7 +36,7 @@ class Modifier
3636
}
3737
public function getAliases():Array<String>
3838
return [];
39-
public function shouldRun():Bool
39+
public function shouldRun(params:RenderParams):Bool
4040
return false;
4141

4242
public function setPercent(name:String, value:Float, ?cField:Int)

source/modchart/core/ModifierGroup.hx

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import modchart.modifiers.false_paradise.*;
1111
import funkin.backend.system.Conductor;
1212
import modchart.core.util.ModchartUtil;
1313

14+
import haxe.ds.StringMap;
15+
import haxe.ds.IntMap;
16+
1417
class ModifierGroup
1518
{
1619
public static var GLOBAL_MODIFIERS:Map<String, Class<Modifier>> = [
@@ -44,16 +47,15 @@ class ModifierGroup
4447
'eyeshape' => EyeShape,
4548
'spiral' => Spiral,
4649
'counterclockwise' => CounterClockWise,
47-
'vibrate' => Vibrate
50+
'vibrate' => Vibrate,
51+
'bounce' => Bounce
4852
];
4953
private var MODIFIER_REGISTRERY:Map<String, Class<Modifier>> = GLOBAL_MODIFIERS;
5054

51-
public var percents:Map<String, Map<Int, Float>> = [];
52-
public var modifiers:Map<String, Modifier> = [];
55+
private var percents:StringMap<IntMap<Float>> = new StringMap();
56+
private var modifiers:StringMap<Modifier> = new StringMap();
5357

54-
// apparently the maps dont care in what order you declare the values, they order them as they want
55-
// i hate maps
56-
public var sortedMods:Array<String> = [];
58+
private var sortedMods:List<String> = new List<String>();
5759

5860
public function new() {}
5961

@@ -67,7 +69,7 @@ class ModifierGroup
6769
}
6870
public function getVisuals(data:NoteData):Visuals
6971
{
70-
var visuals = {
72+
var visuals:Visuals = {
7173
scaleX: 1.,
7274
scaleY: 1.,
7375
angle: 0.,
@@ -79,15 +81,13 @@ class ModifierGroup
7981
glowB: 0.
8082
};
8183

82-
for (name in sortedMods)
83-
{
84-
var mod = modifiers.get(name);
85-
mod.field = data.field;
84+
final iterator = sortedMods.iterator();
8685

87-
if (!mod.shouldRun())
88-
continue;
86+
do {
87+
final mod = modifiers.get(iterator.next());
88+
mod.field = data.field;
8989

90-
var args = {
90+
final args:RenderParams = {
9191
// fuck u haxe
9292
perc: 0.0,
9393
sPos: Conductor.songPosition,
@@ -98,23 +98,23 @@ class ModifierGroup
9898
field: data.field,
9999
arrow: data.arrow
100100
}
101+
if (!mod.shouldRun(args))
102+
continue;
101103

102104
visuals = mod.visuals(visuals, args);
103-
}
105+
} while (iterator.hasNext());
104106

105107
return visuals;
106108
}
107109
public function renderMods(pos:Vector3D, data:NoteData, ?posDiff:Float = 0):Vector3D
108110
{
109-
for (name in sortedMods)
110-
{
111-
var mod = modifiers.get(name);
112-
mod.field = data.field;
111+
final iterator = sortedMods.iterator();
113112

114-
if (!mod.shouldRun())
115-
continue;
113+
do {
114+
final mod = modifiers.get(iterator.next());
115+
mod.field = data.field;
116116

117-
var args = {
117+
final args:RenderParams = {
118118
// fuck u haxe
119119
perc: 0.0,
120120
sPos: Conductor.songPosition,
@@ -126,8 +126,11 @@ class ModifierGroup
126126
arrow: data.arrow
127127
}
128128

129+
if (!mod.shouldRun(args))
130+
continue;
131+
129132
pos = mod.render(pos, args);
130-
}
133+
} while (iterator.hasNext());
131134

132135
return pos;
133136
}
@@ -151,12 +154,12 @@ class ModifierGroup
151154

152155
var newModifier = Type.createInstance(modifierClass, []);
153156
modifiers.set(name.toLowerCase(), newModifier);
154-
sortedMods.push(name.toLowerCase());
157+
sortedMods.add(name.toLowerCase());
155158
}
156159

157160
public function setPercent(name:String, value:Float, field:Int = -1)
158161
{
159-
final percs = percents.get(name.toLowerCase()) ?? [0 => 0, 1 => 0];
162+
final percs = percents.get(name.toLowerCase()) ?? getDefaultPerc();
160163

161164
if (field == -1)
162165
for (k => _ in percs) percs.set(k, value);
@@ -167,4 +170,12 @@ class ModifierGroup
167170
}
168171
public function getPercent(name:String, field:Int):Float
169172
return percents.get(name.toLowerCase())?.get(field) ?? 0;
173+
174+
private function getDefaultPerc():IntMap<Float>
175+
{
176+
final percmap = new IntMap<Float>();
177+
percmap.set(0, 0.);
178+
percmap.set(1, 0.);
179+
return percmap;
180+
}
170181
}

source/modchart/core/ScriptedModifier.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ class ScriptedModifier extends Modifier
2727

2828
return data;
2929
}
30-
override public function shouldRun():Bool
30+
override public function shouldRun(params:RenderParams):Bool
3131
return true;
3232
}

source/modchart/core/util/Constants.hx

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,39 @@ import flixel.util.FlxColor;
44

55
class Constants {}
66

7-
typedef RenderParams = {
8-
// Mod Percent
9-
perc:Float,
10-
// Song Position
11-
sPos:Float,
12-
// Hit Time
13-
time:Float,
14-
// Beat Float
15-
fBeat:Float,
16-
// Hit Time Difference
17-
hDiff:Float,
18-
// Receptor ID
19-
receptor:Int,
20-
// Field ID
21-
field:Int,
22-
// If it is an arrow of receptor,
23-
arrow:Bool
24-
};
25-
typedef NoteData = {
26-
// Hit Time
27-
time:Float,
28-
// Hit Time Difference
29-
hDiff:Float,
30-
// Receptor ID
31-
receptor:Int,
32-
// Field ID
33-
field:Int,
34-
// If it is an arrow of receptor,
35-
arrow:Bool
7+
@:structInit
8+
class RenderParams
9+
{
10+
public var perc:Float;
11+
public var sPos:Float;
12+
public var time:Float;
13+
public var fBeat:Float;
14+
public var hDiff:Float;
15+
public var receptor:Int;
16+
public var field:Int;
17+
public var arrow:Bool;
3618
}
37-
typedef Visuals = {
38-
scaleX:Float,
39-
scaleY:Float,
40-
alpha:Float,
41-
angle:Float,
42-
zoom:Float,
43-
glow:Float,
44-
glowR:Float,
45-
glowG:Float,
46-
glowB:Float
19+
20+
@:structInit
21+
class NoteData
22+
{
23+
public var time:Float;
24+
public var hDiff:Float;
25+
public var receptor:Int;
26+
public var field:Int;
27+
public var arrow:Bool;
28+
}
29+
30+
@:structInit
31+
class Visuals
32+
{
33+
public var scaleX:Float;
34+
public var scaleY:Float;
35+
public var alpha:Float;
36+
public var angle:Float;
37+
public var zoom:Float;
38+
public var glow:Float;
39+
public var glowR:Float;
40+
public var glowG:Float;
41+
public var glowB:Float;
4742
}

0 commit comments

Comments
 (0)