Ejemplo n.º 1
0
 void UnpackRecursively(SegmentSequence sequence)
 {
     if (sequence.isCustom && sequence.customSequence != null)
     {
         GameObject[] customSequencePrefabs = sequence.customSequence.GetAllSegments();
         for (int j = 0; j < customSequencePrefabs.Length; j++)
         {
             GameObject   go = Instantiate(customSequencePrefabs[j]);
             LevelSegment ls = go.GetComponent <LevelSegment>();
             if (ls != null)
             {
                 UnpackSegment(ls);
             }
         }
         return;
     }
     for (int i = 0; i < sequence.segments.Length; i++)
     {
         if (sequence.segments[i].nested)
         {
             UnpackRecursively(sequence.segments[i].nestedSequence);
         }
         else
         {
             LevelSegment ls = sequence.segments[i].Instantiate();
             if (ls != null)
             {
                 UnpackSegment(ls);
             }
         }
     }
 }
Ejemplo n.º 2
0
    void GenerateLevelSegment(Vector3 startPosition)
    {
        int numberOfLanes = 3;
        int laneSegments  = 3;

        float spaceBetweenLanes = 0.5f;

        List <Lane> lanes = new List <Lane>();

        for (int x = 0; x < numberOfLanes; ++x)
        {
            Lane lane = new Lane();
            for (int z = 0; z < laneSegments; ++z)
            {
                GameObject laneSegment = Instantiate(laneSegmentPrefab);
                laneSegment.transform.position  = startPosition;
                laneSegment.transform.position += Vector3.right * (laneWidth + spaceBetweenLanes) * x;
                laneSegment.transform.position += Vector3.forward * (laneLength) * z;
                laneSegment.transform.position += Vector3.forward * (laneLength / 2);
                lane.laneSegments.Add(laneSegment);
            }
            lanes.Add(lane);
        }

        LevelSegment levelSegment = new LevelSegment();

        levelSegment.lanes = lanes;
        levelSegments.Add(levelSegment);
    }
Ejemplo n.º 3
0
 public LevelSegmentCustomPathEditor(LevelSegmentEditor e, LevelSegment s, LevelSegment.LevelSegmentPath p)
 {
     editor           = e;
     segment          = s;
     path             = p;
     tool             = (PathTool)EditorPrefs.GetInt("Dreamteck.Forever.LevelSegmentCustompathEditor.tool", 0);
     surfaceLayermask = EditorPrefs.GetInt("Dreamteck.Forever.surfaceLayermask.tool", ~0);
 }
Ejemplo n.º 4
0
 // Use this for initialization
 void Start()
 {
     musicCon       = GameObject.FindGameObjectWithTag("MusicController").GetComponent <MusicController> ();
     player         = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController> ();
     level          = GameObject.FindGameObjectWithTag("LevelParent").GetComponent <LevelSegment> ();
     noteParent     = GameObject.FindGameObjectWithTag("NoteParent");
     parallax       = GameObject.FindGameObjectWithTag("Parallax").GetComponent <BackgroundController> ();
     resettingLevel = false;
     musicCon.startMusic();
 }
Ejemplo n.º 5
0
        void OnSavingPrefab(PrefabStage stage)
        {
            LevelSegment segment = stage.prefabContentsRoot.GetComponent <LevelSegment>();

            if (segment != null)
            {
                segment.EditorPack();
                PrefabUtility.SaveAsPrefabAsset(segment.gameObject, stage.prefabAssetPath);
            }
            PrefabStage.prefabStageClosing -= OnSavingPrefab;
        }
Ejemplo n.º 6
0
    /// <summary>
    /// Will return the object to the current pool if it is considered an 'active' segment.
    /// </summary>
    /// <param name="segment"></param>
    public void ReturnToPool(LevelSegment segment)
    {
        if (activeSegments.Contains(segment))
        {
            activePool.Add(segment);
        }
        activeSegments.Remove(segment);

        segment.gameObject.SetActive(false);
        segment.transform.position = spawnPosition;
        segment.spawnedNextSegment = false;
    }
Ejemplo n.º 7
0
    void OnTriggerStay2D(Collider2D col)
    {
        if (col.tag.Contains("Player"))
        {
            foreach (var levelSegmentObject in GameObject.FindGameObjectsWithTag("LevelManager"))
            {
                LevelSegment levelSegment = levelSegmentObject.GetComponent <LevelSegment>();

                levelSegment.MoveQuadrant((int)direction);
            }
        }
    }
Ejemplo n.º 8
0
        void UnpackSegment(LevelSegment input)
        {
            RemoteLevel collection = (RemoteLevel)target;

            input.transform.position = Vector3.zero;
            input.transform.rotation = Quaternion.identity;
            input.transform.parent   = collection.transform;
            input.EditorUnpack();
            if (input != null)
            {
                DestroyImmediate(input);
            }
        }
