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

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

Закрытая тема
 
Clamp
Lost in space
offline
Опыт: 71,258
Активность:
Работа с переменной типа code
Вопрос довольно простой. В моей карте я сделал систему отлова урона и, чтобы не засорять ничего, делаю все действия, связанные с получением урона, на одном триггере.
Выглядит это вот так:
((кат Код
library UnitDamaged initializer InitRect
{
    private region Region
    private trigger Trigger
    
    private nothing Adder()
    {
        if(GetEnteringUnit()!=null)
        {
            TriggerRegisterUnitEvent(GetTriggeringTrigger(),GetEnteringUnit(),EVENT_UNIT_DAMAGED)
        }
    }
    
    void OnDamage(code actionFunc)
    {
        TriggerAddAction(Trigger, actionFunc)
    }
    
    private nothing AnyUnitDamagedEvent(trigger trg)
    {
        group CurrentUnits = CreateGroup()
        unit Picked
        GroupEnumUnitsInRect(CurrentUnits,bj_mapInitialPlayableArea,null)
        loop
        {
            Picked = FirstOfGroup(CurrentUnits)
            exitwhen Picked == null
            TriggerRegisterUnitEvent(trg,Picked,EVENT_UNIT_DAMAGED)
            GroupRemoveUnit(CurrentUnits,Picked)
        }
        TriggerRegisterEnterRegion(trg,Region,null)
        TriggerAddAction(trg,function Adder)
        DestroyGroup(CurrentUnits)
        CurrentUnits=null
    }

    private nothing InitRect()
    {
        Region = CreateRegion()
        Trigger = CreateTrigger()
        AnyUnitDamagedEvent(Trigger)
        RegionAddRect(Region, bj_mapInitialPlayableArea)
    }
}
))
Чтобы система не реагировала на появление нового юнита на карте, я вписываю в каждом новом добавляемом действии условие if(GetEnteringUnit()==null){} вокруг всей функции.
Собственно, вопрос. Можно ли сделать так, чтобы функция получала code, вокруг него как бы дописывала if(GetEnteringUnit()==null){} и передавала дальше?
Старый 21.01.2013, 04:38
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,598
Активность:
Clamp, на сколько я знаю с CODE в игре уже нечего сделать нельзя ни массив сделать, не взять ID от code, тупо юзать как ссылку на функцию....
Старый 21.01.2013, 07:29
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
сути вопроса не понял
quq_CCCP, ну код можно хранить либо в таймере, либо в триггере
Старый 21.01.2013, 10:29
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,598
Активность:
alexprey, ну да, а изменять в нем условие и прочее вроде некак нельзя, и записать как сумму CODE тоже нельзя, он даже и не массив (что очень хреново)
Старый 21.01.2013, 12:14
DioD

offline
Опыт: 45,184
Активность:
в отличии от нормальных языков, где можно получить метод и инвокать его, в джасе это делать нельзя.
Старый 21.01.2013, 13:17
J64_

offline
Опыт: 4,724
Активность:
native TriggerEvaluate takes trigger whichTrigger returns boolean
Старый 21.01.2013, 19:06
Clamp
Lost in space
offline
Опыт: 71,258
Активность:
Judycaster64, к чему это?
Clamp добавил:
DioD, то есть вообще никак? Всем спасибо в таком случае, закрывайте тему.
Старый 21.01.2013, 19:37
Закрытая тема

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

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

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

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



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