public void Clone(Mode mode) { var layers = _tileMapTarget.Layers; for (int l = 0; l < layers.Length; l++) { var layer = layers[l]; for (int w = 0; w < _tileMapTarget.width; w++) { for (int h = 0; h < _tileMapTarget.height; h++) { var tileId = _tileMapTarget.GetTile(w, h, l); if (tileId != -1) { var tileInfo = _tileMapTarget.GetTileInfoForTileId(tileId); if (tileInfo.stringVal == "n") { continue; } var nameIndex = _targetNameIndexes[tileId]; var tileToChange = 0; if (tileInfo.stringVal == "c") { tileToChange = getSpriteId("tileset/" + tileInfo.intVal); } if (tileInfo.stringVal == "") { tileToChange = getSpriteId("tileset/" + (nameIndex + _offset)); } switch (mode) { case Mode.Safe: cloneSafe(tileId, tileToChange, w, h, l); break; case Mode.Override: cloneOverride(tileToChange, w, h, l); break; case Mode.SafeOverride: cloneSafeAdd(tileId, tileToChange, w, h, l); break; } } } } } _tileMap.Build(); }
// Update is called once per frame void Update() { Debug.Log(tilemap.GetTile(1, 1, 3)); tilemap.ClearTile(1, 1, 3); tilemap.Build(); }
private void cloneSafe(int otherTileId, int tileToChange, int x, int y, int layer) { var targetTileId = _tileMapTarget.GetTile(x, y, layer); var myTileId = _tileMap.GetTile(x, y, layer); var targetNameIndex = _targetNameIndexes[targetTileId]; var myNameIndex = _myNameIndexes[targetTileId]; var targetTileName = "tileset/" + targetTileId; var myTileName = "tileset/" + myTileId; if (targetTileName == myTileName) { _tileMap.SetTile(x, y, layer, tileToChange); } }
public bool IsWallAtCoords(Coordinates coords) { if (coords.x < 0 || coords.x >= map.width || coords.y < 0 || coords.y >= map.height) { // print("Coords out of bounds : " + coords.ToString()); return(false); } int wall = map.GetTile(coords.x, coords.y, wallLayer); if (wall == -1) { return(false); } return(true); }
//保存当前tilemap的数据为一个字符串,格式与CVS相同 public string SaveTileMap(tk2dTileMap tk2dTM, int layerID) { try { string result = ""; width = tk2dTM.width; height = tk2dTM.height; //根据tilemap的宽度和高度初始化tileID数组 tileID = new int[width, height]; //从第一行开始,依次读取每一行,即row for (int y = 0; y < height; y++) { //从第一列开始,一次读取每一列,即column for (int x = 0; x < width; x++) { //因为tk2dTileMap与Tiled的坐标系不同,y正好是相反的,所以从tk2dTileMap中取tileID时,y的值为height-1-y tileID[x, y] = tk2dTM.GetTile(x, height - 1 - y, layerID); //如果没有达到tilemap的宽度,则添加 "," 区分每一个tile if (x != width - 1) { result += tileID[x, y].ToString() + ","; } //否则,一行完成后,进行换行 else { result += tileID[x, y].ToString() + "\r\n"; } } } return(result); } catch { //throw; return(""); } }
/// <summary> /// Moves the chunk's gameobject's children to the prefab root /// </summary> public static void HideTileMapPrefabs(tk2dTileMap tileMap) { if (tileMap.renderData == null || tileMap.Layers == null) { // No Render Data to parent Prefab Root to return; } if (tileMap.PrefabsRoot == null) { var go = tileMap.PrefabsRoot = tk2dUtil.CreateGameObject("Prefabs"); go.transform.parent = tileMap.renderData.transform; go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; } int instListCount = tileMap.GetTilePrefabsListCount(); bool[] instExists = new bool[instListCount]; for (int i = 0; i < tileMap.Layers.Length; ++i) { var layer = tileMap.Layers[i]; for (int j = 0; j < layer.spriteChannel.chunks.Length; ++j) { var chunk = layer.spriteChannel.chunks[j]; if (chunk.gameObject == null) continue; var t = chunk.gameObject.transform; int childCount = t.childCount; for (int k = 0; k < childCount; ++k) { GameObject go = t.GetChild(k).gameObject; for (int q = 0; q < instListCount; ++q) { int x, y, layerIdx; GameObject instance; tileMap.GetTilePrefabsListItem(q, out x, out y, out layerIdx, out instance); if (instance == go) { instExists[q] = true; break; } } } } } Object[] prefabs = tileMap.data.tilePrefabs; List<int> tileX = new List<int>(); List<int> tileY = new List<int>(); List<int> tileLayer = new List<int>(); List<GameObject> tileInst = new List<GameObject>(); for (int i = 0; i < instListCount; ++i) { int x, y, layerIdx; GameObject instance; tileMap.GetTilePrefabsListItem(i, out x, out y, out layerIdx, out instance); // Is it already IN the list for some reason? if (!instExists[i]) { int tileId = (x >= 0 && x < tileMap.width && y >= 0 && y < tileMap.height) ? tileMap.GetTile(x, y, layerIdx) : -1; if (tileId >= 0 && tileId < prefabs.Length && prefabs[tileId] != null) { instExists[i] = true; } } if (instExists[i]) { tileX.Add(x); tileY.Add(y); tileLayer.Add(layerIdx); tileInst.Add(instance); tk2dUtil.SetTransformParent(instance.transform, tileMap.PrefabsRoot.transform); } } tileMap.SetTilePrefabsList(tileX, tileY, tileLayer, tileInst); }
/// <summary> /// Moves the chunk's gameobject's children to the prefab root /// </summary> public static void HideTileMapPrefabs(tk2dTileMap tileMap) { if (tileMap.renderData == null || tileMap.Layers == null) { // No Render Data to parent Prefab Root to return; } if (tileMap.PrefabsRoot == null) { var go = tileMap.PrefabsRoot = tk2dUtil.CreateGameObject("Prefabs"); go.transform.parent = tileMap.renderData.transform; go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; } int instListCount = tileMap.GetTilePrefabsListCount(); bool[] instExists = new bool[instListCount]; for (int i = 0; i < tileMap.Layers.Length; ++i) { var layer = tileMap.Layers[i]; for (int j = 0; j < layer.spriteChannel.chunks.Length; ++j) { var chunk = layer.spriteChannel.chunks[j]; if (chunk.gameObject == null) { continue; } var t = chunk.gameObject.transform; int childCount = t.childCount; for (int k = 0; k < childCount; ++k) { GameObject go = t.GetChild(k).gameObject; for (int q = 0; q < instListCount; ++q) { int x, y, layerIdx; GameObject instance; tileMap.GetTilePrefabsListItem(q, out x, out y, out layerIdx, out instance); if (instance == go) { instExists[q] = true; break; } } } } } Object[] prefabs = tileMap.data.tilePrefabs; List <int> tileX = new List <int>(); List <int> tileY = new List <int>(); List <int> tileLayer = new List <int>(); List <GameObject> tileInst = new List <GameObject>(); for (int i = 0; i < instListCount; ++i) { int x, y, layerIdx; GameObject instance; tileMap.GetTilePrefabsListItem(i, out x, out y, out layerIdx, out instance); // Is it already IN the list for some reason? if (!instExists[i]) { int tileId = (x >= 0 && x < tileMap.width && y >= 0 && y < tileMap.height) ? tileMap.GetTile(x, y, layerIdx) : -1; if (tileId >= 0 && tileId < prefabs.Length && prefabs[tileId] != null) { instExists[i] = true; } } if (instExists[i]) { tileX.Add(x); tileY.Add(y); tileLayer.Add(layerIdx); tileInst.Add(instance); tk2dUtil.SetTransformParent(instance.transform, tileMap.PrefabsRoot.transform); } } tileMap.SetTilePrefabsList(tileX, tileY, tileLayer, tileInst); }
public static void HideTileMapPrefabs(tk2dTileMap tileMap) { if ((tileMap.renderData != null) && (tileMap.Layers != null)) { if (tileMap.PrefabsRoot == null) { GameObject obj6 = tk2dUtil.CreateGameObject("Prefabs"); tileMap.PrefabsRoot = obj6; GameObject obj2 = obj6; obj2.transform.parent = tileMap.renderData.transform; obj2.transform.localPosition = Vector3.zero; obj2.transform.localRotation = Quaternion.identity; obj2.transform.localScale = Vector3.one; } int tilePrefabsListCount = tileMap.GetTilePrefabsListCount(); bool[] flagArray = new bool[tilePrefabsListCount]; for (int i = 0; i < tileMap.Layers.Length; i++) { Layer layer = tileMap.Layers[i]; for (int k = 0; k < layer.spriteChannel.chunks.Length; k++) { SpriteChunk chunk = layer.spriteChannel.chunks[k]; if (chunk.gameObject != null) { Transform transform = chunk.gameObject.transform; int childCount = transform.childCount; for (int m = 0; m < childCount; m++) { GameObject gameObject = transform.GetChild(m).gameObject; for (int n = 0; n < tilePrefabsListCount; n++) { int num7; int num8; int num9; GameObject obj4; tileMap.GetTilePrefabsListItem(n, out num7, out num8, out num9, out obj4); if (obj4 == gameObject) { flagArray[n] = true; break; } } } } } } UnityEngine.Object[] tilePrefabs = tileMap.data.tilePrefabs; List<int> xs = new List<int>(); List<int> ys = new List<int>(); List<int> layers = new List<int>(); List<GameObject> instances = new List<GameObject>(); for (int j = 0; j < tilePrefabsListCount; j++) { int num11; int num12; int num13; GameObject obj5; tileMap.GetTilePrefabsListItem(j, out num11, out num12, out num13, out obj5); if (!flagArray[j]) { int index = (((num11 < 0) || (num11 >= tileMap.width)) || ((num12 < 0) || (num12 >= tileMap.height))) ? -1 : tileMap.GetTile(num11, num12, num13); if (((index >= 0) && (index < tilePrefabs.Length)) && (tilePrefabs[index] != null)) { flagArray[j] = true; } } if (flagArray[j]) { xs.Add(num11); ys.Add(num12); layers.Add(num13); instances.Add(obj5); tk2dUtil.SetTransformParent(obj5.transform, tileMap.PrefabsRoot.transform); } } tileMap.SetTilePrefabsList(xs, ys, layers, instances); } }
/// <summary> /// 获取地砖信息 /// </summary> /// <returns>The tile info.</returns> /// <param name="x">The x coordinate.</param> /// <param name="y">The y coordinate.</param> /// <param name="layer">Layer.</param> public tk2dRuntime.TileMap.TileInfo GetTileInfo(int x, int y, int layer) { return(Map.GetTileInfoForTileId(Map.GetTile(x, y, layer))); }
//绘制窗口时调用 void OnGUI() { if (Prefab == null) { return; } else { Selection.activeGameObject = Prefab; } data = null; GUILayout.BeginArea(new Rect(5, 5, 800, 20)); GUI.Label(new Rect(0, 0, 50, 18), "搜索名称:"); searchKeyword = GUI.TextField(new Rect(55, 0, 100, 18), searchKeyword); if (GUI.Button(new Rect(160, 0, 30, 18), "搜索")) { selGridInt = 0; fetchData(searchKeyword); } GUI.Label(new Rect(195, 0, 60, 18), "区域名:"); areaName = GUI.TextField(new Rect(260, 0, 100, 18), areaName); if (GUI.Button(new Rect(365, 0, 40, 18), "改名")) { if (areaData[sceneName] != null) { areaData[sceneName]["Name"] = areaName; writeAreaDataToJson(); this.ShowNotification(new GUIContent("改名成功")); } else { this.ShowNotification(new GUIContent("区域名称数据不存在!")); } } GUILayout.EndArea(); float listStartX = 5; float listStartY = 25; float scrollHeight = Screen.currentResolution.height - 110; if (listNames != null && listNames.Count > 0) { float contextHeight = listNames.Count * 21; //开始滚动视图 scrollPosition = GUI.BeginScrollView(new Rect(listStartX, listStartY, 200, scrollHeight), scrollPosition, new Rect(5, 5, 190, contextHeight), false, scrollHeight < contextHeight); selGridInt = GUILayout.SelectionGrid(selGridInt, listNames.ToArray(), 1, GUILayout.Width(190)); selGridInt = selGridInt >= listNames.Count ? listNames.Count - 1 : selGridInt; data = showListData[selGridInt]; if (selGridInt != oldSelGridInt) { oldSelGridInt = selGridInt; showId = data.Id; eventName = data.Name; sceneEventIndex = sceneEventIndexMapping[data.Type]; eventId = data.EventId; string[] fen = showId.Split(new char[] { '_' }); Prefab.transform.position = map.GetTilePosition(int.Parse(fen[1]), int.Parse(fen[2])); SceneView.lastActiveSceneView.pivot = Prefab.transform.position; switch (data.Type) { case SceneEventType.EnterArea: birthPointEventIdIndex = allBirthPointIdIndexs.ContainsKey(data.EventId) ? allBirthPointIdIndexs[data.EventId] : 0; break; case SceneEventType.EnterCity: citySceneIdIndex = allCitySceneIdIndexs.ContainsKey(data.EventId) ? allCitySceneIdIndexs[data.EventId] : 0; break; case SceneEventType.Battle: fightEventIdIndex = allFightIdIndexs.ContainsKey(data.EventId) ? allFightIdIndexs[data.EventId] : 0; break; default: break; } eventOpenTypeIndex = sceneEventOpenIndexMapping.ContainsKey(data.OpenType) ? sceneEventOpenIndexMapping[data.OpenType] : 0; switch (sceneEventOpenTypeEnums[eventOpenTypeIndex]) { case SceneEventOpenType.FightWined: if (allFightNames.Count <= openKeyIndex) { openKeyIndex = 0; } openKeyIndex = allFightIdIndexs.ContainsKey(data.OpenKey) ? allFightIdIndexs[data.OpenKey] : 0; break; case SceneEventOpenType.NeedItem: if (Base.ItemDataNames.Count <= openKeyIndex) { openKeyIndex = 0; } openKeyIndex = Base.ItemDataIdIndexs.ContainsKey(data.OpenKey) ? Base.ItemDataIdIndexs[data.OpenKey] : 0; break; case SceneEventOpenType.NeedTasks: stringValue = !string.IsNullOrEmpty(data.StringValue) ? data.StringValue : ""; break; default: openKey = ""; break; } eventNotice = data.Notice; intValue = data.IntValue; if (meetEnemyRatesMapping.ContainsKey(sceneName)) { currentMeetEnemyRates = meetEnemyRatesMapping[sceneName]; } else { currentMeetEnemyRates = new List <RateData>(); meetEnemyRatesMapping.Add(sceneName, currentMeetEnemyRates); } for (int i = 0; i < currentMeetEnemyRates.Count; i++) { currentMeetEnemyRates[i].IdIndex = allFightIdIndexs.ContainsKey(currentMeetEnemyRates[i].Id) ? allFightIdIndexs[currentMeetEnemyRates[i].Id] : 0; } } //结束滚动视图 GUI.EndScrollView(); if (data != null) { GUILayout.BeginArea(new Rect(listStartX + 205, listStartY, 800, 300)); GUI.Label(new Rect(0, 0, 60, 18), "Id:"); EditorGUI.TextField(new Rect(65, 0, 150, 18), showId); GUI.Label(new Rect(220, 0, 50, 18), "开启条件:"); eventOpenTypeIndex = EditorGUI.Popup(new Rect(275, 0, 80, 18), eventOpenTypeIndex, sceneEventOpenStrs.ToArray()); switch (sceneEventOpenTypeEnums[eventOpenTypeIndex]) { case SceneEventOpenType.FightWined: if (allFightNames.Count <= openKeyIndex) { openKeyIndex = 0; } openKeyIndex = EditorGUI.Popup(new Rect(360, 0, 150, 18), openKeyIndex, allFightNames.ToArray()); openKey = allFights[openKeyIndex].Id; eventNotice = EditorGUI.TextArea(new Rect(515, 0, 100, 36), eventNotice); break; case SceneEventOpenType.NeedItem: if (Base.ItemDataNames.Count <= openKeyIndex) { openKeyIndex = 0; } openKeyIndex = EditorGUI.Popup(new Rect(360, 0, 150, 18), openKeyIndex, Base.ItemDataNames.ToArray()); openKey = Base.ItemDatas[openKeyIndex].Id; eventNotice = EditorGUI.TextArea(new Rect(515, 0, 100, 36), eventNotice); break; case SceneEventOpenType.NeedTasks: stringValue = EditorGUI.TextField(new Rect(360, 0, 150, 18), stringValue); eventNotice = EditorGUI.TextArea(new Rect(515, 0, 100, 36), eventNotice); break; default: openKey = ""; break; } GUI.Label(new Rect(0, 20, 60, 18), "事件名称:"); eventName = EditorGUI.TextField(new Rect(65, 20, 150, 18), eventName); GUI.Label(new Rect(0, 40, 60, 18), "事件类型:"); sceneEventIndex = EditorGUI.Popup(new Rect(65, 40, 150, 18), sceneEventIndex, sceneEventStrs.ToArray()); switch (sceneEventTypeEnums[sceneEventIndex]) { case SceneEventType.EnterArea: birthPointEventIdIndex = EditorGUI.Popup(new Rect(220, 40, 150, 18), birthPointEventIdIndex, allBirthPointNames.ToArray()); eventId = allBirthPointEvents[birthPointEventIdIndex].Id; break; case SceneEventType.EnterCity: citySceneIdIndex = EditorGUI.Popup(new Rect(220, 40, 150, 18), citySceneIdIndex, allCitySceneNames.ToArray()); eventId = allCityScenes[citySceneIdIndex].Id; break; case SceneEventType.Battle: fightEventIdIndex = EditorGUI.Popup(new Rect(220, 40, 150, 18), fightEventIdIndex, allFightNames.ToArray()); eventId = allFights[fightEventIdIndex].Id; break; case SceneEventType.EatFood: GUI.Label(new Rect(220, 40, 65, 18), "开启干粮数:"); intValue = (int)EditorGUI.Slider(new Rect(285, 40, 180, 18), (float)intValue, 1, 99); break; default: break; } GUI.Label(new Rect(0, 60, 100, 18), "事件Id:"); eventId = EditorGUI.TextField(new Rect(65, 60, 150, 18), eventId); if (GUI.Button(new Rect(0, 80, 80, 18), "修改事件")) { if (eventName == "") { this.ShowNotification(new GUIContent("事件名不能为空!")); return; } if (eventId == "") { this.ShowNotification(new GUIContent("事件Id不能为空!")); return; } data.Name = eventName; data.Type = sceneEventTypeEnums[sceneEventIndex]; data.EventId = eventId; data.OpenType = sceneEventOpenTypeEnums[eventOpenTypeIndex]; data.OpenKey = openKey; data.Notice = eventNotice; data.IntValue = intValue; data.StringValue = stringValue; writeDataToJson(); oldSelGridInt = -1; getData(); fetchData(searchKeyword); this.ShowNotification(new GUIContent("修改成功")); } string[] fen = showId.Split(new char[] { '_' }); if (fen.Length >= 3) { int i = int.Parse(fen[1]); int j = int.Parse(fen[2]); if (map.GetTileInfoForTileId(map.GetTile(i, j, 1)) == null) { if (GUI.Button(new Rect(85, 80, 300, 18), "该事件已从场景中被删除,点击清除此残余数据")) { if (!dataMapping.ContainsKey(data.Id)) { this.ShowNotification(new GUIContent("要删除的数据不存在!")); return; } dataMapping.Remove(data.Id); writeDataToJson(); oldSelGridInt = -1; getData(); fetchData(searchKeyword); this.ShowNotification(new GUIContent("删除残余事件成功")); } } } GUILayout.EndArea(); GUILayout.BeginArea(new Rect(listStartX + 205, listStartY + 305, 800, 500)); GUI.Label(new Rect(0, 0, 60, 18), "随机遇敌:"); RateData rateData; for (int i = 0; i < currentMeetEnemyRates.Count; i++) { if (currentMeetEnemyRates.Count <= i) { continue; } rateData = currentMeetEnemyRates[i]; GUI.Label(new Rect(0, 20 + i * 20, 60, 18), "遇敌战斗:"); rateData.IdIndex = EditorGUI.Popup(new Rect(65, 20 + i * 20, 150, 18), rateData.IdIndex, allFightNames.ToArray()); rateData.Id = allFights[rateData.IdIndex].Id; GUI.Label(new Rect(220, 20 + i * 20, 60, 18), "遇敌概率:"); rateData.Rate = EditorGUI.Slider(new Rect(285, 20 + i * 20, 180, 18), rateData.Rate, 0, 100); if (GUI.Button(new Rect(470, 20 + i * 20, 40, 18), "删除")) { currentMeetEnemyRates.RemoveAt(i); } } if (GUI.Button(new Rect(0, 180, 60, 18), "修改战斗")) { // if (currentMeetEnemyRates.Count == 0) { // this.ShowNotification(new GUIContent("还没有添加任何随机战斗!")); // return; // } Base.CreateFile(Application.dataPath + "/Resources/Data/Json", "AreaMeetEnemys.json", JsonManager.GetInstance().SerializeObject(meetEnemyRatesMapping)); this.ShowNotification(new GUIContent("修改随机遇敌数据成功")); } if (GUI.Button(new Rect(65, 180, 60, 18), "添加战斗")) { if (currentMeetEnemyRates.Count >= 8) { this.ShowNotification(new GUIContent("每个区域最多出现8种战斗!")); return; } currentMeetEnemyRates.Add(new RateData(100, "0", 0)); } GUILayout.EndArea(); } } }
static void InitParams() { //读取区域大地图宽高数据表 areaSizeMapping = new Dictionary <string, SizeData>(); JObject obj = JsonManager.GetInstance().GetJson("AreaSizeDatas", false); foreach (var item in obj) { if (item.Key != "0") { areaSizeMapping.Add(item.Value["Id"].ToString(), JsonManager.GetInstance().DeserializeObject <SizeData>(item.Value.ToString())); } } int index = 0; FieldInfo fieldInfo; object[] attribArray; DescriptionAttribute attrib; //加载全部的SceneEventType枚举类型 sceneEventTypeEnums = new List <SceneEventType>(); sceneEventStrs = new List <string>(); sceneEventIndexMapping = new Dictionary <SceneEventType, int>(); index = 0; foreach (SceneEventType type in Enum.GetValues(typeof(SceneEventType))) { sceneEventTypeEnums.Add(type); fieldInfo = type.GetType().GetField(type.ToString()); attribArray = fieldInfo.GetCustomAttributes(false); attrib = (DescriptionAttribute)attribArray[0]; sceneEventStrs.Add(attrib.Description); sceneEventIndexMapping.Add(type, index); index++; } //加载全部的SceneEventOpeType枚举类型 sceneEventOpenTypeEnums = new List <SceneEventOpenType>(); sceneEventOpenStrs = new List <string>(); sceneEventOpenIndexMapping = new Dictionary <SceneEventOpenType, int>(); index = 0; foreach (SceneEventOpenType type in Enum.GetValues(typeof(SceneEventOpenType))) { sceneEventOpenTypeEnums.Add(type); fieldInfo = type.GetType().GetField(type.ToString()); attribArray = fieldInfo.GetCustomAttributes(false); attrib = (DescriptionAttribute)attribArray[0]; sceneEventOpenStrs.Add(attrib.Description); sceneEventOpenIndexMapping.Add(type, index); index++; } //初始化地图中的静态事件地砖对应的事件关联数据 map = GameObject.Find("TileMap").GetComponent <tk2dTileMap>(); string[] fen = EditorApplication.currentScene.Split(new char[] { '/' }); sceneName = fen[fen.Length - 1].Replace(".unity", ""); tk2dRuntime.TileMap.TileInfo tile; EventData exsitEventData; EventData newEventData; string id; List <EventData> eventDatas = new List <EventData>(); allBirthPointNames = new List <string>(); allBirthPointIdIndexs = new Dictionary <string, int>(); allBirthPointEvents = new List <EventData>(); //处理区域大地图中文名 areaData = JsonManager.GetInstance().GetJson("AreaNames", false); if (areaData[sceneName] == null) { areaData[sceneName] = new JObject(); areaData[sceneName]["Id"] = sceneName; areaData[sceneName]["Name"] = sceneName; areaName = sceneName; } else { areaName = areaData[sceneName]["Name"].ToString(); } writeAreaDataToJson(); //获取旧数据 dataMapping = new Dictionary <string, EventData>(); obj = JsonManager.GetInstance().GetJson("AreaEventDatas", false); EventData eventData; index = 0; foreach (var item in obj) { if (item.Key != "0") { eventData = JsonManager.GetInstance().DeserializeObject <EventData>(item.Value.ToString()); if (eventData.SceneId == sceneName) { dataMapping.Add(eventData.Id, eventData); } //查找所有的出生点事件 if (eventData.Type == SceneEventType.BirthPoint) { allBirthPointNames.Add(eventData.Name); allBirthPointIdIndexs.Add(eventData.Id, index); allBirthPointEvents.Add(eventData); index++; } } } for (int i = 0; i < map.width; i++) { for (int j = 0; j < map.height; j++) { tile = map.GetTileInfoForTileId(map.GetTile(i, j, 1)); if (tile != null) { id = sceneName + "_" + i + "_" + j; newEventData = new EventData(); newEventData.Id = id; newEventData.SceneId = sceneName; if (dataMapping.ContainsKey(newEventData.Id)) { exsitEventData = dataMapping[newEventData.Id]; newEventData.Name = exsitEventData.Name; newEventData.EventId = exsitEventData.EventId; } else { newEventData.Name = "默认事件点 - " + i + "," + j; } eventDatas.Add(newEventData); } } } //删除掉旧的数据 dataMapping.Clear(); JsonManager.GetInstance().Clear(); getData(); //添加新数据 foreach (EventData item in eventDatas) { if (!dataMapping.ContainsKey(item.Id)) { dataMapping.Add(item.Id, item); } } //生成新数据 writeDataToJson(); getData(); allCitySceneIdIndexs = new Dictionary <string, int>(); allCitySceneNames = new List <string>(); allCityScenes = new List <SceneData>(); obj = JsonManager.GetInstance().GetJson("Scenes", false); SceneData sceneData; index = 0; foreach (var item in obj) { if (item.Key != "0") { sceneData = JsonManager.GetInstance().DeserializeObject <SceneData>(item.Value.ToString()); if (sceneData.BelongToAreaName == sceneName) { allCitySceneNames.Add(sceneData.Name); allCitySceneIdIndexs.Add(sceneData.Id, index); allCityScenes.Add(sceneData); index++; } } } allFightIdIndexs = new Dictionary <string, int>(); allFightNames = new List <string>(); allFights = new List <FightData>(); obj = JsonManager.GetInstance().GetJson("Fights", false); FightData fightData; index = 0; foreach (var item in obj) { if (item.Key != "0") { fightData = JsonManager.GetInstance().DeserializeObject <FightData>(item.Value.ToString()); if (fightData.Type == FightType.Normal) { allFightNames.Add(fightData.Name); allFightIdIndexs.Add(fightData.Id, index); allFights.Add(fightData); index++; } } } }
//false:不可通过 //true:可通过 public bool checkTile(int x, int y) { if (!(x < 11 && y < 11 && x > -1 && y > -1)) { return(false); } tm = GameObject.Find("TileMap").GetComponent <tk2dTileMap>(); AM = GetComponent <ActionManager>(); int tileID = tm.GetTile(x, y, 1); if (tileID == -1) { return(true); } tk2dRuntime.TileMap.TileInfo tileinfo = tm.GetTileInfoForTileId(tileID); if (tileinfo != null) { if (tileinfo.stringVal == "Wall") { return(false); } //拥有Prefab Vector2 startPosition = new Vector2(x - 0.2f, y); Vector2 Direction = new Vector2(x, y); RaycastHit2D hit = Physics2D.Raycast(startPosition, Direction, 0.4f); //Debug.DrawLine(new Vector3(x - 0.2f, y, 0), new Vector3(x + 0.2f, y, 0), Color.red); if (hit.collider != null) { switch (hit.collider.tag) { case "Talk": AM.talk(hit.collider.gameObject.GetComponent <Talk>()); return(false); case "Key": if (AM.key(hit.collider.gameObject.GetComponent <Key>())) { tm.ClearTile(x, y, 1); } break; case "Door": if (AM.door(hit.collider.gameObject.GetComponent <Door>())) { tm.ClearTile(x, y, 1); } return(false); case "DoorWall": if (AM.doorwall(hit.collider.gameObject.GetComponent <DoorWall>())) { tm.ClearTile(x, y, 1); } return(false); case "Baoshi": if (AM.baoshi(hit.collider.gameObject.GetComponent <Baoshi>())) { tm.ClearTile(x, y, 1); } break; case "Pingzi": if (AM.pingzi(hit.collider.gameObject.GetComponent <Pingzi>())) { tm.ClearTile(x, y, 1); } break; case "Yaoshui": if (AM.yaoshui(hit.collider.gameObject.GetComponent <Yaoshui>())) { tm.ClearTile(x, y, 1); } break; case "Zhuangbei": if (AM.zhuangbei(hit.collider.gameObject.GetComponent <Zhuangbei>())) { tm.ClearTile(x, y, 1); } break; case "Enemy": if (AM.enemy(hit.collider.gameObject.GetComponent <Enemy>())) { tm.ClearTile(x, y, 1); } return(false); case "StairUp": AM.stair(hit.collider.gameObject.GetComponent <Stair>()); break; case "StairDown": AM.stair(hit.collider.gameObject.GetComponent <Stair>()); break; case "Tool": if (AM.mttool(hit.collider.gameObject.GetComponent <mtTool>())) { tm.ClearTile(x, y, 1); } break; } return(true); } else { return(true); } } else { return(false); } }