jocly/src/games/chessbase/leychessalpha-view.js

220 lines
5.2 KiB
JavaScript

/*
* Copyright(c) 2013-2017 - jocly.com
*
* You are allowed to use and modify this source code as long as it is exclusively for use in the Jocly API.
*
* Original authors: Jocly team
*
*/
(function() {
View.Game.cbDefineView = function() {
var metamachyBoardDelta = {
//notationMode: 'in',
//notationDebug: true,
};
var metamachyBoard3d = $.extend(true,{},this.cbGridBoardClassic3DMargin,metamachyBoardDelta);
var metamachyBoard2d = $.extend(true,{},this.cbGridBoardClassic2DNoMargin,metamachyBoardDelta);
return {
coords: {
"2d": this.cbGridBoard.coordsFn.call(this,metamachyBoard2d),
"3d": this.cbGridBoard.coordsFn.call(this,metamachyBoard3d),
},
boardLayout: [
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
".#.#.#.#.#.#",
"#.#.#.#.#.#.",
],
board: {
"2d": {
draw: this.cbDrawBoardFn(metamachyBoard2d),
},
"3d": {
display: this.cbDisplayBoardFn(metamachyBoard3d),
},
},
clicker: {
"2d": {
width: 1000,
height: 1000,
},
"3d": {
scale: [.6,.6,.6],
},
},
pieces: this.cbFairyPieceStyle({
"default": {
"3d": {
scale: [.4,.4,.4],
},
"2d": {
width: 900,
height: 900,
},
},
}),
};
}
/*
* Make the knight & the camel jump when moving, the elephant & the lion when moving 2 squares, the cannon when capturing
*/
View.Board.cbMoveMidZ = function(aGame,aMove,zFrom,zTo) {
if(aMove.a=='N' || aMove.a=='M' || (aMove.a=='E' && aGame.g.distGraph[aMove.f][aMove.t]==2) || (aMove.a=='L' && aGame.g.distGraph[aMove.f][aMove.t]==2) || (aMove.a=='K' && aGame.g.distGraph[aMove.f][aMove.t]==2) || (aMove.a=='C' && aMove.c!=null))
return Math.max(zFrom,zTo)+1500;
else
return (zFrom+zTo)/2;
}
/*
* View.Game.xdInit overriding to create initial setup gadgets
*/
var SuperViewGameXdInit = View.Game.xdInit;
View.Game.xdInit = function(xdv) {
var $this=this;
SuperViewGameXdInit.apply(this,arguments);
var size=600;
xdv.createGadget("setup-board",{
base: {
type: "element",
x: 0,
y: 0,
width: size*12,
height: size*9,
z: 108,
css: {
"background-color": "White",
},
},
});
var setups={
0: "KQEL",
1: "KQLE",
2: "KEQL",
3: "KLQE",
4: "KELQ",
5: "KLEQ",
6: "QEKL",
7: "QLKE",
8: "EQKL",
9: "LQKE",
10: "ELKQ",
11: "LEKQ",
}
var imageOffsets={
K: 500, Q: 400, E: 1100, L: 1200,
}
for(var setup in setups) {
(function(setup) {
var x=((setup%4)-1.5)*3*size;
var y=(Math.floor(setup/4)-1)*3*size;
xdv.createGadget("setup#"+setup,{
base: {
type: "canvas",
x: x,
y: y,
width: 2*size,
height: 2*size,
z: 109,
draw: function(ctx) {
ctx.fillStyle="#c0c0c0";
ctx.rect(-size,-size,size*2,size*2);
ctx.fill();
ctx.save();
this.getResource("image|"+$this.g.fullPath+"/res/fairy/wikipedia-fairy-sprites.png",function(image) {
for(var i=0;i<4;i++) {
var x=i%2, y=Math.floor(i/2), p=setups[setup].charAt(i);
ctx.drawImage(image,imageOffsets[p],0,100,100,(x-1)*size,(y-1)*size,size,size);
}
ctx.restore();
});
}
},
});
})(setup);
}
}
/*
* View.Board.xdInput overriding to handle setup phase
*/
var SuperViewBoardxdInput = View.Board.xdInput;
View.Board.xdInput = function(xdv, aGame) {
if(this.setupState===undefined) {
return {
initial: {},
getActions: function(moves,currentInput) { return null; },
}
} else if(this.setupState=="setup") {
return {
initial: {
setupDone: false,
},
getActions: function(moves,currentInput) {
var actions={};
if(!currentInput.setupDone) {
moves.forEach(function(move) {
actions[move.setup]={
view: ["setup#"+move.setup],
click: ["setup#"+move.setup],
moves: [move],
validate: { setupDone: true },
}
});
}
return actions;
},
furnitures: ["setup-board"],
}
} else
return SuperViewBoardxdInput.apply(this,arguments);
}
/*
* View.Board.cbAnimate overriding to prevent animation on setup
*/
var SuperViewBoardcbAnimate = View.Board.cbAnimate;
View.Board.cbAnimate = function(xdv,aGame,aMove,callback) {
if(this.setupState===undefined || this.setupState=="setup")
callback();
else
SuperViewBoardcbAnimate.apply(this,arguments);
}
/*
* View.Board.xdDisplay overriding to prevent displaying KQEL before setup
*/
var SuperViewBoardxdDisplay = View.Board.xdDisplay;
View.Board.xdDisplay = function(xdv, aGame) {
if(this.setupState===undefined || this.setupState=="setup") {
var $this=this;
var hidden={};
[5,6,17,18,125,126,137,138].forEach(function(pos) {
var pIndex=$this.board[pos];
hidden[pos]=pIndex;
$this.pieces[pIndex].p=-1;
});
SuperViewBoardxdDisplay.apply(this,arguments);
for(var pos in hidden)
this.pieces[hidden[pos]].p=parseInt(pos);
} else
SuperViewBoardxdDisplay.apply(this,arguments);
}
})();