// Конструктор сразу определяет тип данных
 public Resource(Transform AParent, ResourceType AResType, TSHClassStorageSlot ASlot)
 {
     UID       = (int)AResType;
     ResType   = AResType;
     Slot      = ASlot;
     Model     = PrefabManager.CreateResourceModel(AResType).transform;
     Transform = PrefabManager.CreateResourceCore().transform;
     Transform.SetParent(AParent, false);
     Model.SetParent(Transform, false);
     FScript = Transform.GetComponent <MSHObjectResource>();
     FScript.Init(this);
 }
Example #2
0
 // Создание и настройка слота
 protected override void DoInit(Interactive ASubject)
 {
     FSelf               = (TSHClassStorageSlot)ASubject;
     FImage              = FSelf.Transform.GetComponent <Image>();
     FImageColorPassive  = FImage.color;
     FImageColorActive   = FImageColorPassive;
     FImageColorActive.a = 125;
     FInfoCount          = FSelf.Transform.Find("Info");
     FCount              = FInfoCount.Find("Count").GetComponent <Text>();
     FBackground         = GetComponent <Image>();
     FCollider           = GetComponent <Collider>();
     ChangeEnable(false);
 }
        // Клонирование указанного количества слотов
        private void DoStorageCreate(int AStart, int ACount, bool AClear)
        {
            // Слоты всегда создаются для игрока, либо разово для планеты
            if ((PlayerStorage) ||
                (FSlots.Count == 0))
            {
                TSHClassStorageSlot LSlot;
                int LDefCount;

                if (PlayerStorage)
                {
                    LDefCount = ACount;
                }
                else
                {
                    LDefCount = FPlanetarStorageCount;
                }
                for (int LIndex = AStart; LIndex < LDefCount; LIndex++)
                {
                    LSlot = new TSHClassStorageSlot(UIStorageSlots, LIndex + 1, PlayerStorage);
                    FSlots.Add(LSlot);
                }
            }
            // Для планеты включим нужные слоты, удалив данные о старых
            if (!PlayerStorage)
            {
                for (int LIndex = 0; LIndex < FPlanetarStorageCount; LIndex++)
                {
                    if (AClear)
                    {
                        // Удалить висящую модельку
                        DoResourceClear(ref FSlots[LIndex].Resource);
                        // Выключить все тексты
                        FSlots[LIndex].ChangeEnable(false);
                    }
                    // Включаем только нужные слоты и делаем их активными, другие выключаем
                    FSlots[LIndex].ChangeState(LIndex < ACount, ActiveSlot);
                }
            }
            FStorageCount = ACount;
        }
        // Обновление данных указанного слота, создание ресурсов в нем
        public void Change(int APlanet, int AIndex, int AResID, int ACount, int AFlags, bool AActive)
        {
            if (Engine.UIPlanetDetails.ActivePlanetId() != APlanet)
            {
                return;
            }
            TSHClassStorageSlot LSlot = FSlots[AIndex - 1];

            // Выставление фона слоту
            if (!AActive)
            {
                LSlot.ChangeState(true, PassiveSlot);
            }
            else
            {
                LSlot.ChangeState(true, ActiveSlot);
            }
            // Обновим сам слот
            LSlot.Active = AActive;
            DoStorageUpdate(LSlot, (Shared.ResourceType)AResID, ACount);
        }
        // Очистка слота от ресурсов
        public void Clear(int APlanet, int AIndex)
        {
            if (Engine.UIPlanetDetails.ActivePlanetId() != APlanet)
            {
                return;
            }
            TSHClassStorageSlot LSlot = FSlots[AIndex - 1];

            // Удалим сам ресурс если он есть
            DoResourceClear(ref LSlot.Resource);

            // Скроем слот если он был неактивным или цифры если активный
            if (!LSlot.Active)
            {
                LSlot.ChangeState(false, null);
            }
            else
            {
                LSlot.ChangeEnable(false);
            }
        }
 // Логика обновления любого хранилища по запросу сервера
 private void DoStorageUpdate(TSHClassStorageSlot ASlot, Shared.ResourceType AResourceType, int ACount)
 {
     // Удалим старый ресурс, если добавляется ресурс другого типа
     if ((ASlot.Resource != null) && (ASlot.Resource.ResType != AResourceType))
     {
         DoResourceClear(ref ASlot.Resource);
     }
     // Если входящий ресурс есть
     if (AResourceType != Shared.ResourceType.Empty)
     {
         // Создадим ресурс, если его нет в слоте
         if (ASlot.Resource == null)
         {
             ASlot.Resource = new Shared.Resource(ASlot.Transform, AResourceType, ASlot);
             ASlot.Resource.OnResourceMove = DoResourceMove;
         }
         ASlot.Resource.Count = ACount;
     }
     // Обновим количество ресурса
     ASlot.ChangeCount(ACount);
     ASlot.ChangeEnable(ACount > 0);
 }