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); } }
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); }
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); }
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(); } }