X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_triggers.pas;h=3b1f911bf133db08b97b0c1f50da8e5a1732fed1;hb=836fd31457a6f741815605633f2fbfa157e37418;hp=e39b8c66a3dfdd7b6a2491f85087cae51e119ddb;hpb=91547a4c32733ddebebd278c42f290489daffa4e;p=d2df-sdl.git diff --git a/src/game/g_triggers.pas b/src/game/g_triggers.pas index e39b8c6..3b1f911 100644 --- a/src/game/g_triggers.pas +++ b/src/game/g_triggers.pas @@ -101,7 +101,7 @@ uses g_player, g_map, Math, g_gfx, g_game, g_textures, g_console, g_monsters, g_items, g_phys, g_weapons, wadreader, g_main, SysUtils, e_log, g_language, - g_options, g_net, g_netmsg; + g_options, g_net, g_netmsg, utils; const TRIGGER_SIGNATURE = $52475254; // 'TRGR' @@ -2196,29 +2196,34 @@ begin Result := find_id; end; + +// sorry; grid doesn't support recursive queries, so we have to do this +type + TSimpleMonsterList = specialize TSimpleList; + +var + tgMonsList: TSimpleMonsterList = nil; + procedure g_Triggers_Update(); var a, b, i: Integer; Affected: array of Integer; - {function monsNear (mon: TMonster): Boolean; - begin - result := false; // don't stop - if mon.Collide(gTriggers[a].X, gTriggers[a].Y, gTriggers[a].Width, gTriggers[a].Height) then - begin - gTriggers[a].ActivateUID := mon.UID; - ActivateTrigger(gTriggers[a], ACTIVATE_MONSTERCOLLIDE); - end; - end;} - function monsNear (mon: TMonster): Boolean; begin result := false; // don't stop + { gTriggers[a].ActivateUID := mon.UID; ActivateTrigger(gTriggers[a], ACTIVATE_MONSTERCOLLIDE); + } + tgMonsList.append(mon); end; +var + mon: TMonster; begin + if (tgMonsList = nil) then tgMonsList := TSimpleMonsterList.Create(); + if gTriggers = nil then Exit; SetLength(Affected, 0); @@ -2454,7 +2459,14 @@ begin begin //g_Mons_ForEach(monsNear); //Alive?! + tgMonsList.reset(); g_Mons_ForEachAt(gTriggers[a].X, gTriggers[a].Y, gTriggers[a].Width, gTriggers[a].Height, monsNear); + for mon in tgMonsList do + begin + gTriggers[a].ActivateUID := mon.UID; + ActivateTrigger(gTriggers[a], ACTIVATE_MONSTERCOLLIDE); + end; + tgMonsList.reset(); // just in case end; // "Ìîíñòðîâ íåò"