1
0
KF2-Dev-Scripts/Engine/Classes/PBRuleNodeCorner.uc

90 lines
3.0 KiB
Ucode
Raw Normal View History

2020-12-13 15:01:13 +00:00
/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
class PBRuleNodeCorner extends PBRuleNodeBase
native(ProcBuilding)
collapsecategories
hidecategories(Object);
/** Amount to split off left (and maybe right) of supplied scope, based on left/right edge angles */
var() float CornerSize;
/** Struct containing info about each decision angle */
struct native RBCornerAngleInfo
{
/** Angle (in degrees) */
var() float Angle;
/** If non-zero, overrides the base CornerSize for this particular angle */
var() float CornerSize;
structdefaultproperties
{
Angle=0.0
CornerSize=0.0
}
};
/** Set of angles of corner angle, each corresponds to an output of this node */
var() array<RBCornerAngleInfo> Angles;
/** Angle in degrees at which point surfaces are considered co-planar, and corner mesh is not added */
var() float FlatThreshold;
/** If TRUE, no space left or mesh added in concave corners. */
var() bool bNoMeshForConcaveCorners;
/** How to adjust the roof/floor poly to fit with this corner mesh */
var() EPBCornerType CornerType;
/** How far from start of curve mesh region to actually chamfer/round adjust roff poly corner */
var() float CornerShapeOffset;
/** If CornerType is set to EPBC_Round, how many tesselation steps to take around the corner */
var() int RoundTesselation;
/** Controls the curvature when using EPBC_Round- essentially 'pulls' the tangent handles further. */
var() float RoundCurvature;
/**
* If TRUE, look at face on the right to see how much gap to leave on right edge. If FALSE, just use CornerSize on left and right side
* Note, this only works when rulesets have the same corner size down the entire height - when looking at adjacent face, the top-left corner size is used.
*/
var() bool bUseAdjacentRulesetForRightGap;
cpptext
{
// UObject interface
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent);
// PBRuleNodeBase interface
virtual void ProcessScope(FPBScope2D& InScope, INT TopLevelScopeIndex, AProcBuilding* BaseBuilding, AProcBuilding* ScopeBuilding, UStaticMeshComponent* LODParent);
virtual class UPBRuleNodeCorner* GetCornerNode(UBOOL bTop, AProcBuilding* BaseBuilding, INT TopLevelScopeIndex);
// Editor
virtual FString GetRuleNodeTitle();
virtual FColor GetRuleNodeTitleColor();
virtual void RuleNodeCreated(UProcBuildingRuleset* Ruleset);
/** Update the NextRules array based on the Angles array */
void UpdateRuleConnectors();
/** For a given angle, return the size that this corner node will use on the left of the face */
FLOAT GetCornerSizeForAngle(FLOAT EdgeAngle);
}
defaultproperties
{
CornerSize=256.0
FlatThreshold=5.0
Angles[0]=(Angle=90.0)
Angles[1]=(Angle=-90.0)
CornerType=EPBC_Default
RoundTesselation=4
RoundCurvature=1.0
}