У меня вопрос такой:
Как хранить глобальные контекстные данные, т.е. информация о мировых данных, текущее мировое время и т. д. в системе компонентов объекта?
Я думаю о работе над созданием игры-симулятора с открытым концом в стиле Dwarf Fortress на C ++. Я создал игровой движок в стиле компонентов сущностей просто для удовольствия, и в настоящее время я пытаюсь понять, как я собираюсь работать со всеми функциями, которые я хочу. В дополнение к стандартному игровому процессу (рендеринг, физика, данные о компонентах и т. Д.) Мне также хотелось бы иметь некоторые глобальные контекстные данные, к которым будут иметь доступ все соответствующие системы (т. Е. Мировые данные, например, какой это год в настоящее время происходит ли глобальное потепление, любая вещь, которая будет иметь отношение к моделированию мира). Первоначально я думал о создании «мирового» компонента, но это кажется бессмысленным и трудным, если множество различных систем нуждаются в доступе к этим логически «глобальным» данным.
Имеет ли смысл иметь «мировой» компонент или я должен хранить эти данные другим способом?
Я также подумал о том, чтобы просто сделать эти данные глобальными, предоставив им доступ к любым системам, которые захотят их использовать; это кажется нарушением принципов сущности-компонента в целом и может быть грязным по другим причинам, но я подумал, что это может действительно сработать.
Еще одна вещь, о которой я подумал, - это встроить соответствующие данные мирового контекста непосредственно в сами системы. Например, если бы у меня были AgeSystem
«состарившиеся» все сущности, у которых есть getsWeakerAsTimePasses
компонент или еще много чего, тогда, возможно, эта система могла бы хранить соответствующие данные времени для мира непосредственно в виде данных членов, которые она использовала бы для расчета времени и сколько возраст и ослабление людей и т. д. Этот третий вариант был моим наименее любимым, но кое-что, что произошло со мной в мозговом штурме.
Кто-нибудь может посоветовать?