mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Added support for an extended autotile format containing full-tile concave corners
This commit is contained in:
@@ -16,9 +16,11 @@ class TilemapRenderer
|
|||||||
[37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1, 2, 7, 8] ]
|
[37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1, 2, 7, 8] ]
|
||||||
]
|
]
|
||||||
|
|
||||||
# TODO: Doesn't allow for cache sizes smaller than 768.
|
# This doesn't allow for cache sizes smaller than 768, but if that applies
|
||||||
|
# to you, you've got bigger problems.
|
||||||
def self.expand(bitmap)
|
def self.expand(bitmap)
|
||||||
return bitmap if bitmap.height == SOURCE_TILE_HEIGHT
|
return bitmap if bitmap.height == SOURCE_TILE_HEIGHT
|
||||||
|
expanded_format = (bitmap.height == SOURCE_TILE_HEIGHT * 6)
|
||||||
wrap = false
|
wrap = false
|
||||||
if MAX_TEXTURE_SIZE < TILES_PER_AUTOTILE * SOURCE_TILE_HEIGHT
|
if MAX_TEXTURE_SIZE < TILES_PER_AUTOTILE * SOURCE_TILE_HEIGHT
|
||||||
wrap = true # Each autotile will occupy two columns instead of one
|
wrap = true # Each autotile will occupy two columns instead of one
|
||||||
@@ -32,6 +34,33 @@ class TilemapRenderer
|
|||||||
wrap_offset_x = (wrap && id >= TILES_PER_AUTOTILE / 2) ? SOURCE_TILE_WIDTH : 0
|
wrap_offset_x = (wrap && id >= TILES_PER_AUTOTILE / 2) ? SOURCE_TILE_WIDTH : 0
|
||||||
wrap_offset_y = (wrap && id >= TILES_PER_AUTOTILE / 2) ? (TILES_PER_AUTOTILE / 2) * SOURCE_TILE_HEIGHT : 0
|
wrap_offset_y = (wrap && id >= TILES_PER_AUTOTILE / 2) ? (TILES_PER_AUTOTILE / 2) * SOURCE_TILE_HEIGHT : 0
|
||||||
frames_count.times do |frame|
|
frames_count.times do |frame|
|
||||||
|
if expanded_format && [1, 2, 4, 8].include?(id)
|
||||||
|
dest_x = frame * SOURCE_TILE_WIDTH * (wrap ? 2 : 1)
|
||||||
|
dest_x += wrap_offset_x
|
||||||
|
next if dest_x > MAX_TEXTURE_SIZE
|
||||||
|
dest_y = id * SOURCE_TILE_HEIGHT
|
||||||
|
dest_y -= wrap_offset_y
|
||||||
|
next if dest_y > MAX_TEXTURE_SIZE
|
||||||
|
case id
|
||||||
|
when 1 # Top left corner
|
||||||
|
new_bitmap.blt(dest_x, dest_y, bitmap,
|
||||||
|
Rect.new(frame * SOURCE_TILE_WIDTH * 3, SOURCE_TILE_HEIGHT * 4,
|
||||||
|
SOURCE_TILE_WIDTH, SOURCE_TILE_HEIGHT))
|
||||||
|
when 2 # Top right corner
|
||||||
|
new_bitmap.blt(dest_x, dest_y, bitmap,
|
||||||
|
Rect.new(SOURCE_TILE_WIDTH + frame * SOURCE_TILE_WIDTH * 3, SOURCE_TILE_HEIGHT * 4,
|
||||||
|
SOURCE_TILE_WIDTH, SOURCE_TILE_HEIGHT))
|
||||||
|
when 4 # Bottom right corner
|
||||||
|
new_bitmap.blt(dest_x, dest_y, bitmap,
|
||||||
|
Rect.new(SOURCE_TILE_WIDTH + frame * SOURCE_TILE_WIDTH * 3, SOURCE_TILE_HEIGHT * 5,
|
||||||
|
SOURCE_TILE_WIDTH, SOURCE_TILE_HEIGHT))
|
||||||
|
when 8 # Bottom left corner
|
||||||
|
new_bitmap.blt(dest_x, dest_y, bitmap,
|
||||||
|
Rect.new(frame * SOURCE_TILE_WIDTH * 3, SOURCE_TILE_HEIGHT * 5,
|
||||||
|
SOURCE_TILE_WIDTH, SOURCE_TILE_HEIGHT))
|
||||||
|
end
|
||||||
|
next
|
||||||
|
end
|
||||||
pattern.each_with_index do |src_chunk, i|
|
pattern.each_with_index do |src_chunk, i|
|
||||||
real_src_chunk = src_chunk - 1
|
real_src_chunk = src_chunk - 1
|
||||||
dest_x = (i % 2) * SOURCE_TILE_WIDTH / 2
|
dest_x = (i % 2) * SOURCE_TILE_WIDTH / 2
|
||||||
|
|||||||
Reference in New Issue
Block a user