refactor: better gen

This commit is contained in:
cha0s 2024-07-11 16:01:16 -05:00
parent a8d345eebe
commit dcf6fff66d
4 changed files with 43 additions and 35 deletions

View File

@ -3,8 +3,6 @@ import {createNoise2D} from 'simplex-noise';
import {createRandom, Generator} from '@/util/math.js';
import createEcs from './create-ecs.js';
const seed = 42069;
const prng = alea(seed);
const rawNoise = createNoise2D(prng);
@ -54,10 +52,10 @@ const Forest = new Generator({
],
});
export default async function createForest(Ecs) {
const ecs = createEcs(Ecs);
export default async function createForest() {
const area = {x: w, y: h};
const master = ecs.get(await ecs.create({
const entities = [];
entities.push({
AreaSize: {x: area.x * 16, y: area.y * 16},
Ticking: {},
TileLayers: {
@ -78,8 +76,9 @@ export default async function createForest(Ecs) {
},
Time: {},
Water: {},
}));
});
Forest.generate();
const master = entities[0];
const layer0 = master.TileLayers.layers[0];
layer0.data = Forest.matrix;
for (let y = 0; y < h; ++y) {
@ -110,7 +109,7 @@ export default async function createForest(Ecs) {
if (v > 0.2) {
v = noise(x * (1 / 7), y * (1 / 7));
if (v < 0.15) {
await ecs.create({
entities.push({
Position: entityPosition(x, y),
Sprite: {
anchorY: 0.7,
@ -120,7 +119,7 @@ export default async function createForest(Ecs) {
});
}
else if (v < 0.17) {
await ecs.create({
entities.push({
Position: entityPosition(x, y),
Sprite: {
anchorY: 0.875,
@ -131,7 +130,7 @@ export default async function createForest(Ecs) {
}
v = noise(x * (1 / 12), y * (1 / 12));
if (v < 0.08) {
await ecs.create({
entities.push({
Position: entityPosition(x, y),
Sprite: {
anchorY: 0.7,
@ -143,6 +142,6 @@ export default async function createForest(Ecs) {
}
}
}
return ecs;
return entities;
}

View File

@ -1,9 +1,7 @@
import createEcs from './create-ecs.js';
export default async function createHomestead(Ecs, id) {
const ecs = createEcs(Ecs);
export default async function createHomestead(id) {
const area = {x: 100, y: 60};
await ecs.create({
const entities = [];
entities.push({
AreaSize: {x: area.x * 16, y: area.y * 16},
Ticking: {},
TileLayers: {
@ -25,7 +23,7 @@ export default async function createHomestead(Ecs, id) {
Time: {},
Water: {water: {}},
});
await ecs.create({
entities.push({
Collider: {
bodies: [
{
@ -61,5 +59,5 @@ export default async function createHomestead(Ecs, id) {
Ticking: {},
VisibleAabb: {},
});
return ecs;
return entities;
}

View File

@ -267,7 +267,10 @@ export default class Engine {
if ('ENOENT' !== error.code) {
throw error;
}
const homestead = await createHomestead(this.Ecs, id);
const homestead = createEcs(this.Ecs);
for (const entity of await createHomestead(id)) {
await homestead.create(entity);
}
await this.saveEcs(
['homesteads', `${id}`].join('/'),
homestead,
@ -277,7 +280,10 @@ export default class Engine {
['houses', `${id}`].join('/'),
house,
);
const forest = await createForest(this.Ecs, id);
const forest = createEcs(this.Ecs);
for (const entity of await createForest()) {
await forest.create(entity);
}
await this.saveEcs(
['forests', `${id}`].join('/'),
forest,

View File

@ -2,6 +2,7 @@ import {del, get, set} from 'idb-keyval';
import {encode} from '@/packets/index.js';
import createEcs from '../../create-ecs.js';
import '../../create-forest.js';
import '../../create-homestead.js';
import '../../create-player.js';
@ -82,15 +83,15 @@ if (import.meta.hot) {
const resolver = createResolver();
resolvers.push(resolver);
await beforeResolver;
// const oldBuffer = await engine.server.readData('players/0');
// const oldPlayer = JSON.parse((new TextDecoder()).decode(oldBuffer));
// const buffer = await createPlayer(0);
// const player = JSON.parse((new TextDecoder()).decode(buffer));
// // Less jarring
// player.Ecs = oldPlayer.Ecs;
// player.Direction = oldPlayer.Direction;
// player.Position = oldPlayer.Position;
// await engine.server.writeData('players/0', (new TextEncoder()).encode(JSON.stringify(player)));
const oldBuffer = await engine.server.readData('players/0');
const oldPlayer = JSON.parse((new TextDecoder()).decode(oldBuffer));
const buffer = await createPlayer(0);
const player = JSON.parse((new TextDecoder()).decode(buffer));
// Less jarring
player.Ecs = oldPlayer.Ecs;
player.Direction = oldPlayer.Direction;
player.Position = oldPlayer.Position;
await engine.server.writeData('players/0', (new TextEncoder()).encode(JSON.stringify(player)));
resolver.resolve();
});
import.meta.hot.accept('../../create-forest.js', async ({default: createForest}) => {
@ -99,9 +100,10 @@ if (import.meta.hot) {
await beforeResolver;
delete engine.ecses['forests/0'];
await engine.server.removeData('forests/0');
const last = performance.now();
const forest = await createForest(engine.Ecs, '0');
console.log((performance.now() - last) / 1000);
const forest = createEcs(engine.Ecs);
for (const entity of await createForest()) {
await forest.create(entity);
}
await engine.saveEcs('forests/0', forest);
resolver.resolve();
});
@ -109,10 +111,13 @@ if (import.meta.hot) {
const resolver = createResolver();
resolvers.push(resolver);
await beforeResolver;
// delete engine.ecses['homesteads/0'];
// await engine.server.removeData('homesteads/0');
// const homestead = await createHomestead(engine.Ecs, '0');
// await engine.saveEcs('homesteads/0', homestead);
delete engine.ecses['homesteads/0'];
await engine.server.removeData('homesteads/0');
const homestead = createEcs(engine.Ecs);
for (const entity of await createHomestead('0')) {
await homestead.create(entity);
}
await engine.saveEcs('homesteads/0', homestead);
resolver.resolve();
});
import.meta.hot.on('vite:afterUpdate', async () => {