Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 April 27

RA

Roman Akberov in RU Rust GameDev — русскоговорящее сообщество
Есть iter_unchecked для смелых :)
источник

RA

Roman Akberov in RU Rust GameDev — русскоговорящее сообщество
А так iter принимает &mut World.
источник

RA

Roman Akberov in RU Rust GameDev — русскоговорящее сообщество
Или есть iter_immutable, если оба цикла только читают.
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Нет, пишут. И unsafe хотелось бы держать под капотом
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Roman
Можно ли в легионе при итерации по одному компноненту делать что-то с другим компонентом?
Прям в их гитзабе написано, или это не то?
// Create a query which finds all `Position` and `Velocity` components
let query = <(Write<Position>, Read<Velocity>)>::query();
// Iterate through all entities that match the query in the world
for (mut pos, vel) in query.iter(&mut world) {
   pos.x += vel.dx;
   pos.y += vel.dy;
}
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Я же написал. Вложенный цикл. По одному компоненту и внутри другому.
Ну или внутри цикла по одному компоненту по entity-id получить ссылку на другой
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Тогда молчу - без понятия)
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Ну вообще выше ответили. Только с unsafe
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Roman
Ну вообще выше ответили. Только с unsafe
Вообще чисто теоретически это не совсем по ecs делать то, что вы хотите))
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
у вас есть ентитя и делайте с ней что хотите, нечего другие ентити трогать 😄
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Но такими темпами все entity буду как бы в отдельной вселенной жить, если им взаимодействовать нельзя
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Простой пример - entity хочет подамажить свою цель. Индекс цели у нее в компоненте
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Не складировать же мне все подамаженные цели в мапку, а потом по всем потенциальным целям итерируясь искать, не подамажили ли ее
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Блин забыл как такую вещь делать, но точно не через вложенный цикл
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Ну мне больше не цикл вложеный нужен, а по индексу получать
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Но суть та же. Нужно получить доступ к компоненту
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Roman
Ну мне больше не цикл вложеный нужен, а по индексу получать
Ну окей вложенный цикл, а чо вот так не сделать?
let damage_query = <(Read<Position>, Read<Damage>)>::query();
let health_query = <(Read<Position>, Write<Health>)>::query();
for (pos1, damage) in damage_query.iter(&mut world) {
   for (pos2, mut health) in health_query.iter(&mut world) {
       if (need_to_do_damage(pos1, pos2)) {
           health.value = health.value - damage.value;
       }
   }
}
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Потому что &mut world два раза?
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
Ой, ну это не обязательно
источник

A

Adv0cat in RU Rust GameDev — русскоговорящее сообщество
damage_query.iter(&mut world) можно и без mut
источник