Skip to content

Commit 81e6ddc

Browse files
Enemy weapons list. Bosses use random weapons from defined list.
Refactoring shotgun entity.
1 parent 8ed263b commit 81e6ddc

File tree

10 files changed

+64
-26
lines changed

10 files changed

+64
-26
lines changed

index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,14 @@
6666
<script type="text/javascript" src="src/entities/enemy/styles.js"></script>
6767
<script type="text/javascript" src="src/entities/enemy/boss.js"></script>
6868
<script type="text/javascript" src="src/entities/player/entity.js"></script>
69+
6970
<script type="text/javascript" src="src/entities/laser/entity.js"></script>
7071
<script type="text/javascript" src="src/entities/weapons/bomb.js"></script>
7172
<script type="text/javascript" src="src/entities/weapons/trident.js"></script>
7273
<script type="text/javascript" src="src/entities/weapons/shotgun.js"></script>
74+
<script type="text/javascript" src="src/entities/weapons/enemy/single.js"></script>
75+
<script type="text/javascript" src="src/entities/weapons/enemy/dual.js"></script>
76+
7377

7478
<!-- Screens -->
7579
<script type="text/javascript" src="src/screens/play/screen.js"></script>

src/config/weapons.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ game.data.weapons = [{
2626
reloadAmount: 5,
2727
reloadCost: 15
2828
}];
29+
30+
game.data.enemyWeapons = [{
31+
name: 'single',
32+
damage: 50
33+
}, {
34+
name: 'dual',
35+
damage: 50
36+
}];

src/entities/enemy/boss.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,15 @@ game.Entities.Boss = me.Entity.extend({
3838
points: this.type.points
3939
};
4040

41+
this.weapons = this.type.fire.weapons.map(i => game.data.enemyWeapons[i]);
4142
this.fireInterval = setInterval(() => {
42-
me.audio.play('fire');
43-
me.game.world.addChild(me.pool.pull('laser', this._absPos.x + this.width / 3, this._absPos.y + this.height, 's', this.type.fire.damage, true));
44-
me.game.world.addChild(me.pool.pull('laser', this._absPos.x + this.width / 1.5, this._absPos.y + this.height, 's', this.type.fire.damage, true));
43+
const { name } = this.weapons[Math.floor(Math.random() * this.weapons.length)];
44+
45+
me.game.world.addChild(me.pool.pull(
46+
name,
47+
this._absPos.x + this.width / 2,
48+
this._absPos.y + this.height
49+
));
4550
}, this.type.fire.rate);
4651
},
4752

