forked from baturinsky/worldgen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsquare.html
90 lines (80 loc) · 15 KB
/
square.html
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
<body>
<img id="img" src="data:image/png;base64,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" alt="" />
</body>
<script>
const canvasSize = 512;
document.body.innerHTML += `<canvas id="canvas" width="${canvasSize}" height="${canvasSize}"></canvas>`;
let img = document.getElementById("img")
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
function cutImageUp(
image,
numColsToCut,
numRowsToCut,
widthOfOnePiece,
heightOfOnePiece
) {
let imagePieces = [];
for (let y = 0; y < numRowsToCut; y++) {
for (let x = 0; x < numColsToCut; x++) {
let canvas = document.createElement("canvas");
canvas.width = widthOfOnePiece;
canvas.height = heightOfOnePiece;
let context = canvas.getContext("2d");
context.drawImage(
image,
x * widthOfOnePiece,
y * heightOfOnePiece,
widthOfOnePiece,
heightOfOnePiece,
0,
0,
widthOfOnePiece,
heightOfOnePiece
);
imagePieces.push(canvas);
}
}
return imagePieces;
}
const partsOrder = "334433443223100110013223"
.split("")
.map((s, i) => Number(s) * 4 + (i % 2) + (Math.floor(i / 4) % 2) * 2);
console.log(partsOrder);
let [gridWidth, gridHeight] = [64, 64];
console.log(
[...Array(gridWidth)].map(() => {
return Math.random() < 0.3 ? 1 : 0;
})
);
let grid = [...Array(gridHeight)].map(() =>
[...Array(gridWidth)].map(() => (Math.random() < 0.5 ? 1 : 0))
);
img.onload = () => {
let partsUnordered = cutImageUp(img, 4, 6, 16, 16);
let parts = [];
partsOrder.forEach((v, i) => (parts[v] = partsUnordered[i]));
for (let i = 0; i < parts.length; i++) ctx.drawImage(parts[i], i * 17, 0);
for (let x = 1; x < gridWidth - 1; x++)
for (let y = 1; y < gridHeight - 1; y++) {
if (grid[y][x] == 0) continue;
for (let corner = 0; corner < 4; corner++) {
let dx = corner % 2 ? 1 : -1;
let dy = corner > 1 ? 1 : -1;
let xNear = grid[y][x + dx] == 0;
let yNear = grid[y + dy][x] == 0;
let kind = 0;
if (xNear || yNear) {
kind = xNear + yNear * 2;
} else if (grid[y + dy][x + dx] == 0) {
kind = 4;
}
ctx.drawImage(
parts[kind * 4 + corner],
x * 32 + (corner % 2 ? 16 : 0),
y * 32 + (corner > 1 ? 16 : 0)
);
}
}
};
</script>