@@ -15,6 +15,10 @@ canvas {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.canvas-stage {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
.maze-layout {
|
.maze-layout {
|
||||||
width: min(1100px, calc(100vw - 24px));
|
width: min(1100px, calc(100vw - 24px));
|
||||||
margin: 12px auto 20px;
|
margin: 12px auto 20px;
|
||||||
@@ -44,6 +48,36 @@ canvas {
|
|||||||
height: min(62vh, 680px);
|
height: min(62vh, 680px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.canvas-hud {
|
||||||
|
position: absolute;
|
||||||
|
top: 14px;
|
||||||
|
left: 14px;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-radius: 12px;
|
||||||
|
background: rgba(6, 10, 15, 0.72);
|
||||||
|
border: 1px solid rgba(121, 174, 242, 0.3);
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.28);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.canvas-hud-label {
|
||||||
|
font-size: 10px;
|
||||||
|
letter-spacing: 0.14em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #93a4b8;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.canvas-hud-value {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1;
|
||||||
|
color: #eef5ff;
|
||||||
|
text-shadow: 0 0 12px rgba(121, 174, 242, 0.35);
|
||||||
|
}
|
||||||
|
|
||||||
.control-panel {
|
.control-panel {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|||||||
@@ -11,7 +11,13 @@
|
|||||||
<main class="maze-layout">
|
<main class="maze-layout">
|
||||||
<section class="panel">
|
<section class="panel">
|
||||||
<div class="panel-label">Babylon Scene</div>
|
<div class="panel-label">Babylon Scene</div>
|
||||||
|
<div class="canvas-stage">
|
||||||
<canvas id="renderCanvas"></canvas>
|
<canvas id="renderCanvas"></canvas>
|
||||||
|
<div class="canvas-hud">
|
||||||
|
<div class="canvas-hud-label">Elapsed time</div>
|
||||||
|
<div id="canvas-time" class="canvas-hud-value">0.0s</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel">
|
<section class="panel">
|
||||||
@@ -53,7 +59,7 @@
|
|||||||
<div class="status-display">
|
<div class="status-display">
|
||||||
<div class="status-line"><strong>Seed:</strong> <span id="status-seed">0</span></div>
|
<div class="status-line"><strong>Seed:</strong> <span id="status-seed">0</span></div>
|
||||||
<div class="status-line"><strong>Level:</strong> <span id="status-level">1</span></div>
|
<div class="status-line"><strong>Level:</strong> <span id="status-level">1</span></div>
|
||||||
<div class="status-line"><strong>Time:</strong> <span id="status-time">0.0</span>s</div>
|
<div class="status-line"><strong>Time:</strong> <span id="status-time">0.0</span></div>
|
||||||
<div class="status-line"><strong>Key:</strong> <span id="status-key">no</span></div>
|
<div class="status-line"><strong>Key:</strong> <span id="status-key">no</span></div>
|
||||||
<div class="status-message" id="status-message">Adjust settings, then start a run.</div>
|
<div class="status-message" id="status-message">Adjust settings, then start a run.</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { gridCellToWorld, isWalkableCell } from "./game/grid.js";
|
|||||||
// Initialize Babylon.js engine and scene
|
// Initialize Babylon.js engine and scene
|
||||||
const canvas = document.getElementById("renderCanvas");
|
const canvas = document.getElementById("renderCanvas");
|
||||||
const engine = new BABYLON.Engine(canvas, true);
|
const engine = new BABYLON.Engine(canvas, true);
|
||||||
|
const canvasTime = document.getElementById("canvas-time");
|
||||||
|
|
||||||
const scene = new BABYLON.Scene(engine);
|
const scene = new BABYLON.Scene(engine);
|
||||||
scene.clearColor = new BABYLON.Color4(0.05, 0.07, 0.1, 1);
|
scene.clearColor = new BABYLON.Color4(0.05, 0.07, 0.1, 1);
|
||||||
@@ -99,6 +100,9 @@ engine.runRenderLoop(() => {
|
|||||||
sphereMaterial.diffuseColor = sharedState.runtime.hasKey
|
sphereMaterial.diffuseColor = sharedState.runtime.hasKey
|
||||||
? new BABYLON.Color3(0.25, 0.8, 0.45)
|
? new BABYLON.Color3(0.25, 0.8, 0.45)
|
||||||
: new BABYLON.Color3(0.2, 0.55, 0.95);
|
: new BABYLON.Color3(0.2, 0.55, 0.95);
|
||||||
|
if (canvasTime) {
|
||||||
|
canvasTime.textContent = `${sharedState.runtime.elapsedSeconds.toFixed(1)}s`;
|
||||||
|
}
|
||||||
scene.render();
|
scene.render();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -146,7 +150,8 @@ function buildLevelFromGrid(grid) {
|
|||||||
floor.position = new BABYLON.Vector3(0, 0, 0);
|
floor.position = new BABYLON.Vector3(0, 0, 0);
|
||||||
floor.checkCollisions = true;
|
floor.checkCollisions = true;
|
||||||
const fm = new BABYLON.StandardMaterial('floorMat', scene);
|
const fm = new BABYLON.StandardMaterial('floorMat', scene);
|
||||||
fm.diffuseColor = new BABYLON.Color3(0.08, 0.08, 0.09);
|
fm.specularColor = new BABYLON.Color3(0.1, 0.1, 0.1);
|
||||||
|
fm.diffuseColor = new BABYLON.Color3(0.58, 0.58, 0.59);
|
||||||
floor.material = fm;
|
floor.material = fm;
|
||||||
levelMeshes.push(floor);
|
levelMeshes.push(floor);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user