src/entities/enemy/manager.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ game.Entities.EnemyManager = me.Container.extend({
109109
x: Math.round(this.COLS / 2) - 1
110110
};
111111

112-
boss = [0];
113112
let bossCreated = !boss;
114113
for (y = 0; y < this.ROWS; y += 1) {
115114
for (x = 0; x < this.COLS; x += 1) {

src/entities/enemy/styles.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ game.Entities.EnemyList = [
1111
points: 450,
1212
fire: {
1313
rate: 1000,
14-
damage: 50
14+
weapons: [0, 1]
1515
}
1616
}
1717
},

src/entities/weapons/bomb.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// TODO: bomb should explode after __ seconds.
2-
// TODO: Time should be customizable (defined on init)
3-
41
game.Entities = game.Entities || {};
52
game.Entities.Weapons = game.Entities.Weapons || {};
63

src/entities/weapons/enemy/dual.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
game.Entities = game.Entities || {};
2+
game.Entities.Weapons = game.Entities.Weapons || {};
3+
game.Entities.Weapons.Enemy = game.Entities.Weapons.Enemy || {};
4+
5+
game.Entities.Weapons.Enemy.Dual = me.Entity.extend({
6+
init(x, y) {
7+
this._super(me.Entity, 'init', [x, y, { width: 0, height: 0 }]);
8+
9+
const { damage } = game.data.enemyWeapons[1];
10+
11+
me.game.world.addChild(me.pool.pull('laser', x - 15, y, 's', damage, true));
12+
me.game.world.addChild(me.pool.pull('laser', x + 15, y, 's', damage, true));
13+
me.audio.play('fire');
14+
},
15+
update() {
16+
me.game.world.removeChild(this);
17+
}
18+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
game.Entities = game.Entities || {};
2+
game.Entities.Weapons = game.Entities.Weapons || {};
3+
game.Entities.Weapons.Enemy = game.Entities.Weapons.Enemy || {};
4+
5+
game.Entities.Weapons.Enemy.Single = me.Entity.extend({
6+
init(x, y) {
7+
this._super(me.Entity, 'init', [x, y, { width: 0, height: 0 }]);
8+
9+
const { damage } = game.data.enemyWeapons[0];
10+
11+
me.game.world.addChild(me.pool.pull('laser', x, y, 's', damage, true));
12+
me.audio.play('fire');
13+
},
14+
update() {
15+
me.game.world.removeChild(this);
16+
}
17+
});

src/entities/weapons/shotgun.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,22 @@ game.Entities.Weapons = game.Entities.Weapons || {};
33

44
game.Entities.Weapons.Shotgun = me.Entity.extend({
55
init(x, y, amount = 3) {
6-
this._super(me.Entity, 'init', [x, y, { width: game.Entities.Weapons.Shotgun.width, height: game.Entities.Weapons.Shotgun.height }]);
7-
this.body.setVelocity(0, 35);
8-
this.body.collisionType = me.collision.types.PROJECTILE_OBJECT;
6+
this._super(me.Entity, 'init', [x, y, { width: 0, height: 0 }]);
97

10-
this.amount = amount;
11-
this.renderable = new (me.Renderable.extend({
12-
init() {
13-
this._super(me.Renderable, 'init', [0, 0, game.Entities.Weapons.Shotgun.width, game.Entities.Weapons.Shotgun.height]);
14-
},
15-
destroy() {}
16-
}))();
8+
this.split(this.pos.x, this.pos.y, amount);
179
me.audio.play('fire');
1810
},
1911
update() {
2012
me.game.world.removeChild(this);
21-
this.split(this.pos.x, this.pos.y);
2213
return true;
2314
},
24-
split(x, y) {
25-
const { damage } = game.Entities.Weapons.Shotgun;
15+
split(x, y, amount) {
16+
const { damage } = game.data.weapons[0];
2617

2718
me.game.world.addChild(me.pool.pull('laser', x, y - 5, 'n', damage));
2819

2920
let addToRight = true;
30-
for (let i = 1, amountFired = 1; amountFired < this.amount; amountFired += 1) {
21+
for (let i = 1, amountFired = 1; amountFired < amount; amountFired += 1) {
3122
if (addToRight) {
3223
me.game.world.addChild(me.pool.pull('laser', x + i * 5, y - 5 - i * 3, 'n', damage));
3324
} else {
@@ -39,7 +30,3 @@ game.Entities.Weapons.Shotgun = me.Entity.extend({
3930
}
4031
}
4132
});
42-
43-
game.Entities.Weapons.Shotgun.damage = game.data.weapons[0].damage;
44-
game.Entities.Weapons.Shotgun.width = 3;
45-
game.Entities.Weapons.Shotgun.height = 20;

src/game.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ const game = {
7777
me.pool.register('trident-bomb', game.Entities.Weapons.Trident, true);
7878
me.pool.register('shotgun', game.Entities.Weapons.Shotgun, true);
7979

80+
me.pool.register('single', game.Entities.Weapons.Enemy.Single, true);
81+
me.pool.register('dual', game.Entities.Weapons.Enemy.Dual, true);
82+
8083
this.playing = new game.Screens.Play();
8184
me.state.set(me.state.PLAY, this.playing);
8285
me.state.set(me.state.GAMEOVER, new game.Screens.Lost());

0 commit comments

Comments
 (0)