Arts-Union
Территория 3DOшников => Инженерная => Тема начата: Altmer от 13 Декабрь 2008, 23:15:23
-
Небольшое SDK для разработки плагинов и устройств ввода/вывода к новой версии эмулятора.
Теперь со всеми просьбами по поводу джоев буду посылать в него ;D
ПС Публикую заранее, что бы потом не забыть :)
Для тех кто аттач не видит:
http://forum.arts-union.ru/index.php?action=dlattach;topic=28.0;attach=28
-
Решил поиграться с плагтнами. Возникло несколько вопросов:
1 - Захотел сделать графический конфигуратор:
вписал его сюда PBP_CFG:
Конфигуратор выскакивает при старте эмулятора и при нажатии кнопки "сохранить" в настройках PBUS.
Можно как-нибудь поправить это ?
2 -
Правильно ли я инициализирую джойстик ?
unsigned int joy_data=0x80000000;
case PBP_INIT:
joy_data=0x80000000;
break;
3 -
Почему при нажатии "Enter" происходит нажатие кнопки A на джойстике, а не start ?
В event.h написано
#define ControlStart 0x01000000
case PBP_KEYDN:
if(((int)data)==13)joy_data|=0x01000000;
break;
case PBP_KEYUP:
if(((int)data)==13)joy_data&=~0x01000000;
break;
-
1) Хэндл окна передается не для меню, а для перехвата событий связанных с окном. PBP_CFG - передает плагину строку (все вроде расписано), в которой параметры для настройки плагина, тот в свою очередь возвращает эти же настройки если они корректны или по умолчанию, если что-то не так. Чтобы сделать поддержку сторонних менюшек, нужно расширить плагин, в принципе - могу сделать позже, это не сложно.
2) Неправильно - джойстик передает 16 бит.
3) Распределение кнопок джоя видно в стандартных настройках эмуля. "В event.h написано" - там программный интерфейс, а здесь аппаратный, поэтому есть отличия.
-
Altmer,
Спасибо за пинок в нужном направлении, теперь всё работает.
Ты не против, если я попытаюсь сделать поддержку джойстика ?
-
Ты не против, если я попытаюсь сделать поддержку джойстика ?
Если бы был против, не сделал бы поддержку плагинов ;)
-
Ещё вопрос:
Как получить HWND эмулятора ?
Пока повесил на нажатие кнопки
hWnd = GetForegroundWindow();
но это костыль...
-
#define PBP_INIT 0 //при загрузке плагина, передается хендл окна
HWND==хендл окна
Иначе говоря:
......................
static HWND hand;
switch(proc)
{
case PBP_INIT:
hand=(HWND)data;
......................
break;
......................
-
т.е
hWnd = (HWND)data ?
В таком случае hWnd == 0.
ЗЫ: Ещё нужно узнать HINSTANCE.
-
В таком случае hWnd == 0.
Не может такого быть.
Инстанс можно получить через winapi (точно функцию не помню, но она есть). Инициализация плагинов происходит в главном потоке приложения.
-
Вот код.
Сначала появляется мессаджбокс с правилиным HWND потом с 0.
т.е. PBP_INIT: при старте эмулятора вызывается два раза, во второй раз data = 0;
и HWND обнуляется.
-
Я - идиот !
case PBP_CONNECT:
[b]break;[/b]
case PBP_INIT:
hWnd = HWND(data); // Get HWND
Вот что с недосыпа бывает...
-
Да, тока хотел сказать... :)