示例#1
0
    // 각역의 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());
    }
示例#2
0
    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);
        }
    }
示例#3
0
 public void AddConnStationList(ConnStation connStation)
 {
     this.connStationList.Add(connStation);
 }