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

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

Ответ
 
tysch_tysch
Работаем
offline
Опыт: отключен
udg_I начальное значение ноль?
Старый 16.09.2007, 15:15
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Да, т.к. глобалка.
Старый 16.09.2007, 15:18
Toadcop

offline
Опыт: 54,313
Активность:
Код:
else // вот тут может быть загвоздка
        set udg_W[udg_I] = Rect(ax1, ay1, ax2, ay2)
        set udg_B[udg_I] = true
        set udg_I = udg_I + 1
может set udg_I = udg_I + 1 надо перед ??? =\ хотя если честно я досихпор не понял что надо делать -_- =)
Старый 16.09.2007, 15:35
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Карту порезать на полоски так, чтобы без спец. регионов. И чтобы при прохождении по массиву погода ставилась для регионов одной полоски одновременно.
Да, кстати, я забыл, это предпоследняя версия кода... См. вверху, вторая и третья функции.
Старый 16.09.2007, 16:15
tysch_tysch
Работаем
offline
Опыт: отключен
для чего булен в последней функции?
Старый 16.09.2007, 18:02
Toadcop

offline
Опыт: 54,313
Активность:
так момент... это не рационально =) еффекты крепитса на ректы... т.е. это будет тупое разводство кучи всего... ректы напр могут оверлапитьса это надо учитывать. ха ха =) это кстати сложная таки задачя... т.к. здесь все должно быть из отдельных ректов... это наверно в один "заход" даже норм не просчитать т.к. неизвестно что будет ...
а не проще вручную ставить реги ГДЕ БУДЕТ погода !? О_о потом их заносить в массив и их процессить... т.е. напр заносить попорядку и потом алгоритмической логикой каждый из этих ректов (если надо делать) на под ректы... короче в очередной раз тупо поставленая задачя а точней реализация.
т.е. о чём я ? о том что нефига паритса не надо будет вот что =\ а создовать оптимальный перерез ректов это сложно. короче как хотите.
Старый 16.09.2007, 19:01
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
ZlaYa1000, true - индикатор разделения полосок. В цикле, если тру - то переходим на следующую полоску.
Toadcop, в общем, все ясно... В принципе, тоже вариант, т.к. кол-во ректов и их размеры - const...

Кстати, я вроде вкурил, что у меня неправильно - координаты ректов... Буду пересчитывать.
Старый 17.09.2007, 21:20
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
В общем, вот вам скриптег. Там алгоритм разбиения и пример с плавной установкой погоды. Вроде все нормально работает сейчас.
Прикрепленные файлы
Тип файла: w3x [sws] weather test v4.w3x (49.1 Кбайт, 10 просмотров )
Старый 22.09.2007, 14:57
tysch_tysch
Работаем
offline
Опыт: отключен
щас гляну, а инвентарь доделаешь?)
Старый 22.09.2007, 19:25
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
omfg смотрел я инвентарь - он намного круче погоды, так что навряд ли... -_-
Старый 22.09.2007, 19:58
tysch_tysch
Работаем
offline
Опыт: отключен
надо свдн, надо!
Старый 22.09.2007, 20:42
J
expert
offline
Опыт: 48,447
Активность:
я беру карту.. никому не трогать...

Jon добавил:
а где она кстате? эта которая на позапредыдущей странице 1.16е?

Jon добавил:
увидел в коде функцию DebugWeather() кому я говорил про этот баг я уже не помню... разобрались из-за чего он или нет? или даже не обнаружали?
Старый 22.09.2007, 23:49
tysch_tysch
Работаем
offline
Опыт: отключен
ты погоду брал?
Старый 22.09.2007, 23:50
J
expert
offline
Опыт: 48,447
Активность:
ктонить думал о переходе на ген пак?

Jon добавил:
Цитата:
ты погоду брал?

всмсле?
Старый 22.09.2007, 23:54
tysch_tysch
Работаем
offline
Опыт: отключен
вижу взял
Старый 22.09.2007, 23:55
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от ShadoW DaemoN
1. Функция для проверки пересечения регионов:

более общая функция:
Код:
function RectAreCrossed takes real Xmin1, real Ymin1, real Xmax1, real Ymax1, real Xmin2, real Ymin2, real Xmax2, real Ymax2  returns boolean
    local boolean Xsovp = (Xmin2<Xmin1 and Xmin1<Xmax2) or (Xmin2<Xmax1 and Xmax1<Xmax2)
    local boolean Ysovp = (Ymin2<Ymin1 and Ymin1<Ymax2) or (Ymin2<Ymax1 and Ymax1<Ymax2)
    return (Xsovp and (Ymin1<Ymin2 and Ymax2<Ymax1)) or (Ysovp and (Xmin1<Xmin2 and Xmax2<Xmax1)) or (Xsovp and Ysovp) or (Xmin1<Xmin2 and Xmax1>Xmax2 and Ymin1<Ymin2 and Ymax1>Ymax2)
endfunction


Jon добавил:
Цитата:
а не проще вручную ставить реги ГДЕ БУДЕТ погода !? О_о потом их заносить в массив и их процессить... т.е. напр заносить попорядку и потом алгоритмической логикой каждый из этих ректов (если надо делать) на под ректы... короче в очередной раз тупо поставленая задачя а точней реализация.

