Кстати, если кто будет собирать через СMake
а не через WAF как тут
После распаковки архива с github в %Drive%+%Path%
тут лежит батничек который делает 64-й солюшен и вызывает окно СMake для дальнейшей настройки
%Path%\Tools\CMake\cmake_create_win64_solution.bat
Для меня это было совсем не очевидным шагом(что там где-то что-то еще лежит) и первоначально я просто запускал CMake и указывал папку где находятся распакованные сорсы движка. В рез-те получал 32-й солюшен (GameZero).
Скопировал новые Dll'ки(из собранного stabilization) в двиг 5.3. и кажется теперь забегали мои "пустышки" на PathFinding'e.
До этого не бегали т.к. требовалась какая-то связь с Actor, что по-моему очень странно т.к. NPC'си не игроки, и их может быть куда больше чем 16 или 64 шт в игре.
edit:
В общем я разобрался почему "пустышки"(dummy) бегали в редакторе и не бегали в игре.
Дело в том что: ENTITY_EVENT_RESET не прокидывается в игре, а только лишь в редакторе (это даже в комментах написано было%) )
//! Sent to reset the state of the entity (used from Editor). //! nParam[0] is 1 if entering gamemode, 0 if exiting ENTITY_EVENT_RESET,
void CDummyEntity::ProcessEvent(SEntityEvent & event) { switch ( event.event) { case ENTITY_EVENT_RESET: { switch ( event.nParam[0]) { case 0: // Game ends break; case 1: // Game starts Reset( ); InitAI( ); break; default: break; } } case ENTITY_EVENT_UPDATE: { SEntityUpdateContext* param = ( SEntityUpdateContext*)event.nParam[0]; }
В общем я пока нашел что работает в игре и делаю Reset Entity на другое событие
case ENTITY_EVENT_START_LEVEL: { if (!gEnv->IsEditor( )) { Reset( ); InitAI( ); } } default: break; }
edit:
Еще один баг:
Что бы работал ENTITY_EVENT_UPDATE в CDummyEntity::ProcessEvent()
void CDummyEntity::ProcessEvent(SEntityEvent & event) { switch ( event.event) { case ENTITY_EVENT_RESET: { switch ( event.nParam[0]) { case 0: // Game ends break; case 1: // Game starts Reset( ); InitAI( ); break; default: break; } } case ENTITY_EVENT_UPDATE: { SEntityUpdateContext* param = ( SEntityUpdateContext*)event.nParam[0]; } case ENTITY_EVENT_START_LEVEL: { if ( !gEnv->IsEditor( )) { Reset( ); InitAI( ); } } default: break; } }
нужна разумеется маска в
virtual uint64 GetEventMask() const override { return ( BIT64( ENTITY_EVENT_UPDATE) | BIT64( ENTITY_EVENT_RESET) | BIT64( ENTITY_EVENT_START_LEVEL)); }
но кроме того, нужно активировать Entity в Initialize()
void CDummyEntity::Initialize() { Reset( ); GetEntity( )->Activate( true); }
сделал follow камеру + навесил емиттер стандартный (без текстуры)

намудохался я с этим PathFinding'ом аж-но тошнит(
как оказывается по умолчанию PF может считать пути только для 4 персов!
[Error] Scheduler policy name should not exceed 4 characters.
что несомненно дичь и жесть))
но, eсть возможность поправить политику
задав её к примеру в файле Assets\game.cfg
ai_MNMPathfinderConcurrentRequests=10правда, я еще не тестировал, потянет ли он вообще хотя бы 100-ю агентов, или же нужно костылить свою "надсистему" с выборками путей обходясь всего 4-мя PF-запросами.
Так же есть интересный параметр ai_MNMPathFinderQuota = 0.001 // Set path finding frame time quota in seconds
И в общем: как я заметил, после старта game.exe и немедленного юзанья PF для всех юнитов на уровне, PF вообще может не сработать.
А при след. старте и если подождать 10-20сек и сделать тоже самое (задействовать его для всех) - PF заработает! Магия!? мб фоновые подгрузки какие-то...
Походу абилка "двойной уворот гизьма" главная фича +0.0.1 версии ))
CRYENGINE 5.3.1 is now available for download
http://docs.cryengine.com/display/SDKDOC1/CRYENGINE+5.3.1
https://www.cryengine.com/community/viewtopic.php?f=328&t=136… 4960#p1304960
В дополнение получите невозможность сгенерить солюшен (Generate Solution) для нового проекта, потому что крайтековцы забыли положить yasli в новый релиз
И тут кто на что горазд и решает эту проблему по своему:
Я просто скопировал собранную версию двига с гитхаба 5.3.0 (stabilization) на новый релиз и что-то недостающее видимо добавилось, после я просто проверил целостность движка через ланчер Library->MyEngines-> Validate Installation
А кто-то так: https://answers.cryengine.com/questions/4246/why-cmake-error-in-c… l#answer-4258
ToD он же тайм оф дей.
ToD.xml
<TimeOfDay Time="0.1" TimeStart="0" TimeEnd="24" TimeAnimSpeed="0.2"> <Presets> <Preset Name="libs/environmentpresets/example.xml" Default="1"/> </Presets> </TimeOfDay>
Настраиваешь это ToD(example.xml - куча всяких сплайн кривых) в Sandbox'e сохраняешь, делаешь экспорт в двиг (F7), запускаешь свою Game.exe и видишь что время вообще не соответствует тому что ты настраивал в Sandbox'e.
Я пока сильно не разобрался в этом -"таинстве турецкого двора", как же это ToD юзается и что есть нормальная практика его юзанья, но сдается мне что его нужно просто грузить, поэтому я завел процедуру загрузки для этой xml, и пока поместил её в GameRules.
Наконец-то я осилил сделать двери! =) уже даже думал плюнуть на CGA-формат (объектная анимация) и сделать двери на костях как Character'a
Но в рез-те все получилось с CGA
Правда пришлось дождаться фикса самого BCry5-экспортера, а так же пофиксить стандартую ентитю GeomEntity (из числа дефолтных), в которой Slot 0 забыли назначить, когда "физикализацию" делали %)
первая дверь на MyGeomEntity
вторая на дефолтной GeomEntity

Игровые события
И так допустим нам нужно как-то отсылать "всякие юзверьские сообщения" от одной Entity ко многиЯм другим.
Это можно сделать так: (хотя и не приветствуется и считается за хак, нужно городить свою систему игровых сообщений сбоку от движка что несомненно грустно(( хотя у меня уже есть и её первый рабочий прототип, но пока не об этом... )
Добавляем свой новый event в IEntity.h
enum EEntityEvent { //! Last entity event in list. ENTITY_EVENT_LAST, //! TEST ENTITY_EVENT_MY_NEW_EVENT };
Отсылка event'a
bool CInput::OnActionFindWay(EntityId entityId, const ActionId & actionId, int activationMode, float value) { SEntityEvent event( ENTITY_EVENT_MY_NEW_EVENT); //GetEntity()->SendEvent(event); gEnv->pEntitySystem->SendEventToAll( event); return true; }
Не забываем подписаться на новый event
class CEnemy final : public IEntityComponent { CRY_ENTITY_COMPONENT_INTERFACE_AND_CLASS(CEnemy, "Enemy", 0xBA8B086AA7BF486C, 0xAD0FEFAD7E84F591); public: // IEntityComponent virtual void Initialize( ) override; virtual void ProcessEvent( SEntityEvent &event) override; virtual uint64 GetEventMask( ) const override { return ( BIT64( ENTITY_EVENT_UPDATE) | BIT64( ENTITY_EVENT_RESET) | BIT64( ENTITY_EVENT_START_LEVEL) | BIT64( ENTITY_EVENT_MY_NEW_EVENT)); }
Ловля этого even'a в других Entity
void CEnemy::ProcessEvent(SEntityEvent & event) { switch ( event.event) { case ENTITY_EVENT_MY_NEW_EVENT: { Walk( ); break; } default: break; } }
Воспроизведение триггеров-звуков (С++)
1. Создаем триггер с необходимым звуком(и) в редакторе ACE и сохраняем

2. Проигрываем звук таким образом.
bool CInput::OnActionPressF(EntityId entityId, const ActionId & actionId, int activationMode, float value) { IEntityAudioComponent* sound = GetEntity( )->GetOrCreateComponent<IEntityAudioComponent>( ); if ( sound) { sound->Initialize( ); // once sound->SetCurrentEnvironments( ); AudioControlId controlId; if ( gEnv->pAudioSystem->GetAudioTriggerId( "zvuk_1", controlId)) { sound->ExecuteTrigger( controlId); } } return true; }
В ближайших 5.4 версиях можно ожидать:
https://www.cryengine.com/news/new-push-coming-to-github-ce-54-sneak-peek
+ Vulkan renderer
+ Entity Component System (чем оно интересно отличается от текущей компонентной системы, когда городим потомков на базе IEntityComponent ? )
+ Sandbox source code
codingmonkey
> + Entity Component System
может явные системы ?
>может явные системы ?
хз, я так подозреваю что IEntityComponent и иже от неё это и есть зачатки той новой системы (которая присутствует сейчас в том числе и в 5.3) о которой они пишут.

А это уже мои попытки использования:
старой системы https://github.com/CopyPasteBugs/VFiles/blob/master/PlayerTank/PlayerTank.h
и новой https://github.com/CopyPasteBugs/VFiles/blob/master/TPSPlayer/Player.h
Хотя вполне возможно будет что-то другое.
исходники тулсета выложили?
>исходники тулсета выложили?
про сорсы сандбокса читай в новости
codingmonkey, а может линк кинешь? Ибо просто так бы этот вопрос не задавался
>может линк кинешь? Ибо просто так бы этот вопрос не задавался
выше же кидал
https://www.cryengine.com/news/new-push-coming-to-github-ce-54-sneak-peek
Sandbox source code
We know you have been waiting for this for a long time and we are happy to finally confirm: Whilst not yet visible on GitHub, the release of 5.4 will come with the source code to our Sandbox editor. All roadblocks have been cleared and we can confirm that when 5.4 goes live, there will be nothing hidden and no limits to what you can do.
Тема в архиве.