fCraft.MineField.PlayerMoving C# (CSharp) Méthode

PlayerMoving() private static méthode

private static PlayerMoving ( object sender, PlayerMovingEventArgs e ) : void
sender object
e fCraft.Events.PlayerMovingEventArgs
Résultat void
        private static void PlayerMoving( object sender, PlayerMovingEventArgs e )
        {
            if ( _world != null && e.Player.World == _world ) {
                if ( _world.gameMode == GameMode.MineField && !Failed.Contains( e.Player ) ) {
                    if ( e.NewPosition != null ) {
                        Vector3I oldPos = new Vector3I( e.OldPosition.X / 32, e.OldPosition.Y / 32, e.OldPosition.Z / 32 );
                        Vector3I newPos = new Vector3I( e.NewPosition.X / 32, e.NewPosition.Y / 32, e.NewPosition.Z / 32 );

                        if ( oldPos.X != newPos.X || oldPos.Y != newPos.Y || oldPos.Z != newPos.Z ) {
                            if ( !_map.InBounds( newPos ) ) {
                                e.Player.TeleportTo( _map.Spawn );
                                newPos = ( Vector3I )_map.Spawn;
                            }
                            // Check if the player jumped, flew, whatevers
                            if ( newPos.Z > _ground + 2 ) {
                                e.Player.TeleportTo( e.OldPosition );
                                newPos = oldPos;
                            }
                            foreach ( Vector3I pos in Mines.Values ) {
                                if ( newPos == new Vector3I( pos.X, pos.Y, pos.Z + 2 ) ||
                                    newPos == new Vector3I( pos.X, pos.Y, pos.Z + 1 ) ||
                                    newPos == new Vector3I( pos.X, pos.Y, pos.Z ) ) {
                                    _world.Map.QueueUpdate( new BlockUpdate( null, pos, Block.TNT ) );
                                    _world.AddPhysicsTask( new TNTTask( _world, pos, null, true, false ), 0 );
                                    Vector3I removed;
                                    Mines.TryRemove( pos.ToString(), out removed );
                                }
                            }
                            if ( _map.GetBlock( newPos.X, newPos.Y, newPos.Z - 2 ) == Block.Green
                                && !_stopped ) {
                                _stopped = true;
                                Stop( e.Player, true );
                            }
                        }
                    }
                }
            }
        }