// 각역의 F, G, H 값을 구하는 함수 private void FGHCalculation(Station st) { // 현재역과 인접역의 거리 + 지금까지 온 거리 ConnStation connSt = nowStation.GetConnStationList().Find(item => item.GetStationName().Equals(st.GetStationName())); G = nowStation.GetG() + connSt.GetDist(); // 환승할경우 환승거리를 더해줌 if (st.GetLines().Find(item => item.Equals(nowLine)).Equals(0) && !nowLine.Equals(0)) { int equalLine = Enumerable.Intersect(nowStation.GetLines(), st.GetLines()).First(); string numToNum = equalLine > nowLine ? nowLine + "to" + equalLine : equalLine + "to" + nowLine; G += nowStation.GetTransferDic()[numToNum]; } // 인접역과 목적지의 직선거리 H = Vector2.Distance(st.GetPos(), destination.GetPos()); F = G + H; st.SetG(G); st.SetH(H); st.SetF(F); st.SetParentName(nowStation.GetStationName()); }
void Start() { stationData = FindObjectOfType <StationData>(); // csv를 읽어옴 List <Dictionary <string, object> > csvData = CSVReader.Read("stationinfo"); List <Dictionary <string, object> > csvConnDistenceDatas = CSVReader.Read("stationdistance"); stationData.stations = new List <Station>(); // csv의 내용을 원하는 형태로 변형 for (var i = 0; i < csvData.Count; i++) { station = new Station(); pos = new Vector2(float.Parse(csvData[i]["stationPosX"].ToString()), float.Parse(csvData[i]["stationPosY"].ToString())); string[] splitLines = csvData[i]["lines"].ToString().Split('&'); string[] splitConnStations = csvData[i]["connectedStations"].ToString().Split('/'); string[] splitChageDistences = csvData[i]["changeLineDistenceInfos"].ToString().Split('/'); station.SetId(csvData[i]["id"].ToString()); station.SetStationName(csvData[i]["stationName"].ToString()); station.SetPos(pos); foreach (string splitLine in splitLines) { station.AddLines(int.Parse(splitLine)); } foreach (string splitConnStation in splitConnStations) { connStation = new ConnStation(); connStation.SetStationName(splitConnStation); foreach (Dictionary <string, object> csvConnDistenceData in csvConnDistenceDatas) { if (csvConnDistenceData["stationName1"].ToString().Equals(splitConnStation)) { if (csvConnDistenceData["stationName2"].ToString().Equals(csvData[i]["stationName"].ToString())) { connStation.SetDist(int.Parse((float.Parse(csvConnDistenceData["distence"].ToString()) * 1000).ToString())); } } else if (csvConnDistenceData["stationName2"].ToString().Equals(splitConnStation)) { if (csvConnDistenceData["stationName1"].ToString().Equals(csvData[i]["stationName"].ToString())) { connStation.SetDist(int.Parse((float.Parse(csvConnDistenceData["distence"].ToString()) * 1000).ToString())); } } } station.AddConnStationList(connStation); } try { foreach (string splitChageDistence in splitChageDistences) { string[] splitChageDistenceDetail = splitChageDistence.Split('-'); connStation = new ConnStation(); station.AddTransferDic(splitChageDistenceDetail[0], int.Parse(splitChageDistenceDetail[1].ToString()) * 18); } } catch { Debug.Log("ok error : splitChageDistence is null"); } // 역 정보 리스트에 추가 stationData.stations.Add(station); } }
public void AddConnStationList(ConnStation connStation) { this.connStationList.Add(connStation); }