mirror of
https://github.com/boxgaming/qbjs.git
synced 2024-09-20 04:24:45 +00:00
Merge pull request #19 from WFBarnes/main
Deeper reworking of the Draw/M routine. Nearly pixel-perfect to original?
This commit is contained in:
commit
13818cd719
1 changed files with 35 additions and 25 deletions
60
qb.js
60
qb.js
|
@ -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]) * Math.sqrt(2);
|
_strokeDrawLength = (tok1[0]) * (fudgeFactor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -835,34 +837,37 @@ var QB = new function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (tok[0] == "M") {
|
} else if (tok[0] == "M") {
|
||||||
|
sMFlag = false;
|
||||||
multiplier = 1;
|
multiplier = 1;
|
||||||
if (v.length) {
|
if (v.length) {
|
||||||
tmp = v[0];
|
tmp = v[0];
|
||||||
if (tmp[1] == -1) {
|
if (tmp[1] == -1) {
|
||||||
tok1 = v.shift();
|
tok1 = v.shift();
|
||||||
ux0 = 0;
|
|
||||||
uy0 = 0;
|
|
||||||
if (tok1[0] == "+") {
|
if (tok1[0] == "+") {
|
||||||
multiplier = 1;
|
multiplier = 1;
|
||||||
ux0 = cursX;
|
sMFlag = true;
|
||||||
uy0 = cursY;
|
|
||||||
} else if (tok1[0] == "-") {
|
} else if (tok1[0] == "-") {
|
||||||
multiplier = -1;
|
multiplier = -1;
|
||||||
ux0 = cursX;
|
sMFlag = true;
|
||||||
uy0 = cursY;
|
|
||||||
}
|
}
|
||||||
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 (sMFlag == true) {
|
||||||
|
ux0 = cursX;
|
||||||
|
uy0 = cursY;
|
||||||
|
} else {
|
||||||
|
ux0 = 0.0;
|
||||||
|
uy0 = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
multiplier = 1;
|
multiplier = 1;
|
||||||
if (v.length) {
|
if (v.length) {
|
||||||
|
@ -876,31 +881,36 @@ 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 (sMFlag == true) {
|
||||||
|
ang = (_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 {
|
||||||
|
uxx = ux;
|
||||||
|
uyy = uy;
|
||||||
}
|
}
|
||||||
|
|
||||||
uxx = ux * Math.cos(_strokeDrawAngle + Math.PI/2) - uy * Math.sin(_strokeDrawAngle + Math.PI/2);
|
|
||||||
uyy = ux * Math.sin(_strokeDrawAngle + Math.PI/2) + uy * Math.cos(_strokeDrawAngle + Math.PI/2);
|
|
||||||
uxx = uxx / Math.sqrt(2);
|
|
||||||
uyy = uyy / Math.sqrt(2);
|
|
||||||
cursXt = ux0 + uxx;
|
cursXt = ux0 + uxx;
|
||||||
cursYt = uy0 + uyy;
|
cursYt = uy0 + uyy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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();
|
||||||
|
@ -947,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();
|
||||||
|
|
Loading…
Reference in a new issue