| 
				
				HCG 2D Engine
				 |   |  
| Kwant | Дата: Понедельник, 27 Декабря 2010, 20:32 | Сообщение # 1 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Build: Unicode   Render: DX8 & 9   Input: DI8   Sound: Squall   Web/Lan/Internet: Socket   Language: C++  Тестировался на OS: Win XP/Vista/7   Среда разработки: MVS 2010   Есть класс по работе с ядром, таймером, вводом, рендером и менеджером ресурсов, сетью/интернетом, изображениями (спрайты, анимационные ленты), шрифтом, INI файлами, StringTable файлами и др.   -Возможность аттачить свои классы с функциями Бегин/Енд - действия/события на ввод, степ, рендер   -Есть возможность вынести рендер в отдельный поток   -Довольно простой в изучение   Как может выглядеть класс Объект:    Code class Object  : public IHCGEventRoot, IHCGEventGraphics   {   public:       VOID    BeginStep( DOUBLE Delta, const INPUT_EVENT_INFO& Info, const LPHCGROOT pRoot )       {        x += dx * Delta; y += dy *  Delta;        xscale += dxscale * Delta; yscale += dyscale * Delta;        rot += drot * Delta; 
        if(x > 800 || x < 0.0f) dx = -dx;        if(y > 600 || y < 0.0f) dy = -dy;        if(xscale > 2.0f || xscale < 0.5f) dxscale = -dxscale;        if(yscale > 2.0f || yscale < 0.5f) dyscale = -dyscale;       } 
       VOID    EndStep( DOUBLE Delta, const INPUT_EVENT_INFO& Info, const LPHCGROOT pRoot )       {       } 
       VOID    BeginDraw( const LPHCGGRAPHICS pGraphics )       {        if(pSprite)         pSprite->DrawEx(x, y, rot, xscale, yscale);       } 
       VOID    EndDraw( const LPHCGGRAPHICS pGraphics )       {       } 
   public:       Object( VOID )       {        if(g_pHelper)         pSprite = g_pHelper->CreateSprite(); 
        x = 0.0f, dx = 0.0f, y = 0.0f, dy = 0.0f;        xscale = 1.0f, dxscale = 0.0f, yscale = 1.0f, dyscale = 0.0f;        rot = 0.0f, drot = 0.0f;       } 
       ~Object( VOID )       {        if(g_pHelper)         g_pHelper->DestroySprite(pSprite);       }             public:       FLOAT    x, dx, y, dy;       FLOAT    xscale, dxscale, yscale, dyscale;       FLOAT    rot, drot; 
       LPHCGSPRITE    pSprite;   };    Как может выглядеть файл ресурсов:    Code <HCG-Resource>    <TEXTURE>     <!-- Load Texture - Name | Path -->     <load name="Name1" path="Graphics/s_hero.dds">0</load>     <load name="Name2" path="Graphics/s_airstr.png">1</load>     <load name="Name3" path="Graphics/b1id.png">2</load>  
     <!-- Create Texture - Name | Width | Height -->     <create name="Name14" width="200" height="200">13</create>    </TEXTURE> 
    <SURFACE>      <!-- Create Surface - Name | Width | Height -->     <create name="Surface0" width="333" height="333">0</create>     <create name="Surface1" width="254" height="254">1</create>    </SURFACE> 
    <FONT>      <!-- Load Font - Name | Path -->     <load name="Font0" path="FontID0.fnt">0</load>    </FONT> 
    <SHADER>      <!-- Load Font - Name | Path -->     <load name="PSO0" type = "ps" class = "object" path="PS0.pso">0</load>     <load name="PSH1" type = "ps" class = "asm"  path="ps1.psh">1</load>     <load name="PS1HLSL" type = "vs" class = "hlsl" function = "Ripple" target = "vs_2_0" path="vs_0.hlsl">3</load>    </SHADER>   </HCG-Resource> 
       Пока шаманю еще над многими вещами, но одному все же трудновато на все разорваться )   Линк для скачки: перейти... 
 
 Сообщение отредактировал Kwant - Понедельник, 27 Декабря 2010, 21:46  |  
