Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 860
Snake писал(а):
Snake писал(а):
еще вопрос:
UObject - задать в конструкторе или изменить имя(отображаемое в редакторе) обьекта ? возможно? как?

virtual bool Rename
(
const TCHAR * NewName,
UObject * NewOuter,
ERenameFlags Flags
)
но что- то не так, крашит двигло...

Rename(*FString(GetNameSafe(Obj) + GetNameSafe(this)), Obj, REN_ForceGlobalUnique);


В PostInitProperties вызвать?
_________________
https://www.facebook.com/groups/uejob/
Аватара пользователя
Пользователь
Сообщения: 2319
Andy_rst ,
зделал массив булевый у каждого стола...
если за него отвечает официант, он добавляет в массив булевую свою.
и записывает в ассоциативный массив адресс -
Код:
class UWaiter //класс официант
{
  ...
  TMap<int32,int32> ServiceBollAdress //tableID , boolID

  ...
}
///////////////////////////
class UTable
{
   void DrinkBeer() {};//
   TArray<bool> bNeedBeerTables; //по сути это - кеш булевых из официантов
};

////////////////////////////
//булевые из официанта в столы
//где в метод вставить это кусок для инициализации
// и аналогичным способов обновлять булевые значения уже в каком-то друго методе
  for (int i = 0; i < Waiter.Num(); i++) //задаем булевые массивы в столах и записываем адреса
  {
    for (int j = 0; j < Waiter[j]->HereTableCachedID.Num(); j++)
    {
       //boolID
       int32 d =Tables[Waiter[j]->HereTableCachedI[j]].bNeedBeerTables.Add(bNeedBeer[Waiter[j]->HereTableCachedI[j]]);
       ServiceBollAdress.Add(Waiter[j]->HereTableCachedI[j], d); //add to TMap
    }
  }
////////////
...
   void CafeRun()
   {
      for (int j = 0; j < Waiter.Num(); j++)//цикл официантов
      {
         for (int i = 0; i < Waiter[j]->HereTableCachedID.Num(); i++) //цикл обслуживаемых столов у официанта
         {
            //проверяем нужно ли нести на стол пиво
            //содержит ли булевый массив true
            //это должно быть быстро по идее
            if (Tables[Waiter[j]->HereTableCachedID].bNeedBeerTables.Contains(true))
            {
               Waiter[j]->SetBeer(Tables[Waiter[j]->HereTableCachedID]);//несем пиво
            }
         }
      }
      TablesDrinkBeer(); //столы выпивают пиво
   }

немного грязно именно в такой записи потому что айди столов и ключи ассоциативного массива булевых адресов дублируется
поэтому их нужно обьединить в одну переменную.
проверка булевого массива содержит ли он true - если зависит от размера массива,
тогда проверка столов с одним официантом будет мгновенная, а с большим кол-вом официантов пропорциональна их количству на данный стол.
так что я думаю что это неплохой способ.

по сути это официант выставляет и убирает таблички на стол "свободная касса!", и запоминает какя из табличек его.
если на столе есть хоть одна табличка значит стол обслуживается.

можно наоброт в столы записывать адреса булевых в официантах... и читать булевые прямо из официантов.
но тогда становится неудобная проверка в цикле хоть и по прямым адресам, не будет мозможности для быстрой .Contains(true)

естественно в оригинальная задача не связанна с кафе... поток данных просто аналогичный.
_________________
we need to go deeper
Последний раз редактировалось Snake 22 янв 2018, 13:29, всего редактировалось 8 раз(а).
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
В PostInitProperties вызвать?

хм...
неа не хотит:
Код:
   virtual void PostInitProperties() override
      {
         Super::PostInitProperties();
         Rename(*FString(GetNameSafe(this->GetOuter()) + GetNameSafe(this)), this->GetOuter(), REN_ForceGlobalUnique);
      }

