bevyengine / bevyengine/bevy

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

Open
#16,593 3 comments 1 reaction 0 assignees View on GitHub
A-ECS C-Usability D-Straightforward S-Ready-For-Implementation X-Uncontroversial
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 22h
Merged PRs (30d)
161

Description

## 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:

```rust
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:

```rust
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:

```rust
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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.