1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-09-20 04:24:45 +00:00

Refined Draw/M model, reduced all weirdness into var fudgeFactor.

This commit is contained in:
William Barnes 2022-04-30 23:01:44 -04:00
parent cb4bd49c1c
commit 02e598c17b

49
qb.js
View file

@ -691,7 +691,7 @@ var QB = new function() {
u = u.toUpperCase(); u = u.toUpperCase();
u = u.split(""); u = u.split("");
// Prime data prep loop. // Prime data loop.
var ch; var ch;
var elem; var elem;
var flag; var flag;
@ -731,14 +731,15 @@ var QB = new function() {
v.push([elem,flag]); v.push([elem,flag]);
// Draw-specific variables. // Draw-specific variables.
//var color; var fudgeFactor = 1.30;
var cursX, cursY; var cursX, cursY;
var cursX0, cursY0; var cursX0, cursY0;
var cursXt, cursYt; var cursXt, cursYt;
var ux, uy, ux0, uy0, uxx, uyy; var ux, uy, ux0, uy0, uxx, uyy;
var sMFlag;
var cursReturn = false; var cursReturn = false;
var cursSkipdraw = false; var cursSkipdraw = false;
var dx, dy, dlen; var dx, dy, dlen, ang;
var multiplier = 1; var multiplier = 1;
var tok, tok1, tok2; var tok, tok1, tok2;
var tmp = [[]]; var tmp = [[]];
@ -757,6 +758,7 @@ var QB = new function() {
cursX = screen.lastX; cursX = screen.lastX;
cursY = screen.lastY; cursY = screen.lastY;
// Main loop.
while (v.length) { while (v.length) {
tok = v.shift(); tok = v.shift();
if (tok[1] == 1) { if (tok[1] == 1) {
@ -783,7 +785,7 @@ var QB = new function() {
tmp = v[0]; tmp = v[0];
if (tmp[1] == 0) { if (tmp[1] == 0) {
tok1 = v.shift(); tok1 = v.shift();
_strokeDrawLength = (tok1[0]) * 1.0; _strokeDrawLength = (tok1[0]) * (fudgeFactor);
} }
} }
@ -835,7 +837,7 @@ var QB = new function() {
} }
} else if (tok[0] == "M") { } else if (tok[0] == "M") {
var sFlag = false; sMFlag = false;
multiplier = 1; multiplier = 1;
if (v.length) { if (v.length) {
tmp = v[0]; tmp = v[0];
@ -843,28 +845,28 @@ var QB = new function() {
tok1 = v.shift(); tok1 = v.shift();
if (tok1[0] == "+") { if (tok1[0] == "+") {
multiplier = 1; multiplier = 1;
sFlag = true; sMFlag = true;
} else if (tok1[0] == "-") { } else if (tok1[0] == "-") {
multiplier = -1; multiplier = -1;
sFlag = true; sMFlag = true;
} }
if (v.length) { if (v.length) {
tmp = v[0]; tmp = v[0];
if (tmp[1] == 0) { if (tmp[1] == 0) {
tok2 = v.shift(); tok2 = v.shift();
ux = multiplier * (_strokeDrawLength/4) * (tok2[0]); ux = multiplier * (tok2[0]);
} }
} }
} else if (tmp[1] == 0) { } else if (tmp[1] == 0) {
tok1 = v.shift(); tok1 = v.shift();
ux = multiplier * (_strokeDrawLength/4) * (tok1[0]); ux = multiplier * (tok1[0]);
} }
if (sFlag == true) { if (sMFlag == true) {
ux0 = cursX; ux0 = cursX;
uy0 = cursY; uy0 = cursY;
} else { } else {
ux0 = 0; ux0 = 0.0;
uy0 = 0; uy0 = 0.0;
} }
} }
multiplier = 1; multiplier = 1;
@ -879,22 +881,25 @@ var QB = new function() {
if (tok1[0] == "+") { if (tok1[0] == "+") {
multiplier = 1; multiplier = 1;
} else if (tok1[0] == "-") { } else if (tok1[0] == "-") {
multiplier = 1; multiplier = -1;
} }
if (v.length) { if (v.length) {
tmp = v[0]; tmp = v[0];
if (tmp[1] == 0) { if (tmp[1] == 0) {
tok2 = v.shift(); tok2 = v.shift();
uy = multiplier * (_strokeDrawLength/4) * (tok2[0]); uy = multiplier * (tok2[0]);
} }
} }
} else if (tmp[1] == 0) { } else if (tmp[1] == 0) {
tok1 = v.shift(); tok1 = v.shift();
uy = multiplier * (_strokeDrawLength/4) * (tok1[0]); uy = multiplier * (tok1[0]);
} }
if (sFlag == true) { if (sMFlag == true) {
uxx = ux * Math.cos(_strokeDrawAngle + Math.PI/2) - uy * Math.sin(_strokeDrawAngle + Math.PI/2); ang = (_strokeDrawAngle + Math.PI/2);
uyy = ux * Math.sin(_strokeDrawAngle + Math.PI/2) + uy * Math.cos(_strokeDrawAngle + Math.PI/2); uxx = ux * Math.cos(ang) - uy * Math.sin(ang);
uyy = ux * Math.sin(ang) + uy * Math.cos(ang);
uxx *= (_strokeDrawLength/4) / (fudgeFactor);
uyy *= (_strokeDrawLength/4) / (fudgeFactor);
} else { } else {
uxx = ux; uxx = ux;
uyy = uy; uyy = uy;
@ -904,8 +909,8 @@ var QB = new function() {
} }
} }
if (cursSkipdraw == false) { if (cursSkipdraw == false) {
ctx.beginPath();
ctx.strokeStyle = _color(_strokeDrawColor).rgba(); ctx.strokeStyle = _color(_strokeDrawColor).rgba();
ctx.beginPath();
ctx.moveTo(cursX, cursY); ctx.moveTo(cursX, cursY);
ctx.lineTo(cursXt, cursYt); ctx.lineTo(cursXt, cursYt);
ctx.stroke(); ctx.stroke();
@ -952,11 +957,11 @@ var QB = new function() {
} }
dx = dlen * Math.cos(_strokeDrawAngle + lines[i][1]); dx = dlen * Math.cos(_strokeDrawAngle + lines[i][1]);
dy = dlen * Math.sin(_strokeDrawAngle + lines[i][1]); dy = dlen * Math.sin(_strokeDrawAngle + lines[i][1]);
cursXt = cursX*1.0 + dx; cursXt = (cursX)*1.0 + dx;
cursYt = cursY*1.0 + dy; cursYt = (cursY)*1.0 + dy;
if (cursSkipdraw == false) { if (cursSkipdraw == false) {
ctx.beginPath();
ctx.strokeStyle = _color(_strokeDrawColor).rgba(); ctx.strokeStyle = _color(_strokeDrawColor).rgba();
ctx.beginPath();
ctx.moveTo(cursX, cursY); ctx.moveTo(cursX, cursY);
ctx.lineTo(cursXt, cursYt); ctx.lineTo(cursXt, cursYt);
ctx.stroke(); ctx.stroke();