XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Msey
????
offline
Опыт: 67,346
Активность:
TimerUtils мультиприменение
Решил испробовать весь функционал библиотеки TimerUtils дабы избавиться от хеш-таблиц, однако не понял, как сохранить несколько одинаковых типов переменных в одном и на одну таймер-дату. Подскажите пжалст.
Вот пример на один спецэффект, а как быть, если их 2 и более?
library A requires TimerUtils

struct s
    effect fx
endstruct

private function f takes nothing returns nothing
    local s ew=GetTimerData(GetExpiredTimer())
    call DestroySpecialEffect(ew.sfx)
    call ew.destroy()
    call ReleaseTimer(GetExpiredTimer())
endfunction

public  function TimedEffect takes effect fx, real time returns nothing
    local timer t=NewTimer()
    local s ew = s.create()
    set ew.sfx=sfx
    call SetTimerData(t,ew)
    call TimerStart(t,time,false,function f)
    set t=null
endfunction

endlibrary

Отредактировано Msey, 16.05.2012 в 14:26.
Старый 16.05.2012, 14:13
Doc

offline
Опыт: 63,163
Активность:
омг в структуру s пихать, нет?
Старый 16.05.2012, 14:17
Msey
????
offline
Опыт: 67,346
Активность:
мне нужно записать несколько эффектов fx на одну таймер дату под своими номерами, а потом выгружать в определенном порядке.
это можно сделать, не используя массив? [поправил пост]
like this
call SaveEffectHandle(h, i, 0, sfx)
call SaveEffectHandle(h, i, 1, sfx)
call SaveEffectHandle(h, i, 2, sfx)

Отредактировано Msey, 16.05.2012 в 14:45.
Старый 16.05.2012, 14:39
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Msey, а разве в структуру нельзя напихать кучу переменных одного типа но с разными именами?
Старый 16.05.2012, 14:40
Msey
????
offline
Опыт: 67,346
Активность:
quq_CCCP, мне не нужна куча переменных. все так и поют, что timerutils удобней. Но для меня это пока не особо заметно
Старый 16.05.2012, 14:43
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ну я не юзаю, только хештейблы, а собственно Msey, есть ли необходимость в структурах и TimerUtils ? Насколько я знаю они дают повышенную производительность кода но раздувают его, если у тебя не суппер пупер скилл, который порой подвисает на хеше то особого смысла юзать структуры и TimerUtils нету...
Старый 16.05.2012, 14:45
Msey
????
offline
Опыт: 67,346
Активность:
quq_CCCP:
только хештейблы
больше ими не хочу пользоваться
есть ли необходимость в структурах и TimerUtils ? Насколько я знаю они дают повышенную производительность кода но раздувают его, если у тебя не суппер пупер скилл
я свою MissileSystem переделываю с нуля. не знаю, скачивал ты или нет.. но она довольно тормознутая
Старый 16.05.2012, 14:50
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Msey, ну довольно тормозная она очень даже может быть не из за хеша... (да я скачивал, бегло смотрел)
Насчёт массивов в структуре думаю это не реал, ибо структура по сути и есть массив...
либо 10 структур делать, и каждую вешать на таймер (бред, тут и RB+GameCache догонит)
Старый 16.05.2012, 14:54
ScorpioT1000
Работаем
online
Опыт: отключен
Я круче, смотри:
library A requires TimerUtils {

struct EffectContainer {
	effect fx0
	effect fx1
	effect fx2
	
	static thistype New(effect _fx0, effect _fx1, effect _fx2) {
		thistype this = thistype.create()
		.fx0 = _fx0
		.fx1 = _fx1
		.fx2 = _fx2
		return this
	}
	
	void Delete() {
		if(.fx0 != null) {
			DestroySpecialEffect(.fx0)
		}
		if(.fx1 != null) {
			DestroySpecialEffect(.fx1)
		}
		if(.fx2 != null) {
			DestroySpecialEffect(.fx2)
		}
		this.destroy()
	}
}

private void f () {
	EffectContainer ec = GetTimerData(GetExpiredTimer())
	ec.Delete()
	ReleaseTimer(GetExpiredTimer())
}

public  void TimedEffect(effect externalFx0, effect externalFx1, effect externalFx2, real time) {
	call SetTimerData(t, EffectContainer.New(externalFx0,externalFx1,externalFx2) )
	call TimerStart(NewTimer(),time,false,function f)
}

}
поправил*

Отредактировано ScorpioT1000, 16.05.2012 в 15:05.
Старый 16.05.2012, 14:58
Doc

offline
Опыт: 63,163
Активность:
Есть мнение, что в структурах можно юзать массивы.
Старый 16.05.2012, 15:00
ScorpioT1000
Работаем
online
Опыт: отключен
Есть мнение, что нельзя съесть самого себя.
Старый 16.05.2012, 15:02
Msey
????
offline
Опыт: 67,346
Активность:
ScorpioT1000, всегда выручаешь)
Спасибо, буду разбираться, закрывайте.
Старый 16.05.2012, 15:14
DioD

offline
Опыт: 45,134
Активность:
тут даже структура не нужна
effectarray1[timerid]
effectarray2[timerid]
effectarray3[timerid]
Старый 16.05.2012, 15:22
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:15.