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

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

Ответ
 
ghostintheshell

offline
Опыт: 271
Активность:
Получить цель приказа юнита
Как можно получить цель приказа юнита не из события юнит получил приказ?
Старый 17.06.2014, 17:11
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ghostintheshell, ну проверить на текущий приказ...
А чем вас триггер не устравивает, самый простой вариант...
Старый 17.06.2014, 17:27
Tobi123

offline
Опыт: 7,826
Активность:
GetUnitCurrentOrder
Старый 17.06.2014, 18:17
ghostintheshell

offline
Опыт: 271
Активность:
мне нужно после смерти юнита узнать куда он шёл
Старый 17.06.2014, 21:50
Obelick

offline
Опыт: 26,071
Активность:
ghostintheshell, наверное, извращенный вариант. 2 переменных: точка и логическая. Когда приказ отдан - записываешь точку приказа в переменную и ставишь болеан=да. Так же, при каждом новом приказе сначала обнуляешь точку и болеан, а потом заносишь новое значение. И если юнит умирает, а логическая=да, то твои действия.
Старый 17.06.2014, 22:44
ghostintheshell

offline
Опыт: 271
Активность:
но у меня армия таких, мне 2 массива делать?
Старый 17.06.2014, 23:01
Obelick

offline
Опыт: 26,071
Активность:
ghostintheshell, получается, что да
Старый 18.06.2014, 00:01
ghostintheshell

offline
Опыт: 271
Активность:
сплошные разочарования в WE
Старый 18.06.2014, 00:15
Obelick

offline
Опыт: 26,071
Активность:
ghostintheshell, это еще не разочарования.
Старый 18.06.2014, 00:19
Кет

offline
Опыт: 111,109
Активность:
ghostintheshell, можно через хеш-таблицу сделать. То же самое, только записывать не в переменную, а в хеш-таблицу по ключу — HandleID юнита. Соответственно, и узнать значение при необходимости проще.
Старый 24.06.2014, 04:18
DioD

offline
Опыт: 45,134
Активность:
гугл + ассоциативный массив
вообще печально это всё, навык необходимый для понимания как это сделать вообще со школы идёт, когда дневник заполняете, там каждому слоту соответствует название предмета и задание.
Старый 24.06.2014, 16:27
ScorpioT1000
Работаем
online
Опыт: отключен
ну так и есть, если бы было иначе, то это уже система трекинга юнитов, да и то разработчик бы додумался удалить трекер юнита после его смерти, так что мала вероятность, что такая система есть в других редакторах

ScorpioT1000 добавил:
по сути решение - это периодически записывать данные о координатах юнитов в циклический стек (например, за последние 32 секунды)
тем самым можно будет получить историю передвижения любого юнита за 32 секунды
Старый 24.06.2014, 17:18
DioD

offline
Опыт: 45,134
Активность:
системы более высокого уровня используют фиксированной длины массив который может расти, но никогда не уменьшается, например хештаблицы явы только растут, если все переменные удалить, выделенный массив никуда не девается.
соответственно юниты и данные о них могут висеть в массиве после их смерти до тех пор, пока этот слот массива не будет использован по второму кругу, а время которое слот всё еще занят можно подогнать под свои нужды.
лично у меня система держала чанки по 256 юнитов, если юнит умер, его слот не будет использован до тех пор, пока 256 других юнитов не будет "создано", а это может занять достаточно длительное время, в той же доте 30 юнитов в минуту не считая всяких сумонов, но всё равно 256 в минуту не получится.
Старый 25.06.2014, 10:30
ScorpioT1000
Работаем
online
Опыт: отключен
можно еще записывать как хештейбл
таймстамп: координаты
тогда можно будет восстановить именно историю со всеми задержками между движениями
а воспроизводить - так вообще с помощью сплайна безье или эрмита для пущей красоты (ведь пишется оно дискретно и реже, чем частота рендеринга)
» вот даже гдето я реализовывал
// Linear Interp.
real Maths::LinearValue(real a, real b, real amount) {
    return a + amount * (b-a);
}

// Monomial Interp.
real Maths::MonomialValue(real a, real b, real power, real amount) {
    return pow(LinearValue(a,b,amount), power);
}

// Hermite Interp.
real _sc_h00(real s) { // 2*s^3 - 3*s^2 + 1
    return (real) ((real)2.0 * pow(s,(real)3.0) - (real)3.0 * pow(s,(real)2.0) + 1.0); }
real _sc_h10(real s) { // s^3 - 2*s^2 + s
    return (real) (pow(s,(real)3.0) - (real)2.0 * pow(s,(real)2.0) + s); }
real _sc_h01(real s) { // -2*s^3 + 3*s^2
    return (real) ((real)-2.0 * pow(s,(real)3.0) + (real)3.0 * pow(s,(real)2.0)); }
real _sc_h11(real s) { // s^3 - s^2
    return (real) (pow(s,(real)3.0) - pow(s,(real)2.0)); }

real Maths::HermiteValue(real a, real atan, real b, real btan, real t) {
    return (_sc_h00(t)*a + _sc_h10(t)*atan + _sc_h01(t)*b + _sc_h11(t)*btan);
}

// Bezier Interp.
real Maths::Bezier2Value(real p0, real p1, real p2, real t) {
    real p01 = LinearValue(p0,p1,t);
    real p12 = LinearValue(p1,p2,t);
    return LinearValue(p01,p12,t);
}

real Maths::Bezier3Value(real p0, real p1, real p2, real p3, real t) {
    real p01 = LinearValue(p0,p1,t);
    real p12 = LinearValue(p1,p2,t);
    real p23 = LinearValue(p2,p3,t);
    real p0112 = LinearValue(p01,p12,t);
    real p1223 = LinearValue(p12,p23,t);
    return LinearValue(p0112,p1223,t);
}
!
кстати вот есть даже интересный таск - нам нужно узнать, где была координата в точке времени, которой нету в исходной таблице
допустим у нас есть массив вида
таймстамп x y z
0 1 0 0.2
3 1 1 0
6 2 1 0.2
9 3 2 0.1
как написать такой алгоритм, который за быстрое время найдет координаты в таймстампе 5, без полного (и без полного в худшем случае) перебора, со сглаживанием (по тому же безье, но это не важно, суть задачи в поиске нужных соседних ключей)
» мой солюшен
мы загоняем таймстампы в бинарное дерево
и нужный нам таймстамп вставляем в это дерево,
ищем соседние узлы, удаляем искомый таймстамп,
считаем, от 0 до 1, в какой доле между ними он лежит (в нашем случае 5 лежит между 3 и 6 = 0.66),
вычисляем безье от координат найденных двух записей по доле 0.66

Отредактировано ScorpioT1000, 25.06.2014 в 17:34.
Старый 25.06.2014, 17:21
Ответ

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

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

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

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



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