bevy icon indicating copy to clipboard operation
bevy copied to clipboard

Add a method to get a component `Ptr` to `ThinColumn`

Open Shatur opened this issue 1 year ago • 0 comments

What problem does this solve or what need does it fill?

After #12929 we can no longer get Ptr by component ID from the column.

Previously my code to get ticks a component looked like this:

let column = table.get_column(component_id).unwrap_unchecked();
let component = column.get_data_unchecked(entity.table_row());
let ticks = column.get_ticks_unchecked(entity.table_row());

After 0.15 it looks like this:

let component: Ptr<'w> = table
    .get_component(component_id, entity.table_row())
    .unwrap_unchecked();
let ticks = table
    .get_ticks_unchecked(component_id, entity.table_row())
    .unwrap_unchecked();

The problem is that new code makes a lookup for a row twice (for component and ticks).

I can get ticks like this:

let column = table.get_column(component_id).unwrap();
let added = column
    .get_added_ticks_slice(table.entity_count())
    .get_unchecked(entity.table_row().as_usize())
    .read();
let changed = column
    .get_changed_ticks_slice(table.entity_count())
    .get_unchecked(entity.table_row().as_usize())
    .read();
let ticks = ComponentTicks { added, changed };

But for component only get_data_slice is exposed which expects T, while I need Ptr.

What solution would you like?

Provide a getter to obtain Ptr.

What alternative(s) have you considered?

A helper method that returns both, component Ptr and ticks.

Shatur avatar Dec 02 '24 00:12 Shatur