| 
 | 
 |    |  
| SanAV | Дата: Понедельник, 27 Декабря 2010, 20:53 | Сообщение # 2 |  
 
Alex Versus 
Сейчас нет на сайте 
 
 | Движок впечатлил. Посмотрел демку, понравилось. Но запустить собственноручный скомпилированный проект так и не смог, увы.
  My Games:   · [2D, TDS] Death Embrace.
 |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 03 Июля 2011, 21:37 | Сообщение # 3 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Хм, странно, давал как то тестировать его и проекты запускались у другого пользователя...   Собранный проект в юникоде?  Добавлено (29.12.2010, 09:55)   ---------------------------------------------   Что то я запамятовал кинуть в архив генератор шрифтов...   Использовалась программа Bitmap Font Generator v1.12   К следующей сборке дам линк на тулзу (в архив, к движку, пока что класть не буду), если лень искать     Добавлено (30.12.2010, 00:05)   ---------------------------------------------   [ Update ]   Скачать: Bitmap Font Generator v1.12 246 Кб   Скачать: HCG 2D Engine SDK 1.0 Мб   Было исправлено множество ошибок и недочетов, добавлены новые функции.   Надо бы днем пошурику накатать пару турторов и небольшую доку, а ща пойду пощемаю на диванчике )   Добавлено (18.01.2011, 00:46)   ---------------------------------------------   Блин, что то я подтормозил с некоторыми вещами, которые хотел выложить )   Просто в армии немного неудобно кодить ^^   Мм...надо толи осилить что нить, толи до дома подождать х)   Добавлено (27.01.2011, 04:59)   ---------------------------------------------   Такс...   Начал клепать турторы и справку, начало пока слабенькое..., но все таки какое то.   Также склепал временную страничку, т.к. всему этому делу надо же где то обитать, на протяжение моей службы )   Есть пример по созданию простого окна и созданию менеджера ресурсов с загрузкой ресурса.   И есть махонькая "справка", которую буду потихоньку пилить )   Все можно найти тУт.   Дальше сделаю примеры по работе со спрайтами, шрифтом, ini файлы, строковый таблицы..м.. ну и т.д.   Может появится вопрос, почему я не написал о планах доработки/улучшению двига..., ну, просто.., просто - это армия )   Вернусь домой через 4 мес и проапгрейжу двиг, а пока поиск багов, расширение справки и базы примеров. Добавлено (25.06.2011, 03:34) --------------------------------------------- Йааа дома, епт 8)   Хохо, можно браться за дело ^^ 
   Архитектура:     
   Как видно, взаимодействие с модулями возможно непосредственно через интерфейс в обход Core, по большому счету, эта библиотека нужна для сильного упрощения общения с модулями.   При сильном желании, можно любому написать альтернативу библиотеке Core. 
   Модуль Root содержит в себе элементы по работе с главным окном, менеджером ресурсов, таймером и прочими вспомогательными классами.   Из схемы видно, что он также использует модули графики и звука. Например, класс HCGSprite - вызов функции Draw(...). 
   --- 
   Вообще, я переписал ~30% рендра, пофиксил баги в нескольких модулях, изменил принцип работы некоторых функций вспомогательных классов Анимации и Шрифта, класса по работе с ini файлами.   Добавил новые функции по созданию граф устройства, окна - простое, по типу Create() (создать окно и граф устройство) и расширенный вариант, куда передается структура с данными (для окна и граф устройства). 
   Уже на ~40% навоял класс Частиц. Добавлено (25.06.2011, 15:43) --------------------------------------------- Обновление модулей:   Перейти... 
   Хочется упомянуть, что пока я не поддерживаю разработку рендра DX9, на то есть пока причины. 
   Забыл в тот раз упомянуть о появление в Root функции, для получения информации о вводе:   PINPUT_EVENT_INFO GetInputInfo( VOID );   И в структуру PINPUT_EVENT_INFO добавлена Z координата (колесико) для мыши. 
   Ща еще работаю над автопатчером, чтобы сам сливал все нужные апдейты/файлы с хоста для обновления движка Добавлено (03.07.2011, 21:37) --------------------------------------------- Так, своял что то, вроде патчера х))   Прошу, посмотрите, если будет на что...оцените минимализм х) 
   Перейти 
 
 Сообщение отредактировал Kwant - Четверг, 27 Января 2011, 21:28  |  
