/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
* Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Sun Microsystems nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Sun Microsystems nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* JigsawPiece.fx
*
* Created on Oct 1, 2008, 6:54:10 PM
*/
package puzzlepieces;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.image.*;
import javafx.scene.paint.*;
import javafx.scene.input.*;
import javafx.scene.effect.*;
import java.lang.System;
/**
* @author jp202575
*/
public class JigsawPiece extends CustomNode {
public-init var image:Image;
public-init var correctX:Number;
public-init var correctY:Number;
public-init var topTab:Boolean = true;
public-init var leftTab:Boolean = true;
public-init var bottomTab:Boolean = true;
public-init var rightTab:Boolean = true;
public var inCorrectPlace:Boolean = false on replace {
if (inCorrectPlace) {
group.effect = null;
jigsawPiece.stroke = Color.rgb(0,0,0,0.5);
toBack();
} else {
group.effect = DropShadow {};
jigsawPiece.stroke = Color.BLACK;
toFront();
}
};
var group:Group;
var startDragX:Number;
var startDragY:Number;
var jigsawPiece:Shape;
protected override function create():Node {
var jigsawPieceClip = createPiece(correctX,correctY,topTab,leftTab,bottomTab,rightTab);
jigsawPiece = createPiece(0,0,topTab,leftTab,bottomTab,rightTab);
// fix for issue of complex cilp not handling mouse events correctly
jigsawPiece.fill =Color.TRANSPARENT;
translateX=correctX;
translateY=correctY;
return Group {
cache: true
blocksMouse: true
focusTraversable: true;
content: [
ImageView {
translateX: -correctX
translateY: -correctY
image: image;
clip: jigsawPieceClip
},
jigsawPiece
]
effect: DropShadow {
};
onMousePressed: function(e:MouseEvent):Void {
if (not inCorrectPlace){
toFront();
startDragX = translateX;
startDragY = translateY;
}
}
onMouseReleased: function(e:MouseEvent):Void {
if (not inCorrectPlace){
// check if
if (translateX < (correctX + 10) and translateX > (correctX - 10) and
translateY < (correctY + 10) and translateY > (correctY - 10)){
translateX = correctX;
translateY = correctY;
inCorrectPlace = true;
}
}
}
onMouseDragged: function(e:MouseEvent):Void {
if (not inCorrectPlace){
translateX = startDragX + e.dragX;
translateY = startDragY + e.dragY;
}
}
};
}
function createPiece(x:Number, y:Number, topTab:Boolean, leftTab:Boolean, bottomTab:Boolean, rightTab:Boolean): Shape {
ShapeSubtract {
translateX: x + 50
translateY: y + 50
fill: null
stroke: Color.BLACK
a: [
// main rectangle
Rectangle {
x: -50
y: -50
width: 100
height: 100
},
// right tab
if (rightTab) {
ShapeSubtract {
a: [
Ellipse {
centerX: 69.5
centerY: 0
radiusX: 10
radiusY: 17.5
},
Rectangle {
x: 50
y: -12.5
width: 11.5
height: 25
}
]
b: [
Circle {
centerX: 56.25
centerY: -14
radius: 6.25
},
Circle {
centerX: 56.25
centerY: 14
radius: 6.25
}
]
}
} else { null
},
// bottom tab
if (bottomTab) {
ShapeSubtract {
a: [
Ellipse {
centerX: 0
centerY: 69.5
radiusX: 17.5
radiusY: 10
},
Rectangle {
x: -12.5
y: 50
width: 25
height: 11
}
]
b: [
Circle {
centerX: -14
centerY: 56.25
radius: 6.25
},
Circle {
centerX: 14
centerY: 56.25
radius: 6.25
}
]
}
} else { null
}
]
b: [
// left tab
if (leftTab) {
ShapeSubtract {
a: [
Ellipse {
centerX: -31
centerY: 0
radiusX: 10
radiusY: 17.5
},
Rectangle {
x: -50
y: -12.5
width: 11
height: 25
}
]
b: [
Circle {
centerX: -43.75
centerY: -14
radius: 6.25
},
Circle {
centerX: -43.75
centerY: 14
radius: 6.25
}
]
}
} else { null
},
// top tab
if (topTab) {
ShapeSubtract {
a: [
Ellipse {
centerX: 0
centerY: -31
radiusX: 17.5
radiusY: 10
},
Rectangle {
x: -12.5
y: -50
width: 25
height: 12.5
}
]
b: [
Circle {
centerX: -14
centerY: -43.75
radius: 6.25
},
Circle {
centerX: 14
centerY: -43.75
radius: 6.25
}
]
}
} else { null
}
]
}
}
}