Files
unity-zone-system/Runtime/ShapeFactory.cs
Sebastian Bularca 823e146df0 copy from github
2026-03-27 15:13:27 +01:00

50 lines
1.8 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace Jovian.ZoneSystem {
public static class ShapeFactory {
public const int CircleSegments = 24;
public const float DefaultRadius = 2f;
public const float DefaultSquareHalf = 2f;
public const float DefaultPolygonRadius = 3f;
public const int DefaultPolygonVertices = 12;
public static List<Vector2> CreateSquare(float halfSize = DefaultSquareHalf) {
return new List<Vector2> {
new(-halfSize, -halfSize),
new(-halfSize, halfSize),
new(halfSize, halfSize),
new(halfSize, -halfSize)
};
}
public static List<Vector2> CreateCircle(float radius = DefaultRadius, int segments = CircleSegments) {
List<Vector2> points = new List<Vector2>(segments);
float step = 2f * Mathf.PI / segments;
for(int i = 0; i < segments; i++) {
float angle = i * step;
points.Add(new Vector2(Mathf.Cos(angle) * radius, Mathf.Sin(angle) * radius));
}
return points;
}
public static List<Vector2> CreatePolygon(float radius = DefaultPolygonRadius, int vertices = DefaultPolygonVertices) {
return CreateCircle(radius, vertices);
}
public static List<Vector2> CreateDefault(ZoneShape shape) {
switch(shape) {
case ZoneShape.Square: return CreateSquare();
case ZoneShape.Circle: return CreateCircle();
case ZoneShape.Polygon: return CreatePolygon();
default: return CreateSquare();
}
}
public static void RegenerateCircle(ZoneData data) {
data.polygon.Clear();
data.polygon.AddRange(CreateCircle(data.circleRadius));
}
}
}