public override void _Process(float delta) { float spawnZoneExtends = 640; Vector2 globalPosition = ((Node2D)Referer).GlobalPosition; Rect2 spawnZone = new Rect2(globalPosition, spawnZoneExtends, spawnZoneExtends); foreach (Node n in GetTree().GetNodesInGroup("EndPositions")) { Position2D pos = (Position2D)n; LavaBlock lb = (LavaBlock)pos.GetParent(); if (spawnZone.HasPoint(pos.GlobalPosition) && !lb.loadedNext) { PackedScene nextToSpawn = GD.Load <PackedScene>("tests/thibault/lava_blocks/" + lb.nexts[(int)(GD.Randi() % lb.nexts.Count)] + ".tscn"); LavaBlock nextBlock = (LavaBlock)nextToSpawn.Instance(); nextBlock.camera = lb.camera; nextBlock.GlobalPosition = pos.GlobalPosition; Referer.GetParent().AddChild(nextBlock); lb.loadedNext = true; Array <LavaSurfaceBurn> nextLavas = new Array <LavaSurfaceBurn>(); foreach (Node n2 in GetTree().GetNodesInGroup("LavaBurn")) { LavaSurfaceBurn l = (LavaSurfaceBurn)n2; if (l.GetParent() == nextBlock) { nextLavas.Add(l); } } for (int i = 0; i < nextLavas.Count; i++) { if (i != 0 || lavaSurface.isInterrupted) { surfaces.Add(lavaSurface); lavaSurface = (LavaSurfaceBurn)lavaPacked.Instance(); GetTree().CurrentScene.AddChild(lavaSurface); } LavaSurfaceBurn nextLava = nextLavas[i]; Vector2 offset = nextLava.GlobalPosition; foreach (Vector2 p in nextLava.Points) { lavaSurface.AddPoint(p + offset); } lavaSurface.isInterrupted = nextLava.isInterrupted; nextLava.QueueFree(); } } else if ((pos.GlobalPosition.x - globalPosition.x) < -spawnZoneExtends) { lb.QueueFree(); while (surfaces.Count > 0) { LavaSurfaceBurn ls = surfaces[0]; float maxX = 0; for (int i = 0; i < ls.Points.Length; i++) { maxX = Mathf.Max(maxX, ls.GetPointPosition(i).x); } if (maxX - globalPosition.x < -spawnZoneExtends) { surfaces.RemoveAt(0); ls.QueueFree(); } else { break; } } } } }
private Block FindBlock(Color c) { if (c == StandardGroundBlock.GetColor()) { return(new StandardGroundBlock()); } else if (c == DarkGroundBlock.GetColor()) { return(new DarkGroundBlock()); } else if (c == StandardAirBlock.GetColor()) { return(new StandardAirBlock()); } else if (c == DarkAirBlock.GetColor()) { return(new DarkAirBlock()); } else if (c == CoinBoxBlock.GetColor()) { return(new CoinBoxBlock()); } else if (c == PowerUpgradeBoxBlock.GetColor()) { return(new PowerUpgradeBoxBlock()); } else if (c == EmptyBoxBlock.GetColor()) { return(new EmptyBoxBlock()); } else if (c == StandardHillBlock.GetColor()) { return(new StandardHillBlock()); } else if (c == DarkHillBlock.GetColor()) { return(new DarkHillBlock()); } else if (c == PipeBlock.GetColor()) { return(new PipeBlock()); } else if (c == CastleBlock.GetColor()) { return(new CastleBlock()); } else if (c == CrazyCoinBoxBlock.GetColor()) { return(new CrazyCoinBoxBlock()); } else if (c == EndlessCrazyCoinBoxBlock.GetColor()) { return(new EndlessCrazyCoinBoxBlock()); } else if (c == StandardCeilingBlock.GetColor()) { return(new StandardCeilingBlock()); } else if (c == DarkCeilingBlock.GetColor()) { return(new DarkCeilingBlock()); } else if (c == StandardPillarBlock.GetColor()) { return(new StandardPillarBlock()); } else if (c == MushroomPlatformBlock.GetColor()) { return(new MushroomPlatformBlock()); } else if (c == CastleGroundBlock.GetColor()) { return(new CastleGroundBlock()); } else if (c == LavaBlock.GetColor()) { return(new LavaBlock()); } else if (c == FireBoxBlock.GetColor()) { return(new FireBoxBlock()); } else if (c == SolidCloudBlock.GetColor()) { return(new SolidCloudBlock()); } else if (c == BeanStalkBoxBlock.GetColor()) { return(new BeanStalkBoxBlock()); } else if (c == UnderwaterGroundBlock.GetColor()) { return(new UnderwaterGroundBlock()); } else if (c == WaterBlock.GetColor()) { return(new WaterBlock()); } else if (c == BillBlasterBlock.GetColor()) { return(new BillBlasterBlock()); } else { return(null); } }