예제 #1
0
    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);
    }
예제 #2
0
 public static bool HasCapEndFull(this DrawLineFlags @this) => (@this & DrawLineFlags.CapEndFull) == DrawLineFlags.CapEndFull;
예제 #3
0
 public static bool HasCapEndCenter(this DrawLineFlags @this) => (@this & DrawLineFlags.CapEndCenter) == DrawLineFlags.CapEndCenter;
예제 #4
0
    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);
    }