Esempio n. 1
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);
     }
 }
Esempio n. 2
0
        public int CompareTo(object o)
        {
            LightedBlock p = o as LightedBlock;

            if (this.Lightness != p.Lightness)
            {
                return(this.Lightness.CompareTo(p.Lightness));
            }
            else if (this.k != p.k)
            {
                return(this.k.CompareTo(p.k));
            }
            return(0);
        }
Esempio n. 3
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);
    }
Esempio n. 4
0
    public void calcLight(bool pgen)
    {
        AllBlocks.Clear();
        bool endd = true;
        int  i    = LrNow;

        if (pgen)
        {
            main._m.loadSet(((float)LrNow) / (6 * Depth * Depth));
        }
        while (ls.Count != 0)
        {
            i++;
            LightedBlock now = ls.Max;
            if (now.b.Left != null)
            {
                checkLightUpd(now, now.b.Left);
            }
            if (now.b.Right != null)
            {
                checkLightUpd(now, now.b.Right);
            }
            if (now.b.FlippedY)
            {
                if (now.b.Up != null)
                {
                    checkLightUpd(now, now.b.Up);
                }
            }
            else
            {
                if (now.b.Down != null)
                {
                    checkLightUpd(now, now.b.Down);
                }
            }
            AllBlocks.Add(now.b);
            ls.Remove(now);
            if (pgen)
            {
                if (i > LrNow + Depth * 10)
                {
                    LrNow = i++;
                    endd  = false;
                    break;
                }
            }
        }
        if (pgen)
        {
            if (endd)
            {
                foreach (Block.BlockInit b in AllBlocks)
                {
                    b.UpdateLightness();
                }
                AllBlocks.Clear();
                main._m.loadSet(0);
                plr.transform.position = new Vector3(0, Depth * 0.2f + 0.4f);
                plr.GetComponent <PhysicsO>().active      = false;
                plr.GetComponent <Rigidbody2D>().velocity = Vector2.zero;
                main._m.loadTxtSet("Instancing");
                LoadState++;
                LrNow = 0;
            }
        }
        else
        {
            foreach (Block.BlockInit b in AllBlocks)
            {
                b.UpdateLightness();
            }
            AllBlocks.Clear();
        }
    }