// --------------------------------------------------------------- NewHole void NewHole() { HOLE_NUM++; STROKE_NUM = 0; HoleInfo info = CourseInfo[HOLE_NUM]; int yards = info.Yards; // from tee to cup int par = info.Par; var cup = new CircleGameObj(0, 0, 0, GameObjType.CUP); var green = new CircleGameObj(0, 0, 10, GameObjType.GREEN); var fairway = new RectGameObj(0 - (FairwayWidth / 2), 0 - (green.Radius + FairwayExtension), FairwayWidth, yards + (green.Radius + FairwayExtension) + 1, GameObjType.FAIRWAY); var rough = new RectGameObj(fairway.X - RoughAmt, fairway.Y - RoughAmt, fairway.Width + (2 * RoughAmt), fairway.Length + (2 * RoughAmt), GameObjType.ROUGH); BALL = new Ball(0, yards, 0, GameObjType.BALL); ScoreCardStartNewHole(); holeGeometry = new HoleGeometry(cup, green, fairway, rough, info.Hazard); w(" |> " + HOLE_NUM); w(" | "); w(" | "); w(" ^^^^^^^^^^^^^^^"); Console.WriteLine("Hole #{0}. You are at the tee. Distance {1} yards, par {2}.", HOLE_NUM, info.Yards, info.Par); w(info.Description); TeeUp(); }
public HoleGeometrySetting() { HoleGeometry = new HoleGeometry( 100, 0.8, Atom.ReflectionPattern.Specularly, new CylinderReflector(0, Vector.Zero, Vector.Forward, 40, 2.5), new CylinderReflector(3, Vector.Forward * 40, Vector.Forward, 10, 2.5), new Hole(1, Vector.Forward * 50, Vector.Forward, 5), new Shield(2, Vector.Forward * 60, Vector.Forward, 16) ); MinimumReflectionCoefficient = 0; MaximumReflectionCoefficient = 1; ReflectionCoefficientInterval = 0.1; MinimumRadius = 0; MaximumRadius = 7.5; RadiusInterval = 0.5; SimulationCount = 100000; ReflectionLimit = 100; ReflectionPattern = Atom.ReflectionPattern.Specularly; CameraPosition = new System.Windows.Media.Media3D.Point3D(); }
// Start is called before the first frame update async void Start() { Scoreboard.gameObject.SetActive(false); var triggerVolume = GetComponent <Collider>(); triggerVolume.bounds.size.Set(20, 5, 1); if (mesh == null) { var holeVertices = HoleGeometry.Create(width, height, minRadius, maxRadius, numVertices); int numHoleVertices = holeVertices.Length; var vertices = new Vector3[2 * numHoleVertices + 8]; var uv = new Vector2[2 * numHoleVertices + 8]; var triangles = new int[][] { new int[3 * 4 * numVertices + 3 * 4], new int[3 * 2 * numVertices] }; for (int i = 0; i < numHoleVertices; i += 2) { int hv0 = i, hv1 = i + 1, hv2 = (i + 2) % numHoleVertices, hv3 = (i + 3) % numHoleVertices; int v0 = hv0, v1 = hv1, v2 = hv2, v3 = hv3; int v0p = v0 + numHoleVertices, v1p = v1 + numHoleVertices, v2p = v2 + numHoleVertices, v3p = v3 + numHoleVertices; vertices[v0] = new Vector3(holeVertices[hv0].x, holeVertices[hv0].y); vertices[v1] = new Vector3(holeVertices[hv1].x, holeVertices[hv1].y); vertices[v0p] = new Vector3(holeVertices[hv0].x, holeVertices[hv0].y, depth); vertices[v1p] = new Vector3(holeVertices[hv1].x, holeVertices[hv1].y, depth); uv[v0] = new Vector2(holeVertices[hv0].x / totalWidth + 0.5f, holeVertices[hv0].y / height + 0.5f); uv[v1] = new Vector2(holeVertices[hv1].x / totalWidth + 0.5f + Random.Range(-0.01f, 0.01f), holeVertices[hv1].y / height + 0.5f + Random.Range(-0.01f, 0.01f)); uv[v0p] = uv[v0]; uv[v1p] = uv[v1]; triangles[0][6 * i] = v2; triangles[0][6 * i + 1] = v1; triangles[0][6 * i + 2] = v0; triangles[0][6 * i + 3] = v1; triangles[0][6 * i + 4] = v2; triangles[0][6 * i + 5] = v3; triangles[0][6 * i + 6] = v0p; triangles[0][6 * i + 7] = v1p; triangles[0][6 * i + 8] = v2p; triangles[0][6 * i + 9] = v3p; triangles[0][6 * i + 10] = v2p; triangles[0][6 * i + 11] = v1p; triangles[1][3 * i] = v1; triangles[1][3 * i + 1] = v3p; triangles[1][3 * i + 2] = v1p; triangles[1][3 * i + 3] = v3; triangles[1][3 * i + 4] = v3p; triangles[1][3 * i + 5] = v1; } vertices[2 * numHoleVertices] = new Vector3(-totalWidth / 2.0f, height / 2.0f); vertices[2 * numHoleVertices + 1] = new Vector3(-width / 2.0f, height / 2.0f); vertices[2 * numHoleVertices + 2] = new Vector3(-width / 2.0f, -height / 2.0f); vertices[2 * numHoleVertices + 3] = new Vector3(-totalWidth / 2.0f, -height / 2.0f); vertices[2 * numHoleVertices + 4] = new Vector3(totalWidth / 2.0f, height / 2.0f); vertices[2 * numHoleVertices + 5] = new Vector3(width / 2.0f, height / 2.0f); vertices[2 * numHoleVertices + 6] = new Vector3(width / 2.0f, -height / 2.0f); vertices[2 * numHoleVertices + 7] = new Vector3(totalWidth / 2.0f, -height / 2.0f); uv[2 * numHoleVertices] = new Vector2(0, 1); uv[2 * numHoleVertices + 1] = new Vector2(0.5f - width / 2.0f / totalWidth, 1); uv[2 * numHoleVertices + 2] = new Vector2(0.5f - width / 2.0f / totalWidth, 0); uv[2 * numHoleVertices + 3] = new Vector2(0, 0); uv[2 * numHoleVertices + 4] = new Vector2(1, 1); uv[2 * numHoleVertices + 5] = new Vector2(0.5f + width / 2.0f / totalWidth, 1); uv[2 * numHoleVertices + 6] = new Vector2(0.5f + width / 2.0f / totalWidth, 0); uv[2 * numHoleVertices + 7] = new Vector2(1, 0); triangles[0][3 * 4 * numVertices] = 2 * numHoleVertices; triangles[0][3 * 4 * numVertices + 1] = 2 * numHoleVertices + 1; triangles[0][3 * 4 * numVertices + 2] = 2 * numHoleVertices + 2; triangles[0][3 * 4 * numVertices + 3] = 2 * numHoleVertices + 2; triangles[0][3 * 4 * numVertices + 4] = 2 * numHoleVertices + 3; triangles[0][3 * 4 * numVertices + 5] = 2 * numHoleVertices; triangles[0][3 * 4 * numVertices + 6] = 2 * numHoleVertices + 4; triangles[0][3 * 4 * numVertices + 7] = 2 * numHoleVertices + 6; triangles[0][3 * 4 * numVertices + 8] = 2 * numHoleVertices + 5; triangles[0][3 * 4 * numVertices + 9] = 2 * numHoleVertices + 6; triangles[0][3 * 4 * numVertices + 10] = 2 * numHoleVertices + 4; triangles[0][3 * 4 * numVertices + 11] = 2 * numHoleVertices + 7; mesh = new Mesh(); mesh.vertices = vertices; mesh.subMeshCount = 2; mesh.SetTriangles(triangles[0], 0); mesh.SetTriangles(triangles[1], 1); mesh.uv = uv; mesh.RecalculateNormals(); var normals = new Vector3[mesh.normals.Length]; mesh.normals.CopyTo(normals, 0); for (var i = 0; i < numHoleVertices; i++) { normals[i] = new Vector3(0, 0, -1); } mesh.normals = normals; } mf = GetComponent <MeshFilter>(); mf.mesh = mesh; transform.GetComponent <MeshCollider>().sharedMesh = mesh; }