beardos-toolbox 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ import * as s3 from './s3';
2
+ export * from './s3';
3
+ import JSONL from './jsonl';
4
+ export * from './misc-js-funcs';
5
+ import tileMap from './tile-map';
6
+ export * from './tile-map';
7
+ export { s3, JSONL, tileMap };
8
+ declare const _default: {
9
+ s3: typeof s3;
10
+ JSONL: {
11
+ stringify: (data: any[]) => string;
12
+ parse: (data: string) => any[];
13
+ };
14
+ tileMap: {
15
+ TileFlags: {
16
+ readonly NONE: 0;
17
+ readonly BLOCKED: 1;
18
+ readonly OCCUPIED: 2;
19
+ readonly VISIBLE: 4;
20
+ readonly EXPLORED: 8;
21
+ readonly WATER: 16;
22
+ readonly HAZARD: 32;
23
+ };
24
+ createTileMap: <T>(width: number, height: number) => import("./tile-map").TileMap<T>;
25
+ getTileIndex: (map: import("./tile-map").TileMap<unknown>, x: number, y: number) => number;
26
+ getTileInfo: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number) => import("./tile-map").TileInfo<T> | null;
27
+ indexToCoords: (map: import("./tile-map").TileMap<unknown>, index: number) => {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ setFlag: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, flag: number) => void;
32
+ clearFlag: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, flag: number) => void;
33
+ toggleFlag: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, flag: number) => void;
34
+ hasFlag: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, flag: number) => boolean;
35
+ addEntity: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, entity: T) => boolean;
36
+ removeEntity: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, predicate: (e: T) => boolean) => boolean;
37
+ moveEntity: <T>(map: import("./tile-map").TileMap<T>, fromX: number, fromY: number, toX: number, toY: number, predicate: (e: T) => boolean) => boolean;
38
+ getEntitiesAt: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number) => T[];
39
+ clearEntitiesAt: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number) => void;
40
+ getAdjacentIndices: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, includeDiagonals?: boolean) => number[];
41
+ getAdjacentTiles: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, includeDiagonals?: boolean) => import("./tile-map").TileInfo<T>[];
42
+ getIndicesInRange: (map: import("./tile-map").TileMap<unknown>, x: number, y: number, range: number, shape?: import("./tile-map").RangeShape, includeOrigin?: boolean) => number[];
43
+ getTilesInRange: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, range: number, shape?: import("./tile-map").RangeShape, includeOrigin?: boolean) => import("./tile-map").TileInfo<T>[];
44
+ getEntitiesInRange: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, range: number, shape?: import("./tile-map").RangeShape, includeOrigin?: boolean) => T[];
45
+ validateTile: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, validator?: import("./tile-map").TileValidator<T>) => boolean;
46
+ validateRange: <T>(map: import("./tile-map").TileMap<T>, x: number, y: number, range: number, validator: import("./tile-map").TileValidator<T>, shape?: import("./tile-map").RangeShape, includeOrigin?: boolean) => boolean;
47
+ createSpatialConfig: (tileWidth: number, tileHeight: number, originX?: number, originY?: number) => import("./tile-map").SpatialConfig;
48
+ worldToTile: (spatial: import("./tile-map").SpatialConfig, wx: number, wy: number) => {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ tileToWorld: (spatial: import("./tile-map").SpatialConfig, tx: number, ty: number) => {
53
+ x: number;
54
+ y: number;
55
+ };
56
+ tileCenterWorld: (spatial: import("./tile-map").SpatialConfig, tx: number, ty: number) => {
57
+ x: number;
58
+ y: number;
59
+ };
60
+ screenToWorld: (cameraX: number, cameraY: number, sx: number, sy: number) => {
61
+ x: number;
62
+ y: number;
63
+ };
64
+ worldToScreen: (cameraX: number, cameraY: number, wx: number, wy: number) => {
65
+ x: number;
66
+ y: number;
67
+ };
68
+ screenToTile: (spatial: import("./tile-map").SpatialConfig, cameraX: number, cameraY: number, sx: number, sy: number) => {
69
+ x: number;
70
+ y: number;
71
+ };
72
+ tileToScreen: (spatial: import("./tile-map").SpatialConfig, cameraX: number, cameraY: number, tx: number, ty: number) => {
73
+ x: number;
74
+ y: number;
75
+ };
76
+ worldToTileExact: (spatial: import("./tile-map").SpatialConfig, wx: number, wy: number) => import("./tile-map").TilePosition;
77
+ getTileAtWorld: <T>(map: import("./tile-map").TileMap<T>, spatial: import("./tile-map").SpatialConfig, wx: number, wy: number) => import("./tile-map").TileInfo<T> | null;
78
+ getTileAtScreen: <T>(map: import("./tile-map").TileMap<T>, spatial: import("./tile-map").SpatialConfig, cameraX: number, cameraY: number, sx: number, sy: number) => import("./tile-map").TileInfo<T> | null;
79
+ };
80
+ utils: {
81
+ sleep: (ms: number) => Promise<unknown>;
82
+ chunkArray: (source: Array<any>, chunkSize?: number) => any;
83
+ settledSeparator: (result: Array<PromiseSettledResult<any>>) => {
84
+ settled: PromiseFulfilledResult<any>[];
85
+ rejected: PromiseRejectedResult[];
86
+ total: number;
87
+ };
88
+ timeFormat: (ms: number) => string;
89
+ timeSinceString: (ms: number) => string;
90
+ generateRandomString: (length?: number) => string;
91
+ default: {
92
+ sleep: (ms: number) => Promise<unknown>;
93
+ chunkArray: (source: Array<any>, chunkSize?: number) => any;
94
+ settledSeparator: (result: Array<PromiseSettledResult<any>>) => {
95
+ settled: PromiseFulfilledResult<any>[];
96
+ rejected: PromiseRejectedResult[];
97
+ total: number;
98
+ };
99
+ timeFormat: (ms: number) => string;
100
+ timeSinceString: (ms: number) => string;
101
+ generateRandomString: (length?: number) => string;
102
+ };
103
+ };
104
+ };
105
+ export default _default;
package/dist/index.mjs ADDED
@@ -0,0 +1,490 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // s3.ts
8
+ var s3_exports = {};
9
+ __export(s3_exports, {
10
+ deleteObject: () => deleteObject,
11
+ getClient: () => getClient,
12
+ getObject: () => getObject,
13
+ listObjects: () => listObjects,
14
+ putObject: () => putObject
15
+ });
16
+ import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command, DeleteObjectCommand } from "@aws-sdk/client-s3";
17
+ var client;
18
+ var getClient = ({ region, accessKeyId, secretAccessKey }) => {
19
+ if (!client) {
20
+ client = new S3Client({ region, credentials: { accessKeyId, secretAccessKey } });
21
+ }
22
+ return client;
23
+ };
24
+ var putObject = async (config, data, key, contentType) => {
25
+ try {
26
+ const cl = getClient(config);
27
+ const params = {
28
+ Bucket: config.bucket,
29
+ Key: key,
30
+ Body: typeof data === "string" ? Buffer.from(data, "utf-8") : data
31
+ };
32
+ if (contentType) {
33
+ params.ContentType = contentType;
34
+ }
35
+ return await cl.send(new PutObjectCommand(params));
36
+ } catch (e) {
37
+ console.error("Could not upload json file", { error: e });
38
+ throw e;
39
+ }
40
+ };
41
+ var getObject = async (config, key) => {
42
+ const params = {
43
+ Bucket: config.bucket,
44
+ Key: key
45
+ };
46
+ try {
47
+ const cl = getClient(config);
48
+ return await cl.send(new GetObjectCommand(params));
49
+ } catch (e) {
50
+ console.error("Could not get object from s3", { error: e, params });
51
+ throw e;
52
+ }
53
+ };
54
+ var listObjects = async (config, prefix, Marker) => {
55
+ const params = {
56
+ Bucket: config.bucket,
57
+ Prefix: prefix
58
+ };
59
+ if (Marker) {
60
+ params.StartAfter = Marker;
61
+ }
62
+ try {
63
+ const cl = getClient(config);
64
+ const response = await cl.send(new ListObjectsV2Command(params));
65
+ return { Objects: response.Contents ?? [], Marker: response.NextContinuationToken };
66
+ } catch (e) {
67
+ console.error("Could not upload json file", { error: e });
68
+ throw e;
69
+ }
70
+ };
71
+ var deleteObject = async (config, Key) => {
72
+ const params = {
73
+ Bucket: config.bucket,
74
+ Key
75
+ };
76
+ try {
77
+ const cl = getClient(config);
78
+ return await cl.send(new DeleteObjectCommand(params));
79
+ } catch (e) {
80
+ console.error("Could not delete object from s3", { error: e, params });
81
+ throw e;
82
+ }
83
+ };
84
+
85
+ // jsonl.ts
86
+ import { EOL } from "os";
87
+ var jsonl_default = {
88
+ stringify: (data) => {
89
+ return data.map((d) => JSON.stringify(d)).join(EOL);
90
+ },
91
+ parse: (data) => {
92
+ return data.split(EOL).map((d, i) => {
93
+ try {
94
+ return JSON.parse(d);
95
+ } catch (e) {
96
+ console.error("Could not parse JSONL on line: " + i, { error: e.message, line: i });
97
+ }
98
+ });
99
+ }
100
+ };
101
+
102
+ // misc-js-funcs.ts
103
+ var misc_js_funcs_exports = {};
104
+ __export(misc_js_funcs_exports, {
105
+ chunkArray: () => chunkArray,
106
+ default: () => misc_js_funcs_default,
107
+ generateRandomString: () => generateRandomString,
108
+ settledSeparator: () => settledSeparator,
109
+ sleep: () => sleep,
110
+ timeFormat: () => timeFormat,
111
+ timeSinceString: () => timeSinceString
112
+ });
113
+ var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
114
+ var chunkArray = (source, chunkSize = 10) => {
115
+ const chunks = source.reduce((resultArray, item, index) => {
116
+ const chunkIndex = Math.floor(index / chunkSize);
117
+ if (!resultArray[chunkIndex]) {
118
+ resultArray[chunkIndex] = [];
119
+ }
120
+ resultArray[chunkIndex].push(item);
121
+ return resultArray;
122
+ }, []);
123
+ return chunks;
124
+ };
125
+ var settledSeparator = (result) => {
126
+ const settled = result.filter((r) => r.status === "fulfilled");
127
+ const rejected = result.filter((r) => r.status === "rejected");
128
+ return { settled, rejected, total: result.length };
129
+ };
130
+ var timeFormat = (ms) => {
131
+ if (ms < 1e3) return `${ms} ms`;
132
+ if (ms < 6e4) return `${(ms / 1e3).toFixed(2)} secs`;
133
+ if (ms < 36e5) return `${(ms / 6e4).toFixed(2)} mins`;
134
+ return `${(ms / 36e5).toFixed(2)} hrs`;
135
+ };
136
+ var timeSinceString = (ms) => {
137
+ return timeFormat(Date.now() - ms);
138
+ };
139
+ var generateRandomString = (length = 8) => {
140
+ return Math.random().toString(36).substring(2, 2 + length);
141
+ };
142
+ var misc_js_funcs_default = {
143
+ sleep,
144
+ chunkArray,
145
+ settledSeparator,
146
+ timeFormat,
147
+ timeSinceString,
148
+ generateRandomString
149
+ };
150
+
151
+ // tile-map.ts
152
+ var TileFlags = {
153
+ NONE: 0,
154
+ BLOCKED: 1,
155
+ OCCUPIED: 2,
156
+ VISIBLE: 4,
157
+ EXPLORED: 8,
158
+ WATER: 16,
159
+ HAZARD: 32
160
+ };
161
+ var _idx = (width, x, y) => y * width + x;
162
+ var _inBounds = (width, height, x, y) => x >= 0 && x < width && y >= 0 && y < height;
163
+ var _CARDINAL = new Int8Array([-1, 0, 1, 0, 0, -1, 0, 1]);
164
+ var _ALL_ADJ = new Int8Array([-1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -1, 1, 1, -1, 1, 1]);
165
+ var createTileMap = (width, height) => ({
166
+ width,
167
+ height,
168
+ size: width * height,
169
+ flags: new Uint8Array(width * height),
170
+ entities: /* @__PURE__ */ new Map()
171
+ });
172
+ var getTileIndex = (map, x, y) => _inBounds(map.width, map.height, x, y) ? _idx(map.width, x, y) : -1;
173
+ var getTileInfo = (map, x, y) => {
174
+ if (!_inBounds(map.width, map.height, x, y)) return null;
175
+ const index = _idx(map.width, x, y);
176
+ return {
177
+ index,
178
+ x,
179
+ y,
180
+ flags: map.flags[index],
181
+ entities: map.entities.get(index) ?? []
182
+ };
183
+ };
184
+ var indexToCoords = (map, index) => ({
185
+ x: index % map.width,
186
+ y: index / map.width | 0
187
+ });
188
+ var setFlag = (map, x, y, flag) => {
189
+ if (_inBounds(map.width, map.height, x, y)) map.flags[_idx(map.width, x, y)] |= flag;
190
+ };
191
+ var clearFlag = (map, x, y, flag) => {
192
+ if (_inBounds(map.width, map.height, x, y)) map.flags[_idx(map.width, x, y)] &= ~flag;
193
+ };
194
+ var toggleFlag = (map, x, y, flag) => {
195
+ if (_inBounds(map.width, map.height, x, y)) map.flags[_idx(map.width, x, y)] ^= flag;
196
+ };
197
+ var hasFlag = (map, x, y, flag) => {
198
+ if (!_inBounds(map.width, map.height, x, y)) return false;
199
+ return (map.flags[_idx(map.width, x, y)] & flag) !== 0;
200
+ };
201
+ var addEntity = (map, x, y, entity) => {
202
+ if (!_inBounds(map.width, map.height, x, y)) return false;
203
+ const index = _idx(map.width, x, y);
204
+ const bucket = map.entities.get(index);
205
+ if (bucket) bucket.push(entity);
206
+ else map.entities.set(index, [entity]);
207
+ return true;
208
+ };
209
+ var removeEntity = (map, x, y, predicate) => {
210
+ if (!_inBounds(map.width, map.height, x, y)) return false;
211
+ const index = _idx(map.width, x, y);
212
+ const bucket = map.entities.get(index);
213
+ if (!bucket) return false;
214
+ for (let i = 0; i < bucket.length; i++) {
215
+ if (predicate(bucket[i])) {
216
+ bucket.splice(i, 1);
217
+ if (bucket.length === 0) map.entities.delete(index);
218
+ return true;
219
+ }
220
+ }
221
+ return false;
222
+ };
223
+ var moveEntity = (map, fromX, fromY, toX, toY, predicate) => {
224
+ const { width, height } = map;
225
+ if (!_inBounds(width, height, fromX, fromY) || !_inBounds(width, height, toX, toY)) return false;
226
+ const srcIndex = _idx(width, fromX, fromY);
227
+ const src = map.entities.get(srcIndex);
228
+ if (!src) return false;
229
+ for (let i = 0; i < src.length; i++) {
230
+ if (predicate(src[i])) {
231
+ const entity = src[i];
232
+ src.splice(i, 1);
233
+ if (src.length === 0) map.entities.delete(srcIndex);
234
+ const dstIndex = _idx(width, toX, toY);
235
+ const dst = map.entities.get(dstIndex);
236
+ if (dst) dst.push(entity);
237
+ else map.entities.set(dstIndex, [entity]);
238
+ return true;
239
+ }
240
+ }
241
+ return false;
242
+ };
243
+ var getEntitiesAt = (map, x, y) => {
244
+ if (!_inBounds(map.width, map.height, x, y)) return [];
245
+ return map.entities.get(_idx(map.width, x, y)) ?? [];
246
+ };
247
+ var clearEntitiesAt = (map, x, y) => {
248
+ if (_inBounds(map.width, map.height, x, y)) map.entities.delete(_idx(map.width, x, y));
249
+ };
250
+ var getAdjacentIndices = (map, x, y, includeDiagonals = false) => {
251
+ const { width, height } = map;
252
+ const offsets = includeDiagonals ? _ALL_ADJ : _CARDINAL;
253
+ const result = [];
254
+ for (let i = 0; i < offsets.length; i += 2) {
255
+ const nx = x + offsets[i];
256
+ const ny = y + offsets[i + 1];
257
+ if (nx >= 0 && nx < width && ny >= 0 && ny < height) result.push(_idx(width, nx, ny));
258
+ }
259
+ return result;
260
+ };
261
+ var getAdjacentTiles = (map, x, y, includeDiagonals = false) => {
262
+ const { width, height } = map;
263
+ const offsets = includeDiagonals ? _ALL_ADJ : _CARDINAL;
264
+ const result = [];
265
+ for (let i = 0; i < offsets.length; i += 2) {
266
+ const nx = x + offsets[i];
267
+ const ny = y + offsets[i + 1];
268
+ if (nx >= 0 && nx < width && ny >= 0 && ny < height) {
269
+ const index = _idx(width, nx, ny);
270
+ result.push({ index, x: nx, y: ny, flags: map.flags[index], entities: map.entities.get(index) ?? [] });
271
+ }
272
+ }
273
+ return result;
274
+ };
275
+ var getIndicesInRange = (map, x, y, range, shape = "square", includeOrigin = false) => {
276
+ const { width, height } = map;
277
+ const r2 = range * range;
278
+ const result = [];
279
+ for (let dy = -range; dy <= range; dy++) {
280
+ const ny = y + dy;
281
+ if (ny < 0 || ny >= height) continue;
282
+ for (let dx = -range; dx <= range; dx++) {
283
+ if (!includeOrigin && dx === 0 && dy === 0) continue;
284
+ if (shape === "circle" && dx * dx + dy * dy > r2) continue;
285
+ const nx = x + dx;
286
+ if (nx >= 0 && nx < width) result.push(_idx(width, nx, ny));
287
+ }
288
+ }
289
+ return result;
290
+ };
291
+ var getTilesInRange = (map, x, y, range, shape = "square", includeOrigin = false) => {
292
+ const { width, height } = map;
293
+ const r2 = range * range;
294
+ const result = [];
295
+ for (let dy = -range; dy <= range; dy++) {
296
+ const ny = y + dy;
297
+ if (ny < 0 || ny >= height) continue;
298
+ for (let dx = -range; dx <= range; dx++) {
299
+ if (!includeOrigin && dx === 0 && dy === 0) continue;
300
+ if (shape === "circle" && dx * dx + dy * dy > r2) continue;
301
+ const nx = x + dx;
302
+ if (nx >= 0 && nx < width) {
303
+ const index = _idx(width, nx, ny);
304
+ result.push({ index, x: nx, y: ny, flags: map.flags[index], entities: map.entities.get(index) ?? [] });
305
+ }
306
+ }
307
+ }
308
+ return result;
309
+ };
310
+ var getEntitiesInRange = (map, x, y, range, shape = "square", includeOrigin = false) => {
311
+ const { width, height } = map;
312
+ const r2 = range * range;
313
+ const result = [];
314
+ for (let dy = -range; dy <= range; dy++) {
315
+ const ny = y + dy;
316
+ if (ny < 0 || ny >= height) continue;
317
+ for (let dx = -range; dx <= range; dx++) {
318
+ if (!includeOrigin && dx === 0 && dy === 0) continue;
319
+ if (shape === "circle" && dx * dx + dy * dy > r2) continue;
320
+ const nx = x + dx;
321
+ if (nx < 0 || nx >= width) continue;
322
+ const bucket = map.entities.get(_idx(width, nx, ny));
323
+ if (bucket) for (let i = 0; i < bucket.length; i++) result.push(bucket[i]);
324
+ }
325
+ }
326
+ return result;
327
+ };
328
+ var validateTile = (map, x, y, validator) => {
329
+ if (!_inBounds(map.width, map.height, x, y)) return false;
330
+ if (!validator) return true;
331
+ const index = _idx(map.width, x, y);
332
+ return validator({ index, x, y, flags: map.flags[index], entities: map.entities.get(index) ?? [] });
333
+ };
334
+ var validateRange = (map, x, y, range, validator, shape = "square", includeOrigin = false) => {
335
+ const { width, height } = map;
336
+ const r2 = range * range;
337
+ for (let dy = -range; dy <= range; dy++) {
338
+ const ny = y + dy;
339
+ if (ny < 0 || ny >= height) continue;
340
+ for (let dx = -range; dx <= range; dx++) {
341
+ if (!includeOrigin && dx === 0 && dy === 0) continue;
342
+ if (shape === "circle" && dx * dx + dy * dy > r2) continue;
343
+ const nx = x + dx;
344
+ if (nx < 0 || nx >= width) continue;
345
+ const index = _idx(width, nx, ny);
346
+ if (!validator({ index, x: nx, y: ny, flags: map.flags[index], entities: map.entities.get(index) ?? [] })) return false;
347
+ }
348
+ }
349
+ return true;
350
+ };
351
+ var createSpatialConfig = (tileWidth, tileHeight, originX = 0, originY = 0) => ({ tileWidth, tileHeight, originX, originY });
352
+ var worldToTile = (spatial, wx, wy) => ({
353
+ x: (wx - spatial.originX) / spatial.tileWidth | 0,
354
+ y: (wy - spatial.originY) / spatial.tileHeight | 0
355
+ });
356
+ var tileToWorld = (spatial, tx, ty) => ({
357
+ x: tx * spatial.tileWidth + spatial.originX,
358
+ y: ty * spatial.tileHeight + spatial.originY
359
+ });
360
+ var tileCenterWorld = (spatial, tx, ty) => ({
361
+ x: tx * spatial.tileWidth + spatial.originX + (spatial.tileWidth >> 1),
362
+ y: ty * spatial.tileHeight + spatial.originY + (spatial.tileHeight >> 1)
363
+ });
364
+ var screenToWorld = (cameraX, cameraY, sx, sy) => ({
365
+ x: sx + cameraX,
366
+ y: sy + cameraY
367
+ });
368
+ var worldToScreen = (cameraX, cameraY, wx, wy) => ({
369
+ x: wx - cameraX,
370
+ y: wy - cameraY
371
+ });
372
+ var screenToTile = (spatial, cameraX, cameraY, sx, sy) => ({
373
+ x: (sx + cameraX - spatial.originX) / spatial.tileWidth | 0,
374
+ y: (sy + cameraY - spatial.originY) / spatial.tileHeight | 0
375
+ });
376
+ var tileToScreen = (spatial, cameraX, cameraY, tx, ty) => ({
377
+ x: tx * spatial.tileWidth + spatial.originX - cameraX,
378
+ y: ty * spatial.tileHeight + spatial.originY - cameraY
379
+ });
380
+ var worldToTileExact = (spatial, wx, wy) => {
381
+ const fx = (wx - spatial.originX) / spatial.tileWidth;
382
+ const fy = (wy - spatial.originY) / spatial.tileHeight;
383
+ const tileX = fx | 0;
384
+ const tileY = fy | 0;
385
+ return { tileX, tileY, fracX: fx - tileX, fracY: fy - tileY };
386
+ };
387
+ var getTileAtWorld = (map, spatial, wx, wy) => {
388
+ const tx = (wx - spatial.originX) / spatial.tileWidth | 0;
389
+ const ty = (wy - spatial.originY) / spatial.tileHeight | 0;
390
+ return getTileInfo(map, tx, ty);
391
+ };
392
+ var getTileAtScreen = (map, spatial, cameraX, cameraY, sx, sy) => {
393
+ const tx = (sx + cameraX - spatial.originX) / spatial.tileWidth | 0;
394
+ const ty = (sy + cameraY - spatial.originY) / spatial.tileHeight | 0;
395
+ return getTileInfo(map, tx, ty);
396
+ };
397
+ var tile_map_default = {
398
+ TileFlags,
399
+ createTileMap,
400
+ getTileIndex,
401
+ getTileInfo,
402
+ indexToCoords,
403
+ setFlag,
404
+ clearFlag,
405
+ toggleFlag,
406
+ hasFlag,
407
+ addEntity,
408
+ removeEntity,
409
+ moveEntity,
410
+ getEntitiesAt,
411
+ clearEntitiesAt,
412
+ getAdjacentIndices,
413
+ getAdjacentTiles,
414
+ getIndicesInRange,
415
+ getTilesInRange,
416
+ getEntitiesInRange,
417
+ validateTile,
418
+ validateRange,
419
+ createSpatialConfig,
420
+ worldToTile,
421
+ tileToWorld,
422
+ tileCenterWorld,
423
+ screenToWorld,
424
+ worldToScreen,
425
+ screenToTile,
426
+ tileToScreen,
427
+ worldToTileExact,
428
+ getTileAtWorld,
429
+ getTileAtScreen
430
+ };
431
+
432
+ // index.ts
433
+ var index_default = {
434
+ s3: s3_exports,
435
+ JSONL: jsonl_default,
436
+ tileMap: tile_map_default,
437
+ utils: {
438
+ ...misc_js_funcs_exports
439
+ }
440
+ };
441
+ export {
442
+ jsonl_default as JSONL,
443
+ TileFlags,
444
+ addEntity,
445
+ chunkArray,
446
+ clearEntitiesAt,
447
+ clearFlag,
448
+ createSpatialConfig,
449
+ createTileMap,
450
+ index_default as default,
451
+ deleteObject,
452
+ generateRandomString,
453
+ getAdjacentIndices,
454
+ getAdjacentTiles,
455
+ getClient,
456
+ getEntitiesAt,
457
+ getEntitiesInRange,
458
+ getIndicesInRange,
459
+ getObject,
460
+ getTileAtScreen,
461
+ getTileAtWorld,
462
+ getTileIndex,
463
+ getTileInfo,
464
+ getTilesInRange,
465
+ hasFlag,
466
+ indexToCoords,
467
+ listObjects,
468
+ moveEntity,
469
+ putObject,
470
+ removeEntity,
471
+ s3_exports as s3,
472
+ screenToTile,
473
+ screenToWorld,
474
+ setFlag,
475
+ settledSeparator,
476
+ sleep,
477
+ tileCenterWorld,
478
+ tile_map_default as tileMap,
479
+ tileToScreen,
480
+ tileToWorld,
481
+ timeFormat,
482
+ timeSinceString,
483
+ toggleFlag,
484
+ validateRange,
485
+ validateTile,
486
+ worldToScreen,
487
+ worldToTile,
488
+ worldToTileExact
489
+ };
490
+ //# sourceMappingURL=index.mjs.map