FColor ABrush::GetWireColor() const { FColor Color = GEngine->C_BrushWire; if( IsStaticBrush() ) { Color = bColored ? BrushColor : BrushType == Brush_Subtract ? GEngine->C_SubtractWire : BrushType != Brush_Add ? GEngine->C_BrushWire : (PolyFlags & PF_Portal) ? GEngine->C_SemiSolidWire : (PolyFlags & PF_NotSolid) ? GEngine->C_NonSolidWire : (PolyFlags & PF_Semisolid) ? GEngine->C_ScaleBoxHi : GEngine->C_AddWire; } else if( IsVolumeBrush() ) { Color = bColored ? BrushColor : GEngine->C_Volume; } else if( IsBrushShape() ) { Color = bColored ? BrushColor : GEngine->C_BrushShape; } return Color; }
void ABrush::CheckForErrors() { Super::CheckForErrors(); if( !BrushComponent ) { FFormatNamedArguments Arguments; Arguments.Add(TEXT("ActorName"), FText::FromString(GetName())); FMessageLog("MapCheck").Warning() ->AddToken(FUObjectToken::Create(this)) ->AddToken(FTextToken::Create(FText::Format(LOCTEXT( "MapCheck_Message_BrushComponentNull", "{ActorName} : Brush has NULL BrushComponent property - please delete" ), Arguments) )) ->AddToken(FMapErrorToken::Create(FMapErrors::BrushComponentNull)); } else { ABrush* MyBrush = Cast<ABrush>( Brush ); // NOTE : don't report NULL texture references on the builder brush - it doesn't matter there if( MyBrush && !FActorEditorUtils::IsABuilderBrush(MyBrush) && !IsBrushShape() ) { // A brush without any polygons in it isn't useful. Should be deleted. if( Brush->Polys->Element.Num() == 0 ) { FFormatNamedArguments Arguments; Arguments.Add(TEXT("ActorName"), FText::FromString(GetName())); FMessageLog("MapCheck").Warning() ->AddToken(FUObjectToken::Create(this)) ->AddToken(FTextToken::Create(FText::Format(LOCTEXT( "MapCheck_Message_BrushZeroPolygons", "{ActorName} : Brush has zero polygons - please delete" ), Arguments) )) ->AddToken(FMapErrorToken::Create(FMapErrors::BrushZeroPolygons)); } // Check for non-coplanar polygons. for( int32 x = 0 ; x < Brush->Polys->Element.Num() ; ++x ) { FPoly* Poly = &(Brush->Polys->Element[x]); bool Coplanar = 1; for(int32 VertexIndex = 0;VertexIndex < Poly->Vertices.Num();VertexIndex++) { if(FMath::Abs(FPlane(Poly->Vertices[0],Poly->Normal).PlaneDot(Poly->Vertices[VertexIndex])) > THRESH_POINT_ON_PLANE) { FFormatNamedArguments Arguments; Arguments.Add(TEXT("ActorName"), FText::FromString(GetName())); FMessageLog("MapCheck").Warning() ->AddToken(FUObjectToken::Create(this)) ->AddToken(FTextToken::Create(FText::Format(LOCTEXT( "MapCheck_Message_NonCoPlanarPolys", "{ActorName} : Brush has non-coplanar polygons" ), Arguments) )) ->AddToken(FMapErrorToken::Create(FMapErrors::NonCoPlanarPolys)); Coplanar = 0; break; } } if(!Coplanar) { break; } } // check for planar brushes which might mess up collision if(Brush->Bounds.BoxExtent.Z < SMALL_NUMBER || Brush->Bounds.BoxExtent.Y < SMALL_NUMBER || Brush->Bounds.BoxExtent.X < SMALL_NUMBER) { FFormatNamedArguments Arguments; Arguments.Add(TEXT("ActorName"), FText::FromString(GetName())); FMessageLog("MapCheck").Warning() ->AddToken(FUObjectToken::Create(this)) ->AddToken(FTextToken::Create(FText::Format(LOCTEXT( "MapCheck_Message_PlanarBrush", "{ActorName} : Brush is planar" ), Arguments) )) ->AddToken(FMapErrorToken::Create(FMapErrors::PlanarBrush)); } } } }