From 71850fc7f983f79e1ac193ca570edb8f9a3deb43 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Fri, 10 Jan 2020 21:10:38 +0200 Subject: [PATCH] slight assets change, add background layer --- assets/ground.png | Bin 2544 -> 4349 bytes src/debug.js | 7 ++++--- src/tiles.js | 37 +++++++++++++++++++++++++++++-------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/assets/ground.png b/assets/ground.png index 1c931533751938b6801d5a0bb0374b05ce17b43e..353fe3566ef189af7e5ff0e3dade45f8318734c0 100644 GIT binary patch delta 3345 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 delta 1526 zcmVy{D6rKp+SR6C@!TG#6MP7n~4pk+YFT5s@fFWg3 zv?N*tN8eYaDqCQQw;qaJS%JFIF+1O-|Cd_ix{{=N5km?k)JU=5!5Oq&saIS{O*v zG)ALQTwPs7L`2)RF&>Yjshems;VMMlAE6X zIE^$-qpE+Zm`IFV|2c$!?c%>(`1cj_#{`2z*Y|&gf^UMrZ3r05?{hwn#bOajlEid6 zjfjY*X=1b4M4snyd3o6{5X|%ZW`v+@Vw8+_Mg;(PVgTTHx}y7-!v7<5@81Q1ozZ}S zsH!T8qUitJ&Gjcq606lJA|lr7breO>F9fXXI>w`Mlx69|2Jl3wTkw4ME&Mxm@gHhi z?&^P5^LKOqMN#x?0kSNM>2w-(UH2>gH=9iqMG;NgM4I~e0z4}K{QApJ?!*6VfTdEU?OCrJ`jRrNaoy2XEKnnqpMK6e1m2>|CZ z|KI7>0SvW$L+o+yv}rb+)$^;>Dw?K=s;YmYs;YjUe_hvo(eKU)NYk5ZZQI6Xv#|&e z;JE>S>|a%{c+K0RjjBoM%X>swyUv z$xd&++vnf5ZGTR{_LRW(IROAXjWJXn?e3Waou^EF9NOo9b#?XNIRO9|0pJCT|E7Oj z?|eNJ3?6cMdD-{w^E{6vz3Jgcdvh%Cd_IqIQ$|^qF`Z7M$cui;U^E)}g#ZWuk9WOT z#r0x!)So%zEqBLiTYsLwBJB?qdd?XG-MRkV@P1v_kwg+@S@!1yeH&hRR0Pq96hI0S_5C8xG0RVph5C8xG z0RR9H00001;QZa31MqdQ?K{>v000O8Y{|1?@Y?{L0|0;k000620PtFz{j&i6`13E% zlXw3BFaiJo2mmi^=(_*_KmY&$0RR9H0QkS;ARqt)0L2x6*Bk&oeZEYt7pt>r^z~vD zpFUp>cKg~87u)T$X(9Ik2mpT^$8Av^@+iP|+rE5U+5Zn90Pr0571JS&0@(fsz+Gdv z;K%f|^Q`C#@2MUTv|aeEPXJ)sPS5rI+c)ieHW_q-hdTfN^KX+jA|htZ&iD5{eQ#eV zI20N#-hI9I+P+@?H--Ops=^cifB+EZ5(0+4_-|hbI1~o%8$EdH^#?V3{E9yS`vO20 z0=EBtsz7jeXTp$+|2H9E+nzx1BJQmCSNs9k8vqUkf|qg*1^-Eb;Dssrvr!F{1CwA4 c2p4eczq^jUSo>ant^fc407*qoM6N<$g0&Lr2><{9 diff --git a/src/debug.js b/src/debug.js index 5e0124f..4833ca6 100644 --- a/src/debug.js +++ b/src/debug.js @@ -21,13 +21,14 @@ class Debugging { ctx.fillText('loaded ' + world.chunks.length, 4, 16 * 4) ctx.fillText('drawn ' + world._lastDrawCount, 4, 16 * 5) ctx.fillText('updates ' + world._lastUpdateCount, 4, 16 * 6) + ctx.fillText('active ' + world._active.length, 4, 16 * 7) // Mouse let mpos = Input.mouse.pos let mpin = world.pickMouse(vp, mpos) - ctx.fillText('mouse (x: ' + mpos.x + '; y: ' + mpos.y + ')', 4, 16 * 8) + ctx.fillText('mouse (x: ' + mpos.x + '; y: ' + mpos.y + ')', 4, 16 * 9) if (mpin.chunk) { - ctx.fillText('mouse-in-chunk (x: ' + mpin.chunk.x + '; y: ' + mpin.chunk.y + ')', 4, 16 * 9) - ctx.fillText('mouse-in-tile (x: ' + mpin.tile.x + '; y: ' + mpin.tile.y + ')', 4, 16 * 10) + ctx.fillText('mouse-in-chunk (x: ' + mpin.chunk.x + '; y: ' + mpin.chunk.y + ')', 4, 16 * 10) + ctx.fillText('mouse-in-tile (x: ' + mpin.tile.x + '; y: ' + mpin.tile.y + ')', 4, 16 * 11) } } diff --git a/src/tiles.js b/src/tiles.js index 074a35e..ffc2d59 100644 --- a/src/tiles.js +++ b/src/tiles.js @@ -91,6 +91,19 @@ class TileLayer { ctx.drawImage(map.image, tileCoords.x, tileCoords.y, map.tile, map.tile, coords.x * this.tile, coords.y * this.tile, this.tile, this.tile) } + + // Add some darkness to the BG layer + if (this.name === 'bg') { + ctx.globalAlpha = 0.3 + ctx.fillStyle = '#000' + for (let i in this.tiles) { + let tilei = this.tiles[i] + if (tilei === -1) continue + let coords = this.toXY(parseInt(i)) + ctx.fillRect(coords.x * this.tile, coords.y * this.tile, this.tile, this.tile) + } + ctx.globalAlpha = 1 + } } update (dt) { @@ -101,6 +114,7 @@ class TileLayer { class TilePhysicsLayer extends TileLayer { constructor (size = 16, tileSize = 16) { super('col', size, tileSize) + this.empty = false } draw () {} @@ -109,6 +123,7 @@ class TilePhysicsLayer extends TileLayer { generateFromTiles (tiles) { this.tiles = [] + this.empty = true for (let i in tiles.tiles) { let t = tiles.tiles[i] let p = tiles.toXY(parseInt(i)) @@ -128,11 +143,13 @@ class TilePhysicsLayer extends TileLayer { continue } + this.empty = false this.tiles[i] = 1 } } collide (chunk, obj) { + if (this.empty) return false let absPos = chunk.absPos for (let i in this.tiles) { let t = this.tiles[i] @@ -177,14 +194,17 @@ class Chunk { let y = Math.ceil(heightMap.getHeight(tileAbs.x) * 5 / 2) - 4 if (tileAbs.y < y) { fgLayer.tiles.push(-1) + bgLayer.tiles.push(-1) continue } if (tileAbs.y === y) { fgLayer.tiles.push(tileMap.indexOf('GRASS_TOP')) + bgLayer.tiles.push(tileMap.indexOf('DIRT')) continue } if (tileAbs.y < y + 10) { fgLayer.tiles.push(tileMap.indexOf('DIRT')) + bgLayer.tiles.push(tileMap.indexOf('DIRT')) continue } if (tileAbs.y > heightMap.falloff - y + 64) { @@ -192,6 +212,7 @@ class Chunk { continue } fgLayer.tiles.push(tileMap.indexOf('STONE')) + bgLayer.tiles.push(tileMap.indexOf('STONE')) } clLayer.generateFromTiles(fgLayer) @@ -301,7 +322,7 @@ class World { this._unloadTick = 0 this._lastDrawCount = 0 this._lastUpdateCount = 0 - this._collide = [] + this._active = [] } getChunk (x, y) { @@ -313,10 +334,10 @@ class World { } update (dt, vp) { - this._collide = [] + this._active = [] let posPoint = vp.chunkIn(this.chunkSize * this.tileSize) - for (let x = posPoint.x - 4; x < posPoint.x + 5; x++) { - for (let y = posPoint.y - 4; y < posPoint.y + 5; y++) { + for (let x = posPoint.x - 3; x < posPoint.x + 4; x++) { + for (let y = posPoint.y - 2; y < posPoint.y + 3; y++) { if (x < 0 || y < 0 || x >= this.width || y >= this.height) continue let exists = this.getChunk(x, y) if (!exists) { @@ -325,7 +346,7 @@ class World { this.chunks.push(n) continue } - this._collide.push(exists) + this._active.push(exists) } } @@ -378,9 +399,9 @@ class World { } collide (obj) { - if (!this._collide.length) return null - for (let i in this._collide) { - let c = this._collide[i] + if (!this._active.length) return null + for (let i in this._active) { + let c = this._active[i] let collide = c.collide(obj) if (collide) return collide }