private void CreateCoins(TrackItem[] coins, SplineResult point, Transform parent, IList <GameObject> list, List <RoadEntityData> a, int road) { if (coins == null || coins.Length == 0) { return; } var distance = _linesInterval / coins.Length; for (var i = 0; i < coins.Length; i++) { TrackPrefabs.TrackObject prefab = null; switch (coins[i]) { case TrackItem.CoinLow: prefab = _prefabs.CoinLow; a.Add(RoadEntityData.CreateCoin((float)point.percent, 0, road)); break; case TrackItem.CoinMiddle: prefab = _prefabs.CoinMiddle; a.Add(RoadEntityData.CreateCoin((float)point.percent, 0, road)); break; case TrackItem.CoinHigh: prefab = _prefabs.CoinHigh; a.Add(RoadEntityData.CreateCoin((float)point.percent, 0, road)); break; } if (prefab != null) { var go = (GameObject)PrefabUtility.InstantiatePrefab(prefab.prefab); go.transform.rotation = Quaternion.LookRotation(point.direction, point.normal); go.transform.position = point.position + point.rotation * prefab.offset + point.direction * (distance * i); go.transform.parent = parent; list?.Add(go); } } }
private void CreateObjects(LevelHolder levelHolder) { var allEntities = new List <RoadEntityData>(); var splines = levelHolder._lines; var points = levelHolder.GetComputer().GetPoints(); for (var i = 0; i < points.Length; i++) { for (var j = 0; j < _track[i].Lines.Length; j++) { foreach (var item in _track[i].Lines[j].values) { var point = splines[j].Evaluate(splines[j].Project(splines[j].GetPoint(i).position)); TrackPrefabs.TrackObject prefab = null; IList <GameObject> list = null; switch (item) { case TrackItem.Magnet: { prefab = _prefabs.Magnet; break; } case TrackItem.Obstacle: { prefab = _prefabs.Obstacle; list = levelHolder.barriers; allEntities.Add(RoadEntityData.CreateBarrier(BarrierType.Ground_SingePath, i / (float)(points.Length - 1), 0.5f, j)); break; } case TrackItem.ObstacleHard: { prefab = _prefabs.ObstacleBlock; list = levelHolder.barriers; allEntities.Add(RoadEntityData.CreateBarrier(BarrierType.Ground_SingePath, i / (float)(points.Length - 1), 1.5f, j)); break; } case TrackItem.EnemyGround: { prefab = _prefabs.EnemyGround; list = levelHolder.enemies; allEntities.Add(RoadEntityData.CreateEnemy(EnemyType.Ground, i / (float)(points.Length - 1), 0.5f, j)); break; } case TrackItem.EnemyAir: { prefab = _prefabs.EnemyAir; list = levelHolder.enemies; allEntities.Add(RoadEntityData.CreateEnemy(EnemyType.Fly, i / (float)(points.Length - 1), 0.5f, j)); break; } case TrackItem.Shield: { prefab = _prefabs.Shield; break; } case TrackItem.Accelerator: { prefab = _prefabs.Accelerator; list = levelHolder.boosters; break; } } if (prefab != null) { var obj = (GameObject)PrefabUtility.InstantiatePrefab(prefab.prefab); obj.transform.rotation = Quaternion.LookRotation(point.direction, point.normal); obj.transform.position = point.position + point.rotation * prefab.offset; obj.transform.parent = splines[j].transform; list?.Add(obj); } CreateCoins(_track[i].Lines[j].values.Where(t => t == TrackItem.CoinLow || t == TrackItem.CoinMiddle || t == TrackItem.CoinHigh).ToArray(), point, splines[j].transform, levelHolder.money, allEntities, j); } EditorUtility.DisplayProgressBar("Create track objects", $"Line #{j + 1} of {_track[i].Lines.Length} :: Point: {i + 1} of {points.Length}", i / (float)(points.Length - 1)); } } levelHolder.allEntities = allEntities; EditorUtility.ClearProgressBar(); eGUI.SetDirty(levelHolder.gameObject); }