Newer
Older
rpg / v2 / apps / demo / index.html
<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8" />
    <title>Демо v2 — воксельный рендер</title>
    <style>
        html, body { margin: 0; height: 100%; background: #17171d; }
        body { display: grid; place-items: center; }
        /* низкое разрешение бэкинг-стора, CSS-масштаб целый ×2, пиксели резкие */
        canvas {
            width: 960px;
            height: 540px;
            image-rendering: pixelated;
            image-rendering: crisp-edges;
        }
        /* HUD: подсказка взаимодействия у точки */
        #hint {
            position: fixed;
            top: 12px;
            left: 50%;
            transform: translateX(-50%);
            padding: 6px 14px;
            background: rgba(23, 23, 29, 0.85);
            color: #d99a32;
            font: 16px/1.4 monospace;
            border: 1px solid #44454e;
            border-radius: 4px;
            white-space: nowrap;
        }
        /* Сумка: список предметов в левом верхнем углу */
        #inv {
            position: fixed;
            top: 12px;
            left: 12px;
            padding: 8px 12px;
            background: rgba(23, 23, 29, 0.85);
            color: #c9c9d2;
            font: 15px/1.5 monospace;
            border: 1px solid #44454e;
            border-radius: 4px;
            white-space: pre;
        }
        #inv .title { color: #626c4c; }
        #inv .item { color: #d99a32; }

        /* Сердца героя: правый верхний угол (тёплый — жизнь) */
        #hp {
            position: fixed;
            top: 12px;
            right: 12px;
            padding: 8px 12px;
            background: rgba(23, 23, 29, 0.85);
            color: #d99a32;
            font: 18px/1.2 monospace;
            border: 1px solid #44454e;
            border-radius: 4px;
            letter-spacing: 2px;
        }

        /* Фейд перехода: чёрный слой поверх всего, прозрачность двигает движок */
        #fade {
            position: fixed;
            inset: 0;
            background: #000;
            opacity: 0;
            pointer-events: none;
        }
        /* Меню: панель в центре поверх мира (стек сцен) */
        #menu {
            position: fixed;
            left: 50%;
            top: 40%;
            transform: translate(-50%, -50%);
            padding: 20px 28px;
            background: rgba(23, 23, 29, 0.92);
            border: 1px solid #44454e;
            border-radius: 6px;
            display: flex;
            flex-direction: column;
            gap: 10px;
            min-width: 280px;
        }
        #menu[hidden] { display: none; } /* display:flex перебивает атрибут hidden */
        #menu .title { color: #d99a32; font-weight: bold; font-size: 20px; margin-bottom: 6px; }
        #menu button {
            padding: 8px 14px;
            background: #23232c;
            color: #c9c9d2;
            border: 1px solid #44454e;
            border-radius: 3px;
            font: 16px monospace;
            cursor: pointer;
        }
        #menu button:hover:not(:disabled) { border-color: #d99a32; color: #fff; }
        #menu button:disabled { opacity: 0.4; cursor: default; }

        /* Диалог: панель внизу экрана, реплика + варианты (кнопки) */
        #dialog {
            position: fixed;
            bottom: 24px;
            left: 50%;
            transform: translateX(-50%);
            width: 640px;
            max-width: 92vw;
            padding: 12px 16px;
            background: rgba(23, 23, 29, 0.92);
            color: #c9c9d2;
            font: 16px/1.5 monospace;
            border: 1px solid #44454e;
            border-radius: 6px;
        }
        #dialog .speaker { color: #d99a32; font-weight: bold; }
        #dialog .choices { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; }
        #dialog .choices button {
            text-align: left;
            padding: 4px 10px;
            background: #23232c;
            color: #c9c9d2;
            border: 1px solid #44454e;
            border-radius: 3px;
            font: inherit;
            cursor: pointer;
        }
        #dialog .choices button:hover { border-color: #d99a32; color: #fff; }
        #dialog .continue { margin-top: 8px; color: #626c4c; font-size: 13px; }
    </style>
</head>
<body>
    <canvas id="scene"></canvas>
    <div id="menu" hidden>
        <div class="title">Пепельные луга — v2</div>
        <button id="menu-start">Войти в мир</button>
        <button id="menu-continue">Продолжить</button>
    </div>
    <div id="fade"></div>
    <div id="hint" hidden></div>
    <div id="inv" hidden></div>
    <div id="hp" hidden></div>
    <div id="dialog" hidden></div>
    <script type="module" src="/src/main.ts"></script>
</body>
</html>