У Милены появились новые возможности, и реализация интерфейса ТОМ+Милена может быть легче и красивее) и текст при прокрутке теперь не будет дёргаться. Нужно ли вообще это в данный момент или подождать стабильной версии (хотя вполне вероятно, к тому времени затея будет не актаульна)?
ТОМ+Милена
Сообщений 1 страница 4 из 4
Поделиться22010-11-14 19:23:01
У Милены появились новые возможности, и реализация интерфейса ТОМ+Милена может быть легче и красивее)
Поздравляю! Прогресс - это всегда хорошо и всегда радует!
Нужно ли вообще это в данный момент или подождать стабильной версии
В данный момент доступны 2 версии:
v.0.9.3.1 beta, которая не изменилась с начала года, и
v.0.9.4.7 alpha, которая вполне стабильна и скоро будет официально рекомендована для использования.
Для интеграции с Миленой важно то, что в новой версии ТОМа API кардинально изменился.
Новый API обкатан и в дальнейших версиях меняться не будет (если только расширяться).
Собственный графический интерфейс я также буду развивать. В частности будут возможности задать фоновую картинку, указать положение выводимого текста, вставка картинок в текст и т.п., но приоритет всё-же ставится на развитие парсера.
А в Милене это всё уже сейчас есть и работает. Поэтому интеграция была бы полезна.
Поделиться32010-11-14 19:49:20
Вот код интерфейса для работы с движком:
//... //переменные для 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; } //==============================================================================
Если что-то непонятно, спрашивайте...
Поделиться42010-11-14 20:28:41
В принципе, всё понятно... на следующей неделе может скрещу их. А может, и сегодня ночью)