-
Notifications
You must be signed in to change notification settings - Fork 1
/
Spawner.java
187 lines (172 loc) · 3.56 KB
/
Spawner.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/**
* Class Spawner
* object that is to be used to spawn new pix.
*
* Tries to save framerate by spawning one per frame,
* unless you call spawn(num)
* But still pretty much kills the framerate anyhow
* @author Nic Manoogian <[email protected]>
* @author Mike Lyons
*
*/
public class Spawner
{
private boolean needRespawn;
private int respawnCounter;
private int respawnMax;
private int numSpawn;
private int numSpawnMax;
/*
* Default x and y, if none then == -1
*/
private int defaultX;
private int defaultY;
private Class<?> spawnClass;
private static PixGrid grid;
/**
* Creates a generic spawner that spawns 10 random of the given
*/
public Spawner()
{
needRespawn = false;
respawnCounter = 0;
respawnMax = 200;
numSpawn = 5;
numSpawnMax = 20;
defaultX = -1;
defaultY = -1;
spawnClass = Pix.class;
}
/**
* Creates a spawner that will spawn the given class 10 times randomly
* @param c Class to spawn (PulsePix.class)
*/
public Spawner(Class<?> c)
{
this();
this.spawnClass = c;
}
/**
* Creates a Spawner that will spawn a given class to a given grid
* @param c Class to spawn (PulsePix.class)
* @param grid PixGrid object
*/
public Spawner(Class<?> c, PixGrid grid)
{
this();
this.spawnClass = c;
this.grid = grid;
}
/**
* Creates a Spawner with a give class, grid and default x and y locations
* @param c Class to spawn
* @param grid PixGrid object
* @param dx default x
* @param dy default y
*/
public Spawner(Class<?> c, PixGrid grid, int dx, int dy)
{
this(c, grid);
this.spawnClass = c;
this.grid = grid;
this.defaultX = dx;
this.defaultY = dy;
}
/**
* Spawns random instances of the spawn class to the grid
*/
public void spawn()
{
if(Pix.class.isAssignableFrom(spawnClass))
{
try {
if( defaultX != -1 && defaultY != -1 )
{
grid.getGrid()[defaultX][defaultY] = (Pix)spawnClass.newInstance();
}
else
{
grid.getGrid()[(int)(Math.random() * grid.getGrid().length)][(int)(Math.random() *
grid.getGrid()[0].length)] = (Pix)spawnClass.newInstance();
}
} catch(Exception e) {
e.printStackTrace();
}
}
else
{
System.out.println("Class not found");
}
}
/**
* Spawns a number of instances of the spawn class to the grid
* @param num number of instances to spawn
*/
public void spawn(int num)
{
if(Pix.class.isAssignableFrom(spawnClass))
{
for( int i = 0; i < num; i ++ )
{
try
{
grid.getGrid()[(int)(Math.random() * grid.getGrid().length)][(int)(Math.random() * grid.getGrid()[0].length)] = (Pix)spawnClass.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
else
{
System.out.println("Class not found");
}
}
/**
* Spawns a specific instance of a class to a specific x and y location
* @param c class to spawn
* @param x x location to spawn
* @param y y location to spawn
*/
public static void spawnXY(Class<?> c, int x, int y)
{
if(Pix.class.isAssignableFrom(c))
{
try {
grid.getGrid()[x][y] = (Pix)c.newInstance();
} catch(Exception e) {
e.printStackTrace();
}
}
else
{
System.out.println("Class not found");
}
}
/**
* Determines if a spawn is necessary, otherwise, increase counter
*/
public void update()
{
if( respawnMax != -1 )
{
respawnCounter++;
if( respawnCounter > respawnMax )
{
needRespawn = true;
respawnCounter = 0;
}
}
if( needRespawn )
{
spawn();
numSpawn--;
if( numSpawn == 0 )
{
numSpawn = numSpawnMax;
needRespawn = false;
}
}
}
}