|
|
@ -96,13 +96,21 @@ function trackDrawTrack(ctx, pos, dirtype) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function cssVar(name,value){
|
|
|
|
|
|
|
|
if(name[0]!='-') name = '--'+name //allow passing with or without --
|
|
|
|
|
|
|
|
if(value) document.documentElement.style.setProperty(name, value)
|
|
|
|
|
|
|
|
return getComputedStyle(document.documentElement).getPropertyValue(name);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function trackDrawElement(ctx, element, mode) {
|
|
|
|
function trackDrawElement(ctx, element, mode) {
|
|
|
|
var dx = 0, dy = 0;
|
|
|
|
var dx = 0, dy = 0;
|
|
|
|
var modcol = "#B0B0B0";
|
|
|
|
var modcol = cssVar('--track-color');
|
|
|
|
|
|
|
|
|
|
|
|
if (element) {
|
|
|
|
if (element) {
|
|
|
|
|
|
|
|
|
|
|
|
if (mode == 1) modcol = "#FF0000";
|
|
|
|
if (mode == 1) modcol = cssVar('--track-color-select');
|
|
|
|
|
|
|
|
|
|
|
|
if (element.type) {
|
|
|
|
if (element.type) {
|
|
|
|
if (element.type == RAILWAY_TURNOUT) {
|
|
|
|
if (element.type == RAILWAY_TURNOUT) {
|
|
|
@ -118,11 +126,15 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ctx.lineWidth = 4;
|
|
|
|
ctx.lineWidth = 4;
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.strokeStyle = modcol;
|
|
|
|
if (element.lockedby && element.lockedby != "")
|
|
|
|
|
|
|
|
ctx.strokeStyle = cssVar('--track-color-locked');
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
ctx.strokeStyle = ctx.strokeStyle = cssVar('--turnout-this');
|
|
|
|
trackDrawTrack (ctx, {x: element.x, y: element.y}, dir);
|
|
|
|
trackDrawTrack (ctx, {x: element.x, y: element.y}, dir);
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
if (element.name == "") ctx.strokeStyle = "DeepPink";
|
|
|
|
if (element.name == "") ctx.strokeStyle = cssVar('--track-color-error');
|
|
|
|
else ctx.strokeStyle = "DimGray";
|
|
|
|
else ctx.strokeStyle = cssVar('--turnout-other');
|
|
|
|
|
|
|
|
|
|
|
|
trackDrawTrack (ctx, {x: element.x, y: element.y}, altdir);
|
|
|
|
trackDrawTrack (ctx, {x: element.x, y: element.y}, altdir);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (element.type == RAILWAY_NORMAL || element.type == RAILWAY_SENSOR || element.type == RAILWAY_BLOCK) {
|
|
|
|
else if (element.type == RAILWAY_NORMAL || element.type == RAILWAY_SENSOR || element.type == RAILWAY_BLOCK) {
|
|
|
@ -146,11 +158,11 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
ctx.font = "14px Arial";
|
|
|
|
ctx.font = "14px Arial";
|
|
|
|
ctx.textAlign = "left";
|
|
|
|
ctx.textAlign = "left";
|
|
|
|
if (element.name != "") {
|
|
|
|
if (element.name != "") {
|
|
|
|
ctx.fillStyle = "lightblue";
|
|
|
|
ctx.fillStyle = cssVar('--track-text');
|
|
|
|
ctx.fillText(element.name, (element.x+0.5) * track.scale, 6+(element.y+0.5) * track.scale);
|
|
|
|
ctx.fillText(element.name, (element.x+0.5) * track.scale, 6+(element.y+0.5) * track.scale);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
ctx.fillStyle = "DeepPink";
|
|
|
|
ctx.fillStyle = cssVar('--track-color-error');
|
|
|
|
ctx.fillText("------", (element.x+0.5) * track.scale, (element.y+0.5) * track.scale);
|
|
|
|
ctx.fillText("------", (element.x+0.5) * track.scale, (element.y+0.5) * track.scale);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -158,11 +170,11 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
ctx.font = "bold 12px Arial";
|
|
|
|
ctx.font = "bold 12px Arial";
|
|
|
|
ctx.textAlign = "center";
|
|
|
|
ctx.textAlign = "center";
|
|
|
|
if (element.name != "") {
|
|
|
|
if (element.name != "") {
|
|
|
|
ctx.fillStyle = "#FFFFFF";
|
|
|
|
ctx.fillStyle = cssVar('--track-connector');
|
|
|
|
ctx.fillText(element.name, (element.x+0.5) * track.scale, 6+(element.y+0.5) * track.scale);
|
|
|
|
ctx.fillText(element.name, (element.x+0.5) * track.scale, 6+(element.y+0.5) * track.scale);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
ctx.fillStyle = "DeepPink";
|
|
|
|
ctx.fillStyle = cssVar('--track-color-error');
|
|
|
|
ctx.fillText("------", (element.x+0.5) * track.scale, (element.y+0.5) * track.scale);
|
|
|
|
ctx.fillText("------", (element.x+0.5) * track.scale, (element.y+0.5) * track.scale);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -170,7 +182,7 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.strokeStyle = "DeepPink";
|
|
|
|
ctx.strokeStyle = cssVar('--track-color-error');
|
|
|
|
ctx.moveTo((element.x+0.25) * track.scale, (element.y+0.25) * track.scale);
|
|
|
|
ctx.moveTo((element.x+0.25) * track.scale, (element.y+0.25) * track.scale);
|
|
|
|
ctx.lineTo((element.x+0.75) * track.scale, (element.y+0.75) * track.scale);
|
|
|
|
ctx.lineTo((element.x+0.75) * track.scale, (element.y+0.75) * track.scale);
|
|
|
|
ctx.moveTo((element.x+0.75) * track.scale, (element.y+0.25) * track.scale);
|
|
|
|
ctx.moveTo((element.x+0.75) * track.scale, (element.y+0.25) * track.scale);
|
|
|
@ -183,24 +195,25 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
if (element.type == RAILWAY_SENSOR) {
|
|
|
|
if (element.type == RAILWAY_SENSOR) {
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.arc((element.x+0.5) * track.scale, (element.y+0.5) * track.scale, track.scale*0.25, 0, 2 * Math.PI);
|
|
|
|
ctx.arc((element.x+0.5) * track.scale, (element.y+0.5) * track.scale, track.scale*0.25, 0, 2 * Math.PI);
|
|
|
|
if (element.name == "") ctx.fillStyle = 'DeepPink';
|
|
|
|
if (element.name == "") ctx.fillStyle = cssVar('--track-color-error');
|
|
|
|
else if (sensor_IsActive(element.name)) ctx.fillStyle = 'LightGreen';
|
|
|
|
else if (sensor_IsActive(element.name)) ctx.fillStyle = cssVar('--sensor-active');
|
|
|
|
else ctx.fillStyle = 'DimGray';
|
|
|
|
else ctx.fillStyle = cssVar('--sensor-inactive');
|
|
|
|
|
|
|
|
|
|
|
|
ctx.fill();
|
|
|
|
ctx.fill();
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.strokeStyle = "#000000";
|
|
|
|
ctx.strokeStyle = cssVar('--track-border');
|
|
|
|
ctx.stroke();
|
|
|
|
ctx.stroke();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// draw ref. name
|
|
|
|
// draw ref. name
|
|
|
|
if (element.name && sideBtnModeGet() == "mode-turn") {
|
|
|
|
if (element.name && sideBtnModeGet() == "mode-turn") {
|
|
|
|
if (element.type != RAILWAY_TEXT && element.type != RAILWAY_CONNECTOR) {
|
|
|
|
if (element.type != RAILWAY_TEXT && element.type != RAILWAY_CONNECTOR
|
|
|
|
|
|
|
|
&& element.type != RAILWAY_BLOCK) {
|
|
|
|
ctx.font = "10px Arial";
|
|
|
|
ctx.font = "10px Arial";
|
|
|
|
ctx.textAlign = "left";
|
|
|
|
ctx.textAlign = "left";
|
|
|
|
if (element.name != "") {
|
|
|
|
if (element.name != "") {
|
|
|
|
ctx.fillStyle = "black";
|
|
|
|
ctx.fillStyle = cssVar('--track-element-fgborder');
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale -1, 6+(element.y+0.5) * track.scale );
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale -1, 6+(element.y+0.5) * track.scale );
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale );
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale );
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale , 6+(element.y+0.5) * track.scale -1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale , 6+(element.y+0.5) * track.scale -1);
|
|
|
@ -210,7 +223,7 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale -1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale -1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale +1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale +1, 6+(element.y+0.5) * track.scale +1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale -1, 6+(element.y+0.5) * track.scale +1);
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale -1, 6+(element.y+0.5) * track.scale +1);
|
|
|
|
ctx.fillStyle = "white";
|
|
|
|
ctx.fillStyle = cssVar('--track-element-fg');
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale , 6+(element.y+0.5) * track.scale );
|
|
|
|
ctx.fillText(element.name, (element.x) * track.scale , 6+(element.y+0.5) * track.scale );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -222,15 +235,80 @@ function trackDrawElement(ctx, element, mode) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function trackDrawBlock(ctx, blockelm) {
|
|
|
|
function trackDrawBlock(ctx, blockelm) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (blockelm.dir == 1 || blockelm.dir == 2) { // 1 .. | 2.. -
|
|
|
|
|
|
|
|
let x1, y1, x2, y2, a, b;
|
|
|
|
|
|
|
|
let text, color;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// select color depending on referecedBy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Fill Box
|
|
|
|
|
|
|
|
x1 = 0 * track.scale + 2;
|
|
|
|
|
|
|
|
y1 = (-1) * track.scale + 2;
|
|
|
|
|
|
|
|
x2 = ( 1) * track.scale - 2;
|
|
|
|
|
|
|
|
y2 = ( 2) * track.scale - 2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (blockelm.dir == 2) {
|
|
|
|
|
|
|
|
a = y1; y1 = x1; x1 = a;
|
|
|
|
|
|
|
|
b = y2; y2 = x2; x2 = b;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x1 = x1 + (blockelm.x) * track.scale;
|
|
|
|
|
|
|
|
x2 = x2 + (blockelm.x) * track.scale;
|
|
|
|
|
|
|
|
y1 = y1 + (blockelm.y) * track.scale;
|
|
|
|
|
|
|
|
y2 = y2 + (blockelm.y) * track.scale;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (blockelm.lockedby && blockelm.lockedby != "") ctx.fillStyle = cssVar('--block-bg-locked');
|
|
|
|
|
|
|
|
else ctx.fillStyle = cssVar('--block-bg');
|
|
|
|
|
|
|
|
ctx.fillRect (x1, y1, (x2-x1), (y2-y1));
|
|
|
|
|
|
|
|
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.lineWidth = 2;
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
ctx.strokeStyle = "DeepPink";
|
|
|
|
ctx.strokeStyle = cssVar('--track-border');
|
|
|
|
|
|
|
|
ctx.moveTo(x1+0.5, y1+0.5);
|
|
|
|
|
|
|
|
ctx.lineTo(x2+0.5, y1+0.5);
|
|
|
|
|
|
|
|
ctx.lineTo(x2+0.5, y2+0.5);
|
|
|
|
|
|
|
|
ctx.lineTo(x1+0.5, y2+0.5);
|
|
|
|
|
|
|
|
ctx.lineTo(x1+0.5, y1+0.5);
|
|
|
|
|
|
|
|
ctx.stroke();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (blockelm.dir == 2) {
|
|
|
|
|
|
|
|
x1 = (0.5 + blockelm.x) * track.scale;
|
|
|
|
|
|
|
|
y1 = (0.5 + blockelm.y) * track.scale + 5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ctx.font = "10px Arial";
|
|
|
|
|
|
|
|
ctx.textAlign = "center";
|
|
|
|
|
|
|
|
if (blockelm.lockedby && blockelm.lockedby != "") ctx.fillStyle = cssVar('--block-fg-locked');
|
|
|
|
|
|
|
|
else ctx.fillStyle = cssVar('--block-fg');
|
|
|
|
|
|
|
|
ctx.fillText(blockelm.name, x1, y1);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
x1 = (0.5 + blockelm.x) * track.scale + 5;
|
|
|
|
|
|
|
|
y1 = (0.5 + blockelm.y) * track.scale;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ctx.save();
|
|
|
|
|
|
|
|
ctx.translate(x1, y1);
|
|
|
|
|
|
|
|
ctx.rotate(-Math.PI/2);
|
|
|
|
|
|
|
|
ctx.font = "10px Arial";
|
|
|
|
|
|
|
|
ctx.textAlign = "center";
|
|
|
|
|
|
|
|
if (blockelm.lockedby && blockelm.lockedby != "") ctx.fillStyle = cssVar('--block-fg-locked');
|
|
|
|
|
|
|
|
else ctx.fillStyle = cssVar('--block-fg');
|
|
|
|
|
|
|
|
ctx.fillText(blockelm.name, 0, 0);
|
|
|
|
|
|
|
|
ctx.restore();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
ctx.beginPath();
|
|
|
|
|
|
|
|
ctx.lineWidth = 1;
|
|
|
|
|
|
|
|
ctx.setLineDash([0,0]);
|
|
|
|
|
|
|
|
ctx.strokeStyle = cssVar('--track-color-error');
|
|
|
|
ctx.moveTo((blockelm.x+0.25) * track.scale, (blockelm.y+0.25) * track.scale);
|
|
|
|
ctx.moveTo((blockelm.x+0.25) * track.scale, (blockelm.y+0.25) * track.scale);
|
|
|
|
ctx.lineTo((blockelm.x+0.75) * track.scale, (blockelm.y+0.75) * track.scale);
|
|
|
|
ctx.lineTo((blockelm.x+0.75) * track.scale, (blockelm.y+0.75) * track.scale);
|
|
|
|
ctx.moveTo((blockelm.x+0.75) * track.scale, (blockelm.y+0.25) * track.scale);
|
|
|
|
ctx.moveTo((blockelm.x+0.75) * track.scale, (blockelm.y+0.25) * track.scale);
|
|
|
|
ctx.lineTo((blockelm.x+0.25) * track.scale, (blockelm.y+0.75) * track.scale);
|
|
|
|
ctx.lineTo((blockelm.x+0.25) * track.scale, (blockelm.y+0.75) * track.scale);
|
|
|
|
ctx.stroke();
|
|
|
|
ctx.stroke();
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -245,7 +323,7 @@ function trackDraw() {
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// clear screen
|
|
|
|
// clear screen
|
|
|
|
ctx.fillStyle = "#808080";
|
|
|
|
ctx.fillStyle = cssVar('--track-bg');
|
|
|
|
ctx.fillRect(0, 0, track.size.x * track.scale, track.size.y * track.scale);
|
|
|
|
ctx.fillRect(0, 0, track.size.x * track.scale, track.size.y * track.scale);
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
//
|
|
|
@ -292,7 +370,7 @@ function trackDraw() {
|
|
|
|
ctx.lineJoin="round";
|
|
|
|
ctx.lineJoin="round";
|
|
|
|
ctx.miterLimit = 1;
|
|
|
|
ctx.miterLimit = 1;
|
|
|
|
ctx.setLineDash([2,2]);
|
|
|
|
ctx.setLineDash([2,2]);
|
|
|
|
ctx.strokeStyle = "#0000FF";
|
|
|
|
ctx.strokeStyle = cssVar('--track-color-selectframe');
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.moveTo(0.5+(p1.x + 0) * track.scale, 0.5+(p1.y+0) * track.scale);
|
|
|
|
ctx.moveTo(0.5+(p1.x + 0) * track.scale, 0.5+(p1.y+0) * track.scale);
|
|
|
|
ctx.lineTo(0.5+(p2.x + 1) * track.scale, 0.5+(p1.y+0) * track.scale);
|
|
|
|
ctx.lineTo(0.5+(p2.x + 1) * track.scale, 0.5+(p1.y+0) * track.scale);
|
|
|
@ -308,7 +386,7 @@ function trackDraw() {
|
|
|
|
ctx.lineJoin="round";
|
|
|
|
ctx.lineJoin="round";
|
|
|
|
ctx.miterLimit = 1;
|
|
|
|
ctx.miterLimit = 1;
|
|
|
|
ctx.setLineDash([2,2]);
|
|
|
|
ctx.setLineDash([2,2]);
|
|
|
|
ctx.strokeStyle = "#000000";
|
|
|
|
ctx.strokeStyle = cssVar('--track-element-fgborder');
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.moveTo(0.5+(trackMouse.pos.x + 0) * track.scale, 0.5+(trackMouse.pos.y+0) * track.scale);
|
|
|
|
ctx.moveTo(0.5+(trackMouse.pos.x + 0) * track.scale, 0.5+(trackMouse.pos.y+0) * track.scale);
|
|
|
|
ctx.lineTo(0.5+(trackMouse.pos.x + 1) * track.scale, 0.5+(trackMouse.pos.y+0) * track.scale);
|
|
|
|
ctx.lineTo(0.5+(trackMouse.pos.x + 1) * track.scale, 0.5+(trackMouse.pos.y+0) * track.scale);
|
|
|
|