fCraft.Map.ProcessUpdates C# (CSharp) Method

ProcessUpdates() private method

private ProcessUpdates ( ) : void
return void
        internal void ProcessUpdates()
        {
            if ( World == null ) {
                throw new InvalidOperationException( "Map must be assigned to a world to process updates." );
            }

            if ( World.IsLocked ) {
                if ( World.IsPendingMapUnload ) {
                    World.UnloadMap( true );
                }
                return;
            }

            int packetsSent = 0;
            bool canFlush = false;
            int maxPacketsPerUpdate = Server.CalculateMaxPacketsPerUpdate( World );
            while ( packetsSent < maxPacketsPerUpdate ) {
                BlockUpdate update;
                if ( !updates.TryDequeue( out update ) ) {
                    if ( World.IsFlushing ) {
                        canFlush = true;
                    }
                    break;
                }
                if ( !InBounds( update.X, update.Y, update.Z ) )
                    continue;
                int blockIndex = Index( update.X, update.Y, update.Z );
                Blocks[blockIndex] = ( byte )update.BlockType;

                if ( !World.IsFlushing ) {
                    Packet packet = PacketWriter.MakeSetBlock( update.X, update.Y, update.Z, update.BlockType );
                    World.Players.SendLowPriority( update.Origin, packet );
                }
                packetsSent++;
            }

            if ( drawOps.Count > 0 ) {
                lock ( drawOpLock ) {
                    if ( drawOps.Count > 0 ) {
                        packetsSent += ProcessDrawOps( maxPacketsPerUpdate - packetsSent );
                    }
                }
            } else if ( canFlush ) {
                World.EndFlushMapBuffer();
            }

            if ( packetsSent == 0 && World.IsPendingMapUnload ) {
                World.UnloadMap( true );
            }
        }

Usage Example

Example #1
0
        void UpdateTask(SchedulerTask task)
        {
            Map tempMap = Map;

            if (tempMap != null)
            {
                tempMap.ProcessUpdates();
            }
        }
All Usage Examples Of fCraft.Map::ProcessUpdates