Gah - a solution with more questions. – EntropicLqd

Legacy:Zxanphorian Brushbuilders

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

Cone Builder [[Image:Legacy_BBZxanCone.png|]]

  1. //=============================================================================
  2. // ZxanphorianConeBuilder.
  3. // This is my FIRST brush builder for UnrealEd!
  4. // What it does is build a better cone than the one that Epic made.
  5. //
  6. //_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-
  7. //
  8. //	version 1.2
  9. //	tornado.f5@worldnet.att.net
  10. //	(c) 2002 Nick "Zxanphorian" Parker
  11. //
  12. //=============================================================================
  13. class ZxanphorianConeBuilder extends ZxanphorianBuilders config(ZxanphorianbrushBuilders);
  14.  
  15.  
  16. // _--__--__--__--_STRUCTS_--__--__--__--_
  17.  
  18. 	struct TopTipLocationStruct
  19. {
  20.  
  21. 	var() config float Height, CapLocationX, CapLocationY;
  22.  
  23. };
  24. 	struct TipLocationsStruct
  25. {
  26. var() config TopTipLocationStruct TopTipLocation;
  27. var() config TopTipLocationStruct BottomTipLocation;
  28. };
  29. var() config TipLocationsStruct TipLocations;
  30.  
  31.  
  32.  
  33. 	struct DimensionsStruct
  34. {
  35. 	var() config bool UseRadius;
  36. 	var() config float Radius, Length, Width, OffsetX, OffsetY, OffsetZ;
  37. };
  38. 	struct DimensionStruct
  39. {
  40. 	var() config DimensionsStruct OuterDimensions;
  41. 	var() config DimensionsStruct InnerDimensions;
  42. };
  43. 	var() config DimensionStruct Dimensions;
  44.  
  45.  
  46.  
  47.  
  48. 	struct RotationStruct
  49. {
  50. 	var() config float RotationX, RotationY;
  51. };
  52. 	struct RotationsStruct {
  53. 	var() config RotationStruct TopRotation;
  54. 	var() config RotationStruct BottomRotation;
  55. };
  56. 	var() config RotationsStruct Rotations;
  57.  
  58.  
  59. 	struct RandomiserTBStruct
  60. {
  61. 	var() float Height[2], Radius[2], CapLocationX[2], CapLocationY[2];
  62. };
  63. struct RandomiserMStruct
  64. {
  65. 	var() int Sides[2];
  66. };
  67. 	struct RandomisersStruct
  68. {
  69. 	var() RandomiserTBStruct RandomiserTop;
  70. 	var() RandomiserTBStruct RandomiserBottom;
  71. 	var() RandomiserMStruct RandomiserMisc;
  72. };
  73. 	var() RandomisersStruct Randomisers;
  74.  
  75.  
  76.  
  77. // _--__--__--__--_OTHER VARIABLES_--__--__--__--_
  78. 		var() config int Sides;
  79. 		var() config name GroupName;
  80. 		var() config bool HasBottom, MergeCoplanars ;
  81. 		var() export bool SaveConfiguration;
  82.  
  83.  
  84. 	enum PresetsEnum
  85. {
  86. No_Preset,
  87. Randomiser,
  88. DefaultBBProperties
  89. };
  90. 	var() config PresetsEnum Presets;
  91.  
  92. enum HelpEnum
  93. {
  94. ChooseATopic,
  95. TipLocations,
  96. Dimensions,
  97. Rotations,
  98. Randomisers,
  99. RegularOptions,
  100. Presets
  101. };
  102. 	var() config HelpEnum HelpTopics;
  103. enum AboutEnum
  104. {
  105. DisplayOff,
  106. DisplayOn,
  107. };
  108. 	var() config AboutEnum AboutBrushbuilder;
  109.  
  110. 	var int HB;
  111.  
  112.  
  113. function DoPresets()
  114. {
  115. // _--__--__--__--_PRESETS_--__--__--__--_
  116.  
  117. 	if( Presets == DefaultBBProperties)
  118. {
  119. TipLocations.TopTipLocation.Height=512.000000;
  120. TipLocations.TopTipLocation.CapLocationX=0.000000;
  121. TipLocations.TopTipLocation.CapLocationY=0.000000;
  122. TipLocations.BottomTipLocation.Height=-512.000000;
  123. TipLocations.BottomTipLocation.CapLocationX=0.000000;
  124. TipLocations.BottomTipLocation.CapLocationY=0.000000;
  125.  
  126.  
  127. Dimensions.OuterDimensions.UseRadius=True;
  128. Dimensions.OuterDimensions.Radius=512.000000;
  129. Dimensions.OuterDimensions.Length=512.000000;
  130. Dimensions.OuterDimensions.Width=512.000000;
  131. Dimensions.OuterDimensions.OffsetX=0.000000;
  132. Dimensions.OuterDimensions.OffsetY=0.000000;
  133. Dimensions.OuterDimensions.OffsetZ=0.000000;
  134. Dimensions.InnerDimensions.UseRadius=True;
  135. Dimensions.InnerDimensions.Radius=256.000000;
  136. Dimensions.InnerDimensions.Length=256.000000;
  137. Dimensions.InnerDimensions.Width=256.000000;
  138. Dimensions.InnerDimensions.OffsetX=0.000000;
  139. Dimensions.InnerDimensions.OffsetY=0.000000;
  140. Dimensions.InnerDimensions.OffsetZ=0.000000;
  141.  
  142.  
  143. Rotations.TopRotation.RotationX=1.000000;
  144. Rotations.TopRotation.RotationY=1.000000;
  145. Rotations.BottomRotation.RotationX=1.000000;
  146. Rotations.TopRotation.RotationY=1.000000;
  147.  
  148.  
  149. Sides=8;
  150. GroupName='ZxanCone';
  151. HasBottom=False;
  152. MergeCoplanars=True;
  153. Presets=No_Preset;
  154. HelpTopics=ChooseATopic;
  155. AboutBrushbuilder=DisplayOff;
  156. }
  157.  
  158.  
  159. if( Presets == Randomiser)
  160. {
  161. 	TipLocations.TopTipLocation.Height = RandRange( Randomisers.RandomiserTop.Height[0], Randomisers.RandomiserTop.Height[1]);
  162. 	TipLocations.BottomTipLocation.Height = RandRange(Randomisers.RandomiserBottom.Height[0], Randomisers.RandomiserBottom.Height[1]);
  163. 	Dimensions.OuterDimensions.Radius = RandRange(Randomisers.RandomiserTop.Radius[0], Randomisers.RandomiserTop.Radius[1] ) ;
  164. 	Dimensions.InnerDimensions.Radius = RandRange(Randomisers.RandomiserBottom.Radius[0], Randomisers.RandomiserBottom.Radius[1]);
  165. 	TipLocations.TopTipLocation.CapLocationX = RandRange(Randomisers.RandomiserTop.CapLocationX[0], Randomisers.RandomiserTop.CapLocationX[1]);
  166. 	TipLocations.TopTipLocation.CapLocationY = RandRange(Randomisers.RandomiserTop.CapLocationY[0], Randomisers.RandomiserTop.CapLocationY[1]);
  167. 	TipLocations.BottomTipLocation.CapLocationX =RandRange(Randomisers.RandomiserBottom.CapLocationX[0], Randomisers.RandomiserBottom.CapLocationX[1]);
  168. 	TipLocations.BottomTipLocation.CapLocationY =RandRange(Randomisers.RandomiserBottom.CapLocationY[0], Randomisers.RandomiserBottom.CapLocationY[1]);
  169. 	Sides = RandRange(Randomisers.RandomiserMisc.Sides[0], Randomisers.RandomiserMisc.Sides[1]);
  170. 	HasBottom = False;
  171.  
  172. // How to Choose between the different options
  173. HB = RandRange(0, 5000);
  174. 	if( HB >= 2500)
  175. HasBottom = True;
  176.  
  177. }
  178.  
  179. }
  180.  
  181.  
  182.  
  183. function BuildCone( int Direction, int Sides, name Item, TipLocationsStruct TipLocations, TopTipLocationStruct TopTipLocation, DimensionStruct Dimensions, DimensionsStruct OuterDimensions, RotationsStruct Rotations, RotationStruct TopRotation)
  184. {
  185.  
  186. 	local int n,i,j,q;
  187. 	n = GetVertexCount();
  188.  
  189.  
  190. 	// Vertices.
  191. 	if(Dimensions.OuterDimensions.UseRadius == True)
  192. {	for( i=0; i<Sides; i++ )
  193. 	{	Vertex3f( Dimensions.OuterDimensions.OffsetX+Dimensions.OuterDimensions.Radius*sin((2*i+Rotations.BottomRotation.RotationX)*pi/Sides), Dimensions.OuterDimensions.OffsetY+Dimensions.OuterDimensions.Radius*cos((2*i+Rotations.BottomRotation.RotationY)*pi/Sides), Dimensions.OuterDimensions.OffsetZ ); }
  194.  }
  195. 	else
  196. {
  197. for( i=0; i<Sides; i++ )
  198. 	{	Vertex3f( Dimensions.OuterDimensions.OffsetX+ Dimensions.OuterDimensions.Width*sin((2*i+Rotations.BottomRotation.RotationX)*pi/Sides), Dimensions.OuterDimensions.OffsetY+Dimensions.OuterDimensions.Length*cos((2*i+Rotations.BottomRotation.RotationY)*pi/Sides), Dimensions.OuterDimensions.OffsetZ );
  199.  }
  200. 	}
  201. 	Vertex3f( TipLocations.TopTipLocation.CapLocationX, TipLocations.TopTipLocation.CapLocationY, TipLocations.TopTipLocation.Height );
  202.  
  203.  
  204. 	// Polys.
  205. 	for( i=0; i<Sides; i++ )
  206. {		Poly3i( Direction, n+i, n+Sides, n+((i+1)%Sides),Item ); }
  207. }
  208.  
  209. function bool Build()
  210. {
  211. 	local int i;
  212.  
  213. 	DoPresets();
  214.  
  215. 	if( Sides<3 )
  216. 		return BadParameters();
  217. 	if( TipLocations.TopTipLocation.Height<=0 || Dimensions.OuterDimensions.Radius<=0 )
  218. 		return BadParameters();
  219. 	if( HasBottom && Dimensions.InnerDimensions.Radius<=0 )
  220. 		return BadParameters();
  221. 	if( HasBottom && TipLocations.BottomTipLocation.Height>TipLocations.TopTipLocation.Height )
  222. 		return BadParameters();
  223. 	if( SaveConfiguration == True)
  224. 		SaveConfiguration = False;
  225. 		SaveConfig();
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233. // _--__--__--__--_START_--__--__--__--_
  234. // _--__--__--__--_START_--__--__--__--_
  235. 	BeginBrush( MergeCoplanars, GroupName );
  236. 	BuildCone( +1, Sides, 'Top', TipLocations, TipLocations.TopTipLocation, Dimensions, Dimensions.OuterDimensions, Rotations, Rotations.TopRotation);
  237. 	if( HasBottom )
  238. 	{
  239. 		BuildCone( -1, Sides, 'Cap', TipLocations, TipLocations.BottomTipLocation, Dimensions, Dimensions.InnerDimensions, Rotations, Rotations.BottomRotation );
  240. 		if( Dimensions.OuterDimensions.Radius==Dimensions.InnerDimensions.Radius ^^ Dimensions.OuterDimensions.Radius!=Dimensions.InnerDimensions.Radius)
  241. 			for( i=0; i<Sides; i++ )
  242. 				Poly4i( 1, i, ((i+1)%Sides), Sides+1+((i+1)%Sides), Sides+1+i, 'Bottom' );
  243. 	}
  244. 	else
  245. 	{
  246. 		PolyBegin( 1, 'Bottom' );
  247. 		for( i=0; i<Sides; i++ )
  248. 			Polyi( i );
  249. 		PolyEnd();
  250. 	}
  251. 	return EndBrush();
  252. }
  253.  
  254. defaultproperties {
  255. BitmapFilename="BBZxanCone"
  256. Tooltip="Zxanphorian's Cone Brushbuilder"
  257.  
  258. TipLocations=(TopTipLocation=(Height=512.000000,CapLocationX=0.000000,CapLocationY=0.000000),BottomTipLocation=(Height=-512.000000,CapLocationX=0.000000,CapLocationY=0.000000))
  259. Dimensions=(OuterDimensions=(UseRadius=True,Radius=512.000000,Length=512.000000,Width=512.000000,OffsetX=0.000000,OffsetY=0.000000,OffsetZ=0.000000),InnerDimensions=(UseRadius=True,Radius=256.000000,Length=256.000000,Width=256.000000,OffsetX=0.000000,OffsetY=0.000000,OffsetZ=0.000000))
  260. Rotations=(TopRotation=(RotationX=1.000000,RotationY=1.000000),BottomRotation=(RotationX=1.000000,RotationY=1.000000))
  261. Sides=8
  262. GroupName=ZxanCone
  263. HasBottom=False
  264. MergeCoplanars=True
  265. Presets=No_Preset
  266. HelpTopics=ChooseATopic
  267. AboutBrushbuilder=DisplayOff
  268. 	}

Options that I want to implement but don't know how

Dropped Options

Problems

function bool SafePoly4i( int Direction , int p0 , int p1 , int p2 , int p3 , 
		optional name ItemName, optional int PolyFlags )
{
	if( isCoplanar4v(getVertex(p0),getVertex(p1),getVertex(p2),getVertex(p3)) )
		LogPoly4i( Direction , p0 , p1 , p2 , p3 , ItemName, PolyFlags );
	else
	{
		LogPoly3i( Direction , p0 , p1 , p2 , ItemName, PolyFlags );
		LogPoly3i( Direction , p2 , p3 , p0 , ItemName, PolyFlags );
	}
}

Tarquin: the above function has the right order for 4 vertices whether in one square or two triangles. The safety-checking isn't quite up to scratch, so you can try it as is, but it will probably end up making triangles in cases when it shouldn't. BTW, I've put a link to this page on User Projects instead of RC. I don't think there's that many people who are making brushbuilders, so it's not really top news.

Suggestions

Comments