it navigates its way round a map without using pathnodes or navmesh.
it traces directly in front to see if theres anything in the way, if theres nothing it moves forward.
if theres an obstruction in front, it takes a random distance left or right and does another trace. if theres an obstruction it does it again, if not it moves there.
heres a vid
heres the code
class AIMouse extends GameAIController;
var Vector MyTarget;
var vector InFront;
var vector X,Y,Z;
var vector HitLoc, HitNormal;
var Actor HitActor;
simulated event PostBeginPlay()
{
super.PostBeginPlay();
//start the brain going at 1 second intervals
SetTimer(1.0, true, 'BrainTimer');
}
function BrainTimer()
{
GetAxes(Pawn.Rotation, X,Y,Z);
InFront = Pawn.Location + 200 * X;
//trace in front
HitActor = Trace(HitLoc, HitNormal, InFront, Pawn.Location);
//DrawDebugSphere( HitLoc, 30, 10, 0, 255, 0 );
if (HitActor != None) //theres something in front
{
//trace randomly left or right
TraceRandom();
}
else //theres nothing in front
{
//move forward
MyTarget = InFront;
GoToState('MoveAbout');
}
}
function TraceRandom()
{
local int LeftRight;
//make a random number
LeftRight = Rand(200) - Rand(200);
GetAxes(Pawn.Rotation, X,Y,Z);
InFront = Pawn.Location + LeftRight * Y;
//do another trace to a random location left or right
HitActor = Trace(HitLoc, HitNormal, InFront, Pawn.Location);
DrawDebugSphere( HitLoc, 30, 10, 255, 0, 0 );
if (HitActor != None) //if we trace something
{
Return;
}
else //if we trace nothing
{
//move there
MyTarget = InFront;
GoToState('MoveAbout');
}
}
state MoveAbout
{
Begin:
MoveTo(MyTarget);
}
defaultproperties
{
}