Схема Doctrine 2 для Game Saves - PullRequest
       14

Схема Doctrine 2 для Game Saves

1 голос
/ 12 октября 2011

Я ищу разумный объектный дизайн отношений для хранения вариаций данных по умолчанию для данного игрока в однопользовательской игре (сохраняю данные, хранящиеся для всех игроков онлайн).

Я работаю надвеб-игра, в которой есть дерево «узлов», представляющих комнаты и объекты внутри них.

Игроки могут перемещать эти объекты, поэтому мне нужно сохранить состояние узла, специфичное для этого игрока.

Обычная игровая операция - получение дочерних узлов.(например: все объекты в комнате).

В прошлом я использовал две таблицы и COALESCE

узел: id, parent_id, ... node_specificdata ... (настройки по умолчанию и родительский элемент)

node_state: id, player_id, node_id, parent_id (родительское переопределение)

SELECT * FROM node LEFT JOIN node_state ON (node_state.player_id = $player_id
AND node.id = node_state.node_id)
WHERE COALESCE(node_state.parent_id, node.parent_id) = {$node_id}
OR COALESCE(node_state.parent_id, node.parent_id) = 0

Это сохраняет разницу междудерево по умолчанию и игрок и извлекает его для этого игрока с Coalesce.

Используя Doctrine2, я могу сделать это с помощью метода репозитория, Native SQL и сопоставления результирующих наборов, но, конечно, есть лучший способ?

Как другие люди справляются с сохранением игровых состояний для нескольких игроков?Будет ли больше смысла клонировать целое дерево для каждого игрока?(безусловно, облегчит работу с Doctrine 2)

...