UNPKG

console-fun

Version:

Some stuff in the console: utils, printing, games and other fun

401 lines (381 loc) 13.3 kB
import readline from "readline"; import ansiEscapes from "ansi-escapes"; import delay from "delay"; import figureSet from "figures"; import * as R from "rambda"; import { join, map, repeat, times, propEq, findIndex, addIndex, filter, adjust, set, lensProp, } from "rambda"; import { randPos } from "../utils"; import { shuffle } from "fast-shuffle"; const drawX = async () => { process.stdout.write(ansiEscapes.cursorMove(14, 10)); // await delay(100); // process.stdout.write(figureSet.lineDownDoubleRightDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); await delay(100); // process.stdout.write(figureSet.lineUpDoubleLeftDouble); R.times(async (i) => { if (i > 0) { // await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); } // await delay(100); process.stdout.write(figureSet.lineVerticalDouble); }, 2); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // await delay(100); // process.stdout.write(figureSet.lineVerticalDouble); // await delay(1000); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); R.times(() => { process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); // process.stdout.write(figureSet.lineVerticalDouble); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleRightDouble); R.times(() => { process.stdout.write(figureSet.lineDouble); }, 6); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(100); // process.stdout.write(figureSet.squareSmall); // await delay(100); // process.stdout.write(figureSet.lineDouble); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); await delay(100); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleLeftDouble); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); await delay(100); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleLeftDouble); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineUpDoubleRightDouble); await delay(100); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, -1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); await delay(100); process.stdout.write(figureSet.lineUpDoubleRightDouble); await delay(100); R.times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, -1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(2100); // process.stdout.write(figureSet.lineDownDoubleLeftDouble); await delay(100); // await delay(100); // process.stdout.write(figureSet.lineDouble); R.times(() => { // await delay(100); process.stdout.write(figureSet.lineDouble); }, 6); process.stdout.write(figureSet.lineUpDoubleLeftDouble); await delay(100); // process.stdout.write(figureSet.lineDownDoubleLeftDouble); }; const traction = async (movingType = "chaotic-devouring") => { readline.emitKeypressEvents(process.stdin); process.stdin.setRawMode(true); process.stdin.on("keypress", async (_chunk, key) => { if (true) { if (key.name === "n") { process.stdout.write(figureSet.lineUpLeftDoubleRightDouble); } } if (key && key.name == "s") { process.stdout.write(figureSet.lineUpDoubleRightDouble); } if (key && key.name == "c") { process.exit(0); } }); process.stdout.write(ansiEscapes.clearScreen); await drawX(); let pntr = 0; let singleDirCounter = 1; let isStarted = false; if (movingType !== "sequential") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); singleDirCounter--; } let firstStepIter = true; let positions = [ [3, 3], [-3, -1], [4, 2], [-2, -2], [-2, -2], [1, 1], [-1, -2], [0, 1], ]; // process.stdout.write(ansiEscapes.cursorMove(1, 1)); const intrv = setInterval(() => { if (movingType === "sequential") { let dirs = [ "tl1", "tr1", "m1", "tr2", "br1", "m2", "br2", "bl1", "m3", "bl2", "tl2", "m4", ]; let zeroSteppedDirs = ["br1", "tl2"]; let oneSteppedDirs = ["bl1"]; let twoSteppedDirs = ["tl1", "m1", "br2", "m3", "bl2"]; let threeSteppedDirs = ["m2"]; let fourSteppedDirs = ["tr1"]; let fiveSteppedDirs = ["m4"]; let sixSteppedDirs = ["tr2"]; if (isStarted) { process.stdout.write(ansiEscapes.cursorRestorePosition); process.stdout.write(" "); process.stdout.write(ansiEscapes.cursorMove(-1)); } else { isStarted = true; } // process.stdout.write(ansiEscapes.cursorSavePosition); if (dirs[pntr] === "tl1") { process.stdout.write(ansiEscapes.cursorMove(0, -1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "tr1") { process.stdout.write(ansiEscapes.cursorMove(1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m1") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "tr2") { process.stdout.write(ansiEscapes.cursorMove(1, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "br1") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m2") { process.stdout.write(ansiEscapes.cursorMove(-2, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "br2") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "bl1") { process.stdout.write(ansiEscapes.cursorMove(-2, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m3") { process.stdout.write(ansiEscapes.cursorMove(0, -1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "bl2") { process.stdout.write(ansiEscapes.cursorMove(-2, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "tl2") { process.stdout.write(ansiEscapes.cursorMove(0, -1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m4") { process.stdout.write(ansiEscapes.cursorMove(1, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } singleDirCounter++; // await delay(100); if (twoSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 2) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (oneSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 1) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (fourSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 4) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (threeSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 3) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (fiveSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 5) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (sixSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 6) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (zeroSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 0) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else { if (singleDirCounter > 3) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } } else if (movingType === "chaotic-devouring") { if (singleDirCounter >= positions.length) { singleDirCounter = 0; positions = shuffle(positions); } if (isStarted) { process.stdout.write(ansiEscapes.cursorRestorePosition); process.stdout.write(" "); process.stdout.write(ansiEscapes.cursorMove(-1)); } else { isStarted = true; } const currCoord = positions[singleDirCounter]; process.stdout.write(ansiEscapes.cursorMove(currCoord[0], currCoord[1])); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); singleDirCounter++; } else { if (isStarted) { process.stdout.write(ansiEscapes.cursorRestorePosition); process.stdout.write(" "); process.stdout.write(ansiEscapes.cursorMove(-1)); } else { isStarted = true; } const dirs = ["m1", "m2", "m3", "m4"]; const twoSteppedDirs = ["m2", "m4"]; const threeSteppedDirs = ["m3"]; if (twoSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 0) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else if (threeSteppedDirs.includes(dirs[pntr])) { if (singleDirCounter > 1) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; if (firstStepIter) { firstStepIter = false; } } } else { if (firstStepIter) { if (singleDirCounter > 4) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } else { if (singleDirCounter > 3) { pntr = (pntr + 1) % dirs.length; singleDirCounter = 0; } } } singleDirCounter++; if (dirs[pntr] === "m1") { process.stdout.write(ansiEscapes.cursorMove(1, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m2") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m3") { process.stdout.write(ansiEscapes.cursorMove(-2, 0)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } else if (dirs[pntr] === "m4") { process.stdout.write(ansiEscapes.cursorMove(0, -1)); process.stdout.write(ansiEscapes.cursorSavePosition); process.stdout.write(figureSet.bullet); } } }, 560); }; export { traction };