Skip to content

Instantly share code, notes, and snippets.

@edg-l
Created October 4, 2018 20:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edg-l/dce550680ad7f90e7025e0da2b6d5349 to your computer and use it in GitHub Desktop.
Save edg-l/dce550680ad7f90e7025e0da2b6d5349 to your computer and use it in GitHub Desktop.
function(context, a)
{
a = a || {}
var internalBuffer = []
var charPatterns = {
a: [
[0, 0, 1, 0, 0],
[0, 1, 0, 1, 0],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1]
],
b: [
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0]
],
c: [
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 1],
[0, 1, 1, 1, 0]
],
d: [
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0]
],
e: [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 1]
],
f: [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0]
],
g: [
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 1, 1, 1],
[1, 0, 0, 0, 1],
[0, 1, 1, 1, 0]
],
h: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1]
],
i: [
[1, 1, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[1, 1, 1, 1, 1]
],
j: [
[1, 1, 1, 1, 1],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[1, 0, 0, 1, 0],
[1, 0, 0, 1, 0],
[0, 1, 1, 0, 0]
],
k: [
[1, 0, 0, 0, 1],
[1, 0, 0, 1, 0],
[1, 0, 1, 0, 0],
[1, 1, 0, 0, 0],
[1, 0, 1, 0, 0],
[1, 0, 0, 1, 0],
[1, 0, 0, 0, 1]
],
l: [
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 1]
],
m: [
[1, 0, 0, 0, 1],
[1, 1, 0, 1, 1],
[1, 0, 1, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1]
],
n: [
[1, 0, 0, 0, 1],
[1, 1, 0, 0, 1],
[1, 0, 1, 0, 1],
[1, 0, 0, 1, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1]
],
o: [
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[0, 1, 1, 1, 0]
],
p: [
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0]
],
q: [
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 1, 0, 1],
[1, 0, 0, 1, 1],
[0, 1, 1, 1, 0]
],
r: [
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0],
[1, 0, 1, 0, 0],
[1, 0, 0, 1, 0],
[1, 0, 0, 0, 1]
],
s: [
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 1],
[1, 1, 1, 1, 0]
],
t: [
[1, 1, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]
],
u: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[0, 1, 1, 1, 0]
],
v: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0]
],
w: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 1, 0, 1],
[1, 0, 1, 0, 1],
[1, 0, 1, 0, 1],
[0, 1, 0, 1, 0]
],
x: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 1, 0],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1]
],
y: [
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]
],
z: [
[1, 1, 1, 1, 1],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 1]
],
"!": [
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0]
],
"'": [
[0, 1, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]
],
")": [
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[1, 0, 0, 0, 0]
],
"(": [
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]
],
"[": [
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 0]
],
"]": [
[1, 1, 1, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[1, 1, 1, 1, 0]
]
}
var Renderer = {
initialize(x, y, fill = " ") {
internalBuffer = new Array(y)
for(var i = 0; i < y; i++) {
internalBuffer[i] = new Array(x).fill(fill)
}
},
isCoordInDisplay(x, y) {
if(x < 0 || y < 0 || x >= internalBuffer[0].length || y >= internalBuffer.length)
return false
else
return true
},
get displaySize() {
return {
y: internalBuffer.length,
x: internalBuffer[0].length
}
},
render() {
let str = ""
for(var x in internalBuffer) {
str += internalBuffer[x].join("")
str += "\n"
}
return str
},
clear(clearChar = " ") {
for(var i = 0; i < internalBuffer.length; i++) {
internalBuffer[i] = new Array(internalBuffer[i].length).fill(clearChar)
}
},
setPixel(x, y, char, color) {
if(Renderer.isCoordInDisplay(x, y))
internalBuffer[y][x] = "`" + color + char + "`"
},
draw(drawable) {
switch(drawable.type) {
case "BASE_RECT": {
for(var i = drawable.y; i < (drawable.y + drawable.h); i++) {
for(var j = drawable.x; j < (drawable.x + drawable.w); j++) {
if(i == drawable.y || i == (drawable.y + drawable.h - 1) || j == drawable.x || j == (drawable.x + drawable.w - 1)) {
Renderer.setPixel(j, i, drawable.char, drawable.color)
}
}
}
break
}
case "FILL_RECT": {
for(var i = drawable.y; i < (drawable.y + drawable.h); i++) {
for(var j = drawable.x; j < (drawable.x + drawable.w); j++) {
Renderer.setPixel(j, i, drawable.char, drawable.color)
}
}
break
}
case "BASE_CIRCLE": {
// https://en.wikipedia.org/wiki/Midpoint_circle_algorithm
var x = drawable.radius - 1
var y = 0
var dx = 1
var dy = 1
var err = dx - (drawable.radius << 1)
while(x >= y) {
Renderer.setPixel(center.x + x, drawable.y + y, drawable.char, drawable.char)
Renderer.setPixel(drawable.x + y, drawable.y + x, drawable.char, drawable.char)
Renderer.setPixel(drawable.x - y, drawable.y + x, drawable.char, drawable.char)
Renderer.setPixel(drawable.x - x, drawable.y + y, drawable.char, drawable.char)
Renderer.setPixel(drawable.x - x, drawable.y - y, drawable.char, drawable.char)
Renderer.setPixel(drawable.x - y, drawable.y - x, drawable.char, drawable.char)
Renderer.setPixel(drawable.x + y, drawable.y - x, drawable.char, drawable.char)
Renderer.setPixel(drawable.x + x, drawable.y - y, drawable.char, drawable.char)
if(err <= 0) {
y++
err += dy
dy += 2
}
if(err > 0) {
x--
dx += 2
err += dx - (drawable.radius << 1)
}
}
break
}
case "BASE_LINE": {
var from = Renderer.createPoint(drawable.x, drawable.y)
var to = Renderer.createPoint(drawable.x1, drawable.y1)
if(from.x > to.x) {
var temp = from
from = to
to = temp
}
let deltax = to.x - from.x
let deltay = to.y - from.y
if(from.x === to.x) {
/* Vertical line */
for(var y = from.y; y <= to.y; y++) {
Renderer.setPixel(from.x, y, drawable.char, drawable.color)
}
return
}
let deltaerr = Math.abs(deltay / deltax) /* Assume deltax != 0 i.e line is not vertical */
let error = 0 /* no error at start */
var y = from.y
for(var x = from.x; x <= to.x; x++) {
Renderer.setPixel(x, y, drawable.char, drawable.color)
error += deltaerr
if(error >= 0.5) {
y += Math.sign(deltay) * 1
error -= 1.0
}
}
break
}
case "PATTERN": {
for(var i = 0; i < drawable.pattern.length; i++) {
for(var j = 0; j < drawable.pattern[0].length; j++) {
if(drawable.pattern[i][j] > 0) {
Renderer.setPixel(drawable.x + j, drawable.y + i, drawable.chars[drawable.pattern[i][j] - 1], drawable.color)
}
}
}
break
}
case "BASE_STRING": {
var lines = drawable.str.split("\n")
var y = drawable.y
var index = 0
for(var i in lines) {
var line = lines[i]
index = 0
for(var x = drawable.x; x < drawable.x + line.length; x++) {
Renderer.setPixel(x, y, line[index], drawable.color)
index++
}
y++
}
break
}
case "ASCII_STRING": {
var curpos = Renderer.createPoint(drawable.x, drawable.y)
for(var i = 0; i < drawable.str.length; i++) {
var c = drawable.str[i].toLowerCase();
if("\n ()[]".indexOf(c) !== -1) {
if(c === "\n") {
curpos.y += 9
curpos.x = drawable.x
}
if(c === " ") {
curpos.x += 2
}
if("()[]".indexOf(c) !== -1) {
var pattern = charPatterns[c]
Renderer.drawPattern(pattern, Renderer.createPoint(curpos.x, curpos.y - 1), drawable.char, drawable.color)
curpos.x += 6
}
} else {
var pattern = charPatterns[c]
Renderer.drawPattern(pattern, curpos, drawable.char, drawable.color)
curpos.x += 6
}
}
break
}
}
},
Rect(x, y, w, h, char = "0", color = "F") {
return {
x: x,
y: y,
w: w,
h: h,
char: char,
color: color,
type: "BASE_RECT"
}
},
FilledRect(x, y, w, h, char = "0", color = "F") {
return {
x: x,
y: y,
w: w,
h: h,
char: char,
color: color,
type: "FILL_RECT"
}
},
Point(x, y) {
return {
x: x,
y: y,
type: "BASE_POINT"
}
},
Line(x, y, x1, y1, char = "0", color = "F") {
return {
x: x,
y: y,
x1: x1,
y1: y1,
char: char,
color: color,
type: "BASE_LINE"
}
},
Circle(x, y, radius, char = "0", color = "F") {
return {
x: x,
y: y,
radius: radius,
char: char,
color: color,
type: "BASE_CIRCLE"
}
},
Pattern(x, y, array_2d, chars = ["0"], color = "F") {
return {
x: x,
y: y,
pattern: array_2d,
chars: chars,
color: color,
type: "PATTERN"
}
},
AsciiString(x, y, str, char = "0", color = "F") {
return {
x: x,
y: y,
str: str,
char: char,
color: color,
type: "ASCII_STRING"
}
},
String(x, y, str, color = "F") {
return {
x: x,
y: y,
str: str,
color: color,
type: "BASE_STRING"
}
}
}
if(context.calling_script !== null) {
return Renderer
}
return `
\`FThis script is intended to be used within a script for now.\`
\`FFeel free to donate to \`\`Tryo\`\`F if you like the script :)\`
\`CVersion\`: \`T1.2.0\`
\`ADocumentation\`:
\`Finitialize\`(\`Nwidth\`: \`snumber\`, \`Nheight\`: \`snumber\`, \`Nfill?\`: \`sstring\`): \`Avoid\`;
\`FisCoordInDisplay\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`): \`Aboolean\`;
\`Treadonly\` \`FdisplaySize\`: \`S{\`
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Ny\`: \`snumber\`;
\`Nx\`: \`snumber\`;
};
\`Frender\`(): \`sstring\`;
\`Fclear\`(\`NclearChar?\`: \`sstring\`): \`Avoid\`;
\`Fdraw\`(\`Ndrawable\`: \`sany\`): \`Avoid\`;
\`FsetPixel\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nchar\`: \`sstring\`, \`Ncolor\`: \`sstring\`): \`Avoid\`;
\`ADrawables:\`
\`LRect\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nw\`: \`snumber\`, \`Nh\` \`snumber\`, \`Nchar?\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nw\`: \`snumber\`;
\`Nh\` \`snumber\`;
\`Nchar\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LFilledRect\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nw\`: \`snumber\`, \`Nh\` \`snumber\`, \`Nchar?\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nw\`: \`snumber\`;
\`Nh\`: \`snumber\`;
\`Nchar\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LPoint\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Ntype\`: \`sstring\`;
};
\`LLine\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nx1\`: \`snumber\`, \`Ny1\`: \`snumber\`, \`Nchar?\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nx1\`: \`snumber\`;
\`Ny1\`: \`snumber\`;
\`Nchar\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LCircle\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nradius\`: \`snumber\`, \`Nchar?\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nradius\`: \`snumber\`;
\`Nchar\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LPattern\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Narray_2d\`: \`sany[]\`, \`Nchars?\`: \`sstring[]\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Npattern\`: \`sany[]\`;
\`Nchars\`: \`sstring[]\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LAsciiString\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nstr\`: \`sstring\`, \`Nchar?\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nstr\`: \`sstring\`;
\`Nchar\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
\`LString\`(\`Nx\`: \`snumber\`, \`Ny\`: \`snumber\`, \`Nstr\`: \`sstring\`, \`Ncolor?\`: \`sstring\`): {
[\`Nx\`: \`sstring\`]: \`sany\`;
\`Nx\`: \`snumber\`;
\`Ny\`: \`snumber\`;
\`Nstr\`: \`sstring\`;
\`Ncolor\`: \`sstring\`;
\`Ntype\`: \`sstring\`;
};
`
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment