Есть moving system, сделанная из таймера и структуры. Эта система просто двигает один объект к другому с указанной скоростью.
Условно:
У пяти разных юнитов есть 5 разных снарядов, которые имеют 5 разных эффектов при столкновении, и которые движутся с помощью moving system.
То есть когда снаряд перестает двигаться, то есть достигает цели, структура уничтожается, и в этот момент мне нужно воздействовать на цель снаряда, на сам снаряд и на хозяина снаряда.
Я не хочу захламлять структуру или создавать разные структуры для разных способностей, поэтому я ищу способ при уничтожении структуры moving system запускать разные функции и передавать в них необходимые данные.
Что я делаю: (временно назовем структуру, двигающую объект, структурой A)
Сохраняю необходимые данные в структуру B (включая сам снаряд).
При создании структуры A также передаю ей abilID, хранящий в себе айди пустой способности, которую можно кастовать на юнита.
При уничтожении структуры А (то есть при столкновении снаряда с целью) создаю дамми-юнит, даю ему способность abilID и заставляю дамми кастовать abilID на снаряд.
При касте способности реагирует соответствующий триггер и запускает нужную мне функцию. В этой функции GetSpellTargetUnit() будет моим снарядом. Перебором структуры B я получаю нужные данные и теперь могу делать, что хочу.
Поскольку я могу передавать структуре разные abilID, в результате будут вызываться разные функции.

Так вот. Я уверен на 100%, что это весьма конченный способ. Подскажите, как можно добиться того же результата более легким способом?

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

способ 1
вешать структуру на таймер с помощью эксплойта (для тех кто не знает структура это число) а потом этим таймером вызывать нужную функцию спустя 0 секунд
плюсы:
простота
минусы:
требует добавлять иф на каждую новую функцию
второй способ
тоже самое что и 1 только на таймер вешается вдобавок название функции и таймер вызывает её экзекутом
вот моя библиотека по 2 способу и карта с примером
в библиотеке в самом верху есть небольшой док по 3 функциям
Загруженные файлы
3
26
7 лет назад
3
ну если метод работает то почему нет?
каким бы конченным он не был, если он работает и не вызывает лагов/багов то все пучком.
я например сделал базу данных снарядов, и в конце вызываю другую функцию в которую передаю все нужные мне данные, например снаряд, кто его выпустил, и в кого он воткнулся. а из не я уже могу делать все что хочу. и по базе данных я нахожу все что мне нужно
0
28
7 лет назад
Отредактирован nvc123
0
способ 1
вешать структуру на таймер с помощью эксплойта (для тех кто не знает структура это число) а потом этим таймером вызывать нужную функцию спустя 0 секунд
плюсы:
простота
минусы:
требует добавлять иф на каждую новую функцию
второй способ
тоже самое что и 1 только на таймер вешается вдобавок название функции и таймер вызывает её экзекутом
вот моя библиотека по 2 способу и карта с примером
в библиотеке в самом верху есть небольшой док по 3 функциям
Загруженные файлы
Принятый ответ
0
30
7 лет назад
Отредактирован Clamp
0
Реализовывай всё в одной структуре через добавление методов напрямую, модулями или через наследование.
0
28
7 лет назад
Отредактирован nvc123
0
через добавление методов напрямую
нарушает принципы ооп
Clamp:
через наследование
в vjass наследование кривое и нету нормального полиморфизма
про модули не понял
0
30
7 лет назад
0
нарушает принципы ооп
В варкрафте нет ООП, одна видимость. Кроме того, реализация такого добавления методов принципам ООП номинально не противоречит.
в vjass наследование кривое и нету полиморфизма
про модули не понял
Наследование, вернее его эмуляция там нормальная, а полиморфизм при работе с варкрафтом считай и не нужен.
Модули.
2
29
7 лет назад
2
и нету полиморфизма
)))))) это откуда инфа?
1
28
7 лет назад
1
Doc, если хочешь чтото возразить то предоставь пруф
если же зашёл чтобы тупо пофлудить то кыш отсюда
тут один из немногих нормальных вопросов в академии
Clamp:
В варкрафте нет ООП, одна видимость. Кроме того, реализация такого добавления методов принципам ООП номинально не противоречит.
это нарушает модульность кода т.к. использование класса требует его редактирования
хотя в вар3 на это всем пофиг как правило
Clamp:
а полиморфизм при работе с варкрафтом считай и не нужен.
просто хотел реализовать шаблон наблюдатель или хотя бы его подобие
хотя можно реализовать и через модули
0
29
7 лет назад
Отредактирован Doc
0
vjass manual почитай, я специально зашел и почитал после твоего заявления, а то ты меня страшно удивил.
Может быть вот ето освежит вашу память
struct Parent

    stub method xx takes nothing returns nothing
        call BJDebugMsg("Parent")
    endmethod

    method doSomething takes nothing returns nothing
        call this.xx()
        call this.xx()
    endmethod

endstruct

struct ChildA extends Parent
    method xx takes nothing returns nothing
        call BJDebugMsg("- Child A -")
    endmethod
endstruct

struct ChildB extends Parent
    method xx takes nothing returns nothing
        call BJDebugMsg("- Child B --")
    endmethod
endstruct


function test takes nothing returns nothing
 local Parent P = Parent.create()
 local Parent A = ChildA.create()
 local Parent B = ChildB.create()
    //notice the variables are of the 'Parent' type.
    call P.doSomething() //Shows 'Parent' twice
    call A.doSomething() //Shows 'Child A' twice
    call B.doSomething() //Shows 'Child B' twice
endfunction
Этот код и является ООП-решением вопроса топика.
stub method onHit
0
28
7 лет назад
Отредактирован nvc123
0
Doc, а теперь посмотри во что это компилируется
если ты считаешь что плодить триггеры лишь для того чтобы использовать малую часть их возможностей это нормально то мне тебя жаль
в общем все ответы даны и тема закрыта
хватит разводить срач
6
29
7 лет назад
6
В голосяру, найс модератор. Еще и отредактировал свою мессагу, ну царь.
Полиморфизма тогда вообще ни в одном компайл языке нет, ведь он компилируется в машинный код))))
Чтобы оставить комментарий, пожалуйста, войдите на сайт.