Войти
ПрограммированиеФорумОбщее

rg3d - движок на Rust'e (9 стр)

Страницы: 15 6 7 8 9 10 Следующая »
#120
14:06, 29 янв. 2020

lookid
Можно использовать что угодно, однако из-за отсутствия наследования обычные подходы к созданию лапшеобразоной архитектуры не работают.


#121
19:52, 29 янв. 2020

mr.DIMAS
composition over inheritance?

#122
22:02, 29 янв. 2020

lookid
> composition over inheritance?
Да.

К тому же из-за жесткого контроля над временем жизни объектов не получится сделать callback hell. Соответственно лапшу из событий (как в C#) например нагородить не получится, однако это решается через сообщения - все системы (и объекты) общаются через сообщения без прямого доступа друг к другу. Это оказалось довольно удобным для создания гуи.

#123
9:06, 31 янв. 2020

mr.DIMAS
> однако это решается через сообщения - все системы (и объекты) общаются через
> сообщения без прямого доступа друг к другу.
О чем идёт речь? Только начал ковырять rust, и беглый поиск не дал ответов.

#124
9:53, 31 янв. 2020

DoomGod
> О чем идёт речь? Только начал ковырять rust, и беглый поиск не дал ответов.
Обычная очередь сообщений. Что-то типа:

enum Message {
  ValueChanged {
    sender: Index<Widget>,
    new_value: f32,
    old_value: f32
  },
  CheckedChanged {
    sender: Index<Widget>,
    new_value: bool
  }
}

...

// In the widget container
container.queue = VecDeque::new();

...

// Somewhere in widget logic
queue.push_back(Message::ValueChanged { sender: Default::default(), new_value: 123.0, old_value: 0.0 })

...
// In the message loop
while let Some(message) = container.queue.pop_front() {
  for widget in container.widgets.iter_mut() {
    widget.handle_message(&message);
  }
}

// impl Widget
fn handle_message(&mut self, message: &Message) {
  match(message) {
    // Do something
  }
}

В случае многопоточки вместо VecDeque следует использовать mpsc::channel()

#125
(Правка: 9:55) 9:55, 31 янв. 2020

Вот пример - fn handle_event(...) - https://github.com/mrDIMAS/rg3d-ui/blob/master/src/button.rs#L82

#126
14:18, 30 мар. 2020

Постепенно добавляю примеры для движка - https://github.com/mrDIMAS/rg3d/tree/master/examples

#127
23:30, 12 апр. 2020

Потихоньку пилю рендер
Изображение

#128
21:39, 17 мая 2020

Дошла очередь и до редактора, параллельно с ним улучшаю UI либу. Редактор еще на очень ранней стадии, но основные функции уже есть.
Редактор - https://github.com/mrDIMAS/rusty-editor
Изображение

#129
(Правка: 3:46) 0:33, 18 июля 2020

Чего там с движком? Что-то активность в репо в последнее время прям совсем маленькая.

А почему решил писать свою сериализацию для движка?(rg3d-core/src/visitor.rs) Чем-то Serde не устраивала или это наследие от С?

Меня тут один человек постоянно убеждал Rust попробовать, и с 3ей пробы я в нем задержался. Язык понравился, на плюсы обратно не хочу, пока. Не представляю уже как жить на плюсах без некоторых фишек раста. Хотя с borrow-checker'ом воевать пока приходится частенько)
А Cargo после плюсовых систем сборок вообще рай.
#130
16:31, 18 июля 2020

Vlad2001_MFS
> Чего там с движком? Что-то активность в репо в последнее время прям совсем
> маленькая.

На работе завал и сил нет после ничего делать, к тому же я был в отпуске двухнедельном, и там решил полностью отдохнуть от программирования. Вот сейчас потихоньку продолжаю делать движок и все что с ним связано.

Vlad2001_MFS
> Язык понравился, на плюсы обратно не хочу, пока. Не представляю уже как жить на
> плюсах без некоторых фишек раста
Круто, молодец.

Vlad2001_MFS
> с borrow-checker'ом воевать пока приходится частенько)
У меня где-то на 3-й месяц стало легко с ним :)

#131
16:34, 18 июля 2020

Vlad2001_MFS
> А почему решил писать свою сериализацию для движка?(rg3d-core/src/visitor.rs)
> Чем-то Serde не устраивала или это наследие от С?
Serde не устроил тем, что в нем нет нормальной поддержки сериализации Rc/Arc. К тому же мне не нужна поддержка кучи форматов сериализации, да и процедурные макросы вроде

#[derive(Serialize, Deserialize)]
struct Foo {...}
ооочень сильно замедляют компиляцию, а так как у меня уже был опыт написания сериализаторов я решил что своего простого сериализатора будет достаточно.
#132
16:39, 18 июля 2020

mr.DIMAS
> У меня где-то на 3-й месяц стало легко с ним :)
Значит месяца полтора-два у меня еще впереди)

> Serde не устроил тем, что в нем нет нормальной поддержки сериализации Rc/Arc
> ооочень сильно замедляют компиляцию
Мда, я подозревал что не может быть все так радужно. Может конечно у меня таких трудностей и не будет, но возьму на заметку. Не очень хотелось бы писать свою сериализацию.

#133
(Правка: 16:55) 16:55, 18 июля 2020

Vlad2001_MFS
> Мда, я подозревал что не может быть все так радужно.
Я об этот косяк serde споткнулся когда стал делать ресурсы. Каждый узел графа должен знать из какого источника он был создан - для этого ресурс просто оборачивается в Arc<Mutex<Model>> и этот Arc сохраняется в узел сцены. Проблема с serde в том, что каждый раз при когда он видит Arc, он заново сериализует его содержимое, то есть он не следит был ли уже подобный объект сериализован. В общем либа отличная, но мне не подошла. И я кстати не одинок в этом, некоторые чуваки и канала rust_gamedev_ru в телеге тоже натыкались на недостатки из-за которых приходилось свое писать.

#134
17:04, 18 июля 2020

mr.DIMAS
Крайне полезная информация, спасибо. Если проблему обойти не удастся нормально, то буду тогда думать над своей сериализацией, да у тебя подсматривать.

Кстати, а почему был выбран сценграф, а не тот же ECS, ведь он по идее гораздо лучше ложится на идеологию раста?

Страницы: 15 6 7 8 9 10 Следующая »
ПрограммированиеФорумОбщее