Я досить новачок в ідеях сутнісних систем, прочитавши купу матеріалів (найкорисніше, цей чудовий блог і ця відповідь ).
Хоча у мене виникають невеликі проблеми з розумінням того, як щось таке просте, як можливість маніпулювати положенням об'єкта за допомогою невизначеної кількості джерел.
Тобто я маю свою сутність, яка має позиційний компонент. Тоді в грі у мене є якась подія, яка сповіщає цю сутність перенести задану відстань за певний час.
Ці події можуть статися в будь-який час і матимуть різні значення для положення та часу. Як результат, вони складаються разом.
У традиційному OO-рішенні я мав би якийсь MoveByклас, який містить відстань / час та масив тих, що знаходяться в моєму ігровому об’єктному класі. Кожен кадр я повторюю через усі MoveBy, і застосовую його до позиції. Якщо a MoveByдосяг свого часу закінчення, вийміть його з масиву.
Що стосується системи сутності, я трохи плутаюсь, як я повинен повторювати таку поведінку.
Якщо б було лише одне з них за один раз, замість того, щоб можна було з'єднати їх разом, було б досить просто (я вважаю) і виглядати приблизно так:
PositionComponent що містять x, y
MoveByComponent що містять x, y, time
Entityякий має і a, PositionComponentі aMoveByComponent
MoveBySystemщо зовнішній вигляд для об'єкта з обома цими компонентами, і додає значення MoveByComponentдо PositionComponent. Коли значення timeдосягається, він видаляє компонент із цього об'єкта.
Я трохи розгублений у тому, як би я робив те саме, що й багато рухів.
Мої початкові думки полягають у тому, що я мав би:
PositionComponent, MoveByComponentте саме, що вище
MoveByCollectionComponentякий містить масив MoveByComponents
MoveByCollectionSystemщо шукає сутність з a PositionComponentі a MoveByCollectionComponent, ітерація через MoveByComponents всередині неї, застосовуючи / видаляючи за необхідності.
Я думаю, що це більш загальна проблема: мати багато однакових компонентів і бажати, щоб відповідна система діяла на кожну. Мої сутності містять свої компоненти всередині хеша типу компонента -> компонент, тому суворо мають лише 1 компонент певного типу на сутність.
Це правильний спосіб дивитися на це?
Чи має суб'єкт господарювання завжди мати лише один компонент даного типу?
move x by 10 in 2 secondsі move x by -10 in 2 secondsсутність стояла б ідеально нерухомо?
MoveByфункціональність - це просто швидкість? Це здається, що ви на правильному шляху. Для вашого другого питання існує безліч різних реалізацій систем / компонентів. Опис, описаний у моїй відповіді, яку ви зв'язали, мав би лише один компонент даного типу.