mirror of
https://github.com/IllusionMan1212/adventures-of-kuroneko.git
synced 2026-10-24 02:12:36 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
ig.module(
|
||||
'weltmeister.tile-select'
|
||||
)
|
||||
.defines(function(){ "use strict";
|
||||
|
||||
wm.TileSelect = ig.Class.extend({
|
||||
|
||||
pos: {x:0, y:0},
|
||||
|
||||
layer: null,
|
||||
selectionBegin: null,
|
||||
|
||||
init: function( layer ) {
|
||||
this.layer = layer;
|
||||
},
|
||||
|
||||
|
||||
getCurrentTile: function() {
|
||||
var b = this.layer.brush;
|
||||
if( b.length == 1 && b[0].length == 1 ) {
|
||||
return b[0][0] - 1;
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
setPosition: function( x, y ) {
|
||||
this.selectionBegin = null;
|
||||
var tile = this.getCurrentTile();
|
||||
this.pos.x =
|
||||
Math.floor( x / this.layer.tilesize ) * this.layer.tilesize
|
||||
- Math.floor( tile * this.layer.tilesize ) % this.layer.tiles.width;
|
||||
|
||||
this.pos.y =
|
||||
Math.floor( y / this.layer.tilesize ) * this.layer.tilesize
|
||||
- Math.floor( tile * this.layer.tilesize / this.layer.tiles.width ) * this.layer.tilesize
|
||||
- (tile == -1 ? this.layer.tilesize : 0);
|
||||
|
||||
this.pos.x = this.pos.x.limit( 0, ig.system.width - this.layer.tiles.width - (ig.system.width % this.layer.tilesize) );
|
||||
this.pos.y = this.pos.y.limit( 0, ig.system.height - this.layer.tiles.height - (ig.system.height % this.layer.tilesize) );
|
||||
},
|
||||
|
||||
|
||||
beginSelecting: function( x, y ) {
|
||||
this.selectionBegin = {x:x, y:y};
|
||||
},
|
||||
|
||||
|
||||
endSelecting: function( x, y ) {
|
||||
var r = this.getSelectionRect( x, y);
|
||||
|
||||
var mw = Math.floor( this.layer.tiles.width / this.layer.tilesize );
|
||||
var mh = Math.floor( this.layer.tiles.height / this.layer.tilesize );
|
||||
|
||||
var brush = [];
|
||||
for( var ty = r.y; ty < r.y+r.h; ty++ ) {
|
||||
var row = [];
|
||||
for( var tx = r.x; tx < r.x+r.w; tx++ ) {
|
||||
if( tx < 0 || ty < 0 || tx >= mw || ty >= mh) {
|
||||
row.push( 0 );
|
||||
}
|
||||
else {
|
||||
row.push( ty * Math.floor(this.layer.tiles.width / this.layer.tilesize) + tx + 1 );
|
||||
}
|
||||
}
|
||||
brush.push( row );
|
||||
}
|
||||
this.selectionBegin = null;
|
||||
return brush;
|
||||
},
|
||||
|
||||
|
||||
getSelectionRect: function( x, y ) {
|
||||
var sx = this.selectionBegin ? this.selectionBegin.x : x,
|
||||
sy = this.selectionBegin ? this.selectionBegin.y : y;
|
||||
|
||||
var
|
||||
txb = Math.floor( (sx - this.pos.x) / this.layer.tilesize ),
|
||||
tyb = Math.floor( (sy - this.pos.y) / this.layer.tilesize ),
|
||||
txe = Math.floor( (x - this.pos.x) / this.layer.tilesize ),
|
||||
tye = Math.floor( (y - this.pos.y) / this.layer.tilesize );
|
||||
|
||||
return {
|
||||
x: Math.min( txb, txe ),
|
||||
y: Math.min( tyb, tye ),
|
||||
w: Math.abs( txb - txe) + 1,
|
||||
h: Math.abs( tyb - tye) + 1
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
draw: function() {
|
||||
ig.system.clear( "rgba(0,0,0,0.8)" );
|
||||
if( !this.layer.tiles.loaded ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Tileset
|
||||
ig.system.context.lineWidth = 1;
|
||||
ig.system.context.strokeStyle = wm.config.colors.secondary;
|
||||
ig.system.context.fillStyle = wm.config.colors.clear;
|
||||
ig.system.context.fillRect(
|
||||
this.pos.x * ig.system.scale,
|
||||
this.pos.y * ig.system.scale,
|
||||
this.layer.tiles.width * ig.system.scale,
|
||||
this.layer.tiles.height * ig.system.scale
|
||||
);
|
||||
ig.system.context.strokeRect(
|
||||
this.pos.x * ig.system.scale - 0.5,
|
||||
this.pos.y * ig.system.scale - 0.5,
|
||||
this.layer.tiles.width * ig.system.scale + 1,
|
||||
this.layer.tiles.height * ig.system.scale + 1
|
||||
);
|
||||
|
||||
this.layer.tiles.draw( this.pos.x, this.pos.y );
|
||||
|
||||
// Selected Tile
|
||||
var tile = this.getCurrentTile();
|
||||
var tx = Math.floor( tile * this.layer.tilesize ) % this.layer.tiles.width + this.pos.x;
|
||||
var ty =
|
||||
Math.floor( tile * this.layer.tilesize / this.layer.tiles.width )
|
||||
* this.layer.tilesize + this.pos.y
|
||||
+ (tile == -1 ? this.layer.tilesize : 0);
|
||||
|
||||
ig.system.context.lineWidth = 1;
|
||||
ig.system.context.strokeStyle = wm.config.colors.highlight;
|
||||
ig.system.context.strokeRect(
|
||||
tx * ig.system.scale - 0.5,
|
||||
ty * ig.system.scale - 0.5,
|
||||
this.layer.tilesize * ig.system.scale + 1,
|
||||
this.layer.tilesize * ig.system.scale + 1
|
||||
);
|
||||
},
|
||||
|
||||
|
||||
drawCursor: function( x, y ) {
|
||||
var cx = Math.floor( x / this.layer.tilesize ) * this.layer.tilesize;
|
||||
var cy = Math.floor( y / this.layer.tilesize ) * this.layer.tilesize;
|
||||
|
||||
var r = this.getSelectionRect( x, y);
|
||||
|
||||
ig.system.context.lineWidth = 1;
|
||||
ig.system.context.strokeStyle = wm.config.colors.selection;
|
||||
ig.system.context.strokeRect(
|
||||
(r.x * this.layer.tilesize + this.pos.x) * ig.system.scale - 0.5,
|
||||
(r.y * this.layer.tilesize + this.pos.y) * ig.system.scale - 0.5,
|
||||
r.w * this.layer.tilesize * ig.system.scale + 1,
|
||||
r.h * this.layer.tilesize * ig.system.scale + 1
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user