Workshop › Tower Defense › Step 40 of 42

Tower buttons

What we are doing

Keys work, but a player should see the choice. Two buttons in the top bar show each tower's price; the chosen one is lit in its own color, and a click picks it.

```js
const BUTTONS = [
  { kind: 'arrow', x: 250, w: 110 },
  { kind: 'cannon', x: 364, w: 110 },
]

  if (p.y < TOP) {
    const button = BUTTONS.find((b) => p.x >= b.x && p.x < b.x + b.w)
    if (button) selected = button.kind
    return
  }

  for (const b of BUTTONS) {
    const kind = TOWERS[b.kind]
    ctx.fillStyle = b.kind === selected ? kind.color : '#334155'
    ctx.fillRect(b.x, 6, b.w, 28)
    ctx.fillStyle = b.kind === selected ? '#0f172a' : 'white'
    ctx.fillText(b.kind + ' ' + kind.cost, b.x + b.w / 2, 26)
  }
```

What it means

Your turn

  1. Under the comment above START, write BUTTONS.
  2. In pointerdown, write the top-bar block right above if (p.y >= BAR).
  3. In draw, write the for loop right under ctx.textAlign = 'center' (the one after the Gold line).

Skills: Keyboard and mouse input, Drawing on a canvas

All steps

  1. Measure the map
  2. A map of tiles
  3. Draw it every frame
  4. The road as corners
  5. Fill in the road
  6. Draw the road
  7. Walking by distance
  8. Enemies on the road
  9. Walk
  10. Off the end of the road
  11. Here they come
  12. Towers
  13. From a click to a tile
  14. Click to build
  15. Where can you build?
  16. Show the gold
  17. Show before you click
  18. Show the range
  19. Pick a target
  20. Fire!
  21. A hit hurts
  22. Homing bullets
  23. Fizzle out
  24. Gold for every kill
  25. Lives
  26. Health bars
  27. Build, then defend
  28. Space starts a wave
  29. The wave is over
  30. Stronger every wave
  31. Closer together
  32. Out of lives
  33. No building after the end
  34. The most waves survived
  35. The game over screen
  36. Play again
  37. The bottom bar
  38. Click to start
  39. A second tower: the cannon
  40. Tower buttons
  41. Splash damage
  42. Build it yourself: sell a tower