(я новый код не зырил)
1. Советую сделать двухмерный массив, такой же как в редакторе карт, и его использовать для проверки есть ли препятствие на пути или нет, но коллизии оставить!
Т.е. при столкновении противника со стенкой ты его поворачиваешь, но не сразу, а сначала проверяешь есть ли препятствие там, куда планируешь повернуть. Для определения наличия препятствия используешь "суперинформативний" массив.
Тут "сложность" только в том, чтобы определить, в каком секторе карты находится противник, чтобы перевести его координаты в индексы массива.
поле имеет размер 29х29, каждый кубик имеет размер 10х10х10
Получаем игровое поле 290х290
Допустим, противник врезался в стенку, имея координаты (надо только х и z) (127,y,200)
Надо получить из этого индексы для массива, так получаем их!
posX# = 127
posZ# = 200
koefX = posX# * 0.1 - "делим" координату Х на ширину кубика. Этим мы получили целое цисло кубиков, которые находятся слева от противника
koefX - целое число! = 12 в нашем случае
Надо что-то сделать с оставшейся 7-кой
addX = posX# - koefX * 10
if (addX-5>2.5) koefX = koefX + 1
На практике не должно получиться этого "округления", потому что размер противника соизмерим с размером кубиков...
так же для координаты z
потом проверяем значение массива
value = mapInfoMas(koefX,koefZ) - это для сектора, где противник в ДАННЫЙ момент - не интересно
mapInfoMas(koefX-1,koefZ) - что находится слева от противника?
mapInfoMas(koefX+1,koefZ) - что находится справа от противника?
mapInfoMas(koefX,koefZ+1) - что находится спереди от противника?
mapInfoMas(koefX,koefZ-1) - что находится позади противника?
имеется ввиду сдвиг на 1 кубик в каждую сторону
2. Смотря что нужно: если призы должны появляться всегда в разных кубиках, то из игры их расставлять, если в одном и том же, то проще/нагляднее расставить в редакторе карт...
ПС: чем отличаются пункты а) и б), которые самые верхние?
|