diff options
Diffstat (limited to 'utils/tele.js')
-rw-r--r-- | utils/tele.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/utils/tele.js b/utils/tele.js new file mode 100644 index 0000000..6794af2 --- /dev/null +++ b/utils/tele.js @@ -0,0 +1,108 @@ +// this file deals with linked teleporters, +// not directional teleporters + + + +/* +the corresponding tile is 0x9b + + +generate +[x] make new entry in global door registry +[x] set tile 0x9b +0x9b crackend +[x] put item in inventory +place +[x] set tile 0x9b +[x] remove from inventory +inventory UI +[ ] +0x9b onstep +[ ] +go through first time +[ ] get new coord +[ ] generate new chunk +[ ] generate new tele +*/ + +const doorPath = "doors.txt"; + + + +let fs = require("fs"); +let doors; { + try { + let data = fs.readFileSync(doorPath, 'utf8', function(e, data) { + if (e) console.log('ladsjflajksfj'); + console.log(data); + }); + doors = JSON.parse(data.toString()); + } catch (e) { + doors = []; + } +} +let dirty = false; + +let doorUtils = {}; +module.exports = doorUtils; + +let Pos, createPosFromJson; { + let t = require("models/pos"); + Pos = t.Pos; + createPosFromJson = t.createPosFromJson; +} +let chunkUtils = require("utils/chunk.js"); + +doorUtils.moveDoorToPlayer = function(doorid, inventory, username) { + let door = doors[doorid]; + door.postype = "player"; + door.pos = username; + let m = inventory.tileCountMap[0x9b]; + if (!m) inventory.tileCountMap[0x9b] = [doorid]; + else m.push(doorid); +}; + +doorUtils.findDoorIdWithPos = function(pos) { + for (let i = 0; i < doors.length; i++) { + if (doors[i].postype != "coordinate") continue; + if (pos.equals(doors[i].pos)) { + return i; + } + } + return null; +}; + +doorUtils.removeDoorFromInventory = function(inv, doorid) { + let m = inv.tileCountMap[0x9b]; + for (let i = 0; i < m.length; i++) { + if (m[i] === doorid) { + m.splice(i, 1); + return true; + } + } + return false; +}; + +doorUtils.placeDoor = function(doorid, pos) { + chunkUtils.setTile(pos, 0x9b); + doors[doorid].postype = "coordinate"; + doors[doorid].pos = pos; +}; + +doorUtils.registerDoor = function(pos) { + let doorId = doors.length; + doors.push({ + id: doorId, + postype: "coordinate", + pos: pos, + destId: null + }); + return doorId; +}; + + + +doorUtils.persistAllDoors = function() { + fs.writeFileSync(doorPath, JSON.stringify(doors)); + dirty = false; +}; |