Godot Version
v4.2.1.stable.official [b09f793f5]
Question
I am trying to create an AnimatedTexture
tile in my TileMap
. My render frame function does palette cycling to render new animated Images
, here’s my function:
func render_animated_frame(
frame_index: int,
animation_count: int,
palette_index: int=0) -> AnimatedTexture:
var animated_frame_texture := AnimatedTexture.new()
animated_frame_texture.frames = animation_count
for i in range(animation_count):
animated_frame_texture.set_frame_texture(
i, ImageTexture.create_from_image(
render_frame(
frame_index,
palette_index,
-i,
)))
animated_frame_texture.set_frame_duration(i, 0.5)
return animated_frame_texture
Here is how I build my TileSetSources (all TileSetAtlasSources):
for i in range(len(tiles)):
var tile_index := tiles[i].ab_index
var palette_index = tile_renderer.tbl.palette_indices[tile_index]
var image_key := String.num(tile_index) + "-" + String.num(palette_index)
if image_key not in tile_renderer.images:
var frame := tile_renderer.get_frame(tile_index)
var palette := tile_renderer.pal.get_palette(palette_index)
var tile_texture: Texture2D = null
if palette.is_animated and \
Resources.arrays_intersect(
palette.animation_indices,
frame.raw_pixel_data_array):
tile_texture = tile_renderer.render_animated_frame(
tile_index,
len(palette.animation_indices) / len(palette.animation_ranges),
palette_index)
else:
tile_texture = ImageTexture.create_from_image(
tile_renderer.render_frame(
tile_index,
palette_index))
var tile_set_source := TileSetAtlasSource.new()
tile_set_source.texture = tile_texture
tile_set_source.texture_region_size = Resources.tile_size_vector
tile_set_source.create_tile(Vector2i(0, 0))
tile_set.add_source(tile_set_source, tile_index)
To debug, I looped over my AnimatedTexture
’s frames
and saved each frame as a PNG… Manually making a GIF, this is what my animated water tile should look like (it’s subtle, sorry):
The animated tiles render along side non-animated tiles, but it’s like they’re not “playing” or stuck on frame 0? I’m stumped on what else to try, the AnimatedTexture
has the frames in resource itself, but it seems like the TileMap doesn’t want to animate the tile.
Any suggestions to try? Thanks for the help in advance!
-DizzyThermal