diff options
Diffstat (limited to 'html/tower/js/uiHandlers.js')
-rw-r--r-- | html/tower/js/uiHandlers.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/html/tower/js/uiHandlers.js b/html/tower/js/uiHandlers.js new file mode 100644 index 0000000..5dc048a --- /dev/null +++ b/html/tower/js/uiHandlers.js @@ -0,0 +1,48 @@ +function initializeDragAndDrop(canvas, gameState) { + let draggedTowerType = null; + let hoverCell = null; + + const dragHandlers = { + onDragStart: (e) => { + draggedTowerType = e.target.dataset.towerType; + e.dataTransfer.setData('text/plain', ''); + }, + + onDragEnd: () => { + draggedTowerType = null; + hoverCell = null; + }, + + onDragOver: (e) => { + e.preventDefault(); + const rect = canvas.getBoundingClientRect(); + const x = Math.floor((e.clientX - rect.left) / (canvas.width / 20)); + const y = Math.floor((e.clientY - rect.top) / (canvas.height / 20)); + + hoverCell = (x >= 0 && x < 20 && y >= 0 && y < 20) ? { x, y } : null; + }, + + onDrop: (e) => { + e.preventDefault(); + if (!draggedTowerType || !hoverCell) return; + + placeTower(gameState, draggedTowerType, hoverCell); + draggedTowerType = null; + hoverCell = null; + } + }; + + return { dragHandlers, getHoverInfo: () => ({ draggedTowerType, hoverCell }) }; +} + +function placeTower(gameState, towerType, position) { + const tower = TowerTypes[towerType]; + if ( + gameState.grid[position.y][position.x] === 'empty' && + gameState.playerCurrency >= tower.cost + ) { + gameState.grid[position.y][position.x] = 'tower'; + gameState.towers.push(createTower(towerType, { ...position })); + gameState.playerCurrency -= tower.cost; + } +} \ No newline at end of file |