| C:\__todo__\tecaj.www\src\Epsilon_05\GameSprite.java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class GameSprite {
22
23
24 public static final byte SHIFT_FACTOR = 4;
25
26 public int x;
27 public int y;
28
29 public int w;
30 public int h;
31
32 public int vx;
33 public int vy;
34
35 public short energy;
36 public short energyMax;
37
38 public short damage;
39 public short score;
40
41 public byte spriteId;
42
43 public byte imageId;
44
45 public byte frameId;
46 public byte frameIdMax;
47
48 public byte fire_cooldown_frames_counter;
49
50 public boolean visible;
51
52
53
54 public static final byte[] spriteImageFrameWidths =
55 {
56 26,
57 4,
58 45,
59 47,
60 20,
61 20,
62 20,
63 16,
64 20,
65 };
66
67 public static final byte SPRITE_DATA_INDEX_IMG_ID = 0;
68 public static final byte SPRITE_DATA_INDEX_MAX_ENERGY = 1;
69 public static final byte SPRITE_DATA_INDEX_DAMAGE = 2;
70 public static final byte SPRITE_DATA_INDEX_SCORE = 3;
71
72
73 public static final short[][] spriteData = {
74 { GameCanvas.SPRITE_IMAGE_PLAYER, 200, 20, 0 },
75 { GameCanvas.SPRITE_IMAGE_ENEMY1, 40, 30, 20 },
76 { GameCanvas.SPRITE_IMAGE_ENEMY1, 40, 30, 40 },
77 { GameCanvas.SPRITE_IMAGE_ENEMY2, 20, 20, 10 },
78 { GameCanvas.SPRITE_IMAGE_ENEMY2, 20, 20, 20 },
79 { GameCanvas.SPRITE_IMAGE_ENEMY3, 60, 40, 30 },
80 { GameCanvas.SPRITE_IMAGE_ENEMY3, 60, 40, 60 },
81 { GameCanvas.SPRITE_IMAGE_ENEMY3, 60, 20,100 },
82 { GameCanvas.SPRITE_IMAGE_ENEMY4, 40, 20, 20 },
83 { GameCanvas.SPRITE_IMAGE_BOSS1, 500, 100, 100 },
84 { GameCanvas.SPRITE_IMAGE_BOSS2, 750, 100, 300 },
85 { GameCanvas.SPRITE_IMAGE_EXPLOSION, 0, 0, 0 },
86 { GameCanvas.SPRITE_IMAGE_FIRE, 0, 20, 0 },
87 { GameCanvas.SPRITE_IMAGE_FIRE, 0, 20, 0 },
88 { GameCanvas.SPRITE_IMAGE_FIRE, 0, 10, 0 },
89 };
90
91 public static final byte EXPLOSION_FRAME_SMOKE_START = 2;
92
93 GameSprite( byte sprite_id )
94 {
95 spriteId = sprite_id;
96 imageId = (byte) spriteData[sprite_id][SPRITE_DATA_INDEX_IMG_ID];
97 w = spriteImageFrameWidths[imageId];
98 h = GameCanvas.spriteImages[imageId].getHeight();
99 frameId = 0;
100 frameIdMax = (byte) (GameCanvas.spriteImages[imageId].getWidth() / w - 1);
101 vx = 4 << SHIFT_FACTOR;
102 vy = 4 << SHIFT_FACTOR;
103 energyMax = spriteData[sprite_id][SPRITE_DATA_INDEX_MAX_ENERGY];;
104 energy = energyMax;
105
106 damage = (byte) spriteData[sprite_id][SPRITE_DATA_INDEX_DAMAGE];
107 score = (byte) spriteData[sprite_id][SPRITE_DATA_INDEX_SCORE];
108
109
110 visible = false;
111 }
112
113 public boolean collidesWith(GameSprite sprite)
114 {
115 return (x+(w << GameSprite.SHIFT_FACTOR) > sprite.x) && (x < sprite.x + (sprite.w << GameSprite.SHIFT_FACTOR)) &&
116 (y+(h << GameSprite.SHIFT_FACTOR) > sprite.y) && (y < sprite.y + (sprite.h << GameSprite.SHIFT_FACTOR));
117 }
118 }
119