дело этого скрипта это разом убить 2-ух зайцев...
вообще в основном ставятся области игнорирования.. к примеру в инвентаре не нужна погода... если делать как ты сказал то прийдется создавать 8 областей которые не трогают инвентарь... принцепи проблема с игнор областью решена.. а что если этих областей будет 5-10? ктото уже говорил что например в каньене ненужен ветер...
но ведь второй заяц останется... делается это чтобы небыло тормозов, есть разница между тем чтобы сразу на всю карту погоду поставить, или постепенно по полоскам за секунду, тормозов не будет
Старый 23.09.2007, 01:51
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Jon, отмажусь тем, что я не оптимизировал алгоритм... ;) и не смотри, что написано в #258, там вторая версия...
И про каньон говорил я... собсно поэтому и порешили дать мне задание скриптик написать)

Отредактировано ShadoW DaemoN, 23.09.2007 в 11:56.
Старый 23.09.2007, 10:10
J
expert
offline
Опыт: 48,447
Активность:
вот кстате мое решение разбиение на полоски
Код:
function RectAreCrossed takes real Xmin1, real Ymin1, real Xmax1, real Ymax1, real Xmin2, real Ymin2, real Xmax2, real Ymax2  returns boolean
    local boolean Xsovp = (Xmin2<Xmin1 and Xmin1<Xmax2) or (Xmin2<Xmax1 and Xmax1<Xmax2)
    local boolean Ysovp = (Ymin2<Ymin1 and Ymin1<Ymax2) or (Ymin2<Ymax1 and Ymax1<Ymax2)
    return (Xsovp and (Ymin1<Ymin2 and Ymax2<Ymax1)) or (Ysovp and (Xmin1<Xmin2 and Xmax2<Xmax1)) or (Xsovp and Ysovp) or (Xmin1<Xmin2 and Xmax1>Xmax2 and Ymin1<Ymin2 and Ymax1>Ymax2)
endfunction

function DivisionPlayableMapRect takes integer MaxIgnore returns nothing
    local rect MapRec = GetPlayableMapRect()
    local real MapRecXmin = GetRectMinX(MapRec)
    local real MapRecYmin = GetRectMinY(MapRec)
    local real MapRecXmax = GetRectMaxX(MapRec)
    local real MapRecYmax = GetRectMaxY(MapRec)
    local real Xmin1 = MapRecXmin
    local real Ymin1 = MapRecYmin
    local real Xmax1 = MapRecXmax
    local real Ymax1 = MapRecYmax
    local real Xmin2
    local real Ymin2
    local real Xmax2
    local real Ymax2
    local integer i
    local integer a
    local boolean NotCrossed = true 
    local real maxY
    local real currentY
    local rect currentRect
    local integer maxi = 0
    set a = MaxIgnore
    loop
        exitwhen a < 0
        set i = a
        set maxY = MapRecYmin
        loop
            exitwhen i < 0
            set currentY = GetRectMaxY(udg_RecIgnore[ i])
            if maxY < currentY then
                set maxY = currentY
                set currentRect = udg_RecIgnore[ i]
                set maxi = i
            endif
            set i = i - 1
        endloop
        set udg_RecIgnore[maxi] = udg_RecIgnore[a]
        set udg_RecIgnore[a] = currentRect
        set a = a - 1
    endloop    
    set i = 0
    loop
        exitwhen Xmin1+128 > MapRecXmax
        set Xmin1 = Xmin1
        set Xmax1 = Xmin1+128
        set a = MaxIgnore
        loop
            exitwhen a < 0
            set Xmin2 = GetRectMinX(udg_RecIgnore[a])
            set Ymin2 = GetRectMinY(udg_RecIgnore[a])
            set Xmax2 = GetRectMaxX(udg_RecIgnore[a])
            set Ymax2 = GetRectMaxY(udg_RecIgnore[a])
            if RectAreCrossed(Xmin1, Ymin1, Xmax1, Ymax1, Xmin2, Ymin2, Xmax2, Ymax2) then
                set NotCrossed = false
                set Ymin1 = Ymax2
                exitwhen true
            endif
            set a = a - 1
        endloop
        set udg_RectMap[ i] = Rect(Xmin1, Ymin1, Xmax1, Ymax1)
        set Ymin1 = MapRecYmin
        if NotCrossed then
            set Xmin1 = Xmin1 + 128
            set Ymax1 = MapRecYmax
        else
            set NotCrossed = true
            set Ymax1 = Ymin2
        endif
        set i = i + 1
    endloop
endfunction

запускается при инициализации например так:
Код:
set udg_RecIgnore[0] = gg_rct_0
set udg_RecIgnore[1] = gg_rct_1
set udg_RecIgnore[2] = gg_rct_2
set udg_RecIgnore[3] = gg_rct_3
call DivisionPlayableMapRect(3) // Последний занятый слот в массиве udg_RecIgnore[]
// Если игнор областей нету всунте "-1"


к завтрому, мб даже севодня вечером вшью в погоду скрипт swdn
Старый 23.09.2007, 14:56
adic3x

offline
Опыт: 108,439
Активность:
кста насчет скрипта игнорирования немного позужжу=)
вобщем он юзает регионы, но как вариант мб есть смысл для оптимизиции юзать четыре риал массива? т.е. созадть ректы на карте, потом в нотепад записать их иксы и игрики, и потом сразу вставить их в скрипт? т.е. это удлинит перенос на карту минут эдак на 10-15, но будет впринципе более оптимально (при этом менять алгоритм игнора непридеццо, ну разве что чуть-чуть).
Старый 23.09.2007, 16:57
tysch_tysch
Работаем
offline
Опыт: отключен
17 карт, не считая милишек=)
Старый 23.09.2007, 17:22
Ответ

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

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

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

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



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