diff --git a/public/static/img/projectiles/02.png b/public/static/img/projectiles/02.png new file mode 100644 index 0000000..dcb8d50 Binary files /dev/null and b/public/static/img/projectiles/02.png differ diff --git a/public/static/img/turrets/02/launched.png b/public/static/img/turrets/02/launched.png new file mode 100644 index 0000000..b115c55 Binary files /dev/null and b/public/static/img/turrets/02/launched.png differ diff --git a/public/static/img/turrets/02/normal.png b/public/static/img/turrets/02/normal.png new file mode 100644 index 0000000..4db1830 Binary files /dev/null and b/public/static/img/turrets/02/normal.png differ diff --git a/public/static/js/wingbase/assets.js b/public/static/js/wingbase/assets.js index 549880e..544a5db 100644 --- a/public/static/js/wingbase/assets.js +++ b/public/static/js/wingbase/assets.js @@ -16,6 +16,9 @@ Game.prototype.loadAssets = _ => { small: 'img/turrets/01/normal.png' } }, + projectiles: { + '02': 'img/projectiles/02.png' + }, backgrounds: { '01': 'img/space.jpg' } diff --git a/public/static/js/wingbase/gui/gui.js b/public/static/js/wingbase/gui/gui.js index e5985fd..929fda8 100644 --- a/public/static/js/wingbase/gui/gui.js +++ b/public/static/js/wingbase/gui/gui.js @@ -34,6 +34,9 @@ class GUI { } set visible(visible) { - this.guiElement.style.display = visible ? 'block' : 'hidden'; + if (visible) + this.guiElement.classList.remove('hidden'); + else + this.guiElement.classList.add('hidden'); } } diff --git a/public/static/js/wingbase/main.js b/public/static/js/wingbase/main.js index 80794bb..f3037ff 100644 --- a/public/static/js/wingbase/main.js +++ b/public/static/js/wingbase/main.js @@ -62,9 +62,9 @@ class Game { this._state = state; if (state != 'connected') { - this.gui.visible = true; - } else { this.gui.visible = false; + } else { + this.gui.visible = true; } } } diff --git a/public/static/js/wingbase/render/body.js b/public/static/js/wingbase/render/body.js index 9c4833a..b47b1ef 100644 --- a/public/static/js/wingbase/render/body.js +++ b/public/static/js/wingbase/render/body.js @@ -6,7 +6,7 @@ class BodyRenderer { } render(body) { - let pos = body.getPos(); + let pos = body.pos; let x = pos.x * SCALE; let y = pos.y * SCALE; let vx = -game.world.center.x; @@ -28,6 +28,8 @@ class BodyRenderer { this.renderShip(body); } else if (body.bodyType == 'asteroid') { this.renderAsteroid(body); + } else if (body.bodyClass == 'projectile') { + this.renderProjectile(body); } else { this.renderBody(body); } @@ -110,4 +112,16 @@ class BodyRenderer { this.pallet.opacity(0.3); this.pallet.text(ship.name, x, y, '#fff', 'FreePixel', 16, 'center', 'bottom'); } + + renderProjectile(body) { + if (body.bodyType != 'grapple') { + this.renderBody(body); + return; + } + + let img = game.assets.images.projectiles['02']; + let pos = body.pos; + this.pallet.image(img, -32, -32, 0); + this.pallet.restore(); + } }; diff --git a/public/static/js/wingbase/render/render.js b/public/static/js/wingbase/render/render.js index b11eb88..de421cb 100644 --- a/public/static/js/wingbase/render/render.js +++ b/public/static/js/wingbase/render/render.js @@ -37,6 +37,10 @@ class Renderer { this.pallet.fill('#020202'); this.context.save(); + + this.context.beginPath(); + this.context.rect(0, 0, cw, ch); + this.context.clip(); this.pallet.view(cw / 2, ch / 2, 1, 0); @@ -44,7 +48,7 @@ class Renderer { let img = game.assets.images.backgrounds['01']; let bgx = -img.width / 2 - center.x / 20; let bgy = -img.height / 2 - center.y / 20; - this.pallet.image(img, bgx, bgy); + this.pallet.image(img, bgx, bgy, 0, img.width * 1.5, img.height * 1.5); this.pallet.opacity(1); this.renderGrid(); diff --git a/public/static/js/wingbase/world/body.js b/public/static/js/wingbase/world/body.js index 66e6b94..ece3d02 100644 --- a/public/static/js/wingbase/world/body.js +++ b/public/static/js/wingbase/world/body.js @@ -10,6 +10,8 @@ class Body { this.fixtures = data.fixtures; this.b2body = false; this.updated = 0; + this.bodyClass = data.class; + this.bodyType = data.type; this.update(data.delta.slice(1)); diff --git a/public/static/js/wingbase/world/ship.js b/public/static/js/wingbase/world/ship.js index 590044e..18418d5 100644 --- a/public/static/js/wingbase/world/ship.js +++ b/public/static/js/wingbase/world/ship.js @@ -13,7 +13,6 @@ class Ship extends Body { 'large': 24 }[data.size]; this.lastMove = []; - this.bodyType = 'ship'; this.activeFixture = 0; } diff --git a/public/stylus/styles.styl b/public/stylus/styles.styl index b886d99..6c3dae1 100644 --- a/public/stylus/styles.styl +++ b/public/stylus/styles.styl @@ -21,6 +21,8 @@ body #gui color #fff + &.hidden * + display: none .container position fixed #chat diff --git a/server/game/room/world/body/body.js b/server/game/room/world/body/body.js index 0b615a3..3c56139 100644 --- a/server/game/room/world/body/body.js +++ b/server/game/room/world/body/body.js @@ -116,6 +116,7 @@ class Body { packFull() { let packet = { type: this.type, + class: this.class, id: this.id, frame: this.frame, fixtures: this.mounts.map(m => m.packFull()),