Сейчас 17:54:07 Понедельник, 25 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
сравнение типа rect с типом region, это возможно?
HexingДата: Понедельник, 18 Июля 2011, 20:41:03 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Code
library ZONES initializer ZONE_INIT requires UTILS
  private function ZONE_ACTIONS takes nothing returns nothing
   local region from = GetTriggeringRegion()
   local integer k = -1
   local integer i = 0
   call BJDebugMsg("3/5")
   loop
    if(zone_rects[i] == from) then
     set k = i
    endif
    set i = i+1
    exitwhen (i == zone_num)
   endloop  
   call BJDebugMsg("4/5")
   if not(k == -1) then
    call BJDebugMsg("5/5")
    call SetUnitPosition(GetEnteringUnit(),GetRectCenterX(zone_dest[k]),GetRectCenterY(zone_dest[k]))
   endif
  endfunction
  function MoveOnEnter takes rect whichZone, rect toWhichZone returns nothing
    local trigger ZONE_TRIGGER = CreateTrigger()
    call BJDebugMsg("1/5")
    set zone_num = zone_num+1
    set zone_rects[zone_num-1] = whichZone
    set zone_dest[zone_num-1] = toWhichZone
    call RegisterRegionEvent(ZONE_TRIGGER,whichZone)
    call BJDebugMsg("2/5")
    call TriggerAddAction(ZONE_TRIGGER,function ZONE_ACTIONS)
    set ZONE_TRIGGER = null
   endfunction
  private function ZONE_INIT takes nothing returns nothing
   /*local trigger ZONE_TRIGGER = CreateTrigger()
   call RegisterRegionEvent(ZONE_TRIGGER,gg_rct_zone1)
   call TriggerAddAction(ZONE_TRIGGER,function ZONE_ACTIONS)
   set ZONE_TRIGGER = null*/
   call MoveOnEnter(gg_rct_zone1,gg_rct_zone2)
   endfunction
    
endlibrary


Извените за ватность кода, еще не оптимизировал... Суть в том что мы простой функцией создаем триггер с событием по входу в ту-то зону и портаемся в ту-то. Проблема в получении зоны, в которую мы вошли. Функция GetTriggeringRegion неожиданно возвращает region, что не есть rect, который используется в редакторе(большое спс умным близзам). Пробывал написать функцию преобразования rect в region, но всёравно сообщения 5/5 не поступало, тоесть это не подходит. А преобразовывал я единственным способом - функцией RegionAddRect. Как можно реализовать это? в XAT пока только разбираюсь да и не доверяю ему пока.

Добавлено (18-07-2011, 20:39)
---------------------------------------------
Ах да, забыл:

Code
library UTILS
  function RegisterAnyUnitEvent takes trigger whichTrigger, playerunitevent whichEvent returns nothing
   local integer index = 0
   loop
    call TriggerRegisterPlayerUnitEvent(whichTrigger, Player(index), whichEvent, null)
    set index = index + 1
    exitwhen index == bj_MAX_PLAYER_SLOTS
   endloop
  endfunction  
  function RegisterRegionEvent takes trigger whichTrigger, rect whichZone returns nothing
     local region rectRegion = CreateRegion()
     call RegionAddRect(rectRegion, whichZone)
     call TriggerRegisterEnterRegion(whichTrigger, rectRegion, null)
     set rectRegion = null
  endfunction
endlibrary

//gg_rct_zone1 и gg_rct_zone2 - зоны созданные в WE

Добавлено (18-07-2011, 20:41)
---------------------------------------------
и еще:

Code
globals
  rect array zone_rects
  rect array zone_dest
  integer zone_num = 0
endglobals


Кстати пробовал колдовать с handle вместо регионов и ректов, не вышло


 

lawsonДата: Понедельник, 18 Июля 2011, 20:49:14 | Сообщение # 2
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Hexing,
Помоему нельзя сравнивать зоны. По крайней мере я не знаю как.
Я делал так для каждой зоны создавал свой собственный типа уникальный номер, и потом при входе сравнивал номер зоны в которой находится юнит с номером зоны их которой он пришел. Но там были свои недостатки.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

FaionДата: Понедельник, 18 Июля 2011, 21:26:05 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Короче, забиваешь все ректы в бд, далее считываешь их макс\мин х\у, и сохраняешь в массив, потом при эвенте, юнит заходит в зону, считываешь х\у юнита, и циклом: ((rect_min_x[i] <= x) && (x <= rect_max_x[i]) && (rect_min_y[i] <= y) && (y <= rect_max_y[i])).
Дальше думаю разберешься, т.к. элементарно.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

HexingДата: Среда, 27 Июля 2011, 18:11:41 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (lawson)
((rect_min_x[i] <= x) && (x <= rect_max_x[i]) && (rect_min_y[i] <= y) && (y <= rect_max_y[i])).

Спасибки


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz