Exemplo n.º 1
0
 void caveGen(Block.BlockInit BNew, int Size)
 {
     BNew.Active = false;
     for (; Size > 0; Size--)
     {
         int temp = rnd.Next(4);
         if (temp == 0)
         {
             if (BNew.Up != null)
             {
                 BNew        = BNew.Up;
                 BNew.Active = false;
             }
             else
             {
                 Size++;
             }
         }
         else if (temp == 1)
         {
             if (BNew.Down != null)
             {
                 BNew        = BNew.Down;
                 BNew.Active = false;
             }
             else
             {
                 Size++;
             }
         }
         else if (temp == 2)
         {
             if (BNew.Right != null)
             {
                 BNew        = BNew.Right;
                 BNew.Active = false;
             }
             else
             {
                 Size++;
             }
         }
         else if (temp == 3)
         {
             if (BNew.Left != null)
             {
                 BNew        = BNew.Left;
                 BNew.Active = false;
             }
             else
             {
                 Size++;
             }
         }
     }
 }
Exemplo n.º 2
0
 void checkLightUpd(LightedBlock now, Block.BlockInit nn)
 {
     if (nn != null && nn.Lightness < now.b.Lightness * nn.getLightCoeff())
     {
         ls.Remove(nn.it);
         nn.Lightness = now.b.Lightness * nn.getLightCoeff();
         nn.it        = new LightedBlock(nn);
         ls.Add(nn.it);
     }
 }
Exemplo n.º 3
0
 public LightedBlock(Block.BlockInit _b, float _l)
 {
     Lightness = _l;
     b         = _b;
     k         = b.ObjectName;
 }
Exemplo n.º 4
0
 public LightedBlock(Block.BlockInit _b)
 {
     Lightness = _b.Lightness;
     b         = _b;
     k         = b.ObjectName;
 }
Exemplo n.º 5
0
 void planetBaseGen(bool Upper)
 {
     if (Upper)
     {
         bool EndCond = true;
         main._m.loadSet(((float)(Depth - LrNow)) / Depth / 2f);
         for (int lv = LrNow; lv >= 0; lv--)
         {
             int             len  = lv + (Depth - lv - 1) * 2 + 2;
             Block.BlockInit Left = null;
             for (int i = -len; i <= len; i++)
             {
                 Vector3         pos  = new Vector3(i * 0.11f, lv * 0.2f + 0.1f, 0);
                 Block.BlockInit BNew = new Block.BlockInit();
                 BNew.pos        = pos;
                 BNew.BaseBlock  = BaseBlock;
                 BNew.Parent     = this;
                 BNew.ObjectName = BlockNum++;
                 if (mod(i + lv, 2) == 0)
                 {
                     BNew.flipY();
                 }
                 BNew.Left = Left;
                 BNew.Up   = temp[i + MaxLen];
                 if (temp[i + MaxLen] != null)
                 {
                     temp[i + MaxLen].Down = BNew;
                 }
                 temp[i + MaxLen] = BNew;
                 if (Left != null)
                 {
                     Left.Right = BNew;
                 }
                 Left = BNew;
                 if (Mathf.Abs(i) < lv + 2)
                 {
                     PlanetStruct[lv].Add(BNew);
                     BNew.Layer    = lv;
                     BNew.ResLayer = lv;
                 }
                 else
                 {
                     if (i > 0)
                     {
                         PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Add(BNew);
                         BNew.Layer    = lv + ((Mathf.Abs(i) - lv) / 2);
                         BNew.ResLayer = lv + ((Mathf.Abs(i) - lv) / 2);
                     }
                     else
                     {
                         if (mod(i + lv, 2) == 0)
                         {
                             PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Insert(1, BNew);
                         }
                         else
                         {
                             PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Insert(0, BNew);
                         }
                         BNew.Layer    = lv + ((Mathf.Abs(i) - lv) / 2);
                         BNew.ResLayer = lv + ((Mathf.Abs(i) - lv) / 2);
                     }
                 }
             }
             if (lv < LrNow - 10)
             {
                 LrNow   = lv - 1;
                 EndCond = false;
                 break;
             }
         }
         if (EndCond)
         {
             LoadState++;
             LrNow = 0;
         }
     }
     else
     {
         bool EndCond = true;
         main._m.loadSet(((float)LrNow) / Depth / 2f + 0.5f);
         for (int lv = LrNow; lv <= Depth; lv++)
         {
             int             len  = lv + (Depth - lv - 1) * 2 + 2;
             Block.BlockInit Left = null;
             for (int i = -len; i <= len; i++)
             {
                 Vector3         pos  = new Vector3(i * 0.11f, -lv * 0.2f - 0.1f, 0);
                 Block.BlockInit BNew = new Block.BlockInit();
                 BNew.pos        = pos;
                 BNew.BaseBlock  = BaseBlock;
                 BNew.Parent     = this;
                 BNew.ObjectName = BlockNum++;
                 if (mod(i + lv, 2) == 1)
                 {
                     BNew.flipY();
                 }
                 BNew.Up = temp[i + MaxLen];
                 if (temp[i + MaxLen] != null)
                 {
                     temp[i + MaxLen].Down = BNew;
                 }
                 temp[i + MaxLen] = BNew;
                 BNew.Left        = Left;
                 if (Left != null)
                 {
                     Left.Right = BNew;
                 }
                 Left = BNew;
                 if (Mathf.Abs(i) < lv + 2)
                 {
                     if (fst)
                     {
                         PlanetStruct[lv].Add(BNew);
                     }
                     else
                     {
                         PlanetStruct[lv].Insert(PlanetStruct[lv].Count - 1, BNew);
                     }
                     fst           = false;
                     BNew.Layer    = lv;
                     BNew.ResLayer = lv;
                 }
                 else
                 {
                     if (i > 0)
                     {
                         if (mod(i + lv, 2) == 0)
                         {
                             PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Add(BNew);
                         }
                         else
                         {
                             PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Insert(PlanetStruct[lv + ((Mathf.Abs(i) - lv) / 2)].Count - 1, BNew);
                         }
                         BNew.Layer    = lv + ((Mathf.Abs(i) - lv) / 2);
                         BNew.ResLayer = lv + ((Mathf.Abs(i) - lv) / 2);
                     }
                     else
                     {
                         PlanetTemp[lv + ((Mathf.Abs(i) - lv) / 2)].Add(BNew);
                         BNew.Layer    = lv + ((Mathf.Abs(i) - lv) / 2);
                         BNew.ResLayer = lv + ((Mathf.Abs(i) - lv) / 2);
                     }
                 }
             }
             if (lv > LrNow + 10)
             {
                 LrNow   = lv + 1;
                 EndCond = false;
                 break;
             }
         }
         if (EndCond)
         {
             for (int i = 0; i <= Depth; i++)
             {
                 for (int j = PlanetTemp[i].Count - 1; j >= 0; j--)
                 {
                     PlanetStruct[i].Add(PlanetTemp[i][j]);
                 }
                 if (i != Depth)
                 {
                     foreach (Block.BlockInit b in PlanetStruct[i])
                     {
                         b.Active = true;
                     }
                 }
             }
             main._m.loadSet(0);
             main._m.loadTxtSet("Loading Blocks");
             LoadState++;
             LayerNow = 0;
             LrNow    = Depth - 1;
             LastEdge = Depth - 1;
         }
     }
 }
