User Tools

Site Tools


kg:doc_disdocext_space

Пространство, время (общий раздел)

Пространство

Размеры карты

Сейчас базовый размер карты выбран как 1024*1024. Физически карта больше, так как наша “хексовая” карта, что бы быть эффективной и простой искажена, подробнее об этом можно прочитать (и посмотреть картинки) тут: http://wiki.ioupg.com/kg:doc_discoc_universe

Физический размер, и допустимые индексы для карта таковы: 1536х1024. От этой прямоугольной области отрезано два угла (использовать их нельзя), то есть любой вертекс в этих углах физически существует, но размещение там игровых объектов недопустимо.

Ниже иллюстрация из спецификации карт:  Здесь видно, какие именно углы карты не используются.

Устройство карты

Вертекс

Точка карты, с которой сопоставлена определённая информация: тип местности, высота, модификаторы (снег, трава, выжжено). Положение любых объектов на карте задаётся в вертексах, нахождение этих объектов между вертексами недопустимо. Некоторые объекты могут передвигаться по карте с точностью выше чем вертекс, отображение этих объектов допустимо с попиксельной точностью, однако это лишь визуальный эффект. И такое “межвертексное” перемещение всегда происходит между соседними вертексами карты. То есть из каждого вертекса такой объект может двигаться лишь в шести направлениях.

  • вертекс это точка, то есть имеет позицию, но не имеет площади.
  • расстояния между соседними вертексами всегда равны
  • отображения объектов могут смещаться относительно вертекса, но логике игры мы всегда пренебрегаем этим и считаем, то позиция объекта всегда определяется вертексом.
  • топология вертексов является равномерной сеткой со связностью 6, расстояния между соседними вертексами тождественны.
  • номер вертекса в массиве называется индексом, это двумерная целочисленная величина.
  • координаты вертекса в мире строго зависят от индекса вертекса, преобразование имеет примерный вид:
    • x = x*n - y*m/2
    • y = y*m
  • из связности (6) в пространстве вертексов следует весьма нетривиальная метрика, где расстояние
    • d = max( |x|, |y|, |x-y| )
  • для вычисления позиции вертекса на экране необходимо знать не только индекс вертекса, но и высоту ландшафта в этом вертексе (она там и хранится)

Вертексная сетка

Набор линий, соединяющих соседние вертексы. Вертексная сетка карты имеет вид множества равносторонних (идеальных) треугольников. Направления линий в сетке могут быть горизонтальными, а вертикальными быть не могут - особенности хексовой метрики. Все подвижные объекты карты передвигаются исключительно по вертексной сетке, и последовательно проходят все узлы. Двигаться можно только между соседними вертексами.

Хекс

Шестиугольный фрагмент карты, имеющий центр в “центральном” вертексе, и опирающийся на 6 дополнительных вертексов, являющихся соседями к центральному. Фрагмент считается хексом, если удовлетворяет условиям:

  • центральный вертекс удовлетворяет условию (x+y)%3 == 2.
  • все дополнительные вертексы хекса попадают в рабочую область карты

Для карты с ребром D количество вертексов составляет чуть меньше чем D*D/3, тандартная карта с диаметром 1024 имеет около 300 тысяч хексов. Хексы являются не сущностью карты, а лишь наброшенной поверх неё сеткой, облегчающей ориентирование и формулировку некоторых правил, ограничивающих нахождение на карте различных объектов. Хексы не используются для задания местоположения объектов на карте, для этого лучше обратиться к вертексам. Свойства хексов таковы:

  • У каждого хекса есть 6 соседних (исключая края карты), с которыми он соприкасается гранями
  • направления между центрами соседних хексов не совпадают с вертексной сеткой. Потому некорректно рассматривать движение объектов как движение между хексами. Для этого у нас есть вертексы.
  • Каждый крайний вертекс хекса (исключая края карты) является крайним вертексом ещё для двух соседних хексов. Потому говорить о принадлежности какого-либо вертекса какому либо хексу некорректно.

Проходимость (вертекса)

Вертекс, в зависимости от своих данных, считается проходимым или непроходимым. Проходимость вертекса используется как для движения армий, так и для определения - можно строить (тут) домик, или нет. Точка считается проходимой, если:

  • отсутствует непроходимый декоратор
  • высота больше нуля

Ребро

Пара смежных вертексов соединяется ребром, это нужно для графа проходимости (оттуда и термин). Для каждого вертекса существует шесть соседей, и значит шесть рёбер, исключение - крайние вертексы карты, где соседи могут банально выходить за её границу. Непроходимость хотя бы одного вертекса делает ребро непроходимым, но даже если оба вертекса проходимые, ребро при этом может быть всё равно непроходимым, так как там имеются дополнительные условия. Вот полная формулировка проходимости ребра:

  • оба вертекса проходимы
  • разница высот не больше 3

Заблокированность (вертекса)

Проходимый вертекс может быть тем не менее непроходим, потому что на нём, например, находится вражеская армия. В отличие от простого определения проходимости, заблокированность вертекса зависит не только от ландшафта, но и от большого числа других факторов. Однако любой непроходимый вертекс автоматически считается заблокированным.

Глобальная достижимость (вертекса)

В карте должна существовать хотя бы одна крупная связная проходимая область. Могут встречаться и изолированные от этой основной области куски карты, например, ограниченные горами, и для некоторых задач использование этих областей ограничено. Если существует путь, по которому из вертекса (А) можно попасть в основную область, считаем (А) “глобально достижимой”

kg/doc_disdocext_space.txt · Last modified: 2012/04/04 12:10 (external edit)