示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }