Skip to content
Snippets Groups Projects
Select Git revision
  • cc85781ec894a425dc2476ae2924a47cf3a47e70
  • master default
  • JS-based-scroll-rendering
  • Paul_Marius_Level
  • Paul_Marius_2
  • Paul_Marius
  • Andi_Mark
  • be-UnityWebView
  • gitignoreFrameitServer
  • ZimmerBSc
  • Bugfix_StageLoading
  • stages
  • MAZIFAU_Experimental
  • tsc/coneworld
  • tsc/fact-interaction
  • marcel
  • MaZiFAU_TopSort
  • mergeHelper
  • zwischenSpeichern
  • tempAndrToMaster
  • SebBranch
  • 3.0
  • v2.1
  • v2.0
  • v1.0
25 results

CircleGenerator.cs

Blame
  • user avatar
    MaZiFAU authored
    cc85781e
    History
    CircleGenerator.cs 1.76 KiB
    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    
    public class CircleGenerator : ShapeGenerator
    {
        #region InspectorVariables
        [Header("Circle values")]
        [Range(0,100)] public float radius = 1f;
    
        [Header("Technical")]
        [Range(3,1000)] public int sideCount = 500;
    
        [Header("Parts")]
        public List<MeshFilter> circleMesh;
        #endregion InspectorVariables
    
        #region Implementation
        protected override void GenerateShape()
        {
            foreach (MeshFilter filter in circleMesh)
            {
                if (filter == null) continue;
    
                var circle = CreateCircle(radius, sideCount);
    
                if (filter.sharedMesh != null)
                    filter.sharedMesh.Clear();
                filter.mesh = CreateMesh(circle);
    
                if (filter.transform.TryGetComponent(out MeshCollider meshCol))
                    meshCol.sharedMesh = filter.sharedMesh;
            }
        }
    
        /// <summary>
        /// Creates circle vertecies and triangles around the midPoint at (0,0,0)
        /// </summary>
        /// <param name="points"></param>
        /// <param name="invert"></param>
        /// <returns></returns>
        static (Vector3[], int[]) CreateCircle(float radius, int sideCount, bool invert = false)
        {
            Vector3[] vertices = GetCirclePoints(radius, sideCount).Union(new Vector3[] { Vector3.zero }).ToArray();
            int[] triangles = new int[(vertices.Length - 1) * 3];
            int vertLen = vertices.Length;
            for (int i = 0; i < vertLen-1; i++)
            {
                triangles[i * 3 + 0] = vertLen-1; // midPoint
                triangles[i * 3 + 1] = i;
                triangles[i * 3 + 2] = (i + 1) % (vertLen-1);
            }
            return (vertices, invert ? triangles.Reverse().ToArray() : triangles);
        }
        #endregion Implementation
    }