3
3
import arc .*;
4
4
import arc .graphics .*;
5
5
import arc .graphics .g2d .*;
6
+ import arc .struct .*;
6
7
import arc .util .*;
7
8
import mindustry .entities .part .*;
9
+ import mindustry .game .EventType .*;
8
10
import progressed .graphics .*;
9
11
10
12
import static mindustry .Vars .*;
11
13
12
14
public class SpacePart extends DrawPart {
15
+ private static ObjectMap <Float , Seq <SpaceData >> draws ;
16
+
13
17
/** Appended to unit/weapon/block name and drawn. */
14
18
public String suffix = "" ;
15
19
/** Overrides suffix if set. */
@@ -19,16 +23,32 @@ public class SpacePart extends DrawPart{
19
23
20
24
public SpacePart (String suffix ){
21
25
this .suffix = suffix ;
26
+
27
+ if (draws == null ){
28
+ draws = new ObjectMap <>();
29
+
30
+ Events .run (Trigger .drawOver , () -> {
31
+ for (Float layer : draws .keys ()){
32
+ Seq <SpaceData > datas = draws .get (layer );
33
+ Draw .draw (layer , () -> {
34
+ renderer .effectBuffer .begin (Color .clear );
35
+ for (SpaceData data : datas ){
36
+ Draw .rect (data .region , data .x , data .y , data .rot );
37
+ }
38
+ renderer .effectBuffer .end ();
39
+ renderer .effectBuffer .blit (PMShaders .smallSpaceShader );
40
+ });
41
+ }
42
+ draws .clear ();
43
+ });
44
+ }
22
45
}
23
46
24
47
@ Override
25
48
public void draw (PartParams params ){
26
- Draw .draw (layer > 0 ? layer : Draw .z (), () -> {
27
- renderer .effectBuffer .begin (Color .clear );
28
- Draw .rect (region , params .x , params .y , params .rotation - 90f );
29
- renderer .effectBuffer .end ();
30
- renderer .effectBuffer .blit (PMShaders .smallSpaceShader );
31
- });
49
+ float l = layer > 0 ? layer : Draw .z ();
50
+ Seq <SpaceData > data = draws .get (l , Seq ::new );
51
+ data .add (new SpaceData (params .x , params .y , params .rotation - 90f , region ));
32
52
}
33
53
34
54
@ Override
@@ -37,4 +57,16 @@ public void load(String name){
37
57
38
58
region = Core .atlas .find (realName );
39
59
}
60
+
61
+ private static class SpaceData {
62
+ float x , y , rot ;
63
+ TextureRegion region ;
64
+
65
+ private SpaceData (float x , float y , float rot , TextureRegion region ){
66
+ this .x = x ;
67
+ this .y = y ;
68
+ this .rot = rot ;
69
+ this .region = region ;
70
+ }
71
+ }
40
72
}
0 commit comments