forked from JannisX11/blockbench-plugins
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcardinal.js
More file actions
100 lines (84 loc) · 3.4 KB
/
Copy pathcardinal.js
File metadata and controls
100 lines (84 loc) · 3.4 KB
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
(function() {
let images = {
north: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAABVJREFUCNdjSGxgAKJKMEoHo0QEAgCIGwkHoSKsGQAAAABJRU5ErkJggg",
east : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAABBJREFUCNdjKGBwYEgA4gIACMoBwSwi6WsAAAAASUVORK5CYII",
south: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAABJJREFUCNdjKGBwYChgEGAoAAAIigGhv1KChwAAAABJRU5ErkJggg",
west : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAABhJREFUCNdjYGBgOHAAhM4gIWMGEGJgAACnnQmX+CnbdwAAAABJRU5ErkJggg"
},
buildGridCopy = Canvas.buildGrid;
Plugin.register("cardinal", {
title: "Cardinal",
author: "Bug1312",
description: "Adds in all cardinal directions on the grid and renders them on-top of everything while facing the camera.",
about: "If you wish to change the color, use custom CSS to set the variable 'cardinal' to any color! The scale can be changed from within the settings.",
icon: "border_outer",
version: "1.1.0",
variant: "both",
onload() {
new Setting("cardinal_scale", {
value: 1,
category: "preview",
name: "Cardinal Scale",
description: "Change the scale of the cardinals",
type: "number",
onChange: build
});
build();
},
onunload() {
Canvas.buildGrid = buildGridCopy;
window.buildGrid = Canvas.buildGrid;
},
onuninstall() { Canvas.buildGrid() }
});
function build() {
Canvas.buildGrid = function() {
// Default grid
buildGridCopy();
// Hide default north mark
let north_mark = three_grid.children.find(c => c.material === Canvas.northMarkMaterial);
if (north_mark) north_mark.visible = false;
// Generate other marks
addMark(images.north, [ 0.0, -9.5 ]);
addMark(images.east, [ 9.5, 0.0 ]);
addMark(images.south, [ 0.0, 9.5 ]);
addMark(images.west, [-9.5, 0.0 ]);
};
window.buildGrid = Canvas.buildGrid;
Canvas.buildGrid();
}
function addMark(src, pos) {
let img = new Image(),
tex = new THREE.Texture(img),
color = getComputedStyle(document.body).getPropertyValue("--cardinal").replace(/^\s*/, "");
if (color === "") color = "#FFF";
// Set textures to src
img.src = src;
img.tex = tex;
// Render pixelated
img.tex.magFilter = THREE.NearestFilter;
img.tex.minFilter = THREE.NearestFilter;
// When loaded, render texture but only do so after onBeforeRender()
// Results in less flashing
img.onload = function() { this.tex.needsUpdate = true };
// Setup cardinal mark
let geometry = new THREE.PlaneGeometry(2.4 * settings.cardinal_scale.value, 2.4 * settings.cardinal_scale.value),
material = new THREE.MeshBasicMaterial({
map: tex,
transparent: true,
color: new THREE.Color(color)
}),
mark = new THREE.Mesh(geometry, material);
// Render on top
mark.renderOrder = 10;
mark.material.depthTest = false;
mark.material.depthWrite = false;
// Look at camera
mark.onBeforeRender = function() { this.rotation.set(main_preview.camera.rotation.x, main_preview.camera.rotation.y, main_preview.camera.rotation.z) };
// Move marks based on grid positioning
if (Format.centered_grid) mark.position.set(pos[0], 0, pos[1]);
else mark.position.set(pos[0] + 8, 0, pos[1] + 8);
// Add to grid
three_grid.add(mark);
}
})();