//было auto MyInterface = InterfaceCast < IMyInterface > ( ActorInstance ) ; if ( MyInterface ) { // Другой код }
//стало if ( ActorInstance - > GetClass ( ) - > ImplementsInterface ( UMyInterface :: StaticClass ( ) ) ) { // Другой код }
но мне нужен реф на интерфейс такой как в первом варианте получаем, возможно получить указатель из нового вида? потому что новый вызов методов интерфейса выглядит так:
а в новом виде я не совсем понимаю что происходит... собственно чтоб починить код я б хотел исправить просто переписав получения указателя на интерфейс... ???
_________________ we need to go deeper
ммм... веротятно реф никак не получить ... это странно... интерфейсы поломанны? потому что обходной путь выглядит как костыль... но в багрепортах анриала нет упоминания вообще о существовании проблемы... только вопросы на ансверхабе, которым в ответ дают этот обходной путь...
_________________ we need to go deeper
TScriptInterface<IMyInterface> MyInterface; ... //надо все равно как-то проверять есть ли у обьекта этот интерфейс, //можно указать любой обьект, и все будет нормально, пока не будут вызваны методы интерфейса //и это приведет к крашу движка //поэтому: if (ActorInstance ->GetClass()->ImplementsInterface(UMyInterface::StaticClass())) { MyInterface.SetObject(ActorInstance ); } ... if(MyInterface.GetObject()) // - в принципе если обьект статичен то не нужно проверять... { MyInterface->Execute_MyInterfaceFunction ( ActorInstance ) ; }
ммм такой вопрос: есть например bool bInitialized; булевая если которая false то нужно запретить выполняться какому то коду...
и нужно постоянно проверять например:
Код:
void fn() { if(!bInitialized) {break;} .... }
и т.п.
я смотрю по другому коду анриала есть например check() и другое тут UE_4.18\Engine\Source\Runtime\Core\Public\Misc\AssertionMacros.h но не пойму как ими правильно пользоваться. что то типа check(bInitialized); обьясните как это работает?
_________________ we need to go deeper
задачка кафе: для примера: 7 столов ,2 две официантки , каждая обслуживает некое количество столов, в том числе один и тот же стол может быть у нескольких официанток можно принести >1 за стол. пиво нужно носить каждый "тик"(вызов), его на столах все(!) выпивают за этот же "тик" если пиво не принесли, а ивент выпивки сработал -КРАШ программы. -__-
для более подробного примерного представления о чем :
для тех кто ознакомился с кодом - вопрос! задавать столам bNeedBeerTables из официантов, при условии один стол могут обслуживать сколько угодно официантов... и желательно не проверять этот стол по всем официантам тоесть по картинке: полностью отключаем первого официанта у него столы 1, 2, 3 его массив bNeedBeer{false,false,false} и нужно теперь эти данные передать в bNeedBeerTables по сути нужно выдергивать необслуживаемые официантами столы из цикла бухалова : вот это ивент блокировать Tables[i]->DrinkBeer() как бы это грамотно это организовать без цикличной проверки стола по всем официантам нужен ивент в кафе void разогнать_посетителей(НеобслуживаемыйСтол), который будет инициирован официантом... что-то типа:
Код:
void разогнать_посетителей(int32 НеобслуживаемыйСтолID) { bNeedBeerTables[НеобслуживаемыйСтолID] = false; //но непонятно как по простому узнать вдруг этот стол обслуживается другой официанткой //как-то надо регистрировать это дело ... но чет не соображу как это максимально просто сделать }
Ну возможно самое простой забиндить через event dispatcher ивенты на каждого официанта: - Официант_Идет_принимать_заказ, где параметр int = СтолID - Официант_Расcчитал_стол, где параметр int = СтолID - Официант_Принес_пиво, где int = СтолID
в эвентах, в зависимости от вызванного event, в массив столов по СтолID заносим стейт стола, что-то вроде: СтолРасчитан, СтолПьет, СтолОжидаетЗаказ, СтолЖдетОфицианта
далее в void разогнать_посетителей(int32 столID) {
switch столID->СтейтСтола: { case СтолРасчитан: ... разгоняем стол break;
case СтолОжидаетЗаказ: ... логика break;
default: break; } }
Либо просто после того как официант облсужил стол, через какой-то delay вызвать РазогнатьПосетелителй event у стола.
_________________ https://www.facebook.com/groups/uejob/