Skip to content

Commit

Permalink
Notes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Relintai committed Mar 2, 2024
1 parent b595300 commit c27d8cb
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions modules/layered_tile_map/layered_tile_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,46 @@ void LayeredTileMap::draw_tile(RID p_canvas_item, const Vector2 &p_position, con
Rect2i source_rect = atlas_source->get_runtime_tile_texture_region(p_atlas_coords, 0);
tex->draw_rect_region(p_canvas_item, dest_rect, source_rect, modulate, transpose, Ref<Texture>(), p_tile_set->is_uv_clipping());
} else {
// RenderingServer::get_singleton()->canvas_item_add_animation_slice is implemented here in godot4:
// https://github.com/godotengine/godot/commit/94d31ac327a8fe6ff7c007b34cb25772bf96d17e

// RenderingServer::get_singleton()->canvas_item_add_animation_slice in godot4 is actually pretty clever
// But this implementation will be relatively easy to break due to the canvas batcher
// It would likely work with the code below, but it would be available to scripting too.

// Possible solution #1

// So I think it would make a lot more sense to do it in a different way, after the module is working.

// The api could look like:
// RenderingServer::get_singleton()->canvas_item_add_animated_sprite(RID ci, const Array &p_animation_data);
// p_animation_data:
// [i + 0]: duration
// [i + 1]: dest_rect
// [i + 2]: source_rect
// [i + 3]: modulate
// [i + 4]: transpose
// [i + 5]: normal
// [i + 6]: is_uv_clipping
// [i + 7]: Ref<Texture>

// This could create a new Command. It's internal data could be updated automatically when processing batches.
// This would make the api impossible to break in different cases.
// Also it would be simple to use for other things.

// Possible solution #2

// Handle animated tile updates here
// solution #1 is likely easier

// Possible solution #3

// Add more canvas items and show/hide them as necessary
// solution #1 is likely easier

ERR_PRINT("TODO Reimplement tile animations!");

/*
real_t speed = atlas_source->get_tile_animation_speed(p_atlas_coords);
real_t animation_duration = atlas_source->get_tile_animation_total_duration(p_atlas_coords) / speed;
real_t animation_offset = p_normalized_animation_offset * animation_duration;
Expand All @@ -199,6 +239,7 @@ void LayeredTileMap::draw_tile(RID p_canvas_item, const Vector2 &p_position, con
time_unscaled += frame_duration_unscaled;
}
RenderingServer::get_singleton()->canvas_item_add_animation_slice(p_canvas_item, 1.0, 0.0, 1.0, 0.0);
*/
}
}
}
Expand Down

0 comments on commit c27d8cb

Please sign in to comment.