Map & mapgen updates.
- More textures, more transition textures. - Old ImageLoader removed. - Number of tiles displayed reduced for more realistic benchmarking. Also makes running tests a bit faster.master
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 5.2 KiB |
124
src/main.cr
|
@ -3,49 +3,25 @@ require "json"
|
||||||
|
|
||||||
require "./naka.cr"
|
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
|
Naka.init
|
||||||
|
|
||||||
window = Naka::Window.new "Test", 16*128, 16*128, flags: LibSDL::WindowFlags::RESIZABLE | LibSDL::WindowFlags::SHOWN | LibSDL::WindowFlags::OPENGL
|
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
|
connection_font = window.newFont "assets/connection.otf", 30.5
|
||||||
window.set_font connection_font
|
window.set_font connection_font
|
||||||
|
|
||||||
def simple_tile_drawer(window : Naka::Window, tile_path : String)
|
def simple_tile_drawer(window : Naka::Window, tile_path : String)
|
||||||
texture = window.newImage tile_path
|
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){
|
->(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
|
nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def bordered_tile_drawer(window : Naka::Window, base_tile_path : String)
|
def bordered_tile_drawer(window : Naka::Window, base_tile_path : String)
|
||||||
# FIXME: Both excessive, insufficient, and broken.
|
|
||||||
|
|
||||||
mod = [
|
mod = [
|
||||||
"trbl",
|
"trbl",
|
||||||
"-rbl",
|
"-rbl",
|
||||||
|
@ -119,27 +95,42 @@ dirt = Naka::Map::ObjectReference.new(
|
||||||
)
|
)
|
||||||
sand = Naka::Map::ObjectReference.new(
|
sand = Naka::Map::ObjectReference.new(
|
||||||
name: "Sand",
|
name: "Sand",
|
||||||
walkable: true
|
walkable: true,
|
||||||
|
drawer: bordered_tile_drawer window, "assets/sand{}.png"
|
||||||
)
|
)
|
||||||
water = Naka::Map::ObjectReference.new(
|
water = Naka::Map::ObjectReference.new(
|
||||||
name: "Water"
|
name: "Water",
|
||||||
|
drawer: simple_tile_drawer window, "assets/water.png"
|
||||||
)
|
)
|
||||||
flowers = Naka::Map::ObjectReference.new(
|
flowers = Naka::Map::ObjectReference.new(
|
||||||
name: "Flowers",
|
name: "Flowers",
|
||||||
walkable: true
|
walkable: true,
|
||||||
|
drawer: simple_tile_drawer window, "assets/flowers.png"
|
||||||
)
|
)
|
||||||
haunted = Naka::Map::ObjectReference.new(
|
haunted = Naka::Map::ObjectReference.new(
|
||||||
name: "Haunted",
|
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(
|
tree = Naka::Map::ObjectReference.new(
|
||||||
name: "Tree"
|
name: "Tree",
|
||||||
|
drawer: simple_tile_drawer window, "assets/tree.png"
|
||||||
)
|
)
|
||||||
pine = Naka::Map::ObjectReference.new(
|
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(
|
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|
|
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
|
tile << Naka::Map::Object.new stone
|
||||||
end
|
end
|
||||||
|
|
||||||
if altitude < 0.25
|
if altitude < 0.75
|
||||||
if altitude > 0.175
|
if altitude < 0.175
|
||||||
if humidity < 0.33
|
next
|
||||||
tile << Naka::Map::Object.new sand
|
|
||||||
else
|
|
||||||
tile << Naka::Map::Object.new dirt
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
elsif altitude < 0.75
|
|
||||||
|
tile << Naka::Map::Object.new sand
|
||||||
|
|
||||||
|
if humidity < 0.225
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
tile << Naka::Map::Object.new dirt
|
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
|
tile << Naka::Map::Object.new haunted
|
||||||
else
|
else
|
||||||
tile << Naka::Map::Object.new grass
|
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 altitude > 0.35 && altitude < 0.65
|
||||||
if humidity > 0.4
|
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
|
tile << Naka::Map::Object.new tree
|
||||||
elsif humidity < 0.6
|
elsif humidity < 0.6
|
||||||
tile << Naka::Map::Object.new pine
|
tile << Naka::Map::Object.new pine
|
||||||
|
@ -228,51 +227,24 @@ Naka::Event.loop window do |event|
|
||||||
when Naka::Event::Quit
|
when Naka::Event::Quit
|
||||||
next Naka::Event::Quit
|
next Naka::Event::Quit
|
||||||
when Naka::Event::Update
|
when Naka::Event::Update
|
||||||
|
p "FPS: #{(1000f64 / event.dt)}"
|
||||||
when Naka::Event::Draw
|
when Naka::Event::Draw
|
||||||
zoom_level = 4.0
|
zoom_level = 4.0
|
||||||
|
|
||||||
128.times do |x|
|
64.times do |x|
|
||||||
128.times do |y|
|
32.times do |y|
|
||||||
tile = map.get x, y
|
tile = map.get x, y
|
||||||
|
|
||||||
# FIXME:
|
# FIXME:
|
||||||
# - Please don’t draw more than one layer of ground…
|
# - Please don’t draw more than one layer of ground…
|
||||||
# - Transitions. (eg. between dirt and grass)
|
# - Transitions. (eg. between dirt and grass)
|
||||||
tile.each_with_index do |object, z|
|
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_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
|
drawer = object.reference.drawer
|
||||||
|
|
||||||
if drawer.nil?
|
next if drawer.nil? # FIXME: Maybe print a warning.
|
||||||
window.draw(
|
|
||||||
image,
|
|
||||||
x: draw_x,
|
|
||||||
y: draw_y,
|
|
||||||
scale_x: zoom_level,
|
|
||||||
scale_y: zoom_level
|
|
||||||
)
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
drawer.call map, x, y, z, tile, object, draw_x, draw_y, zoom_level
|
drawer.call map, x, y, z, tile, object, draw_x, draw_y, zoom_level
|
||||||
end
|
end
|
||||||
|
|