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); } } } }
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); }
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); }
// 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(); }
void OnSavingPrefab(PrefabStage stage) { LevelSegment segment = stage.prefabContentsRoot.GetComponent <LevelSegment>(); if (segment != null) { segment.EditorPack(); PrefabUtility.SaveAsPrefabAsset(segment.gameObject, stage.prefabAssetPath); } PrefabStage.prefabStageClosing -= OnSavingPrefab; }
/// <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; }
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); } } }
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); } }
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); }
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())); }
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); }
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); }
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); }
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; }
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(); }
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; }
// 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); }
public void removeLevelSegment(LevelSegment s) { levelSegments.Remove(s); }
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; } }
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); }
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; } }
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); } }
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"); } } } }
public void Create(LevelSegment segemnt, LevelElement element) { }
void OnUndoRedo() { selectedPath = -1; pathEditor = null; LevelSegment segment = (LevelSegment)target; }