Exemplo n.º 6
0
    public void updLight(Block.BlockInit b)
    {
        main._m.FrameNum++;
        b.used = main._m.FrameNum;
        Queue <LightedBlock> bfs = new Queue <LightedBlock>();

        if (b.Lightness > b.getBasicLight())
        {
            bfs.Enqueue(new LightedBlock(b, b.Lightness));
        }
        else
        {
            bfs.Enqueue(new LightedBlock(b, b.getBasicLight()));
        }
        b.Lightness = b.getBasicLight();
        ls.Clear();
        List <Block.BlockInit> edge = new List <Block.BlockInit>();

        while (bfs.Count != 0)
        {
            LightedBlock BNow = bfs.Peek();
            bfs.Dequeue();
            BNow.b.it = new LightedBlock(BNow.b);

            ls.Add(BNow.b.it);
            if (BNow.Lightness <= 0.01f)
            {
                edge.Add(BNow.b);
                continue;
            }
            if (BNow.b.Left != null && BNow.b.Left.used < main._m.FrameNum)
            {
                BNow.b.Left.Lightness = BNow.b.Left.getBasicLight();
                BNow.b.Left.used      = main._m.FrameNum;
                bfs.Enqueue(new LightedBlock(BNow.b.Left, BNow.Lightness * BNow.b.Left.getLightCoeff()));
            }
            if (BNow.b.Right != null && BNow.b.Right.used < main._m.FrameNum)
            {
                BNow.b.Right.Lightness = BNow.b.Right.getBasicLight();
                BNow.b.Right.used      = main._m.FrameNum;
                bfs.Enqueue(new LightedBlock(BNow.b.Right, BNow.Lightness * BNow.b.Right.getLightCoeff()));
            }
            if (BNow.b.FlippedY)
            {
                if (BNow.b.Up != null && BNow.b.Up.used < main._m.FrameNum)
                {
                    BNow.b.Up.Lightness = BNow.b.Up.getBasicLight();
                    BNow.b.Up.used      = main._m.FrameNum;
                    bfs.Enqueue(new LightedBlock(BNow.b.Up, BNow.Lightness * BNow.b.Up.getLightCoeff()));
                }
            }
            else
            {
                if (BNow.b.Down != null && BNow.b.Down.used < main._m.FrameNum)
                {
                    BNow.b.Down.Lightness = BNow.b.Down.getBasicLight();
                    BNow.b.Down.used      = main._m.FrameNum;
                    bfs.Enqueue(new LightedBlock(BNow.b.Down, BNow.Lightness * BNow.b.Down.getLightCoeff()));
                }
            }
        }
        foreach (Block.BlockInit b1 in edge)
        {
            if (b1.Left != null && b1.Left.used < main._m.FrameNum)
            {
                b1.Left.used = main._m.FrameNum;
                b1.Left.it   = new LightedBlock(b1.Left);
                ls.Add(b1.Left.it);
            }
            if (b1.Right != null && b1.Right.used < main._m.FrameNum)
            {
                b1.Right.used = main._m.FrameNum;
                b1.Right.it   = new LightedBlock(b1.Right);
                ls.Add(b1.Right.it);
            }
            if (b1.FlippedY)
            {
                if (b1.Up != null && b1.Up.used < main._m.FrameNum)
                {
                    b1.Up.used = main._m.FrameNum;
                    b1.Up.it   = new LightedBlock(b1.Up);
                    ls.Add(b1.Up.it);
                }
            }
            else
            {
                if (b1.Down != null && b1.Down.used < main._m.FrameNum)
                {
                    b1.Down.used = main._m.FrameNum;
                    b1.Down.it   = new LightedBlock(b1.Down);
                    ls.Add(b1.Down.it);
                }
            }
        }
        calcLight(false);
    }