четверг, 1 сентября 2016 г.

Реинкарнации.Новое слово в бортовых номерах.

Постараюсь набрать этлт пост без ошибок - пытаюсь освоить десятипальцевый метод набора текста. Получается со скоростью пока нешибко, нонадо когда-то начинать.
Пока идет работа по возврашению моделей из первой вермии встрой. В первую очередь это касается кабин. Ничего особо нового нет, кроме скрипта работы приборов, да текстуры там теперь работают в формате dds. Введен строй МиГ-23МЛД, готовится МиГ-27К...
Давно назревал вопрос с бортовыми номерами. Так уж получилось, что у меня действоало жесткое ограничеие по количеству номеров - 16 штук и не более. Номера представляли собой плейны с цифрами, меши которвх подменяли постоянный обьект CntAircraft. Но я помнил о возможностях UV-скроллинга и мне хотелось эти возможности использовать. В конце концов решение было найдено. Сам бортовой номер в моем случае - строковое проперти, состояшее из цифровых симвлов. UV-скроллинг предусматривает сдвиг развертки вправо-влево (по оси Х), и вверх-вниз(по оси Y). Отыскав в своих закромах заготовки бортовых номеров, приступил к созданию так называеемых стилей - текстур цифр от 0 до 9, обьединенных в строчки. В принципе можно было использовать всего одну и применять цвет объекта к материалу. И получить люьой цвет цифр. Однако существуют варианты номеров с кантом (обводкой по контуру) и их довльно много - и тут цвет объекта неприменим. Поэтому в итог у меня получились три стиля бортовых номеров в 6 вариантах - белый(без канта), контурный белый кант, прозрачный внутри и 4 варианта с обводкой - красный, желтый, синий и черный. Полученные варианты по моим прикидкам, перкрывают пока весь нужный мне диапазон - что натовский, что сербский, что наш, что ливийский стандврты.
Далее пошла реформа генерации бортового номера - теперь бортовой номер в комплекте к модели идет один, но состоит он  из объектов, число которых равно длине номера, к примеру, "541" - три объекта - numObj0-1-2, последний символ в имени - номер симола в последователности цифр. В данном случае - 5 - 0 , 4-1 и 1-2.  А далее следует алгоритм сдвига развертки. У нас 10 цифр, значит одно "деление" сдвига - 0.1, а цифра, извлекаемая из последовательности номера, указывает, насколько надо сдвинуть развертку. Привожу кусок кода. Надеюсь, мысль понятна.
   
 #ЭТОТ БЛОК ФОРМИРУЕТ НОМЕР ЮНИТА, ВЫБИРАЯ ЧИСЛА В ПРОМЕЖУТКЕ, УКАЗАННОМ В ФАЙЛЕ JSON
            #Ограничения слева и справа по номеру
            limitLeft = dataJSON["listBortNumber"][0]
            limitRight = dataJSON["listBortNumber"][1]
            
            numberUnit = random.randrange(limitLeft,limitRight)
            if numberUnit not in bge.logic.globalDict["importMesh"]:
                if numberUnit not in bge.logic.globalDict["importMesh"]:
                  
 if numberUnit < 10:
#для номеров типа 01,02.03 и так далее
                        unitNew['unitNum'] = '0' + str(numberUnit)
                    else:
                        unitNew['unitNum'] = str(numberUnit)
                    bge.logic.globalDict["importMesh"].append(numberUnit)
           
            #Далее идет выдача бортовых номеров
            for numObj in unitNew.childrenRecursive:
                #В названии составляющих бортового номера присутствует numObj
                if 'numObj' in numObj.name:
                    #Далее выбирается конкретная цифра в номере
                    number = int(numObj.name[-1])
                    sdvigUVplane = int(unitNew['unitNum'][number])  
                    mesh = numObj.meshes[0] 
                    array = mesh.getVertexArrayLength(0)
                    for k in range(0,array):
                        vertex = mesh.getVertex(0,k)
                        UV = vertex.getUV()
                        #Сдвиг УВ-сколиинга вправо на нужное деление
                        UV[0] = UV[0] - sdvigUVplane/10
                        vertex.setUV(UV)

плейн номера знает, какая цифра в номере ему нужна, извлекает ее, преобразует в число и сдвигает свою развертку на нужное деление. Максимальная длина бортового номера - 5 символов (ирак и Югославия), обычно 2-3 (мы и натовцы), реже - 4 - (Сирия, ЧССР, Ливия). Номера теперь в json юнитов задаются ограничениями слева и справа, типа 'listBortNumber':[0, 100].
Кстати о джейсонах. Файлы эти размножились и прочно обосновались как в файлах юнитов, так и в файлах оружия и стало их много. они выполняют стартовую работу - раздают проперти, парентят объекты, располоагают их и разворачивают, как надлежит. Для всех МиГ-23 работа над файлами джейсонов закончена, кроме МиГ-27, но и для них осталось лишь определить положение ракет Р-60, может быть по мере добавления новых видов оружия будут создаваться дополнительные json, но это дело еще впереди.
Пока что результат с бортовыми номерами и json установки оружия...
 МиГ-23МЛД, бортовой номер "31 красный" При первом пробном запуске был "24 крачный".
 Ливийский МиГ-23МФ, бортовой номер трудно разглядеть - запускал несколько раз, номер менялся типа 4782 или 4753 черный.
А это - эксперимент с json МиГ-23БН ВВС Ливии - кроме трех ПТБ - по паре РБК-500 и РБК-250, плюс пара ОФАБ-250 на хвостовых балках.

Комментариев нет:

Отправить комментарий