nikolaj.kormushkin Posted January 21, 2020 Share Posted January 21, 2020 (edited) Добрый день, сотрудники компании Unigine. Разбираюсь в реализации функционала основного интерфейса проекта "oil_refinery_sample". Обнаружил в проекте 2 файла "oil_refinery.cpp": Первый расположен в ".\source\oil_refinery.cpp", содержит вызов основного метода "main" С++-проекта, в котором: Инициализируется движок; Объявляются ряд глобальных имён (ссылок на методы); Запускается метод engine->main(...) движка; Этот исходник добавлен в дерево проекта и вопросов не вызывает. Второй расположен в ".\data\oil_refinery\oil_refinery.cpp". В дерево проекта он не добавлен, но содержит объявление всех Widget-в использующихся в основном интерфейсе проекте, логику их инициализации и обработчики взаимодействия пользователя с этими Widget-ами. При этом, в методе "init()" инициализируется переменная "interface" типа "UserInterface" на основе файла ".\data\oil_refinery\oil_refinery.ui", но после этого нигде в этом исходнике не используется. Вопросы: Я не нашёл места где в проекте добавляется исходник №2, т.е. в какой момент этот код компилируется и исполняется? Правильно-ли я понимаю, что наличие кода №2 является каким-то внутренним строгим правилом реализации механизма интерфейсов на движке? Т.е. движок запустит и исполнит его код (код исходника №2) в момент своей инициализации или вызова метода engine->main() вызываемых в основном методе main-проекта вызываемого в исходнике №1? Структура кода в исходнике №2 содержит методы init(), update(), render(), flush(), shutdown(), что наводит на мысль о некоторой системности структуры этого исходника. Скажите - это какой-то общий подход? Как можно понять его назначение, момент выполнения написанного в нём кода, его, возможно необходимой структуры (набор методов), возможно он требует обязательного наличия одноимённых файлов других типов (таких как *.ui и т.д.) и находится с ними в связке на уровне движка? Но, тогда, где это задаётся или описывается? Относительно структуры я вижу, что при создании проекта типа UnigineScript, методика которого описана по этой ссылке в пунктах 5 и 6 создаются строго определённые файлы с похожей структурой, но с расширением *.usc соответственно, можно положить, что этот-же подход применим и для проектов другого типа. Но при создании C++-проекта подобные файлы (с расширением *.cpp) отсутствуют, что сбивает с толку. Вообщем я понимаю, что не знаю чего-то фундаментального связанного с движком, если есть место где это описано, покажите пожалуйста. Моя задача на данный момент сводится к добавлению на экране пары checkbox-ов с возможностью выбора режимов (обучение или тестирование). В зависимости от выбора планирую менять логику отображения и функционирования элементов на подобии как это реализовано в самом проекте oil_refinery_sample в интерактивном режиме. Что мне для этого понадобиться (файлы с логикой, ui-файл и т.д.)? Как мне это реализовать? Прошу описать, конечно в общих чертах, для лучшего понимания относительно того как это реализовано в проекте "oil_refinery_sample". Edited January 21, 2020 by nikolaj.kormushkin Link to comment
silent Posted January 22, 2020 Share Posted January 22, 2020 Николай, это код на UnigineScript. По сути, всё что там написано выполняется в AppWorldLogic (аналог в C++). Можно этот код удалить и перенести на C++ используя те же методы и подходы, но только с учетом особенностей C++ API и языка как такового. Так получилось потому что раньше у демки был простой UI и для более быстрых итераций был выбран UnigineScript. Это ни в коем случае не значит что так нужно делать в своих проектах. Чуть больше информации про порядок выполнения и про сам скрипт можно найти тут: https://developer.unigine.com/en/docs/2.10/code/fundamentals/execution_sequence/app_logic_system How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
nikolaj.kormushkin Posted January 23, 2020 Author Share Posted January 23, 2020 Спасибо. Но исходник "oil_refinery.cpp" имеет расширение ".cpp", если в нём код на UnigineScript, то, разве исходникам на UnigineScript не обязательно иметь расширение "*.usc"? Link to comment
morbid Posted January 23, 2020 Share Posted January 23, 2020 Николай, до 2.8 мы использовали расширение *.cpp, потом перешли на *.usc. Движок работает с UnigineScript вне зависимости от расширения файла. How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
Recommended Posts