Ejemplo n.º 9
0
 bool checkIfNeighbourDoor(LevelSegment segment, LevelSegment other)
 {
     foreach (var segmentDoor in segment.Doors)
     {
         foreach (var otherDoor in other.Doors)
         {
             if (segmentDoor.position == otherDoor.position)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 10
0
    private IEnumerator loadWorldRootSegment(LevelSegmentProperties rootProps)
    {
        yield return(loadLevelSegment(rootProps));

        Scene loadedScene = SceneManager.GetSceneByName(m_levelSegmentMapping[rootProps.Type].name + (m_levelSegmentTypeCounter[rootProps.Type] - 1));

        while (!loadedScene.isLoaded)
        {
            yield return(new WaitForEndOfFrame());
        }
        LevelSegment rootSegment = loadedScene.GetRootGameObjects()[0].GetComponent <LevelSegment>();

        yield return(loadLevelSegments(rootSegment, rootProps.DoorMapping.Values.ToArray()));
    }
Ejemplo n.º 11
0
    LevelSegment createSuitableSegment(LevelSegment suitableFor, Vector3 newSegmentPos)
    {
        LevelSegment newSegment = null;

        do
        {
            if (newSegment != null)
            {
                GameObject.DestroyImmediate(newSegment.gameObject);
                newSegment = null;
            }
            newSegment = createRandomSegment(newSegmentPos);
        }while (!checkIfNeighbourDoor(suitableFor, newSegment));
        return(newSegment);
    }
Ejemplo n.º 12
0
    void OnSceneGUI()
    {
        segment = (LevelSegment)target;

        if (bReady)
        {
            onSelect();
        }
        bReady = false;
        if (Selection.activeGameObject != segment)
        {
            bReady = true;
        }
        Selection.activeObject = segment.level;
        EditorUtility.SetSelectedWireframeHidden(segment.level.GetComponent <Renderer>(), false);
    }
Ejemplo n.º 13
0
    private IEnumerator loadLevelSegment(LevelSegmentProperties segmentProps)
    {
        //check if there is already an segment on this position
        if (m_usedPositions.Contains(segmentProps.Position))
        {
            //if yes then mark it as needed
            m_loadedLevelSegments[m_usedPositions.IndexOf(segmentProps.Position)].IsNeeded = true;
            yield break;
        }

        //if there isnt an existing segment on this position then load the related scene
        string         sceneName = m_levelSegmentMapping[segmentProps.Type].name;
        AsyncOperation async     = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);

        if (!async.isDone)
        {
            yield return(new WaitForEndOfFrame());
        }
        Scene loadedScene = SceneManager.GetSceneByName(sceneName);

        while (!loadedScene.isLoaded)
        {
            yield return(new WaitForEndOfFrame());
        }

        //create a new scene to ensure correct scene unloading
        string newSceneName = sceneName + m_levelSegmentTypeCounter[segmentProps.Type]++;
        Scene  newScene     = SceneManager.CreateScene(newSceneName);

        SceneManager.MergeScenes(loadedScene, newScene);
        m_gameSystem.AddAdditionalMainScene(newScene);

        //get segment and set its properties
        LevelSegment segment = newScene.GetRootGameObjects()[0].GetComponent <LevelSegment>();

        m_usedPositions.Add(segmentProps.Position);
        m_loadedLevelSegments.Add(segment);
        segment.transform.position   = segmentProps.Position;
        segment.transform.rotation   = segmentProps.Rotation;
        segment.IsNeeded             = true;
        segment.OnTriggerEnterAction = (LevelSegment self) =>
        {
            StartCoroutine(loadLevelSegments(self,
                                             segmentProps.DoorMapping.Values.ToArray()));
        };
        segment.gameObject.SetActive(true);
    }
Ejemplo n.º 14
0
    void Start()
    {
        //setting up and validating tilesets (Move this to its own function later?)
        if (tilesets.Length > 0)
        {
            //sorts all tilesets into valid(not empty) & invalid(empty)
            List <Tileset> deathrow = new List <Tileset>();
            foreach (Tileset t in tilesets)
            {
                if (t.validate())
                {
                    m_tilesets.Add(t);
                }
                else
                {
                    deathrow.Add(t);
                }
            }

            //deletes tilesets that are invalid
            for (int i = 0; i < deathrow.Count; i++)
            {
                Destroy(deathrow[i]);
            }
        }
        else
        {
            Debug.Log("No tilesets loaded into level manager");
            running = false;
        }

        //setting up game variables
        scrollSpeed = player.moveSpeed;


        //Instanciate Starter plaform
        GameObject   starterSegment = Instantiate(startingTile);
        LevelSegment segment        = starterSegment.GetComponent <LevelSegment>();

        levelSegments.Add(segment);
        segment.moveToStartOffset(this.transform);
        segment.myLevel = this;
    }
Ejemplo n.º 15
0
    private IEnumerator loadLevelSegments(LevelSegment root, params LevelSegmentProperties[] segmentProps)
    {
        foreach (var activeSegment in m_loadedLevelSegments)
        {
            activeSegment.IsNeeded = false;
        }

        if (root != null)
        {
            root.IsNeeded = true;
        }

        foreach (var props in segmentProps)
        {
            yield return(loadLevelSegment(props));
        }

        unloadUnneededSegments();
    }
Ejemplo n.º 16
0
    public void SpawnRandomSegment()
    {
        if (activePool.Count <= 0)
        {
            Debug.LogWarning("Tried to spawn from an empty pool! [" + activePool.ToString() + "]");
            return;
        }

        LevelSegment newSegment = activePool[Random.Range(0, activePool.Count)];

        activeSegments.Add(newSegment);
        activePool.Remove(newSegment);
        if (LastSpawnedSegment != null)
        {
            newSegment.transform.position = LastSpawnedSegment.snapLocation.position;
        }
        else
        {
            newSegment.transform.position = initialSpawnPosition;
        }
        newSegment.gameObject.SetActive(true);
        LastSpawnedSegment = newSegment;
    }
Ejemplo n.º 17
0
    // Use this for initialization
    void Start()
    {
        //instantiating the object pools into your scene.
        //You can 'load' these pools in during gameplay to change the availability of different tile sets.
        for (int i = 0; i < bossSegmentPrefabs.Count; i++)
        {
            LevelSegment newSegment = Instantiate(bossSegmentPrefabs[i]);
            newSegment.gameObject.name = "Boss Segment (" + i + ")";
            m_bossSegmentPool.Add(newSegment);
            newSegment.gameObject.SetActive(false);
        }

        for (int i = 0; i < normalSegmentPrefabs.Count; i++)
        {
            LevelSegment newSegment = Instantiate(normalSegmentPrefabs[i]);
            newSegment.gameObject.name = "Normal Segment (" + i + ")";
            m_normalSegmentPool.Add(newSegment);
            newSegment.gameObject.SetActive(false);
        }

        //This loads the normal segments into the active pool, which will start to spawn automatically.
        activePool = LoadPool(m_normalSegmentPool);
    }
Ejemplo n.º 18
0
 public void removeLevelSegment(LevelSegment s)
 {
     levelSegments.Remove(s);
 }
Ejemplo n.º 19
0
        void ExtrusionUI()
        {
            LevelSegment segment = (LevelSegment)target;

            showProperties = EditorGUILayout.Foldout(showProperties, "Objects (" + segment.objectProperties.Length + ")");
            if (showProperties)
            {
                GUI.color = Color.clear;
                GUILayout.Box("", GUILayout.Width(Screen.width - 50));
                GUI.color = Color.white;
                if (searchField == null)
                {
                    searchField = new UnityEditor.IMGUI.Controls.SearchField();
                }
                string lastFilter = propertyFilter;
                propertyFilter = searchField.OnGUI(GUILayoutUtility.GetLastRect(), propertyFilter);
                if (lastFilter != propertyFilter)
                {
                    List <PropertyBinder> found = new List <PropertyBinder>();
                    for (int i = 0; i < segment.objectProperties.Length; i++)
                    {
                        if (segment.objectProperties[i].transform.name.ToLower().Contains(propertyFilter.ToLower()))
                        {
                            found.Add(new PropertyBinder(i, segment.objectProperties[i].transform.name));
                        }
                    }
                    properties = found.ToArray();
                }
                else if (propertyFilter == "")
                {
                    if (properties.Length != segment.objectProperties.Length)
                    {
                        properties = new PropertyBinder[segment.objectProperties.Length];
                    }
                    for (int i = 0; i < segment.objectProperties.Length; i++)
                    {
                        if (properties[i] == null)
                        {
                            properties[i] = new PropertyBinder(i, segment.objectProperties[i].transform.name);
                        }
                        else
                        {
                            properties[i].name  = segment.objectProperties[i].transform.name;
                            properties[i].index = i;
                        }
                    }
                }

                if (selectedProperties.Count > 0)
                {
                    if (propertyWindow == null)
                    {
                        propertyWindow                    = EditorWindow.GetWindow <PropertyEditWindow>(true);
                        propertyWindow.segment            = segment;
                        propertyWindow.selectedProperties = selectedProperties;
                        EditorWindow inspectorWindow = GetWindowByName("UnityEditor.InspectorWindow");
                        if (inspectorWindow != null)
                        {
                            propertyWindow.Init(new Vector2(inspectorWindow.position.x, inspectorWindow.position.y + 250));
                        }
                        else
                        {
                            propertyWindow.Init(new Vector2(2560 - Screen.width, 1080 / 2));
                        }
                    }
                }
                ObjectPropertiesUI(properties, segment.objectProperties);
                if (selectedProperties.Count > 0)
                {
                    if (Event.current.type == EventType.KeyDown)
                    {
                        if (Event.current.keyCode == KeyCode.DownArrow)
                        {
                            if (selectedProperties.Count > 1)
                            {
                                int temp = selectedProperties[selectedProperties.Count - 1];
                                selectedProperties.Clear();
                                selectedProperties.Add(temp);
                            }
                            selectedProperties[0]++;
                        }
                        if (Event.current.keyCode == KeyCode.UpArrow)
                        {
                            if (selectedProperties.Count > 1)
                            {
                                int temp = selectedProperties[0];
                                selectedProperties.Clear();
                                selectedProperties.Add(temp);
                            }
                            selectedProperties[0]--;
                        }
                        if (selectedProperties[0] < 0)
                        {
                            selectedProperties[0] = 0;
                        }
                        if (selectedProperties[0] >= segment.objectProperties.Length)
                        {
                            selectedProperties[0] = segment.objectProperties.Length - 1;
                        }
                        Repaint();
                        if (propertyWindow != null)
                        {
                            propertyWindow.Repaint();
                        }
                        SceneView.RepaintAll();
                        Event.current.Use();
                    }
                }
                else if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Space)
                {
                    selectedProperties.Clear();
                    selectedProperties.Add(0);
                }
                GUI.color = Color.white;
            }
        }
Ejemplo n.º 20
0
    public CreateLevels()
    {
        _localLevels = new List <LevelDef> ();

        LevelDef                  levelDef;
        LevelSegment              segment;
        LevelElementQuestion      elementQuestion;
        LevelElementPillar        elementPillar;
        LevelElementCoinArrow     elementCoinArrow;
        LevelElementStop          elementStop;
        LevelElementEnemyMushroon enemyMushroom;

        // ************* 创建第一关 **************************************************************
        levelDef = new LevelDef();


        // ************* 第一段 ********************************

        segment = new LevelSegment();

        string[] segametData01 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000000000",
            "0000010011001101100110000001000000000000000000000000000000000",
            "0111011011011101110110111011000000000000000000000000000000000",
            "0110011001000000000100011011000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "0110011000110000001010001000000000000000000000000000000000001",
            "0111011101110111011011011100000000000000000000000000000000001",
            "0110001101100010001010000000000000000000000000000000000000001",
            "0000000000000000000000000000000000000000000000000000000000001",
            "0010001101110010001000110000000000000000000000000000000000001",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "0111011101110111011101110000000000000000000000000000000000001",
            "0111001100100110001100100000000000000000000000000000000000001",
            "0000000000000000000000000001111111000000000000000000000000001",
            "0011011001110111000000000001000000000000000000000000000000001",
            "0111011101110111001001100001099999990000000000000000000000001",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "0111011101100011011101110001000000000000000000000000000000001",
            "0000000000000000001000100001000000000000000000000000000000001",
            "0000000000000000000000000001009000000000000000000000000000001",
            "1111111111111111111111111HI1111111111111111111111111111111111",
            "1111111111111111111111111001111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111110001111111111111G1111111111",
            "1111111111111111111111111111111111000111111111111111110000111"
        };
        segment.data = segametData01;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(0, 0);
        segment.startPoint      = new MapPoint(4, 22);
        segment.endPoint        = new MapPoint(60, 22);

        segment.lockScreenLeft   = true;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();

        elementQuestion = new LevelElementQuestion(10, 17, LevelElementQuestion.Type_AwardStar, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(18, 17, LevelElementQuestion.Type_AwardLife, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        LevelElementEnemyPiranha elementPiranha = new LevelElementEnemyPiranha(20, 21, MapElement.Dir_Up, 0.5f, 3.0f, 4.0f);

        segment.elements.Add(elementPiranha);

        elementPiranha = new LevelElementEnemyPiranha(16, 17, MapElement.Dir_Right, 1.0f, 3.0f, 4.0f);
        segment.elements.Add(elementPiranha);

        elementPiranha = new LevelElementEnemyPiranha(24, 17, MapElement.Dir_Left, 1.5f, 4.0f, 3.0f);
        segment.elements.Add(elementPiranha);

        elementPiranha = new LevelElementEnemyPiranha(20, 13, MapElement.Dir_Down, 2.0f, 4.0f, 3.0f);
        segment.elements.Add(elementPiranha);



        elementCoinArrow = new LevelElementCoinArrow(24, 21, MapElement.Dir_Right);
        segment.elements.Add(elementCoinArrow);

        elementPillar = new LevelElementPillar(54, 19, MapElement.Dir_Up, 8);
        //segment.elements.Add (elementPillar);


        enemyMushroom = new LevelElementEnemyMushroon(23, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(25, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(27, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(29, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(31, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(33, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(35, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        levelDef.segments.Add(segment);

        // ************* 第一段 ********************************

/*	    segment = new LevelSegment();
 *              string[] segametData01 = {
 *                 // 0
 *                 //0        10	    20        30        40        50		60
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                 //0        10	    20        30        40        50		60
 *         // 5
 *                 //0        10	    20        30        40        50		60
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000900000000000000000000000000000",
 *                 //0        10	    20        30        40        50		60
 *                 // 10
 *                 //0        10	    20        30        40        50		60
 *                      "00000000000000000000000000000000000090000000000000000000000000000",
 *                      "00000000000000000000000000000000000009000000000000000000000000000",
 *                      "00000000000000000000000000000000000000010000000000000000000000000",
 *                      "00000000000000000000000000000000000000010000000000000000000000000",
 *                      "00000000000000000000000000000000000000010000000000000000000000000",
 *
 *                 //0        10	    20        30        40        50		60
 *                 // 15
 *                 //0        10	    20        30        40        50		60
 *                      "00000000000000000000000000000000000000000000000000000000000000000",
 *                      "00000000000000000000000000000000000009000000000000000000000000000",
 *                      "00000000000000000000000000000000000090000000000000000000000000000",
 *                      "00000000000000000000000000000000000090000000000000000000000000000",
 *                      "00000000000000000000000000000000000900000000000000000000000000000",
 *                 //0        10	    20        30        40        50		60
 *                 // 20
 *                 //0        10	    20        30        40        50		60
 *                      //"0000000666676666600000000000000900000000000000060000000000000",
 *                      "00000000000000000000009900000000000111111111100000000000000000000",
 *                      "00000000000000000000099111111111111111111111100000000000000000000",
 *                      "11111111111111111111111111111111111111111111111111111111110000111",
 *                      "11111111111111111111111111111111111111111111111111111111110000111",
 *                      "11111111111111111111111111111111111111111111111111111111110000111",
 *                 //0        10	    20        30        40        50		60
 *                 // 25
 *                 //0        10	    20        30        40        50		60
 *                      "11111111111111111111111111111111111111111111111111111111110000111",
 *                      "11111111111111111111111111111111111111111111111111111111110000111"
 *              };
 *              segment.data = segametData01;
 *
 *              segment.width = segment.data[0].Length;
 *              segment.height = segment.data.Length;
 *
 *              segment.segmentStartPos = new MapPoint (0, 0);
 *              segment.startPoint = new MapPoint (2, 21);
 *              segment.endPoint = new MapPoint (60, 22);
 *
 *              segment.lockScreenLeft = true;
 *              segment.lockScreenRight = false;
 *              segment.lockScreenTop = true;
 *              segment.lockScreenBottom = true;
 *              segment.CalculateBorder ();
 *
 *              elementQuestion = new LevelElementQuestion ( 11, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
 *              segment.elements.Add (elementQuestion);
 *
 *              elementQuestion = new LevelElementQuestion ( 12, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
 *              segment.elements.Add (elementQuestion);
 *
 *              elementPillar = new LevelElementPillar ( 58, 20, MapElement.Dir_Up, 7 );
 *              segment.elements.Add (elementPillar);
 *
 *              /*
 *              elementCoinArrow = new LevelElementCoinArrow ( 24, 21, MapElement.Dir_LeftUp );
 *              segment.elements.Add (elementCoinArrow);
 *
 *
 *
 *
 *          elementStop = new LevelElementStop ( 35, 21, MapElementStop.StopType_Direct );
 *              segment.elements.Add (elementStop);
 *
 *
 *
 *              enemyMushroom = new LevelElementEnemyMushroon (33, 18, MapElement.Dir_Left, MapElement.Dir_Left, 0);
 *              segment.elements.Add (enemyMushroom);
 *
 *              levelDef.segments.Add (segment);
 */
        // ************* 第二段 ********************************
        segment = new LevelSegment();

        string[] segametData02 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000009990000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000000AAA0000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000068600000000111111114E00000000000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000011111111114E000000000",
            "000000000000990000009900000000000000000000001111111111114E0000000",
            "0000000003111111111111111014E000000000000011111111111111114E00000",
            "11111111111111111111111111111111111111110011111111111111111111111",
            "11111111111111111111111111111111111111110011111111111111111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111110011111111111100001111111",
            "11111111111111111111111111111111111111110011111111111100001111111"
        };
        segment.data = segametData02;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(64, 0);
        segment.startPoint      = new MapPoint(2, 22);
        segment.endPoint        = new MapPoint(63, 22);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();

        elementQuestion = new LevelElementQuestion(7, 19, LevelElementQuestion.Type_CoinFive, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementStop = new LevelElementStop(25, 22, MapElementStop.StopType_Tilted);
        segment.elements.Add(elementStop);

        elementQuestion = new LevelElementQuestion(32, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(34, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(36, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(33, 15, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(34, 15, LevelElementQuestion.Type_AwardLife, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(35, 15, LevelElementQuestion.Type_CoinFive, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(52, 15, LevelElementQuestion.Type_CoinFive, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        enemyMushroom = new LevelElementEnemyMushroon(18, 21, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(26, 21, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        levelDef.segments.Add(segment);

        // ************* 第三段 ********************************
        segment = new LevelSegment();

        string[] segametData03 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000006666666600000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000077777077770000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000090909090900000000000000000000011111100000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "00000000000777777777777700000000000000010011111100000",
            "000000000000000000000000000000002D1111110011111100000",
            "0000000000000000000000000000002D111111110011111100000",
            "11111111111111100111111111111111111111110011111111111",
            "11111111111111100111111111111111111111110011111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111111111111100111111111111111111111110011111111111",
            "11111111111111100111111111111111111111110011111111111"
        };
        segment.data = segametData03;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(128, 0);
        segment.startPoint      = new MapPoint(2, 22);
        segment.endPoint        = new MapPoint(51, 22);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();

        elementQuestion = new LevelElementQuestion(38, 8, LevelElementQuestion.Type_AwardLife, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementStop = new LevelElementStop(26, 16, MapElementStop.StopType_Tilted);
        segment.elements.Add(elementStop);

        elementQuestion = new LevelElementQuestion(45, 15, LevelElementQuestion.Type_CoinFive, LevelElementQuestion.Sprite_Brick);
        segment.elements.Add(elementQuestion);

        elementCoinArrow = new LevelElementCoinArrow(13, 22, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        elementCoinArrow = new LevelElementCoinArrow(22, 19, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        elementCoinArrow = new LevelElementCoinArrow(30, 15, MapElement.Dir_RightDown);
        segment.elements.Add(elementCoinArrow);

        enemyMushroom = new LevelElementEnemyMushroon(9, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(15, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(22, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(29, 15, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(34, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(39, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(41, 10, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(48, 12, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        levelDef.segments.Add(segment);

        // ************* 第四段 ********************************
        segment = new LevelSegment();

        string[] segametData04 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000009990000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000009900009900000000",
            "00000000000000000000000000000006000006AAA0AAA00000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000006000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000006000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000000000000000000000000000000000",
            "00000000000000000000000077770777777777700000000000000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "00000000000000000000000000000000000000000000000000000",
            "00000000990000990000090000000000000000000000000000000",
            "00000009009009009009009000000000000000000000000000000",
            "11111111001111001111001111111111111111111111001111111",
            "11111111001111001111001111111111111111111111001111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111111001111001111001111111111111111111111001111111",
            "11111111001111001111001111111111111111111111001111111"
        };
        segment.data = segametData04;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(180, 0);
        segment.startPoint      = new MapPoint(2, 22);
        segment.endPoint        = new MapPoint(51, 22);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();

        elementPillar = new LevelElementPillar(8, 22, MapElement.Dir_Up, 5);
        segment.elements.Add(elementPillar);

        elementPillar = new LevelElementPillar(14, 22, MapElement.Dir_Up, 5);
        segment.elements.Add(elementPillar);

        elementPillar = new LevelElementPillar(20, 22, MapElement.Dir_Up, 5);
        segment.elements.Add(elementPillar);

        elementCoinArrow = new LevelElementCoinArrow(20, 21, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        elementStop = new LevelElementStop(28, 19, MapElementStop.StopType_Direct);
        segment.elements.Add(elementStop);

        elementQuestion = new LevelElementQuestion(25, 16, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);

        elementQuestion = new LevelElementQuestion(41, 4, LevelElementQuestion.Type_AwardStar, LevelElementQuestion.Sprite_Question);
        segment.elements.Add(elementQuestion);


        elementCoinArrow = new LevelElementCoinArrow(32, 10, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        enemyMushroom = new LevelElementEnemyMushroon(28, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(34, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);


        levelDef.segments.Add(segment);

        // ************* 第五段 ********************************
        segment = new LevelSegment();

        string[] segametData05 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000999990000000000000000999000000000",
            "0000000000009999000000000000000000000000009000900000000",
            "0000000000000000000777777777777770000000000000000000000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "0000990000000000000000999990000000000007777777777700000",
            "00000000002D11111114E0000000000000000000000000000000000",
            "000000002D11111111111111111114E000000000000000000000000",
            "1111111111111111111111111111111111111111111111111111111",
            "1111111111111111111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "1111111111111111111111111111111111111111111111111111111",
            "1111111111111111111111111111111111111111111111111111111"
        };
        segment.data = segametData05;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(233, 0);
        segment.startPoint      = new MapPoint(2, 22);
        segment.endPoint        = new MapPoint(54, 22);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();


        elementCoinArrow = new LevelElementCoinArrow(20, 21, MapElement.Dir_RightDown);
        segment.elements.Add(elementCoinArrow);


        enemyMushroom = new LevelElementEnemyMushroon(12, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(18, 20, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(23, 18, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(29, 18, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(33, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(39, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(45, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(51, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        levelDef.segments.Add(segment);

        // ************* 第六段 ********************************
        segment = new LevelSegment();

        string[] segametData06 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            "0000000000000000000000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "0000000000000000000000000000000000099000000000000000000",
            "0000000000000000000000000000000000900000000000000000000",
            "0000000000000000000000000000000009000000000000000000000",
            "0000000000000000000000000000000090000000000000000000000",
            "0000000000000000000000000000000900000000000000000000000",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "0000000000000000000000900000009000000000000000000000000",
            "0000000000000099000009000777777000000000000000000000000",
            "0000000000000900900090000000000000000000000000000000000",
            "0000000000009000900900000000000000000000000000000000000",
            "0000000000090000099000000000000000000000000000000000000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "0000000000900077777777700000000000000000000000000000000",
            "0000000009000000000000000000000000000000000000000000000",
            "0000009090000000000000000000000000000000000000000000000",
            "1111111111111111111111111111111111111111111111111111111",
            "1111111111111111111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "1111111111111111111111111111111111111111111111111111111",
            "1111111111111111111111111111111111111111111111111111111"
        };
        segment.data = segametData06;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(288, 0);
        segment.startPoint      = new MapPoint(2, 22);
        segment.endPoint        = new MapPoint(42, 22);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();


        enemyMushroom = new LevelElementEnemyMushroon(10, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(16, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(22, 19, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(27, 15, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(34, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(40, 22, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);


        levelDef.segments.Add(segment);

        _localLevels.Add(levelDef);



        // ************* 创建第二关 **************************************************************
        levelDef = new LevelDef();

        // ************* 第一段 ********************************
        segment = new LevelSegment();
        string[] segametData11 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111",
            "11111111111111110009000000000000000111111",
            "11111111111111110090000000000000000111111",
            "11111111111111110900000000000000000111111",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "11111111111111119000000000000000000111111",
            "11111111111111110000000000000000009111111",
            "11111111111111110000000000000000009111111",
            "11111111111111110000000000000000009111111",
            "11111111111111110000000000000000009111111",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "11111111111111110000111111111100009111111",
            "11111111111111110000111111111100009111111",
            "11111111111111119999111111111100009111111",
            "11111111111111119999111111111100009111111",
            "11111111111111119999111111111100000111111",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "11111111111111119999111111111100000000000",
            "11111111111111119999111111111100000000000",
            "11111111111111119999111111111100000000000",
            "11111111111111119999111111111100000000000",
            "11111111111111119999111111111100000000000",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "11111111111111119999111111111100000000000",
            "11111111111111119999111111111100001111111",
            "11111111111111110000111111111100001111111",
            "11111111111111110000111111111100001111111",
            "11111110000000000000111111111100001111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111110000000000000111111111100001111111",
            "11111110009000000000000000000000001111111",
            "11111110090000000000000000000000001111111",
            "11111110900000000000000000000000001111111",
            "11111119000111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 30
            //0        10	    20        30        40        50		60
            "11111110900111111111111111111111111111111",
            "11111110090111111111111111111111111111111",
            "11111110009111111111111111111111111111111",
            "11111110000111111111111111111111111111111",
            "00000000000111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 35
            //0        10	    20        30        40        50		60
            "00000000000111111111111111111111111111111",
            "00000000000111111111111111111111111111111",
            "11111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 35
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111111"
        };
        segment.data = segametData11;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(0, 22);
        segment.startPoint      = new MapPoint(2, 36);
        segment.endPoint        = new MapPoint(39, 20);

        segment.lockScreenLeft   = true;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();

        elementCoinArrow = new LevelElementCoinArrow(29, 28, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        elementCoinArrow = new LevelElementCoinArrow(30, 21, MapElement.Dir_RightUp);
        segment.elements.Add(elementCoinArrow);

        enemyMushroom = new LevelElementEnemyMushroon(17, 28, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(23, 28, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        enemyMushroom = new LevelElementEnemyMushroon(29, 28, MapElement.Dir_Left, MapElement.Dir_Left, 0);
        segment.elements.Add(enemyMushroom);

        /*
         * elementQuestion = new LevelElementQuestion ( 11, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
         * segment.elements.Add (elementQuestion);
         *
         * elementQuestion = new LevelElementQuestion ( 12, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
         * segment.elements.Add (elementQuestion);
         *
         * elementPillar = new LevelElementPillar ( 58, 20, MapElement.Dir_Up, 7 );
         * segment.elements.Add (elementPillar);
         *
         * /*
         * elementCoinArrow = new LevelElementCoinArrow ( 24, 21, MapElement.Dir_LeftUp );
         * segment.elements.Add (elementCoinArrow);
         *
         *
         *
         *
         * elementStop = new LevelElementStop ( 35, 21, MapElementStop.StopType_Direct );
         * segment.elements.Add (elementStop);
         *
         *
         *
         * enemyMushroom = new LevelElementEnemyMushroon (33, 18, MapElement.Dir_Left, MapElement.Dir_Left, 0);
         * segment.elements.Add (enemyMushroom);
         */
        levelDef.segments.Add(segment);

        // ************* 第二段 ********************************
        segment = new LevelSegment();
        string[] segametData12 =
        {
            // 0
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111100000000000000000000000000111",
            "11111111111111111111111111111111111100000000000000000000000000111",
            "11111111111111111111111111111111111100000000000000000000000000111",
            "11111111111111111111111111111111111100000000000000000000000000111",
            "11111111111111111111111111111111111100000000000000000000000000111",
            //0        10	    20        30        40        50		60
            // 5
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111100000000111111111110000000111",
            "11111111111111111111111111111111111100000000111111111110000000111",
            "11111111111111111111111111111111111100000000111111111110000000111",
            "11111111111111111111111111111111111100000000111111111110000000000",
            "11111111111111111111111111111111111100000000111111111110000000000",
            //0        10	    20        30        40        50		60
            // 10
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111110000111111111110000000000",
            "11111111111111111111111111111111111111110000111111111110000000000",
            "11111111111111111111111111111111111111110000111111111110001111111",
            "11111111111111111111111111111111111111110000111111111110001111111",
            "11111111111111111111111111111111111111110000111111111110001111111",
            //0        10	    20        30        40        50		60
            // 15
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111110000111111111110001111111",
            "11111111111111111111111111111111111111110000000000000000001111111",
            "11111111111111111111111111111111111111110000000000000000001111111",
            "11111111111111111111111111111111111111110000000000000000001111111",
            "11111111111111111111111111111111111111110000111111111111HI1111111",
            //0        10	    20        30        40        50		60
            // 20
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111110000111111111111II1111111",
            "11111111111111111111111111111111111111110000111111111111111111111",
            "11111111111111111111111111111111111111110000111111111111111111111",
            "11111111111111111111000000000000011111110000111111111111111111111",
            "11111111111111111111000000000000000011110000111111111111111111111",
            //0        10	    20        30        40        50		60
            // 25
            //0        10	    20        30        40        50		60
            "11111111111111100000000000000000000000000000111111111111111111111",
            "11111111111111100000000000000000000000000000111111111111111111111",
            "11111111111111100000000000000000000000000000111111111111111111111",
            "11111111111111100000000000000000000000000000111111111111111111111",
            "11111111100000000000000000000000000000000000111111111111111111111",
            //0        10	    20        30        40        50		60
            // 30
            //0        10	    20        30        40        50		60
            "11111111100000000000000000000000000000000000111111111111111111111",
            "11111111100000000000000000000000000000000000111111111111111111111",
            "111111110000000000011111111111111111111111HI111111111111111111111",
            "111111110000000000011111111111111111111111II111111111111111111111",
            "11111111000000000001111111111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 35
            //0        10	    20        30        40        50		60
            "11111000000000000001111111111111111111111111111111111111111111111",
            "11111000000000000001111111111111111111111111111111111111111111111",
            "11111000000000000001111111111111111111111111111111111111111111111",
            "11111000000000000001111111111111111111111111111111111111111111111",
            "00000000000000000001111111111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 35
            //0        10	    20        30        40        50		60
            "00000000000000000001111111111111111111111111111111111111111111111",
            "11111111111111111HI1111111111111111111111111111111111111111111111",
            "11111111111111111II1111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111",
            //0        10	    20        30        40        50		60
            // 35
            //0        10	    20        30        40        50		60
            "11111111111111111111111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111",
            "11111111111111111111111111111111111111111111111111111111111111111"
        };
        segment.data = segametData12;

        segment.width  = segment.data[0].Length;
        segment.height = segment.data.Length;

        segment.segmentStartPos = new MapPoint(41, 2);
        segment.startPoint      = new MapPoint(2, 36);
        segment.endPoint        = new MapPoint(39, 20);

        segment.lockScreenLeft   = false;
        segment.lockScreenRight  = false;
        segment.lockScreenTop    = true;
        segment.lockScreenBottom = true;
        segment.CalculateBorder();



        /*
         * elementQuestion = new LevelElementQuestion ( 11, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
         * segment.elements.Add (elementQuestion);
         *
         * elementQuestion = new LevelElementQuestion ( 12, 19, LevelElementQuestion.Type_CoinOne, LevelElementQuestion.Sprite_Question );
         * segment.elements.Add (elementQuestion);
         *
         * elementPillar = new LevelElementPillar ( 58, 20, MapElement.Dir_Up, 7 );
         * segment.elements.Add (elementPillar);
         *
         * /*
         * elementCoinArrow = new LevelElementCoinArrow ( 24, 21, MapElement.Dir_LeftUp );
         * segment.elements.Add (elementCoinArrow);
         *
         *
         *
         *
         * elementStop = new LevelElementStop ( 35, 21, MapElementStop.StopType_Direct );
         * segment.elements.Add (elementStop);
         *
         *
         *
         * enemyMushroom = new LevelElementEnemyMushroon (33, 18, MapElement.Dir_Left, MapElement.Dir_Left, 0);
         * segment.elements.Add (enemyMushroom);
         */
        levelDef.segments.Add(segment);

        _localLevels.Add(levelDef);
    }
Ejemplo n.º 21
0
        void CustomPathUI()
        {
            LevelSegment segment = (LevelSegment)target;

            showCustomPaths = EditorGUILayout.Foldout(showCustomPaths, "Custom Paths (" + segment.customPaths.Length + ")");
            if (showCustomPaths)
            {
                Undo.RecordObject(segment, "Edit Custom Paths");
                if (segment.type == LevelSegment.Type.Custom)
                {
                    if (laneIndices.Length != segment.customPaths.Length + 1)
                    {
                        laneIndices = new int[segment.customPaths.Length + 1];
                        laneNames   = new string[segment.customPaths.Length + 1];
                    }
                    laneIndices[0] = -1;
                    laneNames[0]   = "None";
                    for (int i = 0; i < segment.customPaths.Length; i++)
                    {
                        laneNames[i + 1]   = (i + 1) + " - " + segment.customPaths[i].name;
                        laneIndices[i + 1] = i;
                    }
                    segment.customMainPath = EditorGUILayout.IntPopup("Main Path", segment.customMainPath, laneNames, laneIndices);
                }

                input.Update();
                GUI.backgroundColor = DreamteckEditorGUI.lightColor;
                for (int i = 0; i < segment.customPaths.Length; i++)
                {
                    GUILayout.BeginVertical(boxStyle);
                    EditorGUILayout.BeginHorizontal();
                    segment.customPaths[i].color = EditorGUILayout.ColorField(segment.customPaths[i].color, GUILayout.Width(40));
                    if (renameCustomPath == i)
                    {
                        if (input.enterDown)
                        {
                            input.Use();
                            renameCustomPath = -1;
                        }
                        segment.customPaths[i].name = EditorGUILayout.TextField(segment.customPaths[i].name);
                    }
                    else
                    {
                        GUIStyle style = i == segment.customMainPath ? EditorStyles.boldLabel : EditorStyles.label;
                        EditorGUILayout.LabelField(segment.customPaths[i].name, style);
                    }
                    EditorGUILayout.EndHorizontal();
                    Rect lastRect = GUILayoutUtility.GetLastRect();

                    if (input.mouseRightDown)
                    {
                        if (lastRect.Contains(Event.current.mousePosition))
                        {
                            int         index = i;
                            GenericMenu menu  = new GenericMenu();
                            menu.AddItem(new GUIContent("Close"), false, delegate { selectedPath = -1; pathEditor = null; Repaint(); SceneView.RepaintAll(); });
                            menu.AddItem(new GUIContent("Rename"), false, delegate { renameCustomPath = index; Repaint(); SceneView.RepaintAll(); });
                            menu.AddItem(new GUIContent("Duplicate"), false, delegate { ArrayUtility.Insert(ref segment.customPaths, index + 1, segment.customPaths[index].Copy()); Repaint(); SceneView.RepaintAll(); });
                            menu.AddSeparator("");
                            if (i == 0)
                            {
                                menu.AddDisabledItem(new GUIContent("Move Up"));
                            }
                            else
                            {
                                menu.AddItem(new GUIContent("Move Up"), false, delegate {
                                    LevelSegment.LevelSegmentPath temp = segment.customPaths[index];
                                    segment.customPaths[index]         = segment.customPaths[index - 1];
                                    segment.customPaths[index - 1]     = temp;
                                    if (selectedPath == index)
                                    {
                                        selectedPath--;
                                    }
                                    Repaint();
                                    SceneView.RepaintAll();
                                });
                            }
                            if (i == segment.customPaths.Length - 1)
                            {
                                menu.AddDisabledItem(new GUIContent("Move Down"));
                            }
                            else
                            {
                                menu.AddItem(new GUIContent("Move Down"), false, delegate {
                                    LevelSegment.LevelSegmentPath temp = segment.customPaths[index];
                                    segment.customPaths[index]         = segment.customPaths[index + 1];
                                    segment.customPaths[index + 1]     = temp;
                                    if (selectedPath == index)
                                    {
                                        selectedPath++;
                                    }
                                    Repaint();
                                    SceneView.RepaintAll();
                                });
                            }
                            menu.AddSeparator("");
                            menu.AddItem(new GUIContent("Delete"), false, delegate { segment.RemoveCustomPath(index); selectedPath = -1; pathEditor = null; Repaint(); SceneView.RepaintAll(); });
                            menu.ShowAsContext();
                        }
                    }
                    if (selectedPath == i && pathEditor != null)
                    {
                        EditorGUILayout.Space();
                        pathEditor.DrawInspector();
                    }
                    GUILayout.EndVertical();
                    lastRect = GUILayoutUtility.GetLastRect();

                    if (input.mouseLeftDown)
                    {
                        if (lastRect.Contains(Event.current.mousePosition))
                        {
                            selectedPath = i;
                            pathEditor   = new LevelSegmentCustomPathEditor(this, segment, segment.customPaths[i]);
                            Repaint();
                            SceneView.RepaintAll();
                        }
                    }
                }
                GUI.backgroundColor = Color.white;
                if (GUILayout.Button("Add Path"))
                {
                    segment.AddCustomPath("Lane " + (segment.customPaths.Length + 1));
                    Repaint();
                    SceneView.RepaintAll();
                }
            }
            else
            {
                renameCustomPath = -1;
                selectedPath     = -1;
                if (pathEditor != null)
                {
                    pathEditor.Close();
                }
                pathEditor = null;
            }
        }
Ejemplo n.º 22
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            if (boxStyle == null)
            {
                boxStyle = new GUIStyle(GUI.skin.GetStyle("box"));
                boxStyle.normal.background = DreamteckEditorGUI.blankImage;
                boxStyle.margin            = new RectOffset(0, 0, 0, 2);
            }

            string saveText   = "Save";
            string saveAsText = "Save As";

            if (allSegments.Length > 1)
            {
                saveText   = "Save All";
                saveAsText = "Save All As";
            }
            if (sceneSegments.Length > 0 && !Application.isPlaying && !PrefabStageCheck.open)
            {
                EditorGUILayout.BeginHorizontal();

                if (GUILayout.Button(saveText, GUILayout.Height(40)))
                {
                    WritePrefabs();
                    return;
                }
                if (GUILayout.Button(saveAsText, GUILayout.Height(40), GUILayout.Width(70)))
                {
                    WritePrefabs(true);
                    return;
                }
                EditorGUILayout.EndHorizontal();
            }

            if (allSegments.Length > 1)
            {
                EditorGUILayout.HelpBox("Property editing unavailable with multiple selection", MessageType.Info);
                return;
            }

            LevelSegment segment = (LevelSegment)target;

            segment.type = (LevelSegment.Type)EditorGUILayout.EnumPopup("Type", segment.type);
            if (segment.type == LevelSegment.Type.Extruded)
            {
                segment.axis = (LevelSegment.Axis)EditorGUILayout.EnumPopup("Extrude Axis", segment.axis);
                ExtrusionUI();
            }
            else
            {
                EditorGUILayout.BeginHorizontal();
                segment.customEntrance = (Transform)EditorGUILayout.ObjectField("Entrance", segment.customEntrance, typeof(Transform), true);
                if (segment.customEntrance == null)
                {
                    if (GUILayout.Button("Create", GUILayout.Width(50)))
                    {
                        GameObject go = new GameObject("Entrance");
                        go.transform.parent    = segment.transform;
                        segment.customEntrance = go.transform;
                    }
                }
                else if (!IsChildOrSubchildOf(segment.customEntrance, segment.transform))
                {
                    Debug.LogError(segment.customEntrance.name + " must be a child of " + segment.name);
                    segment.customEntrance = null;
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                segment.customExit = (Transform)EditorGUILayout.ObjectField("Exit", segment.customExit, typeof(Transform), true);
                if (segment.customExit == null)
                {
                    if (GUILayout.Button("Create", GUILayout.Width(50)))
                    {
                        GameObject go = new GameObject("Exit");
                        go.transform.parent = segment.transform;
                        segment.customExit  = go.transform;
                    }
                }
                else if (!IsChildOrSubchildOf(segment.customExit, segment.transform))
                {
                    Debug.LogError(segment.customExit.name + " must be a child of " + segment.name);
                    segment.customExit = null;
                }
                EditorGUILayout.EndHorizontal();
                segment.customKeepUpright = EditorGUILayout.Toggle("Keep Upright", segment.customKeepUpright);
            }
            EditorGUILayout.Space();

            int childCount = 0;

            TransformUtility.GetChildCount(segment.transform, ref childCount);
            if (segment.editorChildCount != childCount && !Application.isPlaying)
            {
                segment.UpdateReferences();
                selectedProperties.Clear();
            }

            CustomPathUI();

            EditorGUILayout.Space();
            debugFoldout = EditorGUILayout.Foldout(debugFoldout, "Debug");
            if (debugFoldout)
            {
                if (!Application.isPlaying)
                {
                    segment.drawBounds = EditorGUILayout.Toggle("Draw Bounds", segment.drawBounds);
                }
                if (segment.type == LevelSegment.Type.Custom)
                {
                    segment.drawEntranceAndExit = EditorGUILayout.Toggle("Draw Entrance / Exit", segment.drawEntranceAndExit);
                }
                segment.drawGeneratedSpline  = EditorGUILayout.Toggle("Draw Generated Points", segment.drawGeneratedSpline);
                segment.drawGeneratedSamples = EditorGUILayout.Toggle("Draw Generated Samples", segment.drawGeneratedSamples);
                if (segment.drawGeneratedSamples)
                {
                    EditorGUI.indentLevel++;
                    segment.drawSampleScale = EditorGUILayout.FloatField("Sample Scale", segment.drawSampleScale);
                    EditorGUI.indentLevel--;
                }
                segment.drawCustomPaths = EditorGUILayout.Toggle("Draw Custom Paths", segment.drawCustomPaths);
                EditorGUILayout.HelpBox(segment.GetBounds().size.ToString(), MessageType.Info);
            }
        }
Ejemplo n.º 23
0
        void Write(LevelSegment segment, bool forceCopy)
        {
            //Check to see if we are currently editing the prefab and if yes (2018.3), just pack everything without rewriting
            bool   isPrefabInstance = false;
            Object prefabParent     = null;

#if UNITY_2018_3_OR_NEWER
            PrefabInstanceStatus instanceStatus = PrefabUtility.GetPrefabInstanceStatus(segment.gameObject);
            isPrefabInstance = instanceStatus == PrefabInstanceStatus.Connected;
            if (isPrefabInstance)
            {
                prefabParent = PrefabUtility.GetCorrespondingObjectFromSource(segment.gameObject);
            }
#else
            PrefabType prefabType = PrefabUtility.GetPrefabType(segment.gameObject);
            isPrefabInstance = prefabType == PrefabType.PrefabInstance;
            if (isPrefabInstance)
            {
                prefabParent = PrefabUtility.GetPrefabParent(segment.gameObject);
            }
#endif

            if (!forceCopy && prefabParent != null)
            {
                segment.EditorPack();
#if DREAMTECK_SPLINES
                for (int i = 0; i < splines.Length; i++)
                {
                    if (splines[i] != null)
                    {
                        DSSplineDrawer.UnregisterComputer(splines[i]);
                    }
                }
#endif
#if UNITY_2018_3_OR_NEWER
                Selection.activeGameObject = PrefabUtility.SaveAsPrefabAsset(segment.gameObject, AssetDatabase.GetAssetPath(prefabParent));
#else
                PrefabUtility.ReplacePrefab(segment.gameObject, prefabParent, ReplacePrefabOptions.ConnectToPrefab);
#endif
                Undo.DestroyObjectImmediate(segment.gameObject);
            }
            else
            {
                relativePath = EditorPrefs.GetString("LevelSegmentEditor.relativePath", "/");
                if (prefabParent != null)
                {
                    relativePath = AssetDatabase.GetAssetPath(prefabParent);
                    if (relativePath.StartsWith("Assets"))
                    {
                        relativePath = relativePath.Substring("Assets".Length);
                    }
                    relativePath = System.IO.Path.GetDirectoryName(relativePath);
                }
                string path = EditorUtility.SaveFilePanel("Save Prefab", Application.dataPath + relativePath, segment.name, "prefab");
                if (path.StartsWith(Application.dataPath) && System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path)))
                {
                    relativePath = path.Substring(Application.dataPath.Length);
                    segment.EditorPack();
#if DREAMTECK_SPLINES
                    for (int i = 0; i < splines.Length; i++)
                    {
                        if (splines[i] != null)
                        {
                            DSSplineDrawer.UnregisterComputer(splines[i]);
                        }
                    }
#endif
#if UNITY_2018_3_OR_NEWER
                    if (isPrefabInstance)
                    {
                        PrefabUtility.UnpackPrefabInstance(segment.gameObject, PrefabUnpackMode.OutermostRoot, InteractionMode.AutomatedAction);
                    }
                    PrefabUtility.SaveAsPrefabAsset(segment.gameObject, "Assets" + relativePath);
#else
                    if (isPrefabInstance)
                    {
                        PrefabUtility.DisconnectPrefabInstance(segment.gameObject);
                    }
                    PrefabUtility.CreatePrefab("Assets" + relativePath, segment.gameObject);
#endif
                    Undo.DestroyObjectImmediate(segment.gameObject);
                    EditorPrefs.SetString("LevelSegmentEditor.relativePath", System.IO.Path.GetDirectoryName(relativePath));
                }
                else
                {
                    if (path != "" && !path.StartsWith(Application.dataPath))
                    {
                        EditorUtility.DisplayDialog("Path Error", "Please select a path inside this project's Assets folder", "OK");
                    }
                }
            }
        }
Ejemplo n.º 24
0
 public void Create(LevelSegment segemnt, LevelElement element)
 {
 }
Ejemplo n.º 25
0
 void OnUndoRedo()
 {
     selectedPath = -1;
     pathEditor   = null;
     LevelSegment segment = (LevelSegment)target;
 }