Example #1
0
    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;
                    }
                }
            }
        }
    }
Example #2
0
 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);
     }
 }