From d3105bbf978f1213f9e9b7e06cbcc9d1096f484b Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sat, 3 Oct 2020 10:48:03 +0200 Subject: [PATCH 1/9] skeleton for sukoro --- src/variety/sukoro.js | 52 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index ce73092cf..13b9e4363 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -104,15 +104,16 @@ minnum: 0 }, + Board: { + hasborder: 1 + }, "Board@view": { cols: 8, rows: 8 }, "Board@sukororoom": { cols: 8, - rows: 8, - - hasborder: 1 + rows: 8 }, AreaNumberGraph: { @@ -130,6 +131,7 @@ if (this.pid === "view") { this.drawTargetSubNumber(); } + this.drawSkeleton(); this.drawGrid(); if (this.pid === "sukororoom") { @@ -146,6 +148,50 @@ this.drawChassis(); this.drawCursor(); + }, + + drawSkeleton: function() { + this.drawSkeletonDots(); + this.drawSkeletonEdges(); + }, + drawSkeletonDots: function() { + var g = this.vinc("cell_skel_dot", "auto", true); + + var dsize = this.cw * 0.2; + var clist = this.range.cells; + for (var i = 0; i < clist.length; i++) { + var cell = clist[i]; + + g.vid = "c_dot_" + cell.id; + if (cell.isNumberObj()) { + g.fillStyle = this.bcolor; + g.fillCircle(cell.bx * this.bw, cell.by * this.bh, dsize); + } else { + g.vhide(); + } + } + }, + drawSkeletonEdges: function() { + var g = this.vinc("cell_skel_edge", "auto", true); + + var dsize = this.cw * 0.2; + var blist = this.range.borders; + for (var i = 0; i < blist.length; i++) { + var b = blist[i]; + + g.vid = "b_skel_" + b.id; + var isedgevalid = + this.board.nblkmgr.isnodevalid(b.sidecell[0]) && + this.board.nblkmgr.isnodevalid(b.sidecell[1]); + if (isedgevalid) { + var w = b.isvert ? this.bh : dsize; + var h = b.isvert ? dsize : this.bw; + g.fillStyle = this.bcolor; + g.fillRectCenter(b.bx * this.bw, b.by * this.bh, w, h); + } else { + g.vhide(); + } + } } }, "Graphic@view": { From bb5875c6482a0ff1c10fe467e3f37a82670273c7 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sat, 3 Oct 2020 11:02:41 +0200 Subject: [PATCH 2/9] draw virtual numbers, no circle for qsub 1 --- src/variety/sukoro.js | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index 13b9e4363..f02604b00 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -150,6 +150,52 @@ this.drawCursor(); }, + getAnsNumberText: function(cell) { + if (cell.anum >= 0) { + return this.getNumberText(cell, cell.anum); + } + if (cell.qsub === 1) { + var c = cell.countDir4Cell(function(cell) { + return cell.isNumberObj(); + }); + return this.getNumberText(cell, c); + } + return ""; + }, + getAnsNumberColor: function(cell) { + if ((cell.error || cell.qinfo) === 1) { + return this.errcolor1; + } + if (cell.qsub === 1) { + return this.qcmpcolor; + } + return !cell.trial ? this.qanscolor : this.trialcolor; + }, + + drawMBs: function() { + var g = this.vinc("cell_mb", "auto", true); + g.lineWidth = 1; + + var rsize = this.cw * 0.35; + var clist = this.range.cells; + for (var i = 0; i < clist.length; i++) { + var cell = clist[i], + px, + py; + if (cell.qsub > 0) { + px = cell.bx * this.bw; + py = cell.by * this.bh; + g.strokeStyle = !cell.trial ? this.mbcolor : "rgb(192, 192, 192)"; + } + + g.vid = "c_MB2_" + cell.id; + if (cell.qsub === 2) { + g.strokeCross(px, py, rsize); + } else { + g.vhide(); + } + } + }, drawSkeleton: function() { this.drawSkeletonDots(); this.drawSkeletonEdges(); From e14e6097ae3fb41353e5e2f1e4cae00e696f1f51 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 22:07:46 +0200 Subject: [PATCH 3/9] remove presumably-useless autocmp_border code --- src/puzzle/Config.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/puzzle/Config.js b/src/puzzle/Config.js index 7857b64c7..2e18dfc86 100644 --- a/src/puzzle/Config.js +++ b/src/puzzle/Config.js @@ -120,6 +120,7 @@ // config.getCurrentName() 以前のconfig名から現在使用している名称を取得する // config.getNormalizedName() Config名が@付きだった場合varietyのpidを返す //--------------------------------------------------------------------------- + // this seems to be about migrating settings from old to new name getCurrentName: function(name) { switch (name) { case "color_qanscolor": @@ -130,11 +131,6 @@ name = "autocmp"; } break; - case "autocmp_border": - if (this.getexec("autocmp")) { - name = "autocmp"; - } - break; } return name; }, From 07539af57236a531614477cfc8a0bfadc91876d7 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 22:18:31 +0200 Subject: [PATCH 4/9] shakashaka: simplify redrawing for autocmp --- src/variety/shakashaka.js | 44 ++++++++++++--------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/src/variety/shakashaka.js b/src/variety/shakashaka.js index 0744a2674..7d76dc190 100644 --- a/src/variety/shakashaka.js +++ b/src/variety/shakashaka.js @@ -366,42 +366,11 @@ return cell.isTri(); }; return this.qnum === this.countDir4Cell(is_tri); - }, - - posthook: { - qnum: function() { - this.redrawAdjacent(); - }, - qans: function() { - this.redrawAdjacent(); - }, - qsub: function() { - this.redrawAdjacent(); - } - }, - - redrawAdjacent: function() { - var ad = this.adjacent; - var cells = new this.klass.CellList([ - ad.top, - ad.right, - ad.bottom, - ad.left - ]); - this.board.redrawAffected(cells); } }, Board: { addExtraInfo: function() { this.wrectmgr = this.addInfoList(this.klass.AreaWrectGraph); - }, - redrawAffected: function(cells) { - for (var i = 0; i < cells.length; i++) { - var c = cells[i]; - if (!c.isnull && c.qnum !== -1 && c.qnum !== -2) { - c.draw(); - } - } } }, BoardExec: { @@ -476,6 +445,19 @@ fontShadecolor: "white", qcmpcolor: "rgb(127,127,127)", + setRange: function(x1, y1, x2, y2) { + var puzzle = this.puzzle, + bd = puzzle.board; + if (puzzle.execConfig("autocmp")) { + x1 = bd.minbx - 2; + y1 = bd.minby - 2; + x2 = bd.maxbx + 2; + y2 = bd.maxby + 2; + } + + this.common.setRange.call(this, x1, y1, x2, y2); + }, + paint: function() { this.drawBGCells(); this.drawDotCells(); From 9c7aae013be2b13f775566517639aba839e21c3c Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 22:28:34 +0200 Subject: [PATCH 5/9] autocmp setting for skeleton --- src-ui/p.html | 1 + src/variety/sukoro.js | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src-ui/p.html b/src-ui/p.html index 01d2939f0..f6701335f 100644 --- a/src-ui/p.html +++ b/src-ui/p.html @@ -218,6 +218,7 @@

読み込み中です...

__光の照らす領域に背景色をつける__Paint background of each illuminated block__ __線が2本以上になったら点をグレーにする__Grey each letter which links over two segments__ __異なる数字の間にグレーの境界線を引く__Grey border between different areas__ + __(please translate) Skeleton for connected numbers__Skeleton for connected numbers__
diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index f02604b00..580e08a0f 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -126,6 +126,23 @@ //--------------------------------------------------------- // 画像表示系 Graphic: { + autocmp: "skeleton", + skelcolor: "rgb(160, 255, 160)", // bcolor + qcmpcolor: "darkgray", + + setRange: function(x1, y1, x2, y2) { + var puzzle = this.puzzle, + bd = puzzle.board; + if (puzzle.execConfig("autocmp")) { + x1 = bd.minbx - 2; + y1 = bd.minby - 2; + x2 = bd.maxbx + 2; + y2 = bd.maxby + 2; + } + + this.common.setRange.call(this, x1, y1, x2, y2); + }, + paint: function() { this.drawBGCells(); if (this.pid === "view") { @@ -188,6 +205,13 @@ g.strokeStyle = !cell.trial ? this.mbcolor : "rgb(192, 192, 192)"; } + g.vid = "c_MB1_" + cell.id; + if (cell.qsub === 1 && !this.puzzle.execConfig("autocmp")) { + g.strokeCircle(px, py, rsize); + } else { + g.vhide(); + } + g.vid = "c_MB2_" + cell.id; if (cell.qsub === 2) { g.strokeCross(px, py, rsize); @@ -202,6 +226,7 @@ }, drawSkeletonDots: function() { var g = this.vinc("cell_skel_dot", "auto", true); + var autocmp = this.puzzle.execConfig("autocmp"); var dsize = this.cw * 0.2; var clist = this.range.cells; @@ -209,8 +234,8 @@ var cell = clist[i]; g.vid = "c_dot_" + cell.id; - if (cell.isNumberObj()) { - g.fillStyle = this.bcolor; + if (autocmp && cell.isNumberObj()) { + g.fillStyle = this.skelcolor; g.fillCircle(cell.bx * this.bw, cell.by * this.bh, dsize); } else { g.vhide(); @@ -219,10 +244,15 @@ }, drawSkeletonEdges: function() { var g = this.vinc("cell_skel_edge", "auto", true); + var autocmp = this.puzzle.execConfig("autocmp"); var dsize = this.cw * 0.2; var blist = this.range.borders; for (var i = 0; i < blist.length; i++) { + if (!autocmp) { + g.vhide(); + continue; + } var b = blist[i]; g.vid = "b_skel_" + b.id; @@ -232,7 +262,7 @@ if (isedgevalid) { var w = b.isvert ? this.bh : dsize; var h = b.isvert ? dsize : this.bw; - g.fillStyle = this.bcolor; + g.fillStyle = this.skelcolor; g.fillRectCenter(b.bx * this.bw, b.by * this.bh, w, h); } else { g.vhide(); From 7054883aaf702c3d58f8495b828ee7c7dd71f633 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 22:34:09 +0200 Subject: [PATCH 6/9] dedicated drawing for cmp numbers (and smaller text) --- src/variety/sukoro.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index 580e08a0f..399a85401 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -161,15 +161,25 @@ } this.drawAnsNumbers(); this.drawQuesNumbers(); + this.drawCmpNumbers(); this.drawChassis(); this.drawCursor(); }, - getAnsNumberText: function(cell) { - if (cell.anum >= 0) { - return this.getNumberText(cell, cell.anum); + drawCmpNumbers: function() { + this.vinc("cell_cmp_number", "auto"); + this.drawNumbers_com( + this.getCmpNumberText, + this.getCmpNumberColor, + "cell_cmp_text_", + { ratio: 0.45 } + ); + }, + getCmpNumberText: function(cell) { + if (cell.anum >= 0 || cell.qnum >= 0) { + return ""; } if (cell.qsub === 1) { var c = cell.countDir4Cell(function(cell) { @@ -179,14 +189,11 @@ } return ""; }, - getAnsNumberColor: function(cell) { + getCmpNumberColor: function(cell) { if ((cell.error || cell.qinfo) === 1) { return this.errcolor1; } - if (cell.qsub === 1) { - return this.qcmpcolor; - } - return !cell.trial ? this.qanscolor : this.trialcolor; + return this.qcmpcolor; }, drawMBs: function() { From aa6407c9c184b5632f34fed5dc7451314a773930 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 22:53:30 +0200 Subject: [PATCH 7/9] sort qsub=1 to the front --- src/variety/sukoro.js | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index 399a85401..5f5aa65c1 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -10,6 +10,65 @@ })(["sukoro", "view", "sukororoom"], { //--------------------------------------------------------- // マウス入力系 + MouseEvent: { + // like normal, except we sort qsub=1 to the front + getNewNumber: function(cell, num) { + var puzzle = this.puzzle; + var max = cell.getmaxnum(), + min = cell.getminnum(), + val = -1, + qs = cell.qsub; + + var subtype = 0; + if (puzzle.editmode) { + subtype = -1; + } else { + subtype = 2; + qs = cell.qsub; + } + + // playmode: subtypeは0以上、 qsにqsub値が入る + // editmode: subtypeは-1固定、qsは常に0が入る + if (this.btn === "left") { + if (num >= max) { + val = subtype >= 1 ? -3 : -1; + } else if (qs === 1) { + val = min; + } else if (qs === 2) { + val = -1; + } else if (num === -1) { + val = -2; + } else if (num < min) { + val = min; + } else { + val = num + 1; + } + } else if (this.btn === "right") { + if (qs === 1) { + val = -1; + } else if (qs === 2) { + val = max; + } else if (num === -1) { + if (subtype === 1) { + val = -2; + } else if (subtype === 2) { + val = -3; + } else { + val = max; + } + } else if (num > max) { + val = max; + } else if (num <= min) { + val = -2; + } else if (num === -2) { + val = -1; + } else { + val = num - 1; + } + } + return val; + } + }, "MouseEvent@sukoro,view": { inputModes: { edit: ["number", "clear"], From 0cbad01b664a0783485221537500778fd01ecc29 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 23:08:26 +0200 Subject: [PATCH 8/9] autocmp redraw fix --- src/variety/sukoro.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index 5f5aa65c1..365ca4985 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -237,7 +237,11 @@ ); }, getCmpNumberText: function(cell) { - if (cell.anum >= 0 || cell.qnum >= 0) { + if ( + !this.puzzle.execConfig("autocmp") || + cell.anum >= 0 || + cell.qnum >= 0 + ) { return ""; } if (cell.qsub === 1) { @@ -315,17 +319,13 @@ var dsize = this.cw * 0.2; var blist = this.range.borders; for (var i = 0; i < blist.length; i++) { - if (!autocmp) { - g.vhide(); - continue; - } var b = blist[i]; g.vid = "b_skel_" + b.id; var isedgevalid = this.board.nblkmgr.isnodevalid(b.sidecell[0]) && this.board.nblkmgr.isnodevalid(b.sidecell[1]); - if (isedgevalid) { + if (autocmp && isedgevalid) { var w = b.isvert ? this.bh : dsize; var h = b.isvert ? dsize : this.bw; g.fillStyle = this.skelcolor; From 9057239e2f23c46f0d71ec0dbb643bd906438655 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Sun, 4 Oct 2020 23:08:34 +0200 Subject: [PATCH 9/9] simple dragging implementation --- src/variety/sukoro.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/variety/sukoro.js b/src/variety/sukoro.js index 365ca4985..f8c192883 100644 --- a/src/variety/sukoro.js +++ b/src/variety/sukoro.js @@ -11,6 +11,20 @@ //--------------------------------------------------------- // マウス入力系 MouseEvent: { + dragnumber_sukoro: function() { + var cell = this.getcell(); + if (cell.isnull || cell === this.mouseCell) { + return; + } + if (this.mouseCell.isnull) { + this.inputData = cell.isNumberObj() ? -2 : -3; + this.mouseCell = cell; + } else if (cell.qnum === -1) { + cell.setNum(this.inputData); + this.mouseCell = cell; + cell.draw(); + } + }, // like normal, except we sort qsub=1 to the front getNewNumber: function(cell, num) { var puzzle = this.puzzle; @@ -75,7 +89,16 @@ play: ["number", "numexist", "numblank", "clear"] }, mouseinput_auto: function() { - if (this.mousestart) { + if (this.puzzle.playmode) { + if (this.mousestart || this.mousemove) { + if (this.btn === "left") { + this.dragnumber_sukoro(); + } + } else if (this.mouseend && this.notInputted()) { + this.mouseCell = this.board.emptycell; + this.inputqnum(); + } + } else if (this.puzzle.editmode) { this.inputqnum(); } }