Noise-based experimental forms.

main.moon 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. w, h = love.graphics.getDimensions!
  2. map = {}
  3. map.get = (x, y) -> if map[x] return map[x][y]
  4. map.set = (x, y, v) ->
  5. map[x] = {} unless map[x]
  6. map[x][y] = v
  7. seed = love.math.random!
  8. scale = 10
  9. tileSize = 20
  10. camera = { x: 0, y: 0 }
  11. update = ->
  12. if love.keyboard.isDown "a"
  13. camera.x -= 4
  14. if love.keyboard.isDown "d"
  15. camera.x += 4
  16. if love.keyboard.isDown "w"
  17. camera.y -= 4
  18. if love.keyboard.isDown "s"
  19. camera.y += 4
  20. time, tick = 0, 1/60
  21. love.update = (dt) ->
  22. time += dt
  23. if time >= tick
  24. time -= tick
  25. update()
  26. love.draw = ->
  27. a, b = math.floor(camera.x / tileSize), math.floor(camera.y / tileSize)
  28. i, j = camera.x % tileSize, camera.y % tileSize
  29. for x = 0, w / tileSize
  30. for y = 0, h / tileSize
  31. n = love.math.noise (x + a + seed) / scale, (y + b + seed) / scale
  32. m = love.math.noise (x + a + seed) / scale, (y + b + seed) / scale, n
  33. if m < 0.72
  34. love.graphics.setColor n, 1, 0, 1
  35. else
  36. love.graphics.setColor 1, 1, 1, 1
  37. X, Y = x * tileSize - i, y * tileSize - j
  38. love.graphics.rectangle "fill", X, Y, tileSize, tileSize
  39. if map.get x + a, y + b
  40. love.graphics.setColor 0, 0, 0, 1
  41. love.graphics.line X + tileSize / 2, Y + tileSize / 2, X, Y
  42. love.mousepressed = (x, y, btn) ->
  43. X, Y = math.floor((x + camera.x) / tileSize), math.floor((y + camera.y) / tileSize)
  44. print X, Y
  45. map.set X, Y, true
  46. love.keypressed = (key) ->
  47. love.event.quit! if key == "escape"