Как можно сделать это с помощью одного таймера? Чтобы каждый раз не создавался таймер, а использовался 1 на всю игру.
public function DestroyLightningTimed_TimerCallback takes nothing returns nothing
        local timer t = GetExpiredTimer( )

        call DestroyLightning( LoadLightningHandle( HASHTABLE, GetHandleId( t ), 0 ) )

        call FlushChildHashtable( HASHTABLE, GetHandleId( t ) )
        call DestroyTimer( t )
        set t = null
    endfunction

    function DestroyLightningTimed takes lightning whichBolt, real delay returns nothing
        local timer t = CreateTimer( )

        call SaveLightningHandle( HASHTABLE, GetHandleId(t), 0, whichBolt )
        call TimerStart( t, delay, false, function DestroyLightningTimed_TimerCallback )

        set t = null
    endfunction

Принятый ответ

Делается таймер с относительно низким периодом, к каждой молнии лепится float, и каждый тик таймер проходится по списку структур и уменьшает все эти float на свой период. Если после уменьшения float <= 0, то структура вместе с молнией исключается из списка обходимых таймером и уничтожается.

Sergey105, советую почитать какие-нибудь общепринятые гайдлайны по оформлению кода. Так как cJass эмулирует C++, сойдёт общий набор рекомендаций по нему от Google.

Sergey105, касательно кода замечу, что перезапускать таймер при каждом добавлении структуры нецелесообразно, лучше запустить его единожды и просто бегать по статическому массиву структур.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
7
7 лет назад
0
ScopteRectuS, могу показать как сделать со структурой такое
0
21
7 лет назад
0
Sergey105, да, хотелось бы посмотреть.
0
7
7 лет назад
Отредактирован Clamp
0
struct  ordered_struct {
            unit ord 
            unit ord_targ
            location ord_targ_loc
    //----------------------------------------------------------
    private static timer t = CreateTimer();
    private static int count = 0x00;
    private static bool TB = false;
    //----------------------------------------------------------
    private static void UpdateOD(){}
    private static void AddUpdateOrder(unit ord, unit ord_targ){
            ordered_struct OD = 0x00;
            if FindIdClassByUnit(ord)!= 0 { RemoveUnitFromUpdate(ord) };
            count++;
            OD = ordered_struct.create();
            OD.ord = ord; 
            OD.ord_targ = ord_targ;
            
            if TB == false{
               TB = true;
               TimerStart(t, 0.05, true, function ordered_struct.UpdateOD)
            }
    }
    private static void RemoveUnitFromUpdate(unit ord){
            ordered_struct OD = 0x00;
            OD = FindIdClassByUnit(ord);
            if OD > 0 {
               OD.ord = null;
               OD.destroy()
            }  count--;
    }//endfunction
    private static ordered_struct FindIdClassByUnit(unit ord){
            ordered_struct OD = 0x00;
            while(OD <= count){
                if OD.ord == ord { ord = null; return OD }
            OD++;
            }
            ord = null; return 0;
    }//endfunction
    }//endstruct
ну учти это в библиотеке и за этого private
что непонятно пиши
и да это пример с юнитами
ну можно переделать по своему
0
32
7 лет назад
0
Эх можно бы было узнать хендл triggeraction'a в потоке триггера...
2
23
7 лет назад
2
Sergey105, ставь бб код jass иначе не удобно читать
2
30
7 лет назад
Отредактирован Clamp
2
Делается таймер с относительно низким периодом, к каждой молнии лепится float, и каждый тик таймер проходится по списку структур и уменьшает все эти float на свой период. Если после уменьшения float <= 0, то структура вместе с молнией исключается из списка обходимых таймером и уничтожается.

Sergey105, советую почитать какие-нибудь общепринятые гайдлайны по оформлению кода. Так как cJass эмулирует C++, сойдёт общий набор рекомендаций по нему от Google.

Sergey105, касательно кода замечу, что перезапускать таймер при каждом добавлении структуры нецелесообразно, лучше запустить его единожды и просто бегать по статическому массиву структур.
Принятый ответ
0
4
7 лет назад
0
Копипастишь либу из OneTimer или добавляешь через #include
Здесь пример
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.