62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
class GameElement {
|
|
constructor(x, y, game, asset, setObject = true) {
|
|
this.game = game;
|
|
this.x = Math.min(x, this.game.fieldSize.x - 1);
|
|
this.y = Math.min(y, this.game.fieldSize.y - 1);
|
|
this.uuid = guid();
|
|
|
|
this.createElement(asset);
|
|
|
|
if(setObject)
|
|
this.game.field[x][y].object = this;
|
|
}
|
|
|
|
adjustPosition() {
|
|
const tile = this.game.field[this.x][this.y].element;
|
|
this.displayWidth = Math.round(this.game.hexagonSize.width * .9);
|
|
let offsetX = tile.offsetLeft;
|
|
let offsetY = tile.offsetTop;
|
|
|
|
if (this.y % 2 !== 0)
|
|
offsetX += Math.round(this.displayWidth * .5);
|
|
|
|
this.element.style.width = this.displayWidth + 'px';
|
|
this.element.style.left = offsetX + 'px';
|
|
this.element.style.top = offsetY + 'px';
|
|
}
|
|
|
|
createElement(asset) {
|
|
this.element = GameElement.createElement(asset, (this.constructor.name).toLowerCase());
|
|
this.adjustPosition();
|
|
this.game.view.appendChild(this.element);
|
|
}
|
|
|
|
static createElement(asset, className) {
|
|
const element = document.createElement('img');
|
|
element.src = 'assets/' + asset;
|
|
element.ondragstart = () => {
|
|
return false
|
|
};
|
|
element.ondragend = () => {
|
|
return false
|
|
};
|
|
element.classList.add('gameElement', className);
|
|
return element;
|
|
}
|
|
|
|
static getDraggingObject(game, className, image) {
|
|
const draggingContainer = body.createChild('div', 'draggingContainer');
|
|
const dragging = GameElement.createElement(image, className);
|
|
dragging.classList.add('dragging');
|
|
dragging.style.width = game.hexagonSize.width * game.scale * 1.1 + 'px';
|
|
dragging.style.height = game.hexagonSize.padding * game.scale * 1.1 + 'px';
|
|
draggingContainer.appendChild(dragging);
|
|
|
|
return draggingContainer;
|
|
}
|
|
|
|
update() {
|
|
this.adjustPosition();
|
|
this.game.updateBalance();
|
|
}
|
|
} |