29

» Clamp'ова кухня / Clamp's Physics

То есть в этом случае чем больше сопротивление тем быстрее падает объект?)
Я бы ничего это не писал если бы не заявления в духе
[20:06:50] Clamp * Потому что всё от и до построено на матмодели, а не через костыли типа "юнит вошёл в область"
[20:06:16] Clamp * Доделал по инерции, смею утверждать, что у меня физика производительнее, чем в TcX
И прочий ненужный пафос.
29

» Clamp'ова кухня / Clamp's Physics

Сори, но это пиздец говно. Я заревьювил все твои 500-600 строк кода и единственное, что в нем хорошего это стиль, код реально чистый.
Начнем по порядку.
    private void StackPop(int id) {
        stackCounter--;
        stack[id] = stack[stackCounter];
    }
Здесь у меня просто случилась аневризма. Стэк так не работает. При чем тут стек и зачем эта переменная названа стек - непонятно. Это random access list. В стеке нет доступа ни к чему, кроме хвоста.
        private PhysObj physic;
        private VisObj visual;
        private DmgObj damage;
Честно просто смешная попытка замутить нечто похожее на entity-component-system, ни о какой модульности речи тут не идет, с тем же успехом можно было слить все эти чайлд структуры в основную и ничего бы не изменилось. Оверинжиниринг без цели и бенефитсов.
Снаряды тупо всегда уничтожают себя при колижне с юнитами. Это та самая хваленая "матмодель"? Я не знаю смеяться или плакать. Это преимущество над движком тсх? Ты понимаешь вообще что там было основано на входе в ректангл только чтобы максимально перенести отсеивание колижнов в нативный код? Что наверняка в движке реализовано какое-нибудь quadtree которое нормально работает с большим количеством юнитов? Что есть у тебя? GroupEnumUnits? Я уже не говорю о том что поделие совершенно нерасширяемое, ты просто сам попробуй не трогая основной код реализовать пару спеллов. Тут даже такие банальности как то, что гравитация это скаляр, а не вектор. Зато зачем-то есть настраиваемый тикрейт и сила трения. Сила трения правда одна на всю карту, удобно.
Мега физика в "движке" это семплинг нормали граунда через GetTerrainZ? А, нет, вот, нашел:
this.impulse.z -= this.mass*gravity;
вот с этого просто в АХАХАХА, т.е. объект который весит меньше будет медленнее падать?
Какбы в итоге зашибись, учиться - учись. Но понты и умничанье в оффтопке лучше попридержать до момента пока не научишься. Тонна таких и намного лучше систем валяется на барахолке уже с десяток лет, без шуток. Код с семплингом нормали я видел в каждой из них, да и сам писал такой. Подобная система есть, например, у ханабиши.
29

» Game Dev / Поиск ближайшей точки к кривой

Очень сомневаюсь в "нельзя". Если искать пересечение между линией и плоскостью, но используя вместо уравнения плоскости уравнение безье то наверное может получиться. Советую спросить не здесь, а на stackoverflow/math.stackexchange
29

» WarCraft 3 / 8. Кортежи

Кортежи не могут быть связаны с обобщенными типами. То есть, вы не можете использовать конструкцию List<vec>, если vec это кортеж
Это такая недоработка компайлера? Не вижу на это причин.
А все, прочитал наоборот, сорян борян.
29

» WarCraft 3 / 1. Основы

Если вы используете внешний редактор Visual Studio Code (что рекомендуется и подразумевается)
Когда я пробовал подразумевался эклипс, сейчас уже нет?
29

» Game Dev / Поиск ближайшей точки к кривой

Откуда кривая то собственно взялась, если не из набора точек? Какая-то формула? Можно спроецировать её на прямую и найти локальные минимумы.
29

» WarCraft 3 / Экономия cjass и vjass триггера функций в редакторе NewGen?

Принятый ответ
Функшн поинтеров помимо типа code в жассе нет. Можно полагаться только на ExecuteFunc, куда аргументы передаются только глобалками, соответственно никакого тайпчекинга.
Использовать можно например так
struct mystruct
    static method mymethod takes nothing returns nothing
        call BJDebugMsg("this works")
    endmethod
