Quote:
|
Originally Posted by Geesu
Think there is a code example anywhere?
|
Here's a pseudo implementation of it minus the room (I dunno how big you want it)
Code:
// dist between center and shortest point of each wall
#define ROOM_RADIUS 100.0
// the real thing is 4096.0, but we don't really want to go off the map
#define MAP_MAX 3800.0
fnFindLocation(Float:vVec[3])
{
static Float:vOrigin[3],iContents
vOrigin[0] = random_float(-MAP_MAX,MAP_MAX)
vOrigin[1] = random_float(-MAP_MAX,MAP_MAX)
vOrigin[2] = -MAP_MAX
do
{
if(vOrigin[2] > MAP_MAX)
return fnFindLocation(vVec)
vOrigin[2] += 10.0
iContents = PointContents(vOrigin)
}
while(iContents != CONTENTS_EMPTY)
vOrigin[2] += 200.0
if(PointContents(vOrigin) != CONTENTS_EMPTY)
return fnFindLocation(vVec)
vOrigin[2] -= 160.0
for(new iCount = 0;iCount < 2;iCount++)
{
vOrigin[iCount] += ROOM_RADIUS
if(PointContents(vOrigin) != CONTENTS_EMPTY)
return fnFindLocation(vVec)
vOrigin[iCount] -= ROOM_RADIUS
vOrigin[iCount] -= ROOM_RADIUS
if(PointContents(vOrigin) != CONTENTS_EMPTY)
return fnFindLocation(vVec)
vOrigin[iCount] += ROOM_RADIUS
}
vVec = vOrigin
return PLUGIN_CONTINUE
}
__________________