| 
 | 
 |    |  
| Demeron | Дата: Воскресенье, 03 Июля 2011, 21:50 | Сообщение # 4 |  
 
User created in C++ 
Сейчас нет на сайте 
 
 | Хм... Как по мне движок стоит внимания. Пересмотрев код, понял, что движок будет не так уж и прост в использовании, но с большым выбором параметров.   Единственно, что мне пока что не понравилось, так это 6 dll файлов движка, общим весом меньше метра...
 |  
| 
 | 
 |    |  
| Kwant | Дата: Вторник, 19 Июля 2011, 21:56 | Сообщение # 5 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Thx     Но, я как бы стараюсь его постоянно упростить и сохранить гибкость )   Quote Единственно, что мне пока что не понравилось, так это 6 dll файлов движка, общим весом меньше метра...     А что я сделаю то )   Ну модульный двиг, суть его в модулях ^_^, поэтому и куча dll`ов   Могу в Core.lib запихать код, который позволит загружать dll ки из ресурсов exe`шника ) 
   Code HHCGMODULE LoadDLLFromResource( HINSTANCE hInstance, PTCHAR pName, PTCHAR pType = NULL );   
   мм, как то так ) 
   Я еще переписал автопатчер, работает получше, нормально качает/докачивает, висит в трее и больше ни где старается не палиться   . Выложу новую версию, как подготовлю новый UD движка. 
   Добавлено (19.07.2011, 21:54)   ---------------------------------------------   Скоро думаю залить UD, сделал много изменений: добавление функций, классов, изменение работы внутренних механизмов - в общем много изменений, я не осилю все перечислять х)   Написал класс для упрощения работы с движком: CGame - Game.h/cpp   С ним код может выглядеть как то так:   Code    #include "../Game.h" 
   CGame   g_oGame;   LPHCGSPRITE  g_pSprite  = NULL; 
   VOID CALLBACK EvDraw( VOID )   {       g_pGraphics->Clear(ARGB(255, 125, 200, 100));       g_pSprite->Draw(100, 100);   } 
   INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )   {      if(g_oGame.Create())      {       if(g_oGame.LoadResource(_TXT("../media/r_file.xml")))       {        g_oGame.SetEvent(AE_RENDER, (LPVOID) &EvDraw); 
        if(g_pSprite = g_oGame.CreateSprite())        {         g_pSprite->SetTexture(g_oGame.GetTexture(_TXT("Name1"))) 
         g_oGame.FuckItAll(); 
         g_oGame.DestroySprite(g_pSprite);        }       } 
       g_oGame.Destroy();      } 
      return( 0 );   }      
   Тут рисуется 1 спрайт, за Вас все уже подключено, объявлено - все само загрузится, выгрузится х)   Ну, как бы вот...   Все проверки, в коде выше, сохранены, т.е. если чего будет не так: нету длл, нет ресурса, указатель = NULL, все обрабатывается и уж0сающих синих экранов, RT ерроов не будет наблюдаться )
 
 Сообщение отредактировал Kwant - Вторник, 19 Июля 2011, 21:59  |  
| 
 | 
 |    |  
| mihas2 | Дата: Вторник, 19 Июля 2011, 22:10 | Сообщение # 6 |  
 
