Jump to content
FortRoss

Вопросы по созданию приборов на С++

Recommended Posts

Е-е-е-е-е! Заиграл родимый! =)
icebear, спасибо большое.
Пользовался вот этим руководством, может кому-нибудь пригодится, там и исходные коды с примером есть.
Завтра всё причешу под FSX, пока есть затруднения с проигрыванием лишь при изменении значения переменной. Ни как не могу "проиграть" функцию без участия внутреннего таймера FSX.

Всем ещё раз большое спасибо!

Share this post


Link to post
Share on other sites

Ни как не могу "проиграть" функцию без участия внутреннего таймера FSX.

Это как понять? И ещё, Вы пишите гаугу "по старинке" или с симконнектом? Просто с симконнектом руки у Вас сильно развязаны и возможностей море.

  • Upvote 1

Share this post


Link to post
Share on other sites

Это как понять?

В смысле делаю так:

 

 

void LogicType::update(void)
{
	FLOAT64 gen_mast = 0;
	execute_calculator_code ("(A:GENERAL ENG MASTER ALTERNATOR:1, Bool)", &gen_mast, NULL, NULL);

	if(gen_mast == gen_mast_st)
	{
		m_Sound->PlayNow();
		gen_mast_st = 0;
	}
}
Этот метод вызывается в секции PANEL_SERVICE_PRE_UPDATE основной функции прибора. К слову, изменения условия с рано на неравенство, проигрывание звука лишь инвертируется, т.е. заук играет либо когда генератор в положении 1, либо когда в положении 0. Не тогда когда он переходит с состояния 1 в состояние 0 - чего, собственно, я и пытаюсь добиться.

 

И ещё, Вы пишите гаугу "по старинке" или с симконнектом?

Всё организовано с помощью gauges.h, так как, на сколько я понял, SimConnect'а может быть целых три версии - отсюда могут возникнуть проблемы с совместимостью. И основное, мне в руке пока не попадались хоть какие-нибудь примеры динамических библиотек использующих исключительно SimConnect. Модули - да, но это не то.

 

Спасибо =)

 

UPD

 

 

void LogicType::update(void)	// Make All Method 
{
	FLOAT64 gen_mast = 0;
	execute_calculator_code ("(A:GENERAL ENG MASTER ALTERNATOR:1, Bool)", &gen_mast, NULL, NULL);

	if(gen_mast == gen_mast_st)
	{
		m_Sound->PlayNow();
		gen_mast_st = gen_mast;
	}
}

 

Такой вариант так же не приводит к желаемому результату.

Edited by Flanker_AleX

Share this post


Link to post
Share on other sites

"Не, ну в таких условиях я не могу работать" :)

 

Условие проигрывания отличается от того, что было пару сообщение назад. Вам нужна не простоя смена состояния, а конкретное, т.е. с одного конретного значение на другое. Попробуйте так:

 

if((gen_mast != gen_mast_st) && (gen_mast == 0)){

m_Sound->PlayNow();

}

 

gen_mast_st = gen_mast;

 

Обратите внимание, присвоение идёт в каждой итерации цикла гауги, теперь оно вне скобок, это важный момент.

  • Upvote 1

Share this post


Link to post
Share on other sites

Люди добрые, подскажите кто сможите.

Остались ли тут грамотные специалисты по созданию приборов на с++? Есть некий проект. Но очень не хватает программеров. Если есть желание помочь, пишите в лс.

Share this post


Link to post
Share on other sites

Как лучше организовать обмен данными между С++ гагами в FSX?

Короче, указатели на структуры треба передавать в другую гагу.

Имхуется мне, разные гаги имеют разные адресные пространства и даже если напрямую передам указатель, н-р через XML-переменную, смысла не имеет.

Share this post


Link to post
Share on other sites
Это очень хорошо. Просто у Гриффитса написано в разделе "Runnig Visual C++ as a Gauge Debugger":

 

This section has been deprecated as both FS9 and FSX will refuse to start if you attach a debugger to them. Microsoft giveth and Microsoft taketh away; they‟ve considerably improved the SDK for FS9 and FSX but have made it far more difficult to debug the gauges you create.

Что за Гриффитс? Не гуглится.

Где это скачать можно?

 

icebear

Share this post


Link to post
Share on other sites

Вопрос по топливной системе: как добраться до баков EXTERNAL1 и EXTERNAL2 (FS9)?

Суть вопроса: для начала хочу просто считать количество топлива в баке (в Aircraft.cfg баки, естественно, заданы). Для всех остальных типов баков в GAUGES.H определены соответствующие токены, а для внешних - ничего не вижу. Токены FUEL_QUANTITY_RIGHT и FUEL_QUANTITY_LEFT показывают лишь суммы MAIN+AUX+TIP.

Поиск дал три зацепки:
1. Вот этот пост утверждает, что соответствующие токены ( A:FUEL TANK External1/External2 QUANTITY ) имеют место быть. И, действительно, в файле "FS2004_Value_Variables.txt" от www.FS2x.com такие токены есть. Более того, проверил в xml-приборе - токены работают. Но мне надо бы на С.
2. В модели Il-18 вроде бы реализован необходимый функционал. По крайней мере, соответствующий прибор панели показывает количество топлива в этих баках.
3. Токены определены и в SDK для АЫЧ. Но мне надо в FS9. Попытка самостоятельно прописать эти токены в GAUGES.H, естественно, успеха не имела.

Можно, конечно, пробовать извращаться с чтением токенов через L-переменные из xml-файла, но ведь должен быть более простой путь. Что и где я упустил?

Share this post


Link to post
Share on other sites

Предыдущий вопрос порешил через дополнение GAUGES.H структурой XML_TOKEN. А вот как можно добраться до баков MAIN? В структуре FUEL_SELECT я этих баков не наблюдаю (видимо, кто-то в Microsoft решил "сэкономить" пару байтов). Пока могу добраться до них лишь опосредованно, через использование FUEL_TANK_SELECTOR_LEFT/RIGHT при уже пустых баках AUX и TIP. Но это явный костыль (к тому же, не везде работающий). Может, есть какой-то иной способ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×