From: Kimmo R. <ki...@us...> - 2014-11-26 14:56:34
|
Update of /cvsroot/arianne/stendhal/srcjs/stendhal/ui In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv7651/srcjs/stendhal/ui Modified Files: gamewindow.js Log Message: Keep the view centered on the player Index: gamewindow.js =================================================================== RCS file: /cvsroot/arianne/stendhal/srcjs/stendhal/ui/gamewindow.js,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** gamewindow.js 24 Nov 2014 23:00:11 -0000 1.1 --- gamewindow.js 26 Nov 2014 14:56:30 -0000 1.2 *************** *** 34,37 **** --- 34,38 ---- this.ctx = canvas.getContext("2d"); this.ctx.globalAlpha = 1.0; + this.adjustView(canvas); for (var drawingLayer=0; drawingLayer < stendhal.data.map.layers.length; drawingLayer++) { *************** *** 55,60 **** paintLayer: function(drawingLayer) { var layer = stendhal.data.map.layers[drawingLayer]; ! for (var y=0; y < Math.min(stendhal.data.map.zoneSizeY, stendhal.data.map.sizeY); y++) { ! for (var x=0; x < Math.min(stendhal.data.map.zoneSizeX, stendhal.data.map.sizeX); x++) { var gid = layer[(this.offsetY + y) * stendhal.data.map.numberOfXTiles + (this.offsetX + x)]; if (gid > 0) { --- 56,61 ---- paintLayer: function(drawingLayer) { var layer = stendhal.data.map.layers[drawingLayer]; ! for (var y=0; y < stendhal.data.map.zoneSizeY; y++) { ! for (var x=0; x < stendhal.data.map.zoneSizeX; x++) { var gid = layer[(this.offsetY + y) * stendhal.data.map.numberOfXTiles + (this.offsetX + x)]; if (gid > 0) { *************** *** 69,73 **** (idx * stendhal.data.map.tileWidth) % tilesetWidth, Math.floor((idx * stendhal.data.map.tileWidth) / tilesetWidth) * stendhal.data.map.tileHeight, stendhal.data.map.tileWidth, stendhal.data.map.tileHeight, ! x * this.targetTileWidth, y * this.targetTileHeight, this.targetTileWidth, this.targetTileHeight); } --- 70,75 ---- (idx * stendhal.data.map.tileWidth) % tilesetWidth, Math.floor((idx * stendhal.data.map.tileWidth) / tilesetWidth) * stendhal.data.map.tileHeight, stendhal.data.map.tileWidth, stendhal.data.map.tileHeight, ! (x + this.offsetX) * this.targetTileWidth, ! (y + this.offsetY) * this.targetTileHeight, this.targetTileWidth, this.targetTileHeight); } *************** *** 86,90 **** for (i in marauroa.currentZone) { if (typeof(marauroa.currentZone[i].draw) != "undefined") { ! marauroa.currentZone[i].draw(this.ctx, this.offsetX, this.offsetY); } } --- 88,93 ---- for (i in marauroa.currentZone) { if (typeof(marauroa.currentZone[i].draw) != "undefined") { ! //marauroa.currentZone[i].draw(this.ctx, this.offsetX, this.offsetY); ! marauroa.currentZone[i].draw(this.ctx, 0, 0); } } *************** *** 96,102 **** for (i in marauroa.currentZone) { if (typeof(marauroa.currentZone[i].drawTop) != "undefined") { ! marauroa.currentZone[i].drawTop(this.ctx, this.offsetX, this.offsetY); } } } } \ No newline at end of file --- 99,123 ---- for (i in marauroa.currentZone) { if (typeof(marauroa.currentZone[i].drawTop) != "undefined") { ! //marauroa.currentZone[i].drawTop(this.ctx, this.offsetX, this.offsetY); ! marauroa.currentZone[i].drawTop(this.ctx, 0, 0); } } + }, + + adjustView: function(canvas) { + // Coordinates for a screen centered on player + var centerX = marauroa.me.x * this.targetTileWidth + this.targetTileWidth / 2 - canvas.width / 2; + var centerY = marauroa.me.y * this.targetTileHeight + this.targetTileHeight / 2 - canvas.height / 2; + + // Keep the world within the screen view + centerX = Math.min(centerX, stendhal.data.map.zoneSizeX * this.targetTileWidth - canvas.width); + centerX = Math.max(centerX, 0); + + centerY = Math.min(centerY, stendhal.data.map.zoneSizeY * this.targetTileHeight - canvas.height); + centerY = Math.max(centerY, 0); + + this.ctx.translate(-centerX, -centerY); + this.offsetX = Math.floor(centerX / this.targetTileWidth); + this.offsetY = Math.floor(centerY / this.targetTileHeight); } } \ No newline at end of file |