/// <summary> /// 初期処理 /// </summary> void Awake() { _view.Setup(); _view.OnExecute = (setting_) => { var builderData = new Map.Builder.BuilderData(); _builder = _builderFactory.Create(Map.Builder.BuilderConst.BuilderType.Split); _builder.Initialize(setting_.Width, setting_.Height, 1); _builder.SetData(builderData); _buildeEnumerator = _builder.ExecuteDebug(null); // ランダム値を変化させたい場合 if (setting_.RandomSeed > 0) { Random.InitState(setting_.RandomSeed); } _view.MapDrawView.Setup(setting_.Width, setting_.Height, Map.Builder.BuilderConst.BuilderType.Split); _view.MapDrawView.DrawUpdate(_builder); _search.Setup(setting_.Width, setting_.Height); _search.SetSearchParam(_builder.TileDataMap); var size = setting_.Width * setting_.Height; for (int i = 0; i < size; ++i) { if (!_view.MapDrawView.TryGetSpriteRenderer(i, out var renderer)) { continue; } _search.SetFollowTargets(i, renderer.transform); } }; }
private IEnumerator DrawUpdate_Split(Map.Builder.IBuilder builder) { var splitBuilder = builder as Map.Builder.Split.Builder; if (splitBuilder == null) { yield break; } void Draw(RectInt rect, int colorIndex) { for (int y = rect.yMin; y < rect.yMax; ++y) { for (int x = rect.xMin; x < rect.xMax; ++x) { //DrawByIndex(y * _width + x, tileFlag, colorIndex); var draw = _drawSprites[y * _width + x]; var color = _otherColor[Mathf.Min(colorIndex, _otherColor.Length - 1)]; draw.color = color; } } } void DrawByTileData(Map.TileData tileData, Const.TileFlag tileFlag) { var draw = _drawSprites[tileData.Index]; if (TryGetColor(tileFlag, out Color color)) { draw.color = color; var debugTile = draw.GetComponent <DebugTile>(); if (debugTile == null) { return; } debugTile.TileFlag = tileFlag; debugTile.SetTileData(tileData); } } // 一つ先にすすめる var enumerator = builder.ExecuteDebug(null); while (enumerator.MoveNext()) { // 区画情報 var mapRect = splitBuilder.MapRect; for (int i = 0; i < mapRect.RectCount; ++i) { var data = mapRect[i]; Draw(data.rect, i); } var tileDataMap = splitBuilder.TileDataMap; foreach (var tileData in tileDataMap) { DrawByTileData(tileData, tileData.Flag); } yield return(new WaitForSeconds(enumerator.Current)); } }