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
No related branches found
No related tags found
No related merge requests found
...@@ -20,14 +20,7 @@ public class CircleGenerator : ShapeGenerator ...@@ -20,14 +20,7 @@ public class CircleGenerator : ShapeGenerator
#region Implementation #region Implementation
protected override void GenerateShape() protected override void GenerateShape()
{ {
var circle = CreateCircle(radius, sideCount); AssignMesh(circleMesh, 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;
} }
/// <summary> /// <summary>
......
...@@ -29,22 +29,9 @@ protected override void GenerateShape() ...@@ -29,22 +29,9 @@ protected override void GenerateShape()
Vector3[] bottomCircle = GetCirclePoints(bottomRadius, sideCount); Vector3[] bottomCircle = GetCirclePoints(bottomRadius, sideCount);
Vector3[] topCircle = GetCirclePoints(topRadius, sideCount, topPosition); Vector3[] topCircle = GetCirclePoints(topRadius, sideCount, topPosition);
//side AssignMesh(sideMesh, CreateConeSide(sideCount, bottomCircle, topCircle));
if (sideMesh.sharedMesh != null) AssignMesh(topMesh, generateTop ? CreatePlane(topCircle, false) : null);
sideMesh.sharedMesh.Clear(); AssignMesh(bottomMesh, generateBottom ? CreatePlane(bottomCircle, true) : null);
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));
} }
private static (Vector3[], int[]) CreateConeSide(int sideCount, Vector3[] bottomCircle, Vector3[] topCircle) private static (Vector3[], int[]) CreateConeSide(int sideCount, Vector3[] bottomCircle, Vector3[] topCircle)
......
using System;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
...@@ -12,9 +13,18 @@ public abstract class ShapeGenerator : MonoBehaviour ...@@ -12,9 +13,18 @@ public abstract class ShapeGenerator : MonoBehaviour
protected abstract void GenerateShape(); protected abstract void GenerateShape();
#region Helper #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.vertices, mesh.triangles) = (meshValues.vertices, meshValues.triangles);
mesh.RecalculateNormals(); //fix lighting mesh.RecalculateNormals(); //fix lighting
return mesh; return mesh;
......
...@@ -22,12 +22,7 @@ public class TorusGenerator : ShapeGenerator ...@@ -22,12 +22,7 @@ public class TorusGenerator : ShapeGenerator
#region Implementation #region Implementation
protected override void GenerateShape() protected override void GenerateShape()
{ {
if (torusMesh.sharedMesh != null) AssignMesh(torusMesh, CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount));
torusMesh.sharedMesh.Clear();
torusMesh.mesh = CreateMesh(CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount));
if (torusMesh.transform.TryGetComponent(out MeshCollider meshCol))
meshCol.sharedMesh = torusMesh.sharedMesh;
} }
private static (Vector3[] vertices, int[] triangles) CreateTorus(float torusRadius, float ringRadius, int ringSegmentCount, int 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