Skip to content

Commit 23062c7

Browse files
committed
View sprite layers
1 parent b2454ca commit 23062c7

4 files changed

Lines changed: 151 additions & 0 deletions

File tree

features/features.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
2+
{
3+
"version": 2,
4+
"id": "sprite-layers",
5+
"versionAdded": "v3.9.0"
6+
},
27
{
38
"version": 2,
49
"id": "hide-project-tags",

features/sprite-layers/data.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"title": "View Sprite Layers",
3+
"description": "Allows you to hover over the show/hide toggle in the sprite properties panel of the editor to view the sprite layers.",
4+
"credits": [
5+
{
6+
"username": "-Brass_Glass-",
7+
"url": "https://scratch.mit.edu/users/-Brass_Glass-/"
8+
},
9+
{
10+
"username": "rgantzos",
11+
"url": "https://scratch.mit.edu/users/rgantzos/"
12+
}
13+
],
14+
"type": [
15+
"Editor"
16+
],
17+
"tags": [
18+
"New"
19+
],
20+
"scripts": [
21+
{
22+
"file": "script.js",
23+
"runOn": "/projects/*"
24+
}
25+
],
26+
"styles": [
27+
{
28+
"file": "style.css",
29+
"runOn": "/projects/*"
30+
}
31+
]
32+
}

features/sprite-layers/script.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
export default async function ({ feature, console }) {
2+
window.feature = feature
3+
4+
ScratchTools.waitForElements("div[class*='sprite-info_row_']:nth-child(2) > div[class*='sprite-info_group_']:nth-child(1)", function (button) {
5+
button.addEventListener("mouseover", function () {
6+
if (feature.traps.vm.editingTarget.isStage || button.querySelector(".ste-layers")) return;
7+
8+
button.style.position = "relative"
9+
10+
let div = document.createElement("div")
11+
div.className = "ste-layers"
12+
13+
let h3 = document.createElement("h3")
14+
h3.textContent = "Layers"
15+
div.appendChild(h3)
16+
17+
div.appendChild(buildDiagram())
18+
19+
if (div.querySelector("div").childNodes.length > 12) {
20+
div.classList.add("ste-long-layers")
21+
}
22+
23+
let p = document.createElement("p")
24+
p.textContent = "Layers to the left are to the front. Bright blue indicates the current sprite, and light blue indicates any of its clones."
25+
div.appendChild(p)
26+
27+
button.appendChild(div)
28+
})
29+
30+
button.addEventListener("mouseout", function () {
31+
button.querySelector(".ste-layers")?.remove()
32+
button.style.position = null
33+
})
34+
})
35+
36+
function buildDiagram() {
37+
let targets = feature.traps.vm.runtime.targets
38+
39+
let div = document.createElement("div")
40+
let elements = []
41+
42+
for (var i in targets) {
43+
let place = document.createElement("div")
44+
place.style.width = `calc(${(100 / targets.length).toString()}% - .1rem)`
45+
elements.push(place)
46+
}
47+
48+
for (var i in targets) {
49+
if (targets[i].sprite.name === feature.traps.vm.editingTarget.sprite.name) {
50+
if (targets[i].isOriginal) {
51+
elements[targets[i].getLayerOrder() - 1].style.backgroundColor = "#034efc"
52+
} else {
53+
elements[targets[i].getLayerOrder() - 1].style.backgroundColor = "#034efc70"
54+
}
55+
}
56+
}
57+
58+
div.append(...elements)
59+
return div
60+
}
61+
}

features/sprite-layers/style.css

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
.ste-layers {
2+
width: 25rem;
3+
border-radius: .5rem;
4+
height: 9.75rem;
5+
background: white;
6+
position: absolute;
7+
border: 2px solid rgba(3, 78, 252, .5);
8+
padding: .5rem;
9+
text-align: left;
10+
left: 50%;
11+
bottom: -7rem;
12+
transform: translate(-50%, -100%);
13+
z-index: 999;
14+
box-shadow: 0px 0px 10px rgb(3, 78, 252, .3);
15+
}
16+
17+
.ste-layers h3 {
18+
font-size: 1.1rem;
19+
margin-bottom: .5rem;
20+
margin-left: .15rem;
21+
}
22+
23+
.ste-layers>div>div {
24+
border-radius: .5rem;
25+
height: 3rem;
26+
display: inline-block;
27+
background-color: lightgray;
28+
margin-left: .05rem;
29+
margin-right: .05rem;
30+
flex-shrink: 0;
31+
}
32+
33+
.ste-layers>div {
34+
display: flex;
35+
flex-wrap: nowrap;
36+
overflow-x: auto;
37+
text-align: center;
38+
}
39+
40+
.ste-layers p {
41+
font-size: .8rem;
42+
opacity: .6;
43+
font-style: italic;
44+
line-height: .95rem;
45+
padding-left: .05rem;
46+
padding-right: .05rem;
47+
}
48+
49+
.ste-long-layers>div>div:nth-child(even) {
50+
height: 2rem;
51+
position: relative;
52+
top: .5rem;
53+
}

0 commit comments

Comments
 (0)