Ballz.GameSession.World.Terrain.ApplyModification C# (CSharp) Method

ApplyModification() public method

public ApplyModification ( TerrainModification mod ) : void
mod TerrainModification
return void
        public void ApplyModification(TerrainModification mod)
        {
            TerrainModified?.Invoke(this, mod);

            // Compute bounding box
            int tlx = (int)Math.Floor(mod.X - mod.Radius);
            int tly = (int)Math.Floor(mod.Y - mod.Radius);
            int brx = (int)Math.Ceiling(mod.X + mod.Radius);
            int bry = (int)Math.Ceiling(mod.Y + mod.Radius);

            // Clamp to world boundaries
            tlx = Math.Min(Math.Max(0, tlx), width - 1);
            tly = Math.Min(Math.Max(0, tly), height - 1);
            brx = Math.Min(Math.Max(0, brx), width - 1);
            bry = Math.Min(Math.Max(0, bry), height - 1);


            // Iterate over bounding box part of bitmap
            for (int j = tly; j < bry; ++j)
            {
                for (int i = tlx; i < brx; ++i)
                {
                    if (Distance(i, j, mod.X, mod.Y) > mod.Radius)
                        continue;

                    TerrainType cur = PublicShape.TerrainBitmap[i, j];

                    if (cur == TerrainType.Earth || cur == TerrainType.Sand)
                    {
                        if (mod.Subtract)
                            PublicShape.TerrainBitmap[i, j] = TerrainType.Air;
                        else
                            PublicShape.TerrainBitmap[i, j] = TerrainType.Earth;
                    }
                }
            }

            // Let sand "fall down" etc.
            UpdateTerrain(tly, tlx, brx);

            WorkingRevision++;
        }