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); }
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); } }
/** * すごろくマップの生成 */ 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; }
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); }