Создание спецэффектов на время
что даёт сие чудо?
Данная библиотека позволяет создавать спецэффекты на определённое время, не волнуясь об утечках и читаемости кода.
Как работает
Данная библиотека позволяет нам использовать 3 новые функции:
Указываем путь к спецэффекту, юнита цель, точку крепления модели эффекта и время жизни спецэффекта...
Данная библиотека позволяет создавать спецэффекты на определённое время, не волнуясь об утечках и читаемости кода.
Как работает
Данная библиотека позволяет нам использовать 3 новые функции:
- AddSpecialEffectTargetToTimed
Указываем путь к спецэффекту, юнита цель, точку крепления модели эффекта и время жизни спецэффекта...
function AddSpecialEffectTargetToTimed takes string path, widget targetWidget, string attachPointName, real timeout returns nothing
- AddSpecialEffectToTimed
Указываем путь к спецэффекту, координату X, координату Y, и время жизни спецэффекта.
function AddSpecialEffectToTimed takes string path, real x, real y, real timeout returns nothing
- AddSpecialEffectZtoTimed
Указываем путь к спецэффекту, координату X, координату Y, высоту z и время жизни спецэффекта.
function AddSpecialEffectZtoTimed takes string path, real x, real y, real z, real timeout returns nothing
- Необязательно, но тем не менее важно:
а зачем её юзать?
- Данная библиотека не использует локальные переменные, а это повышение производительности...
- Данная библиотека не вызывает утечек, так что вы всегда будите уверены что у вас удалятся все ненужные спецэффекты...
- Данная библиотека экономит время, и сокращает время картодела и конечный код...
код библиотеки
library EffectsTimedLife initializer InitHash
//==================================================
// Автор quq_CCCP Сделано для сайта XGM.ru
// Одна из функций взята с барахолки (AddSpecialEffectZ, Автор - bee )
// Копируем в и юзаем AddSpecialEffectTargetToTimed, и 2 другие функции
//==================================================
globals
// обьявление вспомогательных переменных, нужных для работы системы (лучше не трогать)
private timer bj_effectTimer
private integer bj_effectTimerId
private destructable bj_auxDestructable
private location bj_AdditionalPoint = Location( 0.00, 0.00 )
private real bj_HeightFactor = 45.00 //базовая высота юнита над рельефом, можно задать на своё усмотрение.
private hashtable bj_Hash
endglobals
private function InitHash takes nothing returns nothing
set bj_Hash = InitHashtable( )
endfunction
private function DestroyEffectToTimed takes nothing returns nothing // удаление спецэффекта.
set bj_effectTimer = GetExpiredTimer( )
set bj_effectTimerId = GetHandleId( bj_effectTimer )
call DestroyTimer( bj_effectTimer )
call DestroyEffect( LoadEffectHandle( bj_Hash, bj_effectTimerId, 0 ) )
call FlushChildHashtable( bj_Hash, bj_effectTimerId )
endfunction
function GetUnitZ takes unit whithUnit returns real // функция возвращающая высоту юнита
call MoveLocation( bj_AdditionalPoint, GetUnitX(whithUnit), GetUnitY( whithUnit ) )
return GetLocationZ( bj_AdditionalPoint ) + bj_HeightFactor + GetUnitFlyHeight( whithUnit )
endfunction
function AddSpecialEffectTargetToTimed takes string path, widget targetWidget, string attachPointName, real timeout returns nothing // создаёт спецэффект на указанном юните.
set bj_effectTimer = CreateTimer( )
call SaveEffectHandle( bj_Hash, GetHandleId( bj_effectTimer ), 0, AddSpecialEffectTarget( path, targetWidget, attachPointName ) )
call TimerStart( bj_effectTimer, timeout, false, function DestroyEffectToTimed )
endfunction
function AddSpecialEffectToTimed takes string path, real x, real y, real timeout returns nothing // создаёт спецэффект в указанных координатах
set bj_effectTimer = CreateTimer( )
call SaveEffectHandle( bj_Hash, GetHandleId( bj_effectTimer ), 0, AddSpecialEffect( path, x, y ) )
call TimerStart( bj_effectTimer, timeout, false, function DestroyEffectToTimed )
endfunction
function AddSpecialEffectZtoTimed takes string path, real x, real y, real z, real timeout returns nothing // создаёт спецэффект в казаннх координатах и на некоторой высоте Z.
set bj_auxDestructable = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 )
call AddSpecialEffectToTimed( path, x, y, timeout )
call RemoveDestructable( bj_auxDestructable )
endfunction
endlibrary
Поэтому GetUnitZ не может быть приватной, ну не как, иначе как мы будем преломлять высоту юнита для AddSpecialEffectZtoTimed...
Насчёт без, хеш консткруций - Ты действительно думаеш что тут это оправдано? раздуть код более чем в двое чтобы выиграть пару мс,....?
Или тебе больше нечего противопоставить? (был бы человек, а статья обязательно найдётся.. И. Сталин)
Мне всегда казалось, что важен результат. Впрочем, делай как знаешь, я уже сказал, почему придираюсь.
Doc, а кстати чё там поправить? bj_ приставки убрать? (ну конечно, это же так принципиально в работе библиотеки) и переписать на без хеш конструкции?
Или есть еще какие то весомые аргументы против системы?
Было бы еще неплохо расставить комменты к функциям в самой системе. + Прокомментировать, что значит HeightFactor.
Doc, кстати, неужели обязательно использовать Структуру и вешать каждый эффект на 1 периодический таймер? Толку же будет 0, производительность не станет выше....