small serve script, refresh chunks when enabling grid, some renames
This commit is contained in:
parent
71eaa328a4
commit
8eb371c090
@ -2,10 +2,9 @@
|
||||
"name": "tilegame",
|
||||
"version": "0.0.0",
|
||||
"description": "Tile game",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"serve": "node .",
|
||||
"serve": "node serve.js",
|
||||
"build": "webpack -p",
|
||||
"watch": "webpack -w --mode=development"
|
||||
},
|
||||
@ -24,5 +23,8 @@
|
||||
"standard": "^12.0.1",
|
||||
"webpack": "^4.41.5",
|
||||
"webpack-command": "^0.4.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"express": "^4.17.1"
|
||||
}
|
||||
}
|
||||
|
11
serve.js
Executable file
11
serve.js
Executable file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env node
|
||||
const express = require('express')
|
||||
const path = require('path')
|
||||
const app = express()
|
||||
|
||||
app.use('/assets', express.static(path.join(__dirname, 'assets')))
|
||||
app.use('/', express.static(path.join(__dirname, 'dist')))
|
||||
|
||||
app.listen(3000, function () {
|
||||
console.log('server listening on 0.0.0.0:3000')
|
||||
})
|
@ -129,7 +129,6 @@ class ItemEntity extends PhysicsEntity {
|
||||
this.istr = this.name + ' ' + (this.count + ent.count)
|
||||
this._life = 0
|
||||
ent.dead = true
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,11 +49,9 @@ class HeightMap {
|
||||
// octaves - Number of noise layers
|
||||
// period - Distance above which we start to see similarities. The higher, the longer "hills" will be on a terrain.
|
||||
// lacunarity - Controls period change across octaves. 2 is usually a good value to address all detail levels.
|
||||
constructor (offsetX, offsetY, size, seed, amplitude = 30, persistence = 0.5, octaves = 5, period = 80, lacunarity = 2) {
|
||||
this.ix = offsetX
|
||||
constructor (offsetY, seed, amplitude = 30, persistence = 0.5, octaves = 5, period = 80, lacunarity = 2) {
|
||||
this.iy = offsetY
|
||||
this.seed = seed
|
||||
this.size = size
|
||||
|
||||
this.noise = new PerlinNoise(seedrandom(seed))
|
||||
|
||||
@ -65,7 +63,7 @@ class HeightMap {
|
||||
}
|
||||
|
||||
getNoise (zx) {
|
||||
let x = ((this.size * this.ix) + zx) / this.period
|
||||
let x = zx / this.period
|
||||
|
||||
let amp = 1.0
|
||||
let max = 1.0
|
||||
|
@ -16,9 +16,9 @@ let frameCount = 0
|
||||
let fps = 0
|
||||
|
||||
let vp = new Viewport(0, 0)
|
||||
let p = new Player(800, 1200, 32, 64)
|
||||
let p = new Player(1000, 1000, 32, 64)
|
||||
|
||||
let height = new HeightMap(0, 32, 16, 0)
|
||||
let height = new HeightMap(32, 0)
|
||||
|
||||
const chunkSize = 32
|
||||
const tileSize = 16
|
||||
@ -74,7 +74,7 @@ function start () {
|
||||
world.chunks = []
|
||||
})
|
||||
Debug.addCheckbox(Debug, 'drawGrid', function (argument) {
|
||||
world.chunks = []
|
||||
world.redraw()
|
||||
})
|
||||
playing = true
|
||||
gameLoop()
|
||||
|
@ -8,9 +8,9 @@ class Player extends PhysicsEntity {
|
||||
constructor (x, y, w, h) {
|
||||
super(x, y, w, h)
|
||||
|
||||
this.speed = 8
|
||||
this.gravity = 1
|
||||
this.jumpPower = 20
|
||||
this.speed = 4
|
||||
this.gravity = 0.5
|
||||
this.jumpPower = 10
|
||||
|
||||
this.inv = new Inventory(9)
|
||||
this.itemPickUpDistance = 40
|
||||
|
15
src/tiles.js
15
src/tiles.js
@ -152,7 +152,7 @@ class TileLayer {
|
||||
}
|
||||
}
|
||||
|
||||
class TilePhysicsLayer extends TileLayer {
|
||||
class TileCollisionLayer extends TileLayer {
|
||||
constructor (size = 16, tileSize = 16) {
|
||||
super(null, 'col', size, tileSize)
|
||||
this.empty = false
|
||||
@ -232,7 +232,7 @@ class Chunk {
|
||||
this.layers = []
|
||||
let bgLayer = new TileLayer(tileMap, 'bg', this.size, this.tile)
|
||||
let fgLayer = new TileLayer(tileMap, 'fg', this.size, this.tile)
|
||||
let clLayer = new TilePhysicsLayer(this.size, this.tile)
|
||||
let clLayer = new TileCollisionLayer(this.size, this.tile)
|
||||
for (let i = 0; i < this.size * this.size; i++) {
|
||||
let tileCoords = fgLayer.toXY(i)
|
||||
let tileAbs = this.toAbs(tileCoords)
|
||||
@ -402,6 +402,7 @@ class World {
|
||||
update (dt, vp) {
|
||||
this._active = []
|
||||
let posPoint = vp.chunkIn(this.chunkSize * this.tileSize)
|
||||
// Load chunks if necessary
|
||||
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
|
||||
@ -444,6 +445,7 @@ class World {
|
||||
}
|
||||
}
|
||||
|
||||
// Get a position in the world grid from an absolute position
|
||||
gridPosition (pos) {
|
||||
let a = this.chunkSize * this.tileSize
|
||||
let chunk = { x: Math.floor(pos.x / a), y: Math.floor(pos.y / a) }
|
||||
@ -454,6 +456,14 @@ class World {
|
||||
return { chunk: this.getChunk(chunk.x, chunk.y), tile }
|
||||
}
|
||||
|
||||
// Forces all loaded chunks to re-draw themselves
|
||||
redraw () {
|
||||
for (let i in this.chunks) {
|
||||
this.chunks[i].dirty = true
|
||||
}
|
||||
}
|
||||
|
||||
// Draw all loaded in-view chunks and special layers
|
||||
draw (vp) {
|
||||
this._lastDrawCount = 0
|
||||
this._lastUpdateCount = 0
|
||||
@ -474,6 +484,7 @@ class World {
|
||||
}
|
||||
}
|
||||
|
||||
// Terrain collision test
|
||||
collide (obj) {
|
||||
if (!this._active.length) return null
|
||||
for (let i in this._active) {
|
||||
|
Loading…
Reference in New Issue
Block a user