UDK User 
Сейчас нет на сайте 
 
 | Quote (Kwant) g_oGame.FuckItAll();      
 
  
 |  
| 
 | 
 |    |  
| Kwant | Дата: Понедельник, 29 Августа 2011, 16:10 | Сообщение # 7 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Охох, ну что же, лето к концу, трудовые будни постепенно начинаются х)   Такс, что я тут нового сделал:   [+] Добавил:   -класс HCGUtil   -логи во все модули   -различные функции в класс IHCGResourceManager, IHCGRoot, CGame (класс для упрощения взаимодействия с движком)     [+] Добавляю на данный момент:   -работа с архивами   -частицы или гуи писать сюда есть смысл? А то я их добавляю уже стопитцот поколений...они все добавится не могут... 
   [+] Исправления:   -убрано 6 ошибок   -изменение работы некоторых классов и функций: IHCGResourceManager, IHCGRoot, IHCGCore 
   Над модулем сети поработать бы еще - добавить пару чтук, ну и пробую звуковую часть поковырять, пару мыслей есть, но....мысли, они и в Африке мысли )   В целом, по тихоньку дело идет     Может я че упустил, забыл...эээ....но пока вот..., что есть - изменения идут: упрощаю, добавляю....кручу верчу запутать хочу =D   В общем, числа 2-4, след мес, выложу нарн, т.к. косяки с интернетом у меня...
 |  
| 
 | 
 |    |  
| Kornival | Дата: Понедельник, 29 Августа 2011, 16:27 | Сообщение # 8 |  
 
The Witcher 
Сейчас нет на сайте 
 
 | Вопрос тем, кто тестировал двиг: какие впечатления он оставляет по сравнению с WindMill Engine?
 |  
| 
 | 
 |    |  
| Kwant | Дата: Понедельник, 29 Августа 2011, 16:52 | Сообщение # 9 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Ща, то, что на сайте лежит и то, что есть у меня - имеет двольно неплохую разницу )   Если со мной поделятся, одни хорошие люди, интернетом, то я выложу, может, сегодня вечером-ночью, и тогда можно что-то оценивать, эт я так, к слову :3 
   А сейчас я откланиюсь пожалуй, время Theatre Of Tragedy - Crash/Concrete   оО, ДАА!! Чем обрабатывается металл?!! Электрогитарой! \m/>_<\m/
 
 Сообщение отредактировал Kwant - Понедельник, 29 Августа 2011, 16:56  |  
| 
 | 
 |    |  
| Kornival | Дата: Понедельник, 29 Августа 2011, 16:59 | Сообщение # 10 |  
 