краш...
оно мне по сути только для дебага нужно... чтоб видеть кому принадлежит у обжект по его имени...
а ну еще немного смущает... что есть одноименные уобжекты в редакторе...
понятно что имя для редактора не определяет идентификацию обжекта, но все же...
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 860
Snake писал(а):
Цитата:
В PostInitProperties вызвать?

хм...
неа не хотит:
Код:
   virtual void PostInitProperties() override
      {
         Super::PostInitProperties();
         Rename(*FString(GetNameSafe(this->GetOuter()) + GetNameSafe(this)), this->GetOuter(), REN_ForceGlobalUnique);
      }

краш...
оно мне по сути только для дебага нужно... чтоб видеть кому принадлежит у обжект по его имени...
а ну еще немного смущает... что есть одноименные уобжекты в редакторе...
понятно что имя для редактора не определяет идентификацию обжекта, но все же...


Возможно:

UObject::Rename is looking for a const TCHAR*
const TCHAR * NewName

const TCHAR* newName = *FString(GetNameSafe(this->GetOuter()) + GetNameSafe(this));

или

const TCHAR * newName = ANSI_TO_TCHAR(....);
_________________
https://www.facebook.com/groups/uejob/
Аватара пользователя
Пользователь
Сообщения: 2319
все равно крашит...с бриак-понитом на Rename()
надо пример у епкиов найти...у какого клааса может быть такая ерунда?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 860
Snake писал(а):
все равно крашит...с бриак-понитом на Rename()
надо пример у епкиов найти...у какого клааса может быть такая ерунда?




// Rename component to avoid naming conflicts in the case where we rerun the SCS and name the new components the same way.
FName const NewBaseName( *(FString::Printf(TEXT("TRASH_%s"), *Component->GetClass()->GetName())) );
FName const NewObjectName = MakeUniqueObjectName(this, GetClass(), NewBaseName);
Component->Rename(*NewObjectName.ToString(), this, REN_ForceNoResetLoaders|REN_DontCreateRedirectors|REN_NonTransactional);
_________________
https://www.facebook.com/groups/uejob/
Аватара пользователя
Пользователь
Сообщения: 2319
Andy_rst , по примеру этого кода - работает! Благодарю.
только с флагами не совсем понятно... какие нужны, какие нет.

_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 860
Snake писал(а):
Andy_rst , по примеру этого кода - работает! Благодарю.
только с флагами не совсем понятно... какие нужны, какие нет.


Это внутри движка, в одном из мест где удаляется actor, скорее всего тип флага(ов) нужно смотреть, но какие точно сложный вопрос.
_________________
https://www.facebook.com/groups/uejob/
Аватара пользователя
Пользователь
Сообщения: 2319
елси нужно тупо изменить имя и больше ничего.
в момент изменения имени только Outer связан с обьектом, обьект больше ни на кого не завязан.
тоесть владельца не меняем, и указатели на обьект присваиваются уже после изменения имени...
переконструировать или обновлять какие либо переменные тоже не нужно.
и обьект дальше должен работать как обычно.
формулировки у флагом такие неконкретные... что их назначение непонятное.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
хочу с делегатами на С++ разобраться...
и мне требуется немного помощи:
по порядку:
декларирование? в каком классе должна быть декларация в том котором вызывается ивент, или в том в котором мы хотим его забиндить.
тоесть как это работает?
делегат привязывается к существующему ивенту? и вызывает бинд функцию когда сработал привязанный ивент?

хм пример какойто...

Код:
class MyClass
{
  bool MyBool;
  void changeBool(bool NewValue)
  {
    Mybool = NewValue;
  }
}


//в другом хедере
class OtherClass
{
   MyClass* SomeName;
   virtual void UpdateBoolInSomeName();
}


нужно чтоб в классе OtherClass срабатывал ивент UpdateBoolInSomeName()
каждый раз когда в переменной SomeClass будет срабвтывать ивент changeBool()
Example?
_________________
we need to go deeper


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница