2023-12-27 20:34:56 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="UTF-8"/>
|
|
|
|
<title>Inhabitor - The Habitat Inspector</title>
|
|
|
|
<style type="text/css">
|
|
|
|
body {
|
|
|
|
margin:40px auto;
|
|
|
|
line-height:1.6;
|
|
|
|
font-size:18px;
|
|
|
|
color:#444;
|
|
|
|
padding:0 10px
|
|
|
|
}
|
|
|
|
h1,h2,h3 {
|
|
|
|
line-height:1.2
|
|
|
|
}
|
|
|
|
</style>
|
2023-12-29 19:48:28 +00:00
|
|
|
<script src="index.js?v=3"></script>
|
2023-12-27 20:34:56 +00:00
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1 id="filename"></h1>
|
2023-12-28 21:57:39 +00:00
|
|
|
<div id="actions">
|
|
|
|
<h2>Actions</h2>
|
|
|
|
</div>
|
2023-12-28 21:10:00 +00:00
|
|
|
<div id="limbs">
|
|
|
|
<h2>Limbs</h2>
|
|
|
|
</div>
|
2023-12-27 20:34:56 +00:00
|
|
|
<div id="cels">
|
|
|
|
<h2>Cels</h1>
|
|
|
|
</div>
|
|
|
|
<div id="data">
|
|
|
|
<h2>Data</h1>
|
|
|
|
</div>
|
|
|
|
<div id="errors"></div>
|
|
|
|
<a href="index.html">Back</a>
|
|
|
|
<script>
|
|
|
|
const propFilter = (key, value) => {
|
|
|
|
if (key != "bitmap" && key != "data" && key != "canvas") {
|
|
|
|
return value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const dumpProp = (prop, container) => {
|
|
|
|
container.appendChild(textNode(JSON.stringify(prop, propFilter, 2), "pre"))
|
|
|
|
}
|
|
|
|
|
2023-12-28 21:10:00 +00:00
|
|
|
const limbNames = ["legs", "legs2", "left arm", "torso", "face", "right arm"]
|
|
|
|
const labelLimb = (container, ilimb) => {
|
|
|
|
container.appendChild(textNode(ilimb < limbNames.length ? limbNames[ilimb] : `Limb #${ilimb}??`, "div"))
|
|
|
|
}
|
2023-12-27 20:34:56 +00:00
|
|
|
const onload = async () => {
|
|
|
|
const q = new URLSearchParams(window.location.search)
|
|
|
|
const filename = q.get("f")
|
|
|
|
document.getElementById("filename").innerText = filename
|
|
|
|
try {
|
2023-12-28 21:10:00 +00:00
|
|
|
const body = await decodeBinary(filename, BodyImpl)
|
2023-12-27 20:34:56 +00:00
|
|
|
dumpProp(body, document.getElementById("data"))
|
|
|
|
if (body.error) {
|
|
|
|
showError(body.error, filename)
|
|
|
|
} else {
|
|
|
|
const celContainer = document.getElementById("cels")
|
2023-12-28 21:10:00 +00:00
|
|
|
const limbContainer = document.getElementById("limbs")
|
|
|
|
for (const [ilimb, limb] of body.limbs.entries()) {
|
|
|
|
labelLimb(celContainer, ilimb)
|
2023-12-27 20:34:56 +00:00
|
|
|
showCels(limb, celContainer)
|
2023-12-28 21:10:00 +00:00
|
|
|
|
|
|
|
labelLimb(limbContainer, ilimb)
|
|
|
|
showAnimations(limb, limbContainer, LimbImpl)
|
2023-12-27 20:34:56 +00:00
|
|
|
}
|
2023-12-28 21:57:39 +00:00
|
|
|
const actionContainer = document.getElementById("actions")
|
|
|
|
for (const action of choreographyActions) {
|
|
|
|
if (action == "stand" || body.actions[action] != body.actions["stand"]) {
|
|
|
|
actionContainer.appendChild(textNode(action, "div"))
|
|
|
|
actionContainer.appendChild(createAnimation(action, body, BodyImpl))
|
|
|
|
}
|
|
|
|
}
|
2023-12-27 20:34:56 +00:00
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
showError(e, filename)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
onload()
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|