
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

Виталий
22.02.2018
14:54:27

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

Виталий
22.02.2018
14:54:41

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

Виталий
22.02.2018
14:55:58
))))

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

Dibro
22.02.2018
19:30:47

Виталий
22.02.2018
19:32:06

Dibro
22.02.2018
19:32:53

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

Google

Виталий
22.02.2018
19:34:11
а понял ))
ну что то по моему муторно получается, для каждого значения держать сетеры/геттеры с <T>
от этого в каждом объектк все, а нужно будет только несколько парамметров

Dibro
22.02.2018
19:39:21

Виталий
22.02.2018
19:40:06
ты так упорно не хочешь юзать 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
чет намутил опять
Не, друг, я тебе предлагал разве что в компонентах логику держать вместо систем, но никак не в энтити (геймобджекте). энтити -- это тупое хранилище компонентов.
Впрочем, я многое на скринах понимаю с трудом. Совет чекнуть юнити остаётся в силе.

Виталий
22.02.2018
22:33:37

Vitalii
23.02.2018
09:44:28

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' к каждому элементу.

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

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

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

Александр
23.02.2018
13:23:34

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

Igor
24.02.2018
11:54:10

Alexandr
24.02.2018
11:54:44

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

Konstantine
24.02.2018
12:03:22

Igor
24.02.2018
12:07:39

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

Quantum Harmonizer
24.02.2018
12:19:10

Google

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

Konstantine
24.02.2018
12:29:52

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
Хм, какой-то (каламбур) захламленный клин (/каламбур)

Quantum Harmonizer
24.02.2018
13:07:39

Konstantine
24.02.2018
13:08:13

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

Igor
24.02.2018
13:11:59

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

Konstantine
24.02.2018
13:17:15

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

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

Mikhail
24.02.2018
13:44:33

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

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