export class Player { constructor(game, id, name) { this.game = game; this.id = id; this.name = name; this.hand = []; this.isTurn = false; this.highlightedCard = null; this.cardArea = { currentWidth: 0.5, allowedWidth: 0.5, currentCard: null, cardWidth: 0.1, }; } init() { this.registerEventListeners(); } registerEventListeners() { this.game.registerListener('hover', event => { const width = this.cardArea.currentWidth; const left = 0.5 - width / 2; const right = left + width - this.cardArea.cardWidth; this.highlightedCard = Math.min(Math.max(Math.floor((event.relX - left) / (right - left) * this.hand.length), 0), this.hand.length - 1); }, 0, 0.8, 1, 0.2); this.game.registerListener('click', event => { console.log('clicked card'); if (!this.isTurn) { return; } if (this.highlightedCard !== null) { this.playCard(this.highlightedCard); } }); } addCard(card) { this.hand.push(card); } setHand(cards) { this.hand = cards .sort((a, b) => a.value.localeCompare(b.value)) .sort((a, b) => a.color.localeCompare(b.color)); } playCard(index) { console.log('played', this.name); const card = this.hand[index]; this.game.playCard(card); } getCardOffset() { const width = 800; const offset = Math.min((width - 100) / this.hand.length, 60); return offset; } getWidth(offset) { return offset * (this.hand.length - 1) + 100; } draw(renderer) { const offset = this.getCardOffset(); const width = this.getWidth(offset); let x = -width / 2; this.cardArea.currentWidth = width / this.game.renderer.width; this.cardArea.cardWidth = 100 / this.game.renderer.width; this.hand.forEach((card, index) => { if (this.highlightedCard === index) { this.cardArea.currentCard = x / this.game.renderer.width; card.draw(renderer, x); x += 100; } else { card.draw(renderer, x); x += offset; } }); renderer.pop(); } }