summaryrefslogtreecommitdiff
path: root/utils/tele.js
blob: 6794af2d0b72c8372b7ca727bebbcb738a2da3de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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;
};