#61 Completed chunkStore for now, time to work on filling it

This commit is contained in:
Danielv123 committed 2017-11-22 18:03:20 +01:00
1 parent e2a795528f
commit cdddfe6e30
2 files changed
+59 -21

No files matched your search

+36 -15
View File
@@ -1,8 +1,9 @@
var mkdirp = require("mkdirp-promise");
var mkdirpSync = require("mkdirp").sync;
var fs = require("fs");
var objectOps = require("./objectOps");
let allowLogging = true;
let allowLogging = false;
let log = string => (allowLogging)? console.log(string):""
module.exports = class chunkStore {
@@ -14,12 +15,13 @@ module.exports = class chunkStore {
}
setEntity(x, y, newEntity){
return new Promise((resolve, reject) => {
localX = Math.round(x % this.chunkSize);
var localX = Math.round(x % this.chunkSize);
x = Math.floor(Math.round(x)/this.chunkSize);
localY = Math.round(y % this.chunkSize);
var localY = Math.round(y % this.chunkSize);
y = Math.floor(Math.round(y)/this.chunkSize);
this.getChunk(x,y).then(chunk => {
log("Setentity")
if(!chunk.dataObject[localX]) chunk.dataObject[localX] = {};
if(!chunk.dataObject[localX][localY]) chunk.dataObject[localX][localY] = {};
@@ -30,10 +32,11 @@ module.exports = class chunkStore {
entity.name = newEntity.name;
} else {
log("Deleting entry at "+localX+", "+localY);
entity.name = undefined;
chunk.dataObject[localX][localY] = undefined;
}
this.setChunk(x, y, chunk).then(()=>{
log("Successfully saved chunk!");
this.getChunk(x,y).then(chunk => resolve(chunk));
});
});
});
@@ -41,8 +44,8 @@ module.exports = class chunkStore {
setChunk(x, y, chunk){
return new Promise((resolve, reject) => {
mkdirp(this.path+this.name+"/"+x).then(() => {
fs.writeFile(y, JSON.stringify(chunk), function(){
fs.writeFile(this.path+this.name+"/"+x+"/"+y, JSON.stringify(chunk), function(){
resolve();
});
});
});
@@ -54,19 +57,37 @@ module.exports = class chunkStore {
dataObject: {},
position:{x,y}, // fancy ES6 feature that generates to {x:x, y:y}
chunkSize:this.chunkSize,
get: function(x, y){
if(this.dataObject[Math.round(x)] && this.dataObject[Math.round(x)][Math.round(y)]){
return this.dataObject[Math.round(x)][Math.round(y)];
} else {
return undefined;
}
},
};
try {
fs.readdir(this.path+this.name, chunkFiles => {
log(chunkFiles);
if(chunkFiles == undefined) {
fs.readFile(this.path+this.name+"/"+x+"/"+y, (err, chunkFile) => {
if(err){
log(err)
resolve(chunk);
} else {
if(objectOps.isJSON(chunkFile)) {
log("returned from file")
let chunk = JSON.parse(chunkFile);
chunk.get = function(x, y){
if(this.dataObject[Math.round(x)] && this.dataObject[Math.round(x)][Math.round(y)]){
return this.dataObject[Math.round(x)][Math.round(y)];
} else {
return undefined;
}
}
resolve(chunk);
} else {
log("file failed")
resolve(chunk);
}
}); // add x and y values as well and we are done?
} catch (e){
resolve(chunk);
}
}
}); // add x and y values as well and we are done?
});
}
}
+23 -6
View File
@@ -3,6 +3,11 @@ var assert = require("assert");
var chunkStore = require("./chunkStore.js");
describe("chunkStore.js", () => {
// define some values for our test
const inserterX = 14.5;
const inserterY = -7.5;
const inserterName = "inserter";
let store // make our store elevated
it("is a constructor", ()=>{
assert.equal(typeof chunkStore, "function");
@@ -10,14 +15,26 @@ describe("chunkStore.js", () => {
store = new chunkStore("910239"/* instanceID, use defaults for the rest */);
assert.equal(store.name, "910239");
});
it("returns items located in a chunk", done => {
store.getChunk(1,0).then(chunkData => {
it("allows you to store the locations of entities in a chunk divided database", () => {
return store.setEntity(inserterX, inserterY, {name:inserterName}).then(() => {
// nothing to do here really
});
});
it("returns items located in a chunk", () => {
// We return the promise to mocha as it supports promises natively, works a lot better than calling done() manually.
let x = 0;
let y = -1
return store.getChunk(x,y).then(chunkData => {
// console.log(chunkData);
assert.equal(typeof chunkData, "object");
assert(chunkData.dataArray);
assert.equal(chunkData.position.x, 1);
assert.equal(chunkData.position.y, 0);
done();
assert.equal(chunkData.get(inserterX, inserterY).name, inserterName);
assert.equal(chunkData.position.x, x);
assert.equal(chunkData.position.y, y);
});
});
it("deletes entities when not provided with an object as 3rd arg", () => {
return store.setEntity(inserterX, inserterY).then((chunk)=>{
assert(!chunk.get(inserterX, inserterY));
});
});
});