@kotlin_lang

Страница 558 из 982
Andrew
22.02.2018
14:52:50
и сам этот character у вас не реализует миллион интерфейсов

и на ходу может, вообще говоря, набор компонентов менять

то есть ECS -- это вообще говоря о замене наследования композицией ?

Dibro
22.02.2018
14:53:56
здесь хорошо написано https://github.com/junkdog/artemis-odb/wiki/Introduction-to-Entity-Systems

Google
Andrew
22.02.2018
14:54:32
В точку.

Виталий
22.02.2018
14:54:41
В точку.
спасибо)

Andrew
22.02.2018
14:55:18
Вы вообще говоря до LibGDX не смотрели на юнити, анриал или чё-нить в этом роде? Если нет, советую взять юнити и поиграться с ним. Оно именно на этой идее и построено. А после того, как накидаешь это дело в графическом редакторе, становится плюс-минус понятно, как то же самое стоит делать в коде.

(ну и да, это всё совсем не о котлине, потому мы тут слегка оффтопим ? )

Andrew
22.02.2018
14:57:22
Вот лучше наоборот начать с движков, где многое уже в готовом виде есть, сделать что-нибудь простенькое, даже необязательно готовое для показа кому-нибудь, а потом идти уровнем ниже и использовать фреймворк. Хотя каждому свой путь, конечно))

Виталий
22.02.2018
19:27:39
а в логике вы делаете чёт вроде character.get<Health>().hp -= 10
чет не растет у меня так :( компонент интерфейс в та же Health под ним, никак не выковырять hp fun <T : Health> get(): Health = (components["Health"] as Health) val hp = character.get<Health>().hp как то так пытаюсь, в итоге: null cannot be cast to non-null type ru.serdjuk.game.nonamelogicgame.kotlin.tiles.tileFunctions.Health

Виталий
22.02.2018
19:32:06
потому что в map может не быть твоих компонентов и вернётся null, отсюда и ошибка компиляции
ошибка при выполнении, а в мапу загоняю: character.addComponent(Pos(0f, 0f)) character.addComponent(Health(100)) fun addComponent(c: Component) = components.put(c.toString(), c)

Виталий
22.02.2018
19:33:50
а toString() ты переопределил?
на что ? мапа принимает стринг: class GameObject(val components: MutableMap<String, Component> = mutableMapOf()) : Sprite()

Google
Виталий
22.02.2018
19:34:11
а понял ))

а toString() ты переопределил?
так работает )) fun addComponent(c: Component) = components.put(c.javaClass.simpleName, c)

ну что то по моему муторно получается, для каждого значения держать сетеры/геттеры с <T>

от этого в каждом объектк все, а нужно будет только несколько парамметров

Виталий
22.02.2018
19:40:06
ты так упорно не хочешь юзать ECS?
я не понимаю, жду человека - пилит видосы по эшли, вроде как все разжувать попытается

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

чет намутил опять





и хз толи норм толи костыль

и смогу ли я легко работать с такими объектами если их будет пару сотен .... и компонентов штук 50

уже косяк нашел ) fun getPositionX(): Float = (components["Pos"] as Pos).x fun getPositionY(): Float = (components["Pos"] as Pos).y

оно не работает, спать пшел

Igor
22.02.2018
21:33:03
for (i in ArrayList<T>()) { по моему вообще не имеет смысла

Quantum Harmonizer
22.02.2018
21:38:34
Andrew
22.02.2018
22:07:59
чет намутил опять
Не, друг, я тебе предлагал разве что в компонентах логику держать вместо систем, но никак не в энтити (геймобджекте). энтити -- это тупое хранилище компонентов.

Впрочем, я многое на скринах понимаю с трудом. Совет чекнуть юнити остаётся в силе.

Vitalii
23.02.2018
09:44:28
ты так упорно не хочешь юзать ECS?
С этим ECS надо сначала научиться работать.

Google
Radmirka74
23.02.2018
11:25:06
Что за IDE?

Виталий
23.02.2018
11:25:48
Виталий
23.02.2018
11:26:46
идея это

Radmirka74
23.02.2018
11:29:32
Спасибо

Александр
23.02.2018
13:19:49
Приветы. Понимаю, что этот вопрос покажется вам совсем простым, учитывая, какие темы вы иногда тут поднимаете, но все же: Есть список строк, допустим val list = listOf("1","2","3") на выходе надо чтобы из этого списка получалась строка с "о" после каждого элемента, кроме последнего, то есть примерно так - "1о2о3" Пока что додумался только до list.joinToString("") { "${it}o" } , но последний элемент остается с о, не могу придумать, как лаконично и правильно выпилить его оттуда, может подскажет кто? Заранее спасибо

Alex
23.02.2018
13:21:37
Функцию map примени, где ты конкатенируешь 'o' к каждому элементу.

Alex
23.02.2018
13:22:44
А последний элемент удалить в стиле ФП - разверни список, дропни голову, и разверни хвост опять)

