public float GenerateChunk(float fromX, Range range, bool dontPutActiveItems = false, bool dontPutUpperPlatform = false, bool dontMakeEdge = false) { float result = GenerateOneLine(fromX, blockInOneShoot, startRespPoint.position.y, DrawLineFlags.DontMakeEdge | ((dontPutActiveItems) ? DrawLineFlags.DontPutActiveItems : DrawLineFlags.None)); GenerateOneLine(fromX, blockInOneShoot, startRespPoint.position.y + maxUp.position.y + 5, DrawLineFlags.DontPutActiveItems | DrawLineFlags.DontMakeEdge | DrawLineFlags.Flip | DrawLineFlags.DontMakeHoles); List <GameObject> blocks = new List <GameObject>(); if (dontPutUpperPlatform == false) { for (float y = range.Min + 2 /*No in basic line and no two cube over basic line*/; y < range.Max; y++) { if (Chance(chanceForUpperPlatform)) { DrawLineFlags flags = DrawLineFlags.None; if (dontPutActiveItems) { flags |= DrawLineFlags.DontPutActiveItems; } if (dontMakeEdge) { flags |= DrawLineFlags.DontMakeEdge; } int lenght = UnityEngine.Random.Range(platformsSize.x, platformsSize.y); GenerateOneLine(fromX, lenght, y, flags); y += lenght; } } } blocksPacks.Enqueue(blocks.ToArray()); return(result); }
public static bool HasCapEndFull(this DrawLineFlags @this) => (@this & DrawLineFlags.CapEndFull) == DrawLineFlags.CapEndFull;
public static bool HasCapEndCenter(this DrawLineFlags @this) => (@this & DrawLineFlags.CapEndCenter) == DrawLineFlags.CapEndCenter;
public float GenerateOneLine(float fromX, float blocks, float y, DrawLineFlags drawLineFlags) { GameObject[] objs = new GameObject[10]; Cint cooldown = 0; bool[] holes = new bool[(int)blocks + 1]; if (drawLineFlags.HasFlag(DrawLineFlags.DontMakeHoles) == false && makeHole && blocks >= 3) { for (int x = 2; x < blocks - 2; x++) { if (cooldown == 0 && Chance(chanceForHole)) { holes[x] = true; cooldown = minHoleBreak; } else { cooldown--; } } } for (int x = 0; x < blocks; x++) { BlockMode mode = BlockMode.Center; bool dontPut = drawLineFlags.HasFlag(DrawLineFlags.DontPutActiveItems); bool anyMode = false; if (drawLineFlags.HasFlag(DrawLineFlags.DontMakeEdge) == false) { anyMode = true; if (x == 0) { mode = BlockMode.Left; dontPut = true; } else if (x == blocks - 1) { mode = BlockMode.Right; dontPut = true; } else { anyMode = false; } } if (anyMode == false) { if (holes[x + 1]) { mode = BlockMode.Right; } else if (x > 0 && holes[x - 1]) { mode = BlockMode.Left; } } if (holes[x] == false) { GameObject block; objs[x] = block = PutBlock(new Vector2(fromX + x, y), dontPut, mode); if (drawLineFlags.HasFlag(DrawLineFlags.Flip)) { block.GetComponent <SpriteRenderer>().flipY = true; } } } blocksPacks.Enqueue(objs); return(fromX + blockInOneShoot); }