diff --git a/assets/flowers-2.png b/assets/flowers-2.png new file mode 100644 index 0000000..f51b3f4 Binary files /dev/null and b/assets/flowers-2.png differ diff --git a/assets/haunted---bl.png b/assets/haunted---bl.png new file mode 100644 index 0000000..38bd6f1 Binary files /dev/null and b/assets/haunted---bl.png differ diff --git a/assets/haunted--rb-.png b/assets/haunted--rb-.png new file mode 100644 index 0000000..f888733 Binary files /dev/null and b/assets/haunted--rb-.png differ diff --git a/assets/haunted--rbl.png b/assets/haunted--rbl.png new file mode 100644 index 0000000..3f64e88 Binary files /dev/null and b/assets/haunted--rbl.png differ diff --git a/assets/haunted-t--l.png b/assets/haunted-t--l.png new file mode 100644 index 0000000..2c4d725 Binary files /dev/null and b/assets/haunted-t--l.png differ diff --git a/assets/haunted-t-bl.png b/assets/haunted-t-bl.png new file mode 100644 index 0000000..32d3701 Binary files /dev/null and b/assets/haunted-t-bl.png differ diff --git a/assets/haunted-tr--.png b/assets/haunted-tr--.png new file mode 100644 index 0000000..22a9b6c Binary files /dev/null and b/assets/haunted-tr--.png differ diff --git a/assets/haunted-tr-l.png b/assets/haunted-tr-l.png new file mode 100644 index 0000000..1d07547 Binary files /dev/null and b/assets/haunted-tr-l.png differ diff --git a/assets/haunted-trb-.png b/assets/haunted-trb-.png new file mode 100644 index 0000000..b7ace6a Binary files /dev/null and b/assets/haunted-trb-.png differ diff --git a/assets/haunted.png b/assets/haunted-trbl.png similarity index 100% rename from assets/haunted.png rename to assets/haunted-trbl.png diff --git a/assets/haunted-tree.png b/assets/haunted-tree.png new file mode 100644 index 0000000..8ab2166 Binary files /dev/null and b/assets/haunted-tree.png differ diff --git a/assets/sand-----.png b/assets/sand-----.png new file mode 100644 index 0000000..afb8a7e Binary files /dev/null and b/assets/sand-----.png differ diff --git a/assets/sand----l.png b/assets/sand----l.png new file mode 100644 index 0000000..2aa809c Binary files /dev/null and b/assets/sand----l.png differ diff --git a/assets/sand---b-.png b/assets/sand---b-.png new file mode 100644 index 0000000..6f710bf Binary files /dev/null and b/assets/sand---b-.png differ diff --git a/assets/sand---bl.png b/assets/sand---bl.png new file mode 100644 index 0000000..770fd5a Binary files /dev/null and b/assets/sand---bl.png differ diff --git a/assets/sand--r--.png b/assets/sand--r--.png new file mode 100644 index 0000000..223ccad Binary files /dev/null and b/assets/sand--r--.png differ diff --git a/assets/sand--r-l.png b/assets/sand--r-l.png new file mode 100644 index 0000000..339809e Binary files /dev/null and b/assets/sand--r-l.png differ diff --git a/assets/sand--rb-.png b/assets/sand--rb-.png new file mode 100644 index 0000000..9c86ca3 Binary files /dev/null and b/assets/sand--rb-.png differ diff --git a/assets/sand--rbl.png b/assets/sand--rbl.png new file mode 100644 index 0000000..1606d57 Binary files /dev/null and b/assets/sand--rbl.png differ diff --git a/assets/sand-t---.png b/assets/sand-t---.png new file mode 100644 index 0000000..89afec8 Binary files /dev/null and b/assets/sand-t---.png differ diff --git a/assets/sand-t--l.png b/assets/sand-t--l.png new file mode 100644 index 0000000..80b5a54 Binary files /dev/null and b/assets/sand-t--l.png differ diff --git a/assets/sand-t-b-.png b/assets/sand-t-b-.png new file mode 100644 index 0000000..675f903 Binary files /dev/null and b/assets/sand-t-b-.png differ diff --git a/assets/sand-t-bl.png b/assets/sand-t-bl.png new file mode 100644 index 0000000..93547a1 Binary files /dev/null and b/assets/sand-t-bl.png differ diff --git a/assets/sand-tr--.png b/assets/sand-tr--.png new file mode 100644 index 0000000..613ef20 Binary files /dev/null and b/assets/sand-tr--.png differ diff --git a/assets/sand-tr-l.png b/assets/sand-tr-l.png new file mode 100644 index 0000000..03c6b0b Binary files /dev/null and b/assets/sand-tr-l.png differ diff --git a/assets/sand-trb-.png b/assets/sand-trb-.png new file mode 100644 index 0000000..8294ea7 Binary files /dev/null and b/assets/sand-trb-.png differ diff --git a/assets/sand.png b/assets/sand-trbl.png similarity index 100% rename from assets/sand.png rename to assets/sand-trbl.png diff --git a/assets/tree-cut.png b/assets/tree-cut.png new file mode 100644 index 0000000..de4f0d7 Binary files /dev/null and b/assets/tree-cut.png differ diff --git a/src/main.cr b/src/main.cr index 7e86fab..2d7cd8b 100644 --- a/src/main.cr +++ b/src/main.cr @@ -3,49 +3,25 @@ require "json" require "./naka.cr" -class ImagesLoader - getter stone : SDL::Texture - getter tree : SDL::Texture - getter pine : SDL::Texture - getter flowers : SDL::Texture - getter sand : SDL::Texture - getter water : SDL::Texture - getter haunted : SDL::Texture - getter rocks : SDL::Texture - - def initialize(window) - @stone = window.newImage "assets/stone.png" - @tree = window.newImage "assets/tree.png" - @flowers = window.newImage "assets/flowers.png" - @sand = window.newImage "assets/sand.png" - @water = window.newImage "assets/water.png" - @haunted = window.newImage "assets/haunted.png" - @pine = window.newImage "assets/tree_pine.png" - @rocks = window.newImage "assets/rocks.png" - end -end - Naka.init window = Naka::Window.new "Test", 16*128, 16*128, flags: LibSDL::WindowFlags::RESIZABLE | LibSDL::WindowFlags::SHOWN | LibSDL::WindowFlags::OPENGL -images = ImagesLoader.new window - connection_font = window.newFont "assets/connection.otf", 30.5 window.set_font connection_font def simple_tile_drawer(window : Naka::Window, tile_path : String) texture = window.newImage tile_path + texture_height = texture.height + ->(map : Naka::Map, x : Int32, y : Int32, z : Int32, tile : Naka::Map::Tile, object : Naka::Map::Object, draw_x : Int32, draw_y : Int32, zoom : Float64){ - window.draw texture, draw_x, draw_y, scale_x: zoom, scale_y: zoom + window.draw texture, draw_x, (draw_y + (16 - texture_height) * zoom).to_i, scale_x: zoom, scale_y: zoom nil } end def bordered_tile_drawer(window : Naka::Window, base_tile_path : String) - # FIXME: Both excessive, insufficient, and broken. - mod = [ "trbl", "-rbl", @@ -119,27 +95,42 @@ dirt = Naka::Map::ObjectReference.new( ) sand = Naka::Map::ObjectReference.new( name: "Sand", - walkable: true + walkable: true, + drawer: bordered_tile_drawer window, "assets/sand{}.png" ) water = Naka::Map::ObjectReference.new( - name: "Water" + name: "Water", + drawer: simple_tile_drawer window, "assets/water.png" ) flowers = Naka::Map::ObjectReference.new( name: "Flowers", - walkable: true + walkable: true, + drawer: simple_tile_drawer window, "assets/flowers.png" ) haunted = Naka::Map::ObjectReference.new( name: "Haunted", - walkable: true + walkable: true, + drawer: bordered_tile_drawer window, "assets/haunted{}.png" +) +haunted_tree = Naka::Map::ObjectReference.new( + name: "Tree (Haunted)", + drawer: simple_tile_drawer window, "assets/haunted-tree.png" +) +tree_cut = Naka::Map::ObjectReference.new( + name: "Tree (Cut)", + drawer: simple_tile_drawer window, "assets/tree-cut.png" ) tree = Naka::Map::ObjectReference.new( - name: "Tree" + name: "Tree", + drawer: simple_tile_drawer window, "assets/tree.png" ) pine = Naka::Map::ObjectReference.new( - name: "Pine Tree" + name: "Pine Tree", + drawer: simple_tile_drawer window, "assets/tree_pine.png" ) rocks = Naka::Map::ObjectReference.new( - name: "Rocks" + name: "Rocks", + drawer: simple_tile_drawer window, "assets/rocks.png" ) altitude_noise = Naka::Noise2D.new.tap do |a| @@ -178,18 +169,24 @@ map = Naka::Map.new stone, "map-test-01" do |tile, x, y| tile << Naka::Map::Object.new stone end - if altitude < 0.25 - if altitude > 0.175 - if humidity < 0.33 - tile << Naka::Map::Object.new sand - else - tile << Naka::Map::Object.new dirt - end + if altitude < 0.75 + if altitude < 0.175 + next end - elsif altitude < 0.75 + + tile << Naka::Map::Object.new sand + + if humidity < 0.225 + next + end + tile << Naka::Map::Object.new dirt - if evil > 0.5 + if altitude < 0.275 + next + end + + if evil > 0.4 tile << Naka::Map::Object.new haunted else tile << Naka::Map::Object.new grass @@ -197,7 +194,9 @@ map = Naka::Map.new stone, "map-test-01" do |tile, x, y| if altitude > 0.35 && altitude < 0.65 if humidity > 0.4 - if humidity > 0.8 + if evil > 0.4 + tile << Naka::Map::Object.new haunted_tree + elsif humidity > 0.8 tile << Naka::Map::Object.new tree elsif humidity < 0.6 tile << Naka::Map::Object.new pine @@ -228,51 +227,24 @@ Naka::Event.loop window do |event| when Naka::Event::Quit next Naka::Event::Quit when Naka::Event::Update + p "FPS: #{(1000f64 / event.dt)}" when Naka::Event::Draw zoom_level = 4.0 - 128.times do |x| - 128.times do |y| + 64.times do |x| + 32.times do |y| tile = map.get x, y # FIXME: # - Please don’t draw more than one layer of ground… # - Transitions. (eg. between dirt and grass) tile.each_with_index do |object, z| - image = case object.reference.name.downcase - when "tree" - images.tree - when "pine tree" - images.pine - when "flowers" - images.flowers - when "water" - images.water - when "haunted" - images.haunted - when "sand" - images.sand - when "rocks" - images.rocks - else - images.stone - end - draw_x = (x * 16 * zoom_level).to_i - draw_y = (y * 16 * zoom_level - (image.height - 16) * zoom_level).to_i + draw_y = (y * 16 * zoom_level).to_i drawer = object.reference.drawer - if drawer.nil? - window.draw( - image, - x: draw_x, - y: draw_y, - scale_x: zoom_level, - scale_y: zoom_level - ) - next - end + next if drawer.nil? # FIXME: Maybe print a warning. drawer.call map, x, y, z, tile, object, draw_x, draw_y, zoom_level end