Alexandr
24.02.2018
11:52:25
Ребят подскажите пожалуйста как написать функцию, которая будет возвращать значения того типа, который был указан при вызове функции (и вобще можно ли так сделать). я понимаю что можно указать тип Any а потом делать as но мне кажется что это не очень краисво (правильно)

Alexandr
24.02.2018
11:54:44
Igor
24.02.2018
11:55:27
Если хочешь проверять тип в runtime, то делай ее inline, а тип reified (см офф. доки)

Konstantine
24.02.2018
12:03:22
Если хочешь проверять тип в runtime, то делай ее inline, а тип reified (см офф. доки)
С помощью reified, кстати, хотел сделать сексапильный менеджер UseCase'ов себе, но чот не срослось.

Konstantine
24.02.2018
12:09:34
Почему не срослось? И как бы это выглядело бы?
Мне надо было хранить в мапе по ключам юзкейсы и так же получать их по ключам, с помощью reified хотел сделать получение сразу нужного типа, без каста со стороны получателя. Но передаваемый тип не удалось никаким образом использовать как ключ (или просто я не нашел способ), плюс ко всему т.к. это inline функция, у нее нет доступа к приватным полям класса, шо как бы сводит на нет смысл в приватной мапе и отдельных функциях.

Google
Quantum Harmonizer
24.02.2018
12:19:50
Только вот в func<List<A>>() и func<List<B>>() будет один и тот же List

Konstantine
24.02.2018
12:29:52
T::class.java — использовать тип как ключ, @PublishedApi internal — почти приватное
Хм, казалось, что пробовал нечто такое, надо будет попробовать еще раз. Спасибо.

Только вот в func<List<A>>() и func<List<B>>() будет один и тот же List
Оно ясно, лист ведь передается. В моем случае передаются разные наследники BaseUseCase

Quantum Harmonizer
24.02.2018
12:31:46
Mikhail
24.02.2018
13:00:01
С помощью реифайдов да, всякие параметризованные factory method ы отлично инферрятся

Konstantine
24.02.2018
13:01:39
А зачем такой менеджер может пригодиться?
Мы сейчас рассматривали разные варианты клина под андроид. В одном из них было много юзкейсов по классам. Если в каком-то презентере используется больше чем два, то его его код превращался в Ctrl-c crtl-d, еще и надо нигде не забыть вызвать destroy и пр. А так бы всё было в одной месте - в менеджере.

Mikhail
24.02.2018
13:05:18
Хм, какой-то (каламбур) захламленный клин (/каламбур)

Konstantine
24.02.2018
13:08:13
юзкейсы нужно дестроить?
Там - да. Они на рх, там обсервабл висит.

Quantum Harmonizer
24.02.2018
13:08:40
По-моему дайтеМне<Компонент>() ничем не лучше, чем гугловский вьюмодел или синглтон.

Mikhail
24.02.2018
13:15:42
Там - да. Они на рх, там обсервабл висит.
Ну так они отдают обьект подписки, который надо дестроить. У нас для этого в бейспрезентере определена экстеншн функция под рх, которая кладет этот обьект подписки в контейнер, очищающийся при отписке вью

Igor
24.02.2018
13:18:06
А чем он тут помог бы?
Ну не знаю, резолвил бы “юзкейсы” неявно

Konstantine
24.02.2018
13:18:42
Ну не знаю, резолвил бы “юзкейсы” неявно
Не ведь инициализацией занимается, а не дестроем

Igor
24.02.2018
13:19:39
НУ ок, а какой у них кстати тип? Есть какой-то базовый интерфейс?

Konstantine
24.02.2018
13:22:30
НУ ок, а какой у них кстати тип? Есть какой-то базовый интерфейс?
Исходят от BaseUseCase<T>. T - тип возвращаемый в onNext.

Igor
24.02.2018
13:22:33
А это норма, что если на что-то повесить аннотацию @Deprecated (подозреваю что любую), то IDEA перестает подсвечивать его как “не используемый”?

Google
Konstantine
24.02.2018
13:22:55
Но к слову - мне в любом случае этот тип клина не нравился, уже выбираем другой

Igor
24.02.2018
13:25:17
Фигово, это мешает рефакторить, надо наверное таску попробовать завести в youtrack

Vladimir
24.02.2018
13:42:54
Фигово, это мешает рефакторить, надо наверное таску попробовать завести в youtrack
По-моему, есть отдельная инспекция вроде "этот deprecated ещё где-то используется". Т.е. с точки зрения IDE это нормальная ситуация, когда использований нет. И так явно задумано. Может, настраивается.

Mikhail
24.02.2018
13:44:33
Usman
24.02.2018
17:31:33
Добрый день, если я создают object, в котором есть поле контекста и однажды проставляю ему значение в каком-то месте программы

А не, все, извиняюсь

Radmirka74
24.02.2018
18:20:45
Что можно для создания простеньких GUI юзать?

Страница 558 из 982