81 lines
2.0 KiB
Plaintext
81 lines
2.0 KiB
Plaintext
//////////////////////////////////////////////////////////////////
|
|
// offset_h - Provides an offset location based on a location
|
|
// By Deva Bryson Winblood. 04/27/2005
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
///////////////////////////
|
|
// PROTOTYPES
|
|
///////////////////////////
|
|
|
|
|
|
// FILE: offset_h FUNCTION: GetOffsetLocation()
|
|
// This function will return a location a random direction from
|
|
// the start location within specified range.
|
|
location GetOffsetLocation(location lStart,float fRange=0.5);
|
|
|
|
///////////////////////////
|
|
// FUNCTIONS
|
|
///////////////////////////
|
|
|
|
vector fnGetNewVector(vector vStart,float fRange)
|
|
{ // PURPOSE: Return a vector
|
|
vector vNew;
|
|
int nR=d8();
|
|
if (nR==1)
|
|
{ // north
|
|
vNew.x=vStart.x;
|
|
vNew.y=vStart.y+fRange;
|
|
} // north
|
|
else if (nR==2)
|
|
{ // east
|
|
vNew.y=vStart.y;
|
|
vNew.x=vStart.x+fRange;
|
|
} // east
|
|
else if (nR==3)
|
|
{ // south
|
|
vNew.x=vStart.x;
|
|
vNew.y=vStart.y-fRange;
|
|
} // south
|
|
else if (nR==4)
|
|
{ // west
|
|
vNew.y=vStart.y;
|
|
vNew.x=vStart.x-fRange;
|
|
} // west
|
|
else if (nR==5)
|
|
{ // north east
|
|
vNew.y=vStart.y+(fRange/2.0);
|
|
vNew.x=vStart.x+(fRange/2.0);
|
|
} // north east
|
|
else if (nR==6)
|
|
{ // south east
|
|
vNew.y=vStart.y-(fRange/2.0);
|
|
vNew.x=vStart.x+(fRange/2.0);
|
|
} // south east
|
|
else if (nR==7)
|
|
{ // south west
|
|
vNew.y=vStart.y-(fRange/2.0);
|
|
vNew.x=vStart.x-(fRange/2.0);
|
|
} // south west
|
|
else
|
|
{ // north west
|
|
vNew.y=vStart.y+(fRange/2.0);
|
|
vNew.x=vStart.x-(fRange/2.0);
|
|
} // north west
|
|
return vNew;
|
|
} // fnGetNewVector()
|
|
|
|
location GetOffsetLocation(location lStart,float fRange=0.5)
|
|
{
|
|
vector vStart=GetPositionFromLocation(lStart);
|
|
vector vNew;
|
|
object oArea=GetAreaFromLocation(lStart);
|
|
vNew=fnGetNewVector(vStart,fRange);
|
|
while(vNew.x<0.0||vNew.y<0.0)
|
|
{ // get valid vector
|
|
vNew=fnGetNewVector(vStart,fRange);
|
|
} // get valid vector
|
|
return Location(oArea,vNew,0.0);
|
|
} // GetOffsetLocation()
|
|
|
|
//void main(){}
|