Example #1
0
        public SugorokuSerializedData GetSerializedData()
        {
            int i0, i1;
            var dataList       = new List <SugorokuPointData>();
            var serializedData = new SugorokuSerializedData();

            for (i0 = 0; i0 < sugorokuPointList.Count; ++i0)
            {
                var data = new SugorokuPointData();
                data.SetPosition(sugorokuPointList[i0].Position);
                data.SetRoomType(sugorokuDataList[i0]);
                data.SetIndex(sugorokuPointList[i0].Index);
                var indexList = new List <int>();
                for (i1 = 0; i1 < sugorokuPointList[i0].ConnectionList.Count; ++i1)
                {
                    indexList.Add(sugorokuPointList[i0].ConnectionList[i1].Index);
                }
                data.SetConnectionIndexList(indexList);
                dataList.Add(data);
            }
            serializedData.SetPointDataList(dataList);

            serializedData.SetStartIndex(startIndex);
            serializedData.SetGoalIndex(goalIndex);
            sugorokuPointDataList.AddRange(dataList);

            return(serializedData);
        }
Example #2
0
        public IEnumerator SugorokuMapCreate(SugorokuMapParameter parameter)
        {
            lastInterruptionTime = System.DateTime.Now;

            this.parameter = parameter;

            sugorokuPoints.Clear();
            masuTypes.Clear();
            pointDataList.Clear();
            extendablePoints.Clear();

            var startPoint = new FieldConnectPoint();

            startPoint.Initialize(allPoints[startIndex].Position, 0);
            startPoint.Index = startIndex;

            extendablePoints.Add(startPoint);
            sugorokuPoints.Add(startPoint);
            masuTypes.Add(0);
            usedList[startIndex] = true;

            int sugorokuSize = Mathf.Min(parameter.sugorokuSize, allPoints.Count);
            int minAisleSize = parameter.minAisleSize;
            int maxAisleSize = parameter.maxAisleSize;
            int count        = 0;

            while (sugorokuPoints.Count < sugorokuSize && count < sugorokuSize)
            {
                int aisleSize = random.Next(minAisleSize, maxAisleSize + 1);
                GenerateAisles(aisleSize);
                ++count;
                if (ShouldInterrupt() != false)
                {
                    yield return(null);

                    lastInterruptionTime = System.DateTime.Now;
                }
            }

            for (int i0 = 0; i0 < sugorokuPoints.Count; ++i0)
            {
                FieldConnectPoint sugorokuPoint = sugorokuPoints[i0];
                var data = new SugorokuPointData();
                data.SetPosition(sugorokuPoint.Position);
                data.SetRoomType(masuTypes[i0]);
                data.SetIndex(sugorokuPoint.Index);
                var indexList = new List <int>();
                for (int i1 = 0; i1 < sugorokuPoint.ConnectionList.Count; ++i1)
                {
                    indexList.Add(sugorokuPoint.ConnectionList[i1].Index);
                }
                data.SetConnectionIndexList(indexList);
                data.SetMassType(0);
                data.SetMassParam(0, 0);
                pointDataList.Add(data);
            }
        }
Example #3
0
        /**
         * すごろくマップの生成
         */
        public IEnumerator SugorokuMapCreate()
        {
            var candidateList = new List <FieldConnectPoint>();
            var initPoint     = new FieldConnectPoint();
            int count         = 0;

            //int index = GetCenterPositionIndex();
            int index = 0;

            startIndex = index;

            sugorokuPointList.Clear();
            sugorokuDataList.Clear();
            // スタート地点
            initPoint.Initialize(pointList[index].Position, 0);
            initPoint.Index      = index;
            pointTypeList[index] = 1;
            sugorokuPointList.Add(initPoint);
            candidateList.Add(initPoint);
            sugorokuDataList.Add(0);

            /* 候補となるポイントが無くなるか一定回数行う */
            while (candidateList.Count > 0)
            {
                PassCreate(pointList, sugorokuPointList, candidateList, pointTypeList, 3);
                ++count;
                if (count > 25)
                {
                    candidateList.Clear();
                }
            }

            sugorokuPointDataList = new List <SugorokuPointData>();
            for (int i0 = 0; i0 < sugorokuPointList.Count; ++i0)
            {
                var data = new SugorokuPointData();
                data.SetPosition(sugorokuPointList[i0].Position);
                data.SetRoomType(sugorokuDataList[i0]);
                data.SetIndex(sugorokuPointList[i0].Index);
                var indexList = new List <int>();
                for (int i1 = 0; i1 < sugorokuPointList[i0].ConnectionList.Count; ++i1)
                {
                    indexList.Add(sugorokuPointList[i0].ConnectionList[i1].Index);
                }
                data.SetConnectionIndexList(indexList);
                data.SetMassType(0);
                data.SetMassParam(0, 0);
                sugorokuPointDataList.Add(data);
            }

            yield break;
        }
Example #4
0
        public void SetSerializedData(SugorokuSerializedData data)
        {
            pointDataList = data.GetPointDataList();

            sugorokuPoints.Clear();
            masuTypes.Clear();

            for (int i0 = 0; i0 < pointDataList.Count; ++i0)
            {
                var point = new FieldConnectPoint();
                SugorokuPointData pointData = pointDataList[i0];
                point.Initialize(pointData.GetPosition(), PointType.kGridRoad);
                point.Index = pointData.GetIndex();
                masuTypes.Add(pointData.GetRoomType());
                sugorokuPoints.Add(point);
            }

            for (int i0 = 0; i0 < pointDataList.Count; ++i0)
            {
                var indexList = pointDataList[i0].GetConnectionIndexList();
                for (int i1 = 0; i1 < indexList.Count; ++i1)
                {
                    sugorokuPoints[i0].SetConnection(sugorokuPoints[indexList[i1]]);
                }
            }

            startIndex = data.GetStartIndex();
            goalIndex  = data.GetGoalIndex();

            if (allPoints == null)
            {
                allPoints = new List <FieldConnectPoint>();
            }
            allPoints.Clear();
            allPoints.AddRange(sugorokuPoints);
        }