Skip to content
Snippets Groups Projects
Commit 867ef8d0 authored by Tobias Schöner's avatar Tobias Schöner
Browse files

refactor: simplify ShapeGenerator mesh assignment

parent 48e5231c
Branches
No related tags found
No related merge requests found
......@@ -20,14 +20,7 @@ public class CircleGenerator : ShapeGenerator
#region Implementation
protected override void GenerateShape()
{
var circle = CreateCircle(radius, sideCount);
if (circleMesh.sharedMesh != null)
circleMesh.sharedMesh.Clear();
circleMesh.mesh = CreateMesh(circle);
if (circleMesh.transform.TryGetComponent(out MeshCollider meshCol))
meshCol.sharedMesh = circleMesh.sharedMesh;
AssignMesh(circleMesh, CreateCircle(radius, sideCount));
}
/// <summary>
......
......@@ -29,22 +29,9 @@ protected override void GenerateShape()
Vector3[] bottomCircle = GetCirclePoints(bottomRadius, sideCount);
Vector3[] topCircle = GetCirclePoints(topRadius, sideCount, topPosition);
//side
if (sideMesh.sharedMesh != null)
sideMesh.sharedMesh.Clear();
sideMesh.mesh = CreateMesh(CreateConeSide(sideCount, bottomCircle, topCircle));
//top
if (topMesh.sharedMesh != null)
topMesh.sharedMesh.Clear();
if (generateTop)
topMesh.mesh = CreateMesh(CreatePlane(topCircle, false));
//bottom
if (bottomMesh.sharedMesh != null)
bottomMesh.sharedMesh.Clear();
if (generateBottom)
bottomMesh.mesh = CreateMesh(CreatePlane(bottomCircle, true));
AssignMesh(sideMesh, CreateConeSide(sideCount, bottomCircle, topCircle));
AssignMesh(topMesh, generateTop ? CreatePlane(topCircle, false) : null);
AssignMesh(bottomMesh, generateBottom ? CreatePlane(bottomCircle, true) : null);
}
private static (Vector3[], int[]) CreateConeSide(int sideCount, Vector3[] bottomCircle, Vector3[] topCircle)
......
using System;
using System.Linq;
using UnityEngine;
......@@ -12,9 +13,18 @@ public abstract class ShapeGenerator : MonoBehaviour
protected abstract void GenerateShape();
#region Helper
protected static Mesh CreateMesh((Vector3[] vertices, int[] triangles) meshValues)
protected static void AssignMesh(MeshFilter meshFilter, (Vector3[] vertices, int[] triangles)? meshValues)
{
Mesh mesh = new Mesh();
if (meshFilter.sharedMesh != null)
meshFilter.sharedMesh.Clear();
if (meshValues is (Vector3[], int[]) _mv)
meshFilter.mesh = CreateMesh(_mv);
if (meshFilter.transform.TryGetComponent(out MeshCollider meshCol))
meshCol.sharedMesh = meshFilter.sharedMesh;
}
private static Mesh CreateMesh((Vector3[] vertices, int[] triangles) meshValues)
{
Mesh mesh = new();
(mesh.vertices, mesh.triangles) = (meshValues.vertices, meshValues.triangles);
mesh.RecalculateNormals(); //fix lighting
return mesh;
......
......@@ -22,12 +22,7 @@ public class TorusGenerator : ShapeGenerator
#region Implementation
protected override void GenerateShape()
{
if (torusMesh.sharedMesh != null)
torusMesh.sharedMesh.Clear();
torusMesh.mesh = CreateMesh(CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount));
if (torusMesh.transform.TryGetComponent(out MeshCollider meshCol))
meshCol.sharedMesh = torusMesh.sharedMesh;
AssignMesh(torusMesh, CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount));
}
private static (Vector3[] vertices, int[] triangles) CreateTorus(float torusRadius, float ringRadius, int ringSegmentCount, int segmentSideCount)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment