rott/kf_sources/TehSpawns/Classes/ReportInteraction.uc
2026-07-14 20:27:09 +07:00

137 lines
3.1 KiB
Ucode

class ReportInteraction extends Interaction;
event NotifyLevelChange()
{
if (master != none) {
master.RemoveInteraction(self);
}
}
final private function KFPlayerController getController()
{
return KFPlayerController(viewportOwner.actor);
}
exec function mySp(string s)
{
local bool b;
if (s ~= "1") {
b = true;
}
ShowPathNodes(b);
ShowPaths(b);
}
simulated function ShowPathNodes(bool b)
{
local NavigationPoint np;
local int i, j;
if (b)
{
foreach GetController().AllActors(class'NavigationPoint', np)
{
if (np == none)
continue;
np.bHidden = false;
np.resetStaticFilterState();
j++;
i++;
}
}
else
{
foreach GetController().AllActors(class'NavigationPoint', np)
{
if (np == none)
continue;
np.bHidden = true;
np.resetStaticFilterState();
}
}
}
// show zed paths:
// Orange - Flying path, narrow.
// Light Orange - Flying path, wide.
// Light Purple - requires high jump (higher than normal jump capability).
// Blue - narrow path.
// Green - normal width.
// White - wide path.
// Pink - very wide path.
// Yellow - forced path.
// Purple - "advanced" path (requires "intelligence" to be used).
// Red - "one-way" path (i.e. path going from node A->B, but B->A is proscribed).
final function ShowPaths(bool b)
{
local KFPlayerController pc;
local NavigationPoint np;
local array<NavigationPoint> np_array;
local ReachSpec Spec;
local vector SpecColor;
local int i, j;
local int debugLinesDrawn;
pc = getController();
if (!b)
{
pc.ClearStayingDebugLines();
return;
}
foreach GetController().AllActors(class'NavigationPoint', np)
{
if (np == none)
continue;
np_array.length = i + 1;
np_array[i] = np;
i++;
}
for (i = np_array.length - 1; i >= 0; i--)
{
for (j = 0; j < np_array[i].PathList.Length; j++)
{
Spec = np_array[i].PathList[j];
SpecColor = vect(0, 255, 0);
// 260 = MAXVEHICLERADIUS 80 = MINCOMMONHEIGHT
if (( Spec.CollisionRadius >= 260 ) && (Spec.CollisionHeight >= 80))
{
SpecColor = vect( 255,255,255 );
}
// Jump spec
else if( ( Spec.reachFlags & 8 ) == Spec.reachFlags )
{
SpecColor = vect( 191, 165, 99 );
}
// Proscribed
else if( ( Spec.reachFlags & 128 ) == Spec.reachFlags )
{
SpecColor = vect( 255, 0, 0 );
}
// Forced
else if( ( Spec.reachFlags & 256 ) == Spec.reachFlags )
{
SpecColor = vect( 255, 255, 0 );
}
// Blue (narrow)
else if( ( Spec.CollisionRadius < 72 || Spec.CollisionHeight < 80 ) )
{
SpecColor = vect( 0, 0, 255 );
}
pc.DrawStayingDebugLine(np_array[i].PathList[j].Start.Location, np_array[i].PathList[j].End.Location, SpecColor.X, SpecColor.Y, SpecColor.Z);
debugLinesDrawn += 1;
}
}
GetController().ClientMessage("Path segments amount is:" @ debugLinesDrawn);
}
defaultproperties
{
bVisible = true
}