mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 05:48:07 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
44 lines
1.1 KiB
C#
44 lines
1.1 KiB
C#
using System;
|
|
|
|
namespace Editor.MeshEditor;
|
|
|
|
[Title( "Spike" ), Icon( "details" )]
|
|
internal class SpikePrimitive : PrimitiveBuilder
|
|
{
|
|
[Title( "Number of sides" )]
|
|
public int NumberOfSides { get; set; } = 16;
|
|
|
|
[Hide] public Vector3 Center { get; set; }
|
|
[Hide] public Vector3 Size { get; set; }
|
|
|
|
public override void SetFromBox( BBox box )
|
|
{
|
|
Center = box.Center;
|
|
Size = box.Size;
|
|
}
|
|
|
|
public override void Build( PolygonMesh mesh )
|
|
{
|
|
var points = new Vector3[NumberOfSides];
|
|
var halfSize = Size / 2;
|
|
|
|
for ( int i = 0; i < NumberOfSides; i++ )
|
|
{
|
|
var angle = i * (MathF.PI * 2.0f / NumberOfSides);
|
|
var point = new Vector3( MathF.Sin( angle ), MathF.Cos( angle ), -1.0f ) * halfSize;
|
|
points[i] = Center + point;
|
|
}
|
|
|
|
mesh.AddFace( points.Select( x => new Vector3( x.x, x.y, Center.z - halfSize.z ) ).ToArray() ); // bottom face
|
|
|
|
var topCenter = new Vector3( Center.x, Center.y, Center.z + halfSize.z );
|
|
|
|
// sides
|
|
for ( int i = 0; i < NumberOfSides; i++ )
|
|
{
|
|
var nextIndex = (i + 1) % NumberOfSides;
|
|
mesh.AddFace( topCenter, points[nextIndex], points[i] );
|
|
}
|
|
}
|
|
}
|