1+ package managers ;
2+
3+ import substates .RankingSubstate ;
4+ /**
5+ RANKING MANAGER INFO
6+ * This bad boy not only manages the ranking, but is also the ranking image itself!
7+ * Anything that needs the ranking to be present will use this manager to do so.
8+ * ya know, for consistancy sake
9+ * that and it beats having to make a new one every time.
10+ * Here's what this manager does:
11+
12+ ** Manages the image that displays the ranking
13+ ** saves and loads the ranking
14+ ** can be either big (RankingSubState) or small (Freeplay)
15+
16+ if this needs to do literally anything else, it'll be added here.
17+ **/
18+ class RankingManager extends FlxSprite {
19+ public static var instance : RankingManager ;
20+ public var rankTable : Array <String > = [
21+ ' P' , ' X' , ' X-' , ' SS+' , ' SS-' , ' SS-' , ' S+' , ' S' , ' S-' , ' A+' , ' A' , ' A-' , ' B' , ' C' , ' D' , ' E' , ' NA' , ' F'
22+ ];
23+
24+ var size : String = ' small' ;
25+
26+ override public function new (size : String , ? defalutRank : String = ' NA' ) {
27+ this .size = size ;
28+ instance = this ;
29+ super ();
30+
31+ switch (size ) {
32+ case " small" :
33+ loadGraphic (Paths .image (' rankings/ $defalutRank -small' ));
34+ scale .x = scale .y = 80 / height ;
35+ updateHitbox ();
36+ antialiasing = true ;
37+ scrollFactor .set ();
38+ y = 690 - height ;
39+ x = - 200 + FlxG .width - 50 ;
40+ alpha = 0 ;
41+ case " big" :
42+ loadGraphic (Paths .image (' rankings/ $defalutRank ' ));
43+ scrollFactor .set ();
44+ antialiasing = true ;
45+ setGraphicSize (0 , 450 );
46+ updateHitbox ();
47+ screenCenter ();
48+ alpha = 0 ;
49+ }
50+ }
51+
52+ public function doTween (tween : String , ? time : Float = 0.5 , ? amount : Float = 1 ) {
53+ switch (tween ) {
54+ case ' in' :
55+ FlxTween .tween (this , {alpha : amount }, 0.5 , {ease : FlxEase .quartInOut });
56+ case ' out' :
57+ FlxTween .tween (this , {alpha : 0 }, 0.5 , {ease : FlxEase .quartInOut });
58+ }
59+ }
60+
61+ var rankingNum : Int = 15 ;
62+ var wifeConditions : Array <Bool > = [];
63+ override public function update (elapsed : Float ) {
64+ super .update (elapsed );
65+ el = elapsed ;
66+ }
67+
68+ // TODO: Make this better lol
69+ public static function grabLimits (grade : String , accuracy : String ) {
70+ switch (grade ) {
71+ case ' Any' :
72+ RankingSubstate .comboRankSetLimit = 0 ;
73+ case " MFC" :
74+ RankingSubstate .comboRankSetLimit = 1 ;
75+ case " SFC" :
76+ RankingSubstate .comboRankSetLimit = 2 ;
77+ case " GFC" :
78+ RankingSubstate .comboRankSetLimit = 3 ;
79+ case " AFC" :
80+ RankingSubstate .comboRankSetLimit = 4 ;
81+ case " FC" :
82+ RankingSubstate .comboRankSetLimit = 5 ;
83+ case " SDCB" :
84+ RankingSubstate .comboRankSetLimit = 6 ;
85+ }
86+
87+ switch (accuracy ) {
88+ case " Any" :
89+ RankingSubstate .accRankSetLimit = 0 ;
90+ case " P" :
91+ RankingSubstate .accRankSetLimit = 1 ;
92+ case " X" :
93+ RankingSubstate .accRankSetLimit = 2 ;
94+ case " X-" :
95+ RankingSubstate .accRankSetLimit = 3 ;
96+ case " SS+" :
97+ RankingSubstate .accRankSetLimit = 4 ;
98+ case " SS" :
99+ RankingSubstate .accRankSetLimit = 5 ;
100+ case " SS-" :
101+ RankingSubstate .accRankSetLimit = 6 ;
102+ case " S+" :
103+ RankingSubstate .accRankSetLimit = 7 ;
104+ case " S" :
105+ RankingSubstate .accRankSetLimit = 8 ;
106+ case " S-" :
107+ RankingSubstate .accRankSetLimit = 9 ;
108+ case " A+" :
109+ RankingSubstate .accRankSetLimit = 10 ;
110+ case " A" :
111+ RankingSubstate .accRankSetLimit = 11 ;
112+ case " A-" :
113+ RankingSubstate .accRankSetLimit = 12 ;
114+ case " B" :
115+ RankingSubstate .accRankSetLimit = 13 ;
116+ case " C" :
117+ RankingSubstate .accRankSetLimit = 14 ;
118+ case " D" :
119+ RankingSubstate .accRankSetLimit = 15 ;
120+ case " E" :
121+ RankingSubstate .accRankSetLimit = 16 ;
122+ }
123+ }
124+
125+ var intendedRating : Int = 0 ;
126+ var lerpRating : Int = 0 ;
127+ var el : Float = 0 ;
128+ public var rankOverride : Bool = true ;
129+ public function updateRank () {
130+ var acc = CoolUtil .floorDecimal (PlayState .instance .comboManager .ratingPercent * 100 , 2 );
131+ wifeConditions = [
132+ acc >= 99.9935 , // P
133+ acc >= 99.980 , // X
134+ acc >= 99.950 , // X-
135+ acc >= 99.90 , // SS+
136+ acc >= 99.80 , // SS
137+ acc >= 99.70 , // SS-
138+ acc >= 99.50 , // S+
139+ acc >= 99 , // S
140+ acc >= 96.50 , // S-
141+ acc >= 93 , // A+
142+ acc >= 90 , // A
143+ acc >= 85 , // A-
144+ acc >= 80 , // B
145+ acc >= 70 , // C
146+ acc >= 69 , // Nice
147+ acc >= 60 , // D
148+ acc < 60 // E
149+ ];
150+ for (i in 0 ... wifeConditions .length )
151+ {
152+ var b = wifeConditions [i ];
153+ if (b )
154+ {
155+ rankingNum = i ;
156+ if (PlayState .deathCounter >= 30 || acc == 0 )
157+ rankingNum = 17 ;
158+ break ;
159+ }
160+ }
161+ switch (size ) {
162+ case ' small' :
163+ loadGraphic (Paths .image (' rankings/ ${rankTable [rankingNum ]}-small' ));
164+ scale .x = scale .y = 140 / height ;
165+ updateHitbox ();
166+ antialiasing = true ;
167+ scrollFactor .set ();
168+ case ' big' :
169+ loadGraphic (Paths .image (' rankings/ ${rankTable [rankingNum ]}' ));
170+ scrollFactor .set ();
171+ setGraphicSize (0 , 450 );
172+ updateHitbox ();
173+ screenCenter ();
174+ }
175+ }
176+
177+ public function setRank (rankNum : Int , ? instant : Bool = false ) {
178+ rankOverride = true ;
179+ intendedRating = rankNum ;
180+ lerpRating = Std .int (FlxMath .lerp (intendedRating , lerpRating , Math .exp (- el * 12 )));
181+ if (Math .abs (lerpRating - intendedRating ) <= 0 || instant )
182+ lerpRating = intendedRating ;
183+
184+ switch (size ) {
185+ case ' small' :
186+ loadGraphic (Paths .image (' rankings/ ${rankTable [lerpRating ]}-small' ));
187+ scale .x = scale .y = 140 / height ;
188+ updateHitbox ();
189+ antialiasing = true ;
190+ scrollFactor .set ();
191+ y = 690 - height ;
192+ x = - 200 + FlxG .width - 50 ;
193+ case ' big' :
194+ loadGraphic (Paths .image (' rankings/ ${rankTable [lerpRating ]}' ));
195+ scrollFactor .set ();
196+ setGraphicSize (0 , 450 );
197+ updateHitbox ();
198+ screenCenter ();
199+ }
200+ }
201+ }
0 commit comments