Добавлен , не публикуется
//v 1.5
library Index
{
    public hashtable Data = InitHashtable()
    private int count = 0
    private int slotCount = 0
    private int array buffSlots
    private bool array ValueIsStatic
    private int array staticIndexes
    private int staticIndexesCount;
    
    #define private Value = 0;
    #define private Value2 = 0;
      
    // обнуление значения объекта
    public void Flush(handle h)
    {
        int hId = GetHandleId(h);
        int objectId = LoadInteger(Index_Data,hId,Value);
        if (!ValueIsStatic[objectId] && objectId > 0)
        {
            slotCount++;
            buffSlots[slotCount] = objectId;
            FlushChildHashtable(Index_Data,hId)
        }
    }
    
    // удаление объекта с обнулением
    #define Index_Remove(objectType, object) = 
    {
        #if(objectType == unit)
            RemoveUnit(object);
        #elseif(objectType == timer)
            PauseTimer(object);
            DestroyTimer(object);
        #elseif (objectType == group)
            GroupClear(object);
            DestroyGroup(object);
        #elseif (objectType == item)
            RemoveItem(object)
        #elseif (objectType == location)
            RemoveLocation(object)
        #elseif (objectType == rect)
            RemoveRect(object)
        #elseif (objectType == region)
            RemoveRegion(object)
        #elseif (objectType == effect)
            DestroyEffect(object)
        #endif
        Index_Flush(object)
    }
    
    // присвоить значения объекту
    #define Index_SetValue(h, val) =
    {
        SaveInteger(Index_Data,GetHandleId(h),Value2,val)
    }
    
    // возвращает присвоенное значение
    #define Index_GetValue(h) =
    {
        LoadInteger(Index_Data,GetHandleId(h),Value2)
    }
    
    // присваивание id объекту
    #define Index_Set(h, val, isStatic) =
    {
        SaveInteger(Index_Data,GetHandleId(h),Value,val)
        #if (isStatic)
            ValueIsStatic[val] = true;
            staticIndexes[staticIndexesCount] = val;
            staticIndexesCount++;
        #endif
    }
    
    // автоприсваивание id объекту
    public int Get(handle object, bool isStatic)
    {
        int hId = GetHandleId(object)
        if (!HaveSavedInteger(Index_Data,hId,Value))
        {
            if (slotCount > 0)
            {
                if (isStatic)
                {
                    Index_Set(object,buffSlots[slotCount],true);
                }
                else
                {
                    Index_Set(object,buffSlots[slotCount],false);
                }
                slotCount--;
            }
            else
            {
                count++;
                if (isStatic)
                {
                    Index_Set(object,count, true);
                }
                else
                {
                    Index_Set(object,count, false);
                }
            }
        }
        return LoadInteger(Index_Data,hId,Value);
    } 
    
    public int Get2(handle object)
    {
        return LoadInteger(Index_Data, GetHandleId(object),Value);
    }
    
    
    callback onUnitDeath()
    {
        Flush(GetDyingUnit());
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
29
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
15
довольно удобная система, все продуманно, багов не нашел
еще бы нашел бы я баги
Doc:
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
ого пока писал коммент еще 1 появился
ну почему Док?
это хомяков это очень удобно, не надо писать все проверки и тд просо написал 1 функциюи готово. В эо и сила автоматизации офк
24
Doc:
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
Пруф?
29
Пруф в названии!
Get на то и гет, что вовзращает значение и ниче не делает.
Если уж делать чтобы что-то делало нужно аргумент вводить типа checkIfIndexExists а то неочевидно же.
24
Пруф в названии!
Doc, блин, ну это совсем не архитектурный фейл, это скорее небрежность в именовании. Но это связано с тем, что эта барахолка сделана для меня самого. Если бы это был код в массы, то скидывал б в барахолку:)
Get на то и гет, что вовзращает значение и ниче не делает.
Поюзай норм языки кроме жабы, поймешь что это не разу не так. намек на проперти.
Если уж делать чтобы что-то делало нужно аргумент вводить типа checkIfIndexExists а то неочевидно же.
Ты знал что вызов лишней функции, в которой, мало инструкций - не оптимален?
29
Я лучше сольюсь, лень спорить.
Тебе решать и офк я понимаю, что это не для паблика, но надо же было КАМЕНТИК НАПИСАТЬ))))
И да, я между прочим и на шарпе писаю! И на скале! И даже на си (но это давно и не правда)
24
намек на проперти

// автопроперти
        public List<int> GetIndex { get; set; }

        // пропертя с филдом
        private List<int> _getIndex2;
        public List<int> GetIndex2
        {
            get { return _getIndex2; }
            set { _getIndex2 = value; }
        }

        // а еще можно так
        private List<int> _getIndex3 = null;
        public List<int> GetIndex3
        {
            get
            {
                if (_getIndex3 == null)
                {
                    // another code
                    GetIndex3 = new List<int>{0,1,2,3};
                }
                return _getIndex2;
            }
            private set { _getIndex2 = value; }
        }
19
PauseTimer(object);
DestroyTimer(object);
Сказал решительное НЕТ
24
Не помню откуда, но есть инфа что запаузенный таймер дестроится быстрее :\
29
Faion, есть инфа, что если не паузить, то он может вообще не уничтожиться.
24
а ну да, многие такие детали уже бтв не помню, пишу по большей части на автомате.
Недавно бтв был забавный случай, меня "просвятили" на одну тему... ну для меня это было "новостью". Полез в код, смотрю, я и так пишу как над:)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.