Добавлен quq_CCCP,
не публикуется
Создание спецэффектов на время
что даёт сие чудо?
Данная библиотека позволяет создавать спецэффекты на определённое время, не волнуясь об утечках и читаемости кода.
Как работает
Данная библиотека позволяет нам использовать 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
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Bj_приставки... Ну можно и другие, с ними намного удобнее менять названия переменных чреез Replase и вставлять туда свои значаниея, так как переменная выделяется из общего текста приставкой...
про private да ты что?, как не расставлены, еще как расставлены перед темы функциями которые можно вызывать только из тела библиотеки.
Поэтому GetUnitZ не может быть приватной, ну не как, иначе как мы будем преломлять высоту юнита для AddSpecialEffectZtoTimed...
Насчёт без, хеш консткруций - Ты действительно думаеш что тут это оправдано? раздуть код более чем в двое чтобы выиграть пару мс,....?
Или тебе больше нечего противопоставить? (был бы человек, а статья обязательно найдётся.. И. Сталин)
Мне всегда казалось, что важен результат. Впрочем, делай как знаешь, я уже сказал, почему придираюсь.
Doc, а кстати чё там поправить? bj_ приставки убрать? (ну конечно, это же так принципиально в работе библиотеки) и переписать на без хеш конструкции?
Или есть еще какие то весомые аргументы против системы?
Было бы еще неплохо расставить комменты к функциям в самой системе. + Прокомментировать, что значит HeightFactor.
Doc, кстати, неужели обязательно использовать Структуру и вешать каждый эффект на 1 периодический таймер? Толку же будет 0, производительность не станет выше....