Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'extraplugins/diagram-definition/org.eclipse.papyrus.dd.editor/batik-1.7/samples/solitaire/script/card.js')
-rw-r--r--extraplugins/diagram-definition/org.eclipse.papyrus.dd.editor/batik-1.7/samples/solitaire/script/card.js234
1 files changed, 234 insertions, 0 deletions
diff --git a/extraplugins/diagram-definition/org.eclipse.papyrus.dd.editor/batik-1.7/samples/solitaire/script/card.js b/extraplugins/diagram-definition/org.eclipse.papyrus.dd.editor/batik-1.7/samples/solitaire/script/card.js
new file mode 100644
index 00000000000..fcf9a60b209
--- /dev/null
+++ b/extraplugins/diagram-definition/org.eclipse.papyrus.dd.editor/batik-1.7/samples/solitaire/script/card.js
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var svgns = "http://www.w3.org/2000/svg";
+var xlinkns = "http://www.w3.org/1999/xlink";
+
+var SUITE_DIAMOND = 1;
+var SUITE_CLUB = 2;
+var SUITE_HEART = 3;
+var SUITE_SPADE = 4;
+
+var MOVING = new Array();
+
+function Card(doc, value, suite, deck, faceup) {
+ this.value = value;
+ this.suite = suite;
+ this.deck = deck;
+
+ this.elem = doc.createElementNS(svgns, "g");
+ this.svg = doc.createElementNS(svgns, "svg");
+ this.svg.setAttribute("x", "0");
+ this.svg.setAttribute("y", "0");
+ this.svg.setAttribute("width", "100");
+ this.svg.setAttribute("height", "100");
+ this.elem.appendChild(this.svg);
+
+ var id;
+ switch(suite) {
+ case SUITE_DIAMOND: id = "d"; break;
+ case SUITE_CLUB: id = "c"; break;
+ case SUITE_HEART: id = "h"; break;
+ case SUITE_SPADE: id = "s"; break;
+ }
+ id += value;
+ this.id = id;
+ this.card = doc.createElementNS(svgns, "use");
+ this.faceup = faceup;
+ if (this.faceup) {
+ this.card.setAttributeNS(xlinkns, "xlink:href",
+ deck + "#" + id);
+ } else {
+ this.card.setAttributeNS(xlinkns, "xlink:href",
+ deck + "#card-back");
+ }
+ this.card.setAttribute("x", "0");
+ this.card.setAttribute("y", "0");
+ this.card.setAttribute("width", "100%");
+ this.card.setAttribute("height", "100%");
+ this.svg.appendChild(this.card);
+ this.rect = doc.createElementNS(svgns, "rect");
+ this.rect.setAttribute("x", "0");
+ this.rect.setAttribute("y", "0");
+ this.rect.setAttribute("width", "100%");
+ this.rect.setAttribute("height", "100%");
+ this.rect.setAttribute("style", "visibility:hidden; pointer-events:fill");
+ this.svg.appendChild(this.rect);
+
+ return this;
+}
+
+Card.prototype.flipCard = function(faceup) {
+ if (this.faceup == faceup) return;
+ if (faceup) {
+ this.card.setAttributeNS(xlinkns, "xlink:href",
+ this.deck + "#" + this.id);
+ } else {
+ this.card.setAttributeNS(xlinkns, "xlink:href",
+ this.deck + "#card-back");
+ }
+ this.faceup = faceup;
+}
+
+Card.prototype.getValue = function() {
+ return this.value;
+}
+
+Card.prototype.getSuite = function() {
+ return this.suite;
+}
+
+Card.prototype.getElem = function() {
+ return this.elem;
+}
+
+Card.prototype.suiteMatch = function(c) {
+ return c.suite == this.suite;
+}
+
+Card.prototype.isRed = function() {
+ return ((this.suite == SUITE_HEART) || (this.suite == SUITE_DIAMOND));
+}
+Card.prototype.isBlack = function() {
+ return ((this.suite == SUITE_CLUB) || (this.suite == SUITE_SPADE));
+}
+
+Card.prototype.colorMatch = function(c) {
+ return c.isRed() == this.isRed();
+}
+
+Card.prototype.valueMatch = function(c) {
+ return c.value == this.value;
+}
+
+Card.prototype.valueOneHigher = function(c) {
+ return c.value-1 == this.value;
+}
+
+Card.prototype.valueOneLower = function(c) {
+ return c.value+1 == this.value;
+}
+
+Card.prototype.asString = function() {
+ return this.id;
+}
+
+Card.prototype.setPos = function(x, y) {
+ if ((this.x == x) && (this.y == y)) return;
+ this.x = x;
+ this.y = y;
+ this.elem.setAttribute("transform", "translate("+x+","+y+")");
+}
+
+Card.prototype.setSize = function(w, h) {
+ this.w = w;
+ this.h = h;
+ this.svg.setAttribute("width", ""+w);
+ this.svg.setAttribute("height", ""+h);
+}
+
+Card.prototype.moveTo = function(x, y, step) {
+ this.destX = x;
+ this.destY = y;
+ this.dx = (x - this.x);
+ this.dy = (y - this.y);
+ var dist = Math.sqrt(this.dx*this.dx+this.dy*this.dy);
+ var steps = Math.floor(dist/step);
+ if (steps < 1) steps = 1;
+ this.dx /= steps;
+ this.dy /= steps;
+ if (this.moving)
+ return;
+
+ if (!this.updateDisplay())
+ return;
+
+ this.moving = true;
+ MOVING.push(this);
+ if (MOVING.length == 1) {
+ setTimeout("moveCards()", 50);
+ }
+}
+
+Card.prototype.updateDisplay = function() {
+ var deltaX = (this.destX-this.x);
+ var newX = this.x + this.dx;
+ var register = false;
+ if (deltaX < 0) {
+ if (((deltaX*1.01) <= this.dx) &&
+ ((deltaX*0.99) >= this.dx)) {
+ newX = this.destX;
+ } else {
+ register = true;
+ }
+ } else {
+ if (((deltaX*1.01) >= this.dx) &&
+ ((deltaX*0.99) <= this.dx)) {
+ newX = this.destX;
+ } else {
+ register = true;
+ }
+ }
+ var deltaY = (this.destY-this.y);
+ var newY = this.y + this.dy;
+ if (deltaY < 0) {
+ if (((deltaY*1.01) <= this.dy) &&
+ ((deltaY*0.99) >= this.dy)) {
+ newY = this.destY;
+ } else {
+ register = true;
+ }
+ } else {
+ if (((deltaY*1.01) >= this.dy) &&
+ ((deltaY*0.99) <= this.dy)) {
+ newY = this.destY;
+ } else {
+ register = true;
+ }
+ }
+ this.setPos(newX, newY);
+ if (!register) {
+ var nc = this.pile.nextCard(this);
+ while (nc) {
+ var ncelem = nc?nc.elem:null;
+ if (ncelem.parentNode == this.pile.g) {
+ this.pile.g.insertBefore(this.elem, ncelem);
+ break;
+ }
+ nc = this.pile.nextCard(nc);
+ }
+ if (!nc)
+ this.pile.g.appendChild(this.elem);
+ }
+ this.moving = register;
+ return register;
+}
+
+function moveCards() {
+ var register = false;
+ var num = MOVING.length;
+ for (var i=0; i<num; i++) {
+ var card = MOVING.shift();
+ if (card.updateDisplay()) {
+ MOVING.push(card);
+ register = true;
+ } else {
+ }
+ }
+ if (register) {
+ setTimeout("moveCards()", 50);
+ }
+}

Back to the top