Автор Тема: PBUS-3DO-SDK - ввод/вывод - джойстики, мышки, пистолеты и прочее  (Прочитано 7498 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
Небольшое SDK для разработки плагинов и устройств ввода/вывода к новой версии эмулятора.
Теперь со всеми просьбами по поводу джоев буду посылать в него  ;D

ПС Публикую заранее, что бы потом не забыть :)

Для тех кто аттач не видит:
http://forum.arts-union.ru/index.php?action=dlattach;topic=28.0;attach=28
« Последнее редактирование: 14 Декабрь 2008, 22:15:33 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
Решил поиграться с плагтнами. Возникло несколько вопросов:

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;
« Последнее редактирование: 02 Январь 2009, 17:04:53 от matich »

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
1) Хэндл окна передается не для меню, а для перехвата событий связанных с окном. PBP_CFG - передает плагину строку (все вроде расписано), в которой параметры для настройки плагина, тот в свою очередь возвращает эти же настройки если они корректны или по умолчанию, если что-то не так. Чтобы сделать поддержку сторонних менюшек, нужно расширить плагин, в принципе - могу сделать позже, это не сложно.

2) Неправильно - джойстик передает 16 бит.

3) Распределение кнопок джоя видно в стандартных настройках эмуля. "В event.h написано" - там программный интерфейс, а здесь аппаратный, поэтому есть отличия.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
Altmer,

Спасибо за пинок в нужном направлении, теперь всё работает.
Ты не против, если я попытаюсь сделать поддержку джойстика ?

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
Ты не против, если я попытаюсь сделать поддержку джойстика ?

Если бы был против, не сделал бы поддержку плагинов  ;)
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
Ещё вопрос:
Как получить HWND эмулятора ?
Пока повесил на нажатие кнопки
hWnd = GetForegroundWindow();
но это костыль...

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
Цитировать
#define PBP_INIT        0  //при загрузке плагина, передается хендл окна

HWND==хендл окна

Иначе говоря:

......................
static HWND hand;
   switch(proc)
   {
     case PBP_INIT:
               hand=(HWND)data;
......................
               break;
...................... 
« Последнее редактирование: 04 Январь 2009, 15:15:34 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
т.е
hWnd = (HWND)data ?

В таком случае hWnd == 0.

ЗЫ: Ещё нужно узнать HINSTANCE.

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
В таком случае hWnd == 0.

Не может такого быть.

Инстанс можно получить через winapi (точно функцию не помню, но она есть). Инициализация плагинов происходит в главном потоке приложения.
« Последнее редактирование: 04 Январь 2009, 15:19:38 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
Вот код.
Сначала появляется мессаджбокс с правилиным HWND потом с 0.
т.е. PBP_INIT: при старте эмулятора вызывается два раза, во второй раз data = 0;
и HWND обнуляется.

Оффлайн matich

  • Постоялец
  • ***
  • Сообщений: 126
Я - идиот !

case PBP_CONNECT:
[b]break;[/b]
case PBP_INIT:
hWnd = HWND(data); // Get HWND

Вот что с недосыпа бывает...

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4186
Да, тока хотел сказать... :)
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"