Skip to content

Commit 958e1ea

Browse files
Bikram GoleBikram Gole
authored andcommitted
Fix matrix full-screen coverage and disable matrix on pulse
1 parent 1d0ac2e commit 958e1ea

2 files changed

Lines changed: 41 additions & 6 deletions

File tree

script.js

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,6 +1808,11 @@ if (quoteBtn && quoteOutput) {
18081808

18091809
if (launchBtn && quoteOutput && signalCount) {
18101810
launchBtn.addEventListener("click", (event) => {
1811+
if (document.body.classList.contains("matrix-mode")) {
1812+
stopMatrixRain();
1813+
showToast("Pulse override: Matrix rain off.");
1814+
}
1815+
18111816
launches += 1;
18121817
signalCount.textContent = String(launches);
18131818
quoteOutput.textContent = `> Aura pulse ${launches} launched from Mars.`;
@@ -1899,6 +1904,7 @@ let matrixContext = null;
18991904
let matrixAnimation = null;
19001905
let matrixDrops = [];
19011906
let matrixResizeHandler = null;
1907+
let matrixViewportResizeHandler = null;
19021908

19031909
function startMatrixRain() {
19041910
if (matrixCanvas) {
@@ -1913,29 +1919,52 @@ function startMatrixRain() {
19131919

19141920
matrixResizeHandler = () => {
19151921
if (!matrixCanvas || !matrixContext) return;
1916-
matrixCanvas.width = window.innerWidth;
1917-
matrixCanvas.height = window.innerHeight;
1918-
const columns = Math.floor(matrixCanvas.width / 14);
1919-
matrixDrops = Array.from({ length: columns }, () => Math.random() * matrixCanvas.height);
1922+
const viewportWidth = Math.max(
1923+
1,
1924+
Math.floor(window.visualViewport?.width || window.innerWidth || document.documentElement.clientWidth || 1)
1925+
);
1926+
const viewportHeight = Math.max(
1927+
1,
1928+
Math.floor(window.visualViewport?.height || window.innerHeight || document.documentElement.clientHeight || 1)
1929+
);
1930+
const pixelRatio = Math.max(1, window.devicePixelRatio || 1);
1931+
1932+
matrixCanvas.style.width = `${viewportWidth}px`;
1933+
matrixCanvas.style.height = `${viewportHeight}px`;
1934+
matrixCanvas.width = Math.floor(viewportWidth * pixelRatio);
1935+
matrixCanvas.height = Math.floor(viewportHeight * pixelRatio);
1936+
matrixContext.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
1937+
1938+
const columns = Math.floor(viewportWidth / 14);
1939+
matrixDrops = Array.from({ length: columns }, () => Math.random() * viewportHeight);
19201940
};
19211941

19221942
matrixResizeHandler();
19231943
window.addEventListener("resize", matrixResizeHandler);
1944+
if (window.visualViewport) {
1945+
matrixViewportResizeHandler = () => matrixResizeHandler?.();
1946+
window.visualViewport.addEventListener("resize", matrixViewportResizeHandler);
1947+
}
19241948

19251949
const chars = "01{}[]<>/\\|$#@";
19261950
const draw = () => {
19271951
if (!matrixCanvas || !matrixContext) return;
1952+
const pixelRatio = Math.max(1, window.devicePixelRatio || 1);
1953+
const renderWidth = matrixCanvas.width / pixelRatio;
1954+
const renderHeight = matrixCanvas.height / pixelRatio;
19281955

19291956
matrixContext.fillStyle = "rgba(0, 0, 0, 0.08)";
1930-
matrixContext.fillRect(0, 0, matrixCanvas.width, matrixCanvas.height);
1957+
matrixContext.fillRect(0, 0, renderWidth, renderHeight);
19311958
matrixContext.fillStyle = "#73ff86";
19321959
matrixContext.font = "13px monospace";
19331960

19341961
matrixDrops.forEach((drop, index) => {
19351962
const char = chars[Math.floor(Math.random() * chars.length)];
19361963
const x = index * 14;
19371964
matrixContext.fillText(char, x, drop);
1938-
matrixDrops[index] = drop > matrixCanvas.height && Math.random() > 0.98 ? 0 : drop + 10;
1965+
matrixDrops[index] = drop > renderHeight && Math.random() > 0.98
1966+
? 0
1967+
: drop + 10;
19391968
});
19401969

19411970
matrixAnimation = requestAnimationFrame(draw);
@@ -1954,6 +1983,10 @@ function stopMatrixRain() {
19541983
window.removeEventListener("resize", matrixResizeHandler);
19551984
matrixResizeHandler = null;
19561985
}
1986+
if (window.visualViewport && matrixViewportResizeHandler) {
1987+
window.visualViewport.removeEventListener("resize", matrixViewportResizeHandler);
1988+
matrixViewportResizeHandler = null;
1989+
}
19571990

19581991
if (matrixCanvas) matrixCanvas.remove();
19591992
matrixCanvas = null;

styles.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2988,6 +2988,8 @@ body.force-terminal-fallback .pulse-wave {
29882988
.matrix-layer {
29892989
position: fixed;
29902990
inset: 0;
2991+
width: 100vw;
2992+
height: 100dvh;
29912993
pointer-events: none;
29922994
z-index: 48;
29932995
opacity: 0;

0 commit comments

Comments
 (0)