The Witcher 
Сейчас нет на сайте 
 
 | Ждем.
 |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 11 Сентября 2011, 17:39 | Сообщение # 11 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | ыЫ, я тут подзадержался немного )   Ну, я скоро, еще чуток ... пару часиков и все х)   Доизвращался аж до такого: 
   Code #include "../Game.h" 
   VOID CALLBACK EvDraw( LPVOID lpParam )   {          GfxClear(); 
          GetSprite(_TXT("Spr_0"))->Draw(100, 100);          GetFont(_TXT("Fnt_0"))->Draw(222, 222, TXA_CENTER, _TXT("X-TEXT"));   } 
   INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )   {          if(Create())          {           SetEvent(AE_RENDER, &EvDraw); 
           AddSprite(_TXT("Spr_0"));           AddFont(_TXT("Fnt_0")); 
           GetSprite(_TXT("Spr_0"))->SetTexture(LoadTexture(_TXT("../media/Hex.png")));           GetFont(_TXT("Fnt_0"))->SetFont(LoadFont(_TXT("../media/FontID0.fnt"))); 
           FuckItAll(); 
           RemoveAllObjects();           Destroy();          } 
          return( 0 );   }   
   Это все, что требуется написать, чтобы начать создавать что либо.   Вверху загружается изображение, шрифт, и выводятся % ) 
   Конечно это не железный стандарт, тут 3 обертки, которые доступны для чтения/изменения, чем ниже обертка - тем сложнее )   Кароче, тут жопа полная % ) (Не умею я объяснять нарн ^^) 
   Кхм, в общем, выглядит это так:   (3 LvL) Function   (2 LvL) CGame / Class : child   (1 LvL) HCGControl / Class : parent   -----------------------   (0 LvL) HCGEngine 
   Все сверху, это просто упрощения и все, показательные, но эт не значит, что я их написал от балды )   Нет, просто, кто захочит большего контроля, то может использовать CGame или еще глубже - HCGControl. (блин, это есесные вещи и че я Вам объясняю - на схеме се видно, да?   ) 
   Как то так оно в общем...да, и я подза...долбался с этими архивами х)   Но поддержка ресурсов в архивах будет...пароли-не пароли там... 
   Добавлено (31.08.2011, 04:14)   ---------------------------------------------   А, и в ближайшее время верну рендер DX9 ) 
   Добавлено (11.09.2011, 17:39)   ---------------------------------------------   Ну, я залил то, что пока есть, не все успел впихнуть, т.к. времени вообще катастрофично не хватает, даже на личную жизнь...начинает казаться, что она у меня где то в области иррационального сейчас %-) 
   Скачать можно с помощью APE или по ссылке ниже:   Перейти... 
   Там, в архиве, тествовый код есть и 2 файла на которые стоит обратить внимание: HCG[Control].h и Game.h  
 
 Сообщение отредактировал Kwant - Воскресенье, 11 Сентября 2011, 17:40  |  
| 
 | 
 |    |  
| Rorschach | Дата: Воскресенье, 11 Сентября 2011, 17:41 | Сообщение # 12 |  
 
участник 
Сейчас нет на сайте 
 
 | Код ужасен.
  Never compromise. Not even in the face of Armageddon.
 |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 11 Сентября 2011, 17:44 | Сообщение # 13 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | На вкус и цвет..., лично мне, не особо, что ужасное, видно в этом коде. Ну или прошу поделится широтой вашей мысли   А HCG[Control].h и Game.h - лишь показательные.
 
 Сообщение отредактировал Kwant - Воскресенье, 11 Сентября 2011, 17:48  |  
| 
 | 
 |    |  
| Rorschach | Дата: Воскресенье, 11 Сентября 2011, 17:51 | Сообщение # 14 |  
 
участник 
Сейчас нет на сайте 
 
 | Думаю немного критики вам не помешает.   Quote (Kwant) На вкус и цвет...     Хмм, по-вашему вот это:   Code    GetSprite(_TXT("Spr_0"))->Draw(100, 100);     GetFont(_TXT("Fnt_0"))->Draw(222, 222, TXA_CENTER, _TXT("X-TEXT"));        Code    GetSprite(_TXT("Spr_0"))->SetTexture(LoadTexture(_TXT("../media/Hex.png")));     GetFont(_TXT("Fnt_0"))->SetFont(LoadFont(_TXT("../media/FontID0.fnt")));        выглядит хорошо? Огромное вам уважение за работу, которую вы делаете, но такие заковыристые конструкции могут отпугнуть большинство новичков. Надеюсь в будущем АПИ предоставляемый движком изменится в лучшую сторону.
  Never compromise. Not even in the face of Armageddon.
 
 Сообщение отредактировал Rorschach - Воскресенье, 11 Сентября 2011, 17:51  |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 11 Сентября 2011, 18:03 | Сообщение # 15 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | ^^ эт я так упростил...вроде =D 
   Тут не стоит путать понятие объекта(игрового) и спрайта, что происходит часто.   При переделки это на игровой объект, все будет, примерно, таким образом: 
   oHero.SetTexture(GetTexture(L"hero"));   oHero.SetPos(12, 45);   oHero.Draw(); 
   Я не вижу ни каких проблем в данной реализации.   То, что там - выше, это лишь пример, двиг обладает множеством функций, он спокойно загрузит все ваши ресурсы: LoadResource(L"Res.my"); и птом получайте их: GetTexture(L"fuck");. 
   Пугает _TXT() ? Так это не железно, хотите - не пишите, эт ведь просто дефайн на юник, чтобы быстро рекомпильнуть с Юни на АНСИ. 
   Короче, пошел я жарить яишнецу, все тут и так просто 
   ЗЫ: то, что вы привели, в пример, это надстройка Game.h, она расчитана на обучающие цели, а не: "О, епт, нефига у него код у двига" )
 
 Сообщение отредактировал Kwant - Воскресенье, 11 Сентября 2011, 18:13  |  