endstruct

function myfunction takes nothing returns nothing
    call ExecuteFunc(mystruct.mymethod.name) //ExecuteFunc compatibility

    call OnAbilityCast('A000',mystruct.mymethod.name)
    //for example, caster system's OnAbilityCast, requires a function name
endfunction
Взято из vjass manual.
29

» WarCraft 3 / vJass

Принятый ответ
Module Initializers are used because they run first :p
After module initializers -> struct initializers
After that -> library initializers
After that -> scope initializers
After that -> ... nothing :p
29

» Unity / Это реально?

Абсолютно нереально. Варкрафт 3 например сделали с помощью магии.
29

» WarCraft 3 / Array Timer

struct MyTimer {
    float endTime;
    unit attachedUnit;
}

int NULL = 0;
MyTimer[8] timers;

void Update() {
    for (int i = 0; i < 8; i++) {
        if (timers[i] != NULL && timers[i].endTime <= GetGameTime()) {
            KillUnit(timers[i].attachedUnit);
            timers[i] = NULL;
        }
    }
}

void StartTimer(int whichOne, unit forWhom, float delay) {
    timers[whichOne] = MyTimer();
    timers[whichOne].endTime = GetGameTime() + delay;
    timers[whichOne].attachedUnit = forWhom;
}
Не самая сложная проблема в программировании.
29

» WarCraft 3 / Не работает ForGroup в структуре

при мгновенных действиях никаких багов быть не может, в игре один поток
29

» Dota 2 / Продление конкурса героев до 1-го июня

Это шутка была... Просто вспомнились прошлые спеллконтесты итд с кучей судей.
Мне не обидно за задержку.
29

» WarCraft 3 / движение через ( X . y )

Вы че тут рофлите просто? Че это за жесть. Ну попытались бы хоть развернуть формулы и посмотреть что вы конвертите из одного в другого а потом обратно, зачем?
// target = origin + normalize(source - origin) * speed
u = GetEnumUnit()
ux = GetUnitX(u)
uy = GetUnitY(u)

tx = GetUnitX(udg_topot_caster)
ty = GetUnitY(udg_topot_caster)

dx = ux - tx
dy = uy - ty

len = SquareRoot(dx * dx + dy * dy)
// Also need a 0 len check
dx = dx / len
dy = dy / len

SetUnitX(u, ux + dx * 10)
SetUnitY(u, uy + dy * 10)
struct
	real x
	real y
endstruct
Нужна только чтобы туда добавить методы для работы с векторами.
Углы, косинусы, синусы в большинстве случаев не нужны ВООБЩЕ.
29

» Dota 2 / Продление конкурса героев до 1-го июня

Ну я тоже виноват типа судить там было на полтора дня работы, но ваще да тут совокупность судя по всему. Хгм уже не торт...
29

» WarCraft 3 / JASS: группа или массив?

нет никакой разницы, плиз.
void myForEach(Value[] values, Consumer<Value> action, int index) {
    if (values.length == index) {
        return;
    }

    action.accept(values[index]);
    myForEach(values, action, index + 1);
}
вместо того чтобы хранить index в локалке значение хранится в стеке вместе с values и action.
29

» WarCraft 3 / JASS: группа или массив?

Щас бы использовать рекурсию для прохода по массива в языке без поддержки хвостовой рекурсии и засирать стек вызовов ммм.
Плохо читал, это уже написали оказывается.
Рекурсия это просто использование стека вызовов для хранения стейта, ничего больше. Не нужно её использовать там где проще без нее обойтись.
29

» WarCraft 3 / JASS: группа или массив?

В чем смысл чето городить. На 1 юнита достаточно одной структуры в любой карте. Адрес структуры можно хранить в кастом велью. Единственные места где нужно пользоваться самим юнитом это там куда этот юнит приходит (ивенты) и там куда он уходит (нативки). В остальном пользуемся самой структурой.
29

» WarCraft 3 / local и global timer нагружаются в локальной сети?

Записываете реплей игры, смотрите: вес реплея это вес всего трафика переденного по сети от хоста каждому отдельному игроку.