ТОМ2 - платформа для парсерных игр

Объявление

Открыт сайт tom2-game.ru.


Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



ТОМ+Милена

Сообщений 1 страница 4 из 4

1

У Милены появились новые возможности, и реализация интерфейса ТОМ+Милена может быть легче и красивее) и текст при прокрутке теперь не будет дёргаться. Нужно ли вообще это в данный момент или подождать стабильной версии (хотя вполне вероятно, к тому времени затея будет не актаульна)?

2

Александр Граф написал(а):

У Милены появились новые возможности, и реализация интерфейса ТОМ+Милена может быть легче и красивее)

Поздравляю! Прогресс - это всегда хорошо и всегда радует!  :cool:

Александр Граф написал(а):

Нужно ли вообще это в данный момент или подождать стабильной версии

В данный момент доступны 2 версии:
v.0.9.3.1 beta, которая не изменилась с начала года, и
v.0.9.4.7 alpha, которая вполне стабильна и скоро будет официально рекомендована для использования.

Для интеграции с Миленой важно то, что  в новой версии ТОМа API кардинально изменился.
Новый API обкатан и в дальнейших версиях меняться не будет (если только расширяться).

Собственный графический интерфейс я также буду развивать. В частности будут возможности задать фоновую картинку, указать положение выводимого текста, вставка картинок в текст и т.п., но приоритет всё-же ставится на развитие парсера.
А в Милене это всё уже сейчас есть и работает. Поэтому интеграция была бы полезна.

3

Вот код интерфейса для работы с движком:

Код:
//...
//переменные для dll текстового движка
HINSTANCE EngineDll=0;
//ANSI функции текстового движка
typedef bool __stdcall (*InitFn)(void);
InitFn TomInit =NULL;
InitFn TomExit =NULL;
typedef const char* __stdcall (*strFn)(const char*,const char*,const char*);
typedef int __stdcall (*strRegFn)(const char*,strFn,int);
strRegFn RegFunction=NULL;
enum{ FnInput=1, FnOutput=2, FnOther=3 };

bool Exit=false;
bool KeyIsPressed;
//---------------------------------------------------------------------------

//...

//==============================================================================
// интерфейсные функции
//-------------------------------
const char* __stdcall PutText(const char*Login,const char*Text,const char*)
{ if(Text&&Text[0]) PutStr(Text); //выводим непустой текст
  return 0;
}
//-------------------------------
const char* __stdcall PutDebug(const char*Login,const char*Text,const char*Color)
{ if(Text&&Text[0])
  { fly_control::curColor = GetColor(Color, strlen(Color), 0xFF008000); //зеленый
    fly_control::curScale = 0.75;
    Hyphenation(Text,strlen(Text)); //теги в тексте не обрабатываем!
    fly_control::curColor = 0xFFC0C0C0; //серебро
    fly_control::curScale = 1;
  }
  return 0;
}
//-------------------------------
const char* __stdcall PutError(const char*Login,const char*Error,const char*Code)
{ PutStr("\n\n");
  if(Code&&Code[0])
  { //fly_control::curScale = 0.75;
    PutStr("<font color=green>");
    Hyphenation(Code,strlen(Code)); //без обработки тегов
    PutStr("</font>\n");
  }
  //fly_control::curScale = 1;
  PutStr("<font color=red>");
  PutStr(Error);
  PutStr("</font>");
  return 0;
}
//-------------------------------
const char* __stdcall Pause(const char*Login,const char*,const char*)
{ //ждем нажатия клавиши
  Disable=true;
  KeyIsPressed=false;
  do Sleep(500); while(!KeyIsPressed);
  return 0;
}
//-------------------------------
const char* __stdcall InputCommand(const char*Login,const char*Invit,const char*)
{
  if(InputOk)
  { //выводим командную строку
    PutStr("\n<font color=silver>");
//  PutStr(ComLine);
    Hyphenation(ComLine,strlen(ComLine)); //без обработки тэгов
    PutStr("\n");
    //выставляем флаги
    InputOk=false;
    Disable=true;
    //возвращаем введенную строку
    return ComLine+ComLineInvit;
  }
  else if(Disable)
  { //устанавливаем приглашение
    bool OkInvit=false;
    if(Invit&&Invit[0])
    { ComLinePos=strlen(Invit);
      if(ComLinePos<50)
      { memcpy(ComLine,Invit,ComLinePos);
        OkInvit=true;
      }
    }
    if(!OkInvit)
    { ComLine[0]='>';
      ComLine[1]=' ';
      ComLinePos=2;
    }
    ComLine[ComLinePos]='_';
    ComLine[ComLinePos+1]=0;
    ComLineInvit=ComLinePos;
    //даем доступ к строке
    Disable=false;
  }
  return 0; //не нажат enter
}
//-------------------------------
const char* __stdcall FnExit(const char*Login,const char*Text,const char*)
{ Exit=true; //глобальная переменная 
  return 0;
}

//==============================================================================
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR CmdLineArgs, int nCmdShow)
{ //----------------------------------
  //запустим игру из командной строки
  if(CmdLineArgs&&CmdLineArgs[0])
  { int L=strlen(CmdLineArgs);
    if(L<90)
    { memcpy(ComLine+ComLineInvit,"run ",4);
      memcpy(ComLine+ComLineInvit+4,CmdLineArgs,L+1);
      InputOk=true;
    }
  }
  //----------------------------------
  //загружаем текстовый движок
  EngineDll=LoadLibrary("tom.dll");
  if(!EngineDll)
  { MessageBox(NULL, "Не удалось загрузить tom.dll!", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
    return 0;
  }
  //получаем функции
  RegFunction = (strRegFn)GetProcAddress(EngineDll,"RegFunctionANSI");
  TomInit=(InitFn)GetProcAddress(EngineDll,"Init");
  TomExit=(InitFn)GetProcAddress(EngineDll,"Exit");
  if(RegFunction&&TomInit&&TomExit)
  { //регистрируем интерфейсные функции
    RegFunction("print",PutText,FnOutput);
    RegFunction("input",InputCommand,FnInput);
    RegFunction("debug",PutDebug,FnOther);
    RegFunction("error",PutError,FnOther);
    //пауза
    RegFunction("pause",Pause,FnInput);
    RegFunction("пауза",Pause,FnInput);
    //выход из программы
    RegFunction("exit", FnExit,FnOther);
    RegFunction("quit", FnExit,FnOther);
    RegFunction("выход",FnExit,FnOther);
  }
  else
  { MessageBox(NULL, "Не найдены функции tom.dll!", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
    return 0;
  }
  //----------------------------------
  //загружаем графический движок

  //...

    if(TomInit()) //Starts running TOM
    { hge->System_Start();   //Starts running FrameFunc()
      TomExit(); //Stop running TOM
    }

  //...

  //Clean up and shutdown
  //...

  if(EngineDll) FreeLibrary(EngineDll);
  return 0;
}
//==============================================================================

Если что-то непонятно, спрашивайте...

4

В принципе, всё понятно... на следующей неделе может скрещу их. А может, и сегодня ночью)