| 
 | 
 |    |  
| Demeron | Дата: Воскресенье, 11 Сентября 2011, 18:08 | Сообщение # 16 |  
 
User created in C++ 
Сейчас нет на сайте 
 
 | Code oHero.SetTexture(GetTexture(L"hero"));     oHero.SetPos(12, 45);     oHero.Draw();     Мдааа... Выглядит ужасно, нельзя что ли заменить на:   Code oHero.SetTexture(L"hero");     oHero.Draw(12, 45);     В Draw добавить SetPos, а в функции SetTexture добавить GetTexture. Так не только меньше писать, но и глаз больше радует.
 
 Сообщение отредактировал Demeron - Воскресенье, 11 Сентября 2011, 18:11  |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 11 Сентября 2011, 18:11 | Сообщение # 17 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Да епт, можно, эт я протупил х) ЖРАТь я хочу =D   Конечно можно в реализацию героя пихнуть: 
   VOID Object::SetTexture( ... )   {   SetTexture(GetTexture(...));   } 
   Я это просто к тому, что я не связываю тут ни кому руки и все элементарно правится под любой вкус и цвет )   И в Draw нельзя SetPos... Либо напрямую рисуем по координатам переданным в Draw, либо SetPos(); Draw();, т.к. первое используется в месте, где общитывается физика, а второй в области рендра
 
 Сообщение отредактировал Kwant - Воскресенье, 11 Сентября 2011, 18:15  |  
| 
 | 
 |    |  
| Demeron | Дата: Воскресенье, 11 Сентября 2011, 18:18 | Сообщение # 18 |  
 
User created in C++ 
Сейчас нет на сайте 
 
 | Quote (Kwant) И в Draw нельзя SetPos... Либо напрямую рисуем по координатам переданным в Draw, либо SetPos(); Draw();, т.к. первое используется в месте, где общитывается физика, а второй в области рендра      напрямую рисуем по координатам - да
 |  
| 
 | 
 |    |  
| Kwant | Дата: Воскресенье, 11 Сентября 2011, 18:23 | Сообщение # 19 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Чо да?   Физика те SetPos(), объект в жопе какой нить, а ты рендришь напрямую Draw(0, 0); - жопа тут полная )   Draw напрямую над ток спрайту, объекту вообще не вперлось это
 |  
| 
 | 
 |    |  
| Demeron | Дата: Воскресенье, 11 Сентября 2011, 18:41 | Сообщение # 20 |  
 
User created in C++ 
Сейчас нет на сайте 
 
 | Kwant, если на то пошло (используется физика), то SetPos будет "менять" законы физики (чувак пролетел сквозь потолок и оказался в "жопе")   А если не используется физика?   1) Используется физика: нужна функция GetPos, что бы Draw(GetPos().x,GetPos().y), а физика там что-то сама делает... Ну или оставить как есть     2) Не используется физика: просто рисуем в нужной позиции Draw(x,y); 
   Но решать тебе, что делать... 
   PS: Если я что-то неправильно понял - поправь меня.
 |  
| 
 | 
 |    |     
		
		 
 |