This is already a function the doors use , but I redid it as another cheap way to check for a touch without needing to assign .touch field - plus I believe this code wont care if either ent is non solid. You can modify it with just a copy and paste, and there is only one call in doors.qc , which you can change to:
if (EntitiesTouching (0,self, t))
....if you want to not show a compiler warning.
basicly mode 0 is the default function, any mode > 0 will be checking absolute coordinates relative to the map, whereas mode 0 is only relative to the ent.
if (EntitiesTouching (0,self, t))
....if you want to not show a compiler warning.
Code:
[FONT="Franklin Gothic Medium"]
float (float mode, entity e1, entity e2) EntitiesTouching =
{
[FONT="Century Gothic"][COLOR="LightBlue"]//Cobalt mode float - modifies to cover absmin/absmax, else do normal mins/maxs[/COLOR][/FONT]
local vector low1, high1, low2, high2;
low1 = e1.mins;
high1 = e1.maxs;
low2 = e2.mins;
high2 = e2.maxs;
if (mode)
{
low1 = e1.absmin;
high1 = e1.absmax;
low2 = e2.absmin;
high2 = e2.absmax;
}
if (low1_x > high2_x)
return FALSE;
if (low1_y > high2_y)
return FALSE;
if (low1_z > high2_z)
return FALSE;
if (high1_x < e2.mins_x)
return FALSE;
if (high1_y < e2.mins_y)
return FALSE;
if (high1_z < e2.mins_z)
return FALSE;
return TRUE;
};
[/FONT]
basicly mode 0 is the default function, any mode > 0 will be checking absolute coordinates relative to the map, whereas mode 0 is only relative to the ent.
Comment