-
Notifications
You must be signed in to change notification settings - Fork 3
/
Explosion.java
78 lines (67 loc) · 2.21 KB
/
Explosion.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
package org.gdc.gdcalaga;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.geom.Vector2f;
public class Explosion {
private int xtiles, ytiles;
public Vector2f pos, size;
private float life, maxlife;
private ExplosionParticle[] particles;
private boolean dead;
Explosion(Vector2f position, int xnum, int ynum, Vector2f size)
{
pos = new Vector2f(position);
this.size = new Vector2f(size);
xtiles = xnum;
ytiles = ynum;
particles = new ExplosionParticle[xtiles * ytiles];
maxlife = 500f;
life = maxlife;
dead = false;
}
public void SetImage(Image img){
int imgHeight = img.getHeight();
int imgWidth = img.getWidth();
int srcw = (int)(imgWidth / xtiles);
int srch = (int)(imgHeight / ytiles);
for(int tile = 0; tile < xtiles * ytiles; tile++){
int yTile = (int) Math.floor(tile / xtiles);
int xTile = tile - yTile * xtiles;
int srcYPos = yTile * srch;
int srcXPos = xTile * srcw;
float w = (size.x / xtiles);
float h = (size.y / ytiles);
float x = xTile * w + pos.x - size.x / 2;
float y = yTile * h + pos.y - size.y / 2;
particles[tile] = new ExplosionParticle(this, x, y, w, h);
particles[tile].SetImage(img, srcXPos, srcYPos, srcw, srch);
}
SetVelocity();
}
public void SetVelocity(){
for(int tile = 0; tile < xtiles * ytiles; tile++){
particles[tile].SetVelocity();
}
}
public void update(float delta){
life -= delta;
if(life <= 0) dead = true;
if(!dead){
for(int tile = 0; tile < xtiles * ytiles; tile++){
float alpha = (life/maxlife);
particles[tile].SetColor(1f, 1f, 1f, alpha);
particles[tile].update(delta);
}
}
}
public void render(Graphics g){
if(!dead){
for(int tile = 0; tile < xtiles * ytiles; tile++){
particles[tile].render(g);
}
}
}
public boolean IsDead(){
return dead;
}
}