Size: a a a

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

2020 February 26

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
SET001
так я могу пустой какой-то трейт добавить просто чтоб можно было по этому трейту вектор сформировтаь
Ты можешь, но как ты потом достанешь то что скрывается за пустым трейтом?
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
Vec<Box<dyn Foo>> я просто таким образом ограничу тип элементов для вектора
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
SET001
Vec<Box<dyn Foo>> я просто таким образом ограничу тип элементов для вектора
И как ты потом достанешь конкретный компонент, который лежит, например, в vec[0]?
источник

S

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

S

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

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
SET001
мне нужно просто в одном месте определить набор компонентов, в другом месте весь этот набор скоупом передать спексу чтоб он приаттачил их к энтити
А как ты передашь их спексу? Компоненты в спексе — конкретные структуры, лежащая каждая в своём векторе.
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
impl<'a> PrefabBuiler<'a>{ 
 pub fn new(world: &'a mut World)->PrefabBuiler<'a>{
   PrefabBuiler{
     world
   }
 }

 pub fn create(&mut self, prefab: Vec<Components>) -> Entity{
   let mut builder = self.world.create_entity();
   for component in prefab {
     builder = builder.with(component);
   }    
   builder.build()
 }
}
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Но builder.with хочет конкретный тип, а ты скормишь ему Box<dyn Foo>.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А магии не существует.
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
он не тип хочет а инстанс
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Да, конкретный инстанс конкретного типа.
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
так я ж в вектор этот ложу инстансы
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
pub fn PlayerPrefab () -> Vec<Components> {
 vec![
   Components::Position(Position{
     x: 0.0,
     y: 0.0
   })
 ]
}
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
вот как оно юзается
источник

S

SET001 in RU Rust GameDev — русскоговорящее сообщество
let mut builder = PrefabBuiler::new(&mut world);
   builder.create(PlayerPrefab());
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Ты ложишь ссылки на инстансы.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Боксы.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А тебе в билдер нужно передать конкретные инстансы, конкретного типа, не инстансы.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Спекс после того как ты ему скормил компонент должен его положить в вектор компонентов, который для каждого типа свой.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А если ты скормишь ему бокс, он не поймет магическим образом что ты скармливаешь ему компонент
источник