Changeset 198

Show
Ignore:
Timestamp:
11/05/07 16:13:59 (1 year ago)
Author:
LeoD
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/jobs/defend/Main.d

    r188 r198  
    1212import Integer = tango.text.convert.Integer; 
    1313 
     14import gen.core.JobSystem; 
    1415import gen.util.Gamestates; 
    1516import gen.util.Wrapper; 
     
    7778    loadConfig(); 
    7879 
     80    // Create job system 
     81    jobSystem = new JobSystem(); 
     82 
    7983    // Create the renderer 
    8084    logger.info("creating renderer"); 
     
    126130            frameBegin = getTickCount(); 
    127131 
    128             bool continueLoop = false; 
    129             profile!("update") 
    130             ({ 
    131                 gamestateManager.update(frameTime); 
    132                  
    133                 if(gamestateManager.exit) 
    134                     continueLoop = true; 
    135                  
    136                 inputManager.update(); 
    137             }); 
    138              
    139             if(continueLoop) 
    140                 return; 
    141  
    142             profile!("render") 
    143             ({ 
    144                 renderer.begin(); 
    145  
    146                 // Only render, when the window is active 
    147                 if(renderer.window.active) 
    148                 { 
    149                     gamestateManager.render(); 
    150  
    151                     profile!("flip") 
    152                     ({ 
    153                         renderer.end(); 
    154                     }); 
    155  
    156                     profile!("clear") 
    157                     ({ 
    158                         renderer.clear(); 
    159                     }); 
    160                 } 
    161             }); 
    162  
     132            gamestateManager.run(frameTime); 
     133                         
    163134            debug 
    164135            { 
     
    175146                // Limit FPS and calculate frame time 
    176147                frameTime = getTickCount() - frameBegin; 
    177                 while((frameTime = getTickCount() - frameBegin) < 10) sleep(1); 
     148                //while((frameTime = getTickCount() - frameBegin) < 10) sleep(1); 
    178149            }); 
    179150        }); 
    180151    } 
    181152 
     153    jobSystem.shutdown(); 
     154 
    182155    logger.info("program execution finished normally"); 
    183156    return 0; 
  • branches/jobs/defend/com/Gateway.d

    r181 r198  
    3030    void update(); 
    3131 
    32     // Tell the gateway that you're ready to start teh game 
     32    // Tell the gateway that you're ready to start the game 
    3333    void ready(); 
    3434     
  • branches/jobs/defend/demo/Demo.d

    r188 r198  
    1919import defend.terrain.Terrain; 
    2020 
    21 class Demo : IGameState 
     21/*class Demo : IGameState 
    2222{ 
    2323private: 
     
    8484        sceneGraph.clear(); 
    8585    } 
    86 } 
     86}*/ 
  • branches/jobs/defend/game/Game.d

    r194 r198  
    99import Integer = tango.text.convert.Integer; 
    1010 
     11import gen.core.JobSystem; 
    1112import gen.util.Wrapper; 
    1213import gen.util.Profiler; 
     
    8788    Sprite2D miniScreenSprite; 
    8889 
     90    // Frame time 
     91    float frameTime; 
     92    bool doRender = false; 
     93 
    8994    // Demo recorder 
    9095    DemoRecorder demoRecorder; 
     
    218223        miniScreenActivated = false; 
    219224    } 
     225     
     226    // Create jobs 
     227    void jobUpdateSyncs() 
     228    { 
     229        syncs.update(frameTime); 
     230    } 
     231     
     232    void jobUpdateHUD() 
     233    { 
     234        hud.update(frameTime); 
     235    } 
     236     
     237    void jobUpdateGraph() 
     238    { 
     239        sceneGraph.update(frameTime); 
     240    } 
     241     
     242    void jobInput() 
     243    { 
     244        inputManager.update(); 
     245         
     246        if(inputManager.keyPressed(KeyType.L)) 
     247            wireframe = !wireframe; 
     248 
     249        if(inputManager.keyPressedFirst(KeyType.G)) 
     250            sceneGraph.debugVisible = !sceneGraph.debugVisible; 
     251 
     252        if(inputManager.keyPressedFirst(KeyType.C)) 
     253        { 
     254            Stdout("GC collect!").newline; 
     255            GC.collect(); 
     256        } 
     257 
     258        if(inputManager.keyPressedFirst(KeyType.M)) 
     259            toggleMiniScreen(); 
     260    } 
     261     
     262    void jobRender() 
     263    { 
     264        doRender = true; 
     265    } 
     266     
     267    void createJobs() 
     268    { 
     269        auto inputJob = jobSystem.addFrameJob("input", &jobInput); 
     270 
     271        auto simulationJob = jobSystem.addFrameJob("simulation", &gateway.runSimulation); 
     272        auto gatewayJob = jobSystem.addFrameJob("gateway", &gateway.update); 
     273        auto updateSyncsJob = jobSystem.addFrameJob("syncs", &jobUpdateSyncs); 
     274        //updateSyncsJob.dependOn(simulationJob); 
     275         
     276        auto hudJob = jobSystem.addFrameJob("hud", &jobUpdateHUD); 
     277        hudJob.dependOn(inputJob); 
     278         
     279        auto mouseJob = jobSystem.addFrameJob("mouse", &mouse.update); 
     280        mouseJob.dependOn(inputJob); 
     281         
     282        auto updateGraphJob = jobSystem.addFrameJob("graph", &jobUpdateGraph); 
     283        updateGraphJob.dependOn(updateSyncsJob); 
     284         
     285        auto renderJob = jobSystem.addFrameJob("render", &jobRender); 
     286        renderJob.dependOn(hudJob); 
     287        renderJob.dependOn(updateSyncsJob); 
     288        renderJob.dependOn(simulationJob); 
     289        renderJob.dependOn(gatewayJob); 
     290        renderJob.dependOn(updateGraphJob); 
     291        renderJob.dependOn(mouseJob); 
     292    } 
    220293 
    221294public: 
     
    256329        mouse = new Mouse(syncs); 
    257330        hud = new HUD(syncs); 
    258          
    259         // Fogging 
    260         //renderer.setRenderState(RenderState.Fog, true); 
    261         //renderer.setFog(FogMode.Linear, 1, 50, 90, Vec3f(0)); 
    262  
    263         // Skybox 
    264         //sceneGraph.addNode(new Skybox("data/skyboxes/FR.jpg", "data/skyboxes/LF.jpg", "data/skyboxes/BK.jpg", 
    265         //                              "data/skyboxes/RT.jpg", "data/skyboxes/UP.jpg", "data/skyboxes/DN.jpg")); 
    266331 
    267332        // Initialize the map 
     
    280345        if(gateway.id == 0) 
    281346        { 
    282             //for(uint i = 0; i < 20; i++) 
    283             //    gateway.createObject(ObjectType.Box, ObjectPos(random!(object_pos_t)(10, map.size.x - 10), 
    284             //                                                   random!(object_pos_t)(10, map.size.y - 10))); 
    285              
    286347            gateway.createObject(ObjectType.House, ObjectPos(32, 30)); 
    287             //gateway.createObject(ObjectType.House, ObjectPos(20, 25)); 
    288348            gateway.createObject(ObjectType.House, ObjectPos(37, 30)); 
    289349        } 
     
    291351        logger.info("graphics card memory usage is " ~ Integer.toUtf8(renderer.memoryUsage) ~ " bytes (" ~  
    292352                    Integer.toUtf8(renderer.memoryUsage / 1024) ~ "kb)"); 
     353         
     354        createJobs(); 
    293355         
    294356        GC.collect(); 
     
    321383    } 
    322384 
    323     override void update(float time) 
    324     { 
    325         syncs.update(time); 
    326          
    327         profile!("scene graph", "update") 
    328         ({ 
    329             sceneGraph.update(time); 
    330         }); 
    331          
    332         if(inputManager.keyPressedFirst(KeyType.L)) 
    333             wireframe = !wireframe; 
    334  
    335         if(inputManager.keyPressedFirst(KeyType.G)) 
    336             sceneGraph.debugVisible = !sceneGraph.debugVisible; 
    337  
    338         if(inputManager.keyPressedFirst(KeyType.C)) 
     385    override void run(float time) 
     386    { 
     387        frameTime = time; 
     388        doRender = false; 
     389         
     390        jobSystem.startFrame(); 
     391         
     392        while(!doRender) 
     393            sleep(1); 
     394             
     395        if(renderer.window.active) 
    339396        { 
    340             Stdout("GC collect!").newline; 
    341             GC.collect(); 
     397            renderer.update(); 
     398            renderer.begin(); 
     399             
     400            // First the 3D objects 
     401            if(wireframe) renderer.setRenderState(RenderState.Wireframe, true); 
     402 
     403            profile!("scene graph", "render") 
     404            ({ 
     405                sceneGraph.draw(); 
     406            }); 
     407             
     408            renderer.setMatrix(mainCamera.modelview, MatrixType.Modelview); 
     409            renderer.setMatrix(mainCamera.projection, MatrixType.Projection); 
     410            syncs.render(); 
     411 
     412            if(wireframe) renderer.setRenderState(RenderState.Wireframe, false); 
     413 
     414            // And then the 2D objects 
     415            profile!("hud", "render") 
     416            ({ 
     417                renderer.setRenderState(RenderState.DepthTest, false); 
     418                renderer.orthogonal(); 
     419                renderer.identity(); 
     420                hud.render(); 
     421 
     422                if(miniScreenActivated) 
     423                    miniScreenSprite.render(Vec2ui(renderer.width - miniScreenSprite.rect.width, 0)); 
     424                     
     425                mouse.render(); 
     426 
     427                renderer.setRenderState(RenderState.DepthTest, true); 
     428            }); 
     429 
     430            renderer.end(); 
     431            renderer.clear(); 
    342432        } 
    343  
    344         if(inputManager.keyPressedFirst(KeyType.M)) 
    345             toggleMiniScreen(); 
    346  
    347         profile!("gateway") 
    348         ({ 
    349             gateway.update(); 
    350         }); 
    351          
    352         if(gatewayShutdown) 
    353             return; 
    354  
    355         profile!("hud", "update") 
    356         ({ 
    357             hud.update(time); 
    358             mouse.update(); 
    359         }); 
    360     } 
    361      
    362     override void render() 
    363     { 
    364         // First the 3D objects 
    365         if(wireframe) renderer.setRenderState(RenderState.Wireframe, true); 
    366  
    367         profile!("scene graph", "render") 
    368         ({ 
    369             sceneGraph.draw(); 
    370         }); 
    371          
    372         renderer.setMatrix(mainCamera.modelview, MatrixType.Modelview); 
    373         renderer.setMatrix(mainCamera.projection, MatrixType.Projection); 
    374         syncs.render(); 
    375  
    376         if(wireframe) renderer.setRenderState(RenderState.Wireframe, false); 
    377  
    378         // And then the 2D objects 
    379         profile!("hud", "render") 
    380         ({ 
    381             renderer.setRenderState(RenderState.DepthTest, false); 
    382             renderer.orthogonal(); 
    383             renderer.identity(); 
    384             hud.render(); 
    385  
    386             if(miniScreenActivated) 
    387                 miniScreenSprite.render(Vec2ui(renderer.width - miniScreenSprite.rect.width, 0)); 
    388                  
    389             mouse.render(); 
    390  
    391             renderer.setRenderState(RenderState.DepthTest, true); 
    392         }); 
     433         
     434        jobSystem.endFrame(); 
    393435    } 
    394436} 
  • branches/jobs/defend/game/Mouse.d

    r194 r198  
    6767        auto projection = camera.projection().convert!(double); 
    6868         
    69         glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
    70  
     69        //glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
     70        viewport[2] = renderer.width; 
     71        viewport[3] = renderer.height; 
     72         
    7173        Vec3d result; 
    7274        gluProject(pos.x, pos.y, pos.z, modelview.ptr, projection.ptr, viewport.ptr, &result.x, &result.y, &result.z); 
     
    8385        auto projection = camera.projection().convert!(double); 
    8486 
    85         glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
     87        //glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
     88        viewport[2] = renderer.width; 
     89        viewport[3] = renderer.height; 
    8690 
    8791        pt.y = viewport[3] - pt.y; 
     
    249253           inputManager.mousePosition.x > renderer.width || inputManager.mousePosition.y > renderer.height) 
    250254            return; 
    251          
    252         _ray = calcRay(); 
     255         
    253256        calcTilePos(); 
    254257         
     
    266269        if(mousePos.y < renderer.height - HUD_HEIGHT || areaSelection) 
    267270        { 
    268             if(inputManager.keyPressedFirst(KeyType.LeftButton) && !areaSelection) 
     271            if(inputManager.keyPressed(KeyType.LeftButton) && !areaSelection) 
    269272            { 
    270273                if(!inputManager.keyPressed(KeyType.LeftControl) || 
     
    409412    void render() 
    410413    { 
     414        _ray = calcRay(); 
     415         
    411416        auto mousePos = inputManager.mousePosition; 
    412417         
  • branches/jobs/defend/game/net/client/Client.d

    r186 r198  
    372372        screenDebugger.write("current phase: {}", phase); 
    373373         
    374         runSimulation(); 
    375374        processMessages(); 
    376375    } 
  • branches/jobs/defend/menu/Menu.d

    r188 r198  
    6868    } 
    6969 
    70     override void update(float time
     70    override void run(float
    7171    { 
    72          
    73     } 
    74      
    75     override void render() 
    76     { 
    77          
     72         
    7873    } 
    7974} 
  • branches/jobs/defend/terrain/Terrain.d

    r194 r198  
    232232    } 
    233233     
    234    void createCullTree() 
    235    
    236        TerrainPatch getPatch(uint x, uint y) 
    237        { 
     234    void createCullTree() 
     235   
     236        TerrainPatch getPatch(uint x, uint y) 
     237        { 
    238238            return patches[x * patchCount + y]; 
    239        } 
    240         
    241        void areaPatches(Rect area, void delegate(TerrainPatch) dg) 
    242        { 
     239        } 
     240         
     241        void areaPatches(Rect area, void delegate(TerrainPatch) dg) 
     242        { 
    243243            for(uint x = area.left; x < area.right; x++) 
    244244            { 
     
    248248                } 
    249249            } 
    250        } 
    251         
    252        void delegate(Rect, SceneNode) forwardCreatePart; 
    253         
    254        void callSub(Rect area, SceneNode parent) 
    255        { 
    256            uint numChilds = 2; 
    257            uint partRight = area.left + area.width / numChilds; 
    258            uint partBottom = area.top + area.height / numChilds; 
    259  
    260            forwardCreatePart(Rect(area.left, area.top, partRight, partBottom), parent); 
     250        } 
     251         
     252        void delegate(Rect, SceneNode) forwardCreatePart; 
     253         
     254        void callSub(Rect area, SceneNode parent) 
     255        { 
     256            uint numChilds = 2; 
     257            uint partRight = area.left + area.width / numChilds; 
     258            uint partBottom = area.top + area.height / numChilds; 
     259 
     260            forwardCreatePart(Rect(area.left, area.top, partRight, partBottom), parent); 
    261261            forwardCreatePart(Rect(area.left, partBottom, partRight, area.bottom), parent); 
    262            forwardCreatePart(Rect(partRight, area.top, area.right, partBottom), parent); 
    263            forwardCreatePart(Rect(partRight, partBottom, area.right, area.bottom), parent);            
    264        } 
    265         
    266        void createPart(Rect area, SceneNode parent) 
    267        { 
    268            // If this area is only containing one patch, we're at the bottom of the hierarchy 
    269            if(area.width == 1 && area.height == 1) 
    270            { 
    271                areaPatches(area, (TerrainPatch patch) 
    272                { 
     262            forwardCreatePart(Rect(partRight, area.top, area.right, partBottom), parent); 
     263            forwardCreatePart(Rect(partRight, partBottom, area.right, area.bottom), parent);           
     264        } 
     265         
     266        void createPart(Rect area, SceneNode parent) 
     267        { 
     268            // If this area is only containing one patch, we're at the bottom of the hierarchy 
     269            if(area.width == 1 && area.height == 1) 
     270            { 
     271                areaPatches(area, (TerrainPatch patch) 
     272                { 
    273273                    parent.addChild(patch); 
    274                }); 
    275                 
    276                return; 
    277            } 
    278             
    279            // Create a bounding box surrounding all the patches in this area 
    280            auto cullNode = new CullNode; 
    281             
    282            areaPatches(area, (TerrainPatch patch) 
    283            { 
    284                cullNode.boundingBox.addPoint(patch.bbox.min); 
    285                cullNode.boundingBox.addPoint(patch.bbox.max); 
    286            }); 
    287             
    288            parent.addChild(cullNode); 
    289              
    290            // Split the area into 4 parts and recurse 
     274                }); 
     275                 
     276                return; 
     277            } 
     278             
     279            // Create a bounding box surrounding all the patches in this area 
     280            auto cullNode = new CullNode; 
     281             
     282            areaPatches(area, (TerrainPatch patch) 
     283            { 
     284                cullNode.boundingBox.addPoint(patch.bbox.min); 
     285                cullNode.boundingBox.addPoint(patch.bbox.max); 
     286            }); 
     287             
     288            parent.addChild(cullNode); 
     289             
     290            // Split the area into 4 parts and recurse 
    291291            callSub(area, cullNode); 
    292        } 
    293         
    294        forwardCreatePart = &createPart; 
    295        callSub(Rect(0, 0, patchCount, patchCount), this); 
    296    
     292        } 
     293         
     294        forwardCreatePart = &createPart; 
     295        callSub(Rect(0, 0, patchCount, patchCount), this); 
     296   
    297297 
    298298public: 
  • branches/jobs/gen/list/Queue.d

    r194 r198  
    2222        { 
    2323            if(i == writePosition) 
    24                 Stdout("!")(); 
     24                synchronized(Stdout) Stdout("!")(); 
    2525             
    2626            if(i == readPosition) 
    27                 Stdout("?")(); 
     27                synchronized(Stdout) Stdout("?")(); 
    2828                 
    29             Stdout(element)(" ")(); 
     29            synchronized(Stdout) Stdout(element)(" ")(); 
    3030        } 
    3131         
    32         Stdout.newline; 
     32        synchronized(Stdout) Stdout.newline; 
    3333    } 
    3434 
     
    5656                debug(queue) 
    5757                { 
    58                     Stdout("enlarging at ")(position).newline; 
     58                    synchronized(Stdout) Stdout("enlarging at ")(position).newline; 
    5959                    debugQueue(); 
    6060                } 
     
    6969                debug(queue) 
    7070                { 
    71                     Stdout.newline; 
     71                    synchronized(Stdout) Stdout.newline; 
    7272                    debugQueue(); 
    7373                } 
    7474                 
    75                 Stdout.newline; 
    76                 Stdout(" ------------------ ENLARGE!!!!!!!!!!!!!").newline; 
    77                 Stdout.newline; 
     75                debug(queue) synchronized(Stdout) 
     76                { 
     77                    Stdout.newline; 
     78                    Stdout(" ------------------ ENLARGE!!!!!!!!!!!!!").newline; 
     79                    Stdout.newline; 
     80                } 
    7881                 
    7982                readPosition++; 
     
    8891        debug(queue) 
    8992        { 
    90             Stdout("PUSHing ")(element)(" at ")(position).newline; 
     93            synchronized(Stdout) Stdout("PUSHing ")(element)(" at ")(position).newline; 
    9194            debugQueue(); Stdout.newline; 
    9295        } 
     
    104107        debug(queue)  
    105108        { 
    106             Stdout("POPping ")(elements[readPosition])(" at ")(readPosition).newline; 
     109            synchronized(Stdout) Stdout("POPping ")(elements[readPosition])(" at ")(readPosition).newline; 
    107110            debugQueue(); Stdout.newline; 
    108111        } 
  • branches/jobs/gen/list/TurboList.d

    r184 r198  
    66import gen.util.Swap; 
    77import gen.util.Array; 
     8import gen.list.Sort; 
    89 
    910class TurboList(T) 
     
    174175    void sort(int delegate(T, T) c) 
    175176    { 
    176         void quicksort(int l, int r) 
    177         { 
    178             int i = l; 
    179             int j = r; 
    180             T x = buffer[(l + r) / 2]; 
    181              
    182             while(i <= j) 
    183             { 
    184                 while(c(buffer[i], x) < 0) 
    185                     i++; 
    186                      
    187                 while(c(buffer[j], x) > 0) 
    188                     j--; 
    189                      
    190                 if(i <= j) 
    191                 { 
    192                     swap(buffer[i], buffer[j]); 
    193                      
    194                     i++; 
    195                     j--; 
    196                 } 
    197             } 
    198              
    199             if(l < j) 
    200                 quicksort(l, j); 
    201                  
    202             if(i < r) 
    203                 quicksort(i, r); 
    204         } 
    205          
    206         if(top == 0) 
    207             return; 
    208          
    209         quicksort(0, top - 1); 
     177        quicksort(toArray(), c); 
    210178    } 
    211179     
  • branches/jobs/gen/renderer/Renderer.d

    r193 r198  
    148148     
    149149    /** 
    150      * Start rendering. 
     150     * Update 
     151     */ 
     152    void update(); 
     153     
     154    /** 
     155     * Start rendering 
    151156     */ 
    152157    void begin(); 
  • branches/jobs/gen/renderer/opengl/Renderer.d

    r193 r198  
    306306    } 
    307307 
     308    override void update() 
     309    { 
     310        _window.update(); 
     311    } 
     312 
    308313    override void begin() 
    309314    { 
    310         _window.update(); 
     315         
    311316    } 
    312317 
  • branches/jobs/gen/util/Gamestates.d

    r67 r198  
    1818    void init(); 
    1919    void done(); 
    20     void update(float time); 
    21     void render(); 
     20    void run(float time); 
    2221} 
    2322 
     
    6160        assert(g !is null); 
    6261    } 
    63     out 
    64     { 
    65         //assert(gamestate is g); 
    66     } 
    6762    body 
    6863    { 
     
    9388    } 
    9489     
    95     void update(float time) 
     90    void run(float time) 
    9691    in 
    9792    { 
    98        assert(gamestate !is null); 
     93        assert(gamestate !is null); 
    9994    } 
    10095    body 
    10196    { 
    102         gamestate.update(time); 
    103     } 
    104      
    105     void render() 
    106     in 
    107     { 
    108         assert(gamestate !is null); 
    109     } 
    110     body 
    111     { 
    112         gamestate.render(); 
     97        gamestate.run(time); 
    11398    } 
    11499} 
  • branches/jobs/gen/util/ScreenDebugger.d

    r187 r198  
    11module gen.util.ScreenDebugger; 
    22 
     3import tango.io.Stdout; 
    34import tango.text.convert.Layout; 
    45 
     6import gen.font.Font; 
     7import gen.list.TurboList; 
    58import gen.util.Singleton; 
    6 import gen.font.Font
     9import gen.renderer.Renderer
    710import gen.math.Vector; 
    8 import gen.renderer.Renderer; 
    911import gen.math.Random; 
    1012 
     
    2123    } 
    2224     
    23     Line[64] lines; 
     25    Line*[64] lines; 
    2426    uint currentLine; 
     27 
     28    TurboList!(Line*) sortList; 
    2529 
    2630public: 
     
    3337        foreach(i, ref l; lines) 
    3438        { 
     39            l = new Line; 
    3540            l.text = new char[512]; 
    3641            l.color = (i % 2 == 0) ? Vec3f(1) : Vec3f(0.8); 
    3742        } 
     43         
     44        sortList = new typeof(sortList)(lines.length); 
    3845    } 
    3946     
    40     void write(char[] format, ...) 
     47    synchronized void write(char[] format, ...) 
    4148    { 
    4249        if(!active || !renderer.window.active || currentLine >= lines.length - 1) 
     
    5461            return; 
    5562         
    56         foreach(i, ref l; lines) 
     63        foreach(l; lines) 
    5764        { 
    58             if(l.length) 
    59                 font.write(pos.x, pos.y + (font.maxHeight + 4) * i, l.color, l.text[0 .. l.length]); 
    60                  
    61             l.length = 0; 
     65            if(l.length) 
     66                sortList.append(l); 
    6267        } 
    6368         
     69        sortList.sort((Line* first, Line* second) 
     70        { 
     71            return typeid(char[]).compare(cast(void*)&first.text, cast(void*)&second.text); 
     72        }); 
     73         
     74        int i; 
     75        foreach(l; sortList) 
     76        { 
     77            font.write(pos.x, pos.y + (font.maxHeight + 4) * i, l.color, l.text[0 .. l.length]); 
     78 
     79            l.length = 0; 
     80            i++; 
     81        } 
     82 
    6483        currentLine = 0; 
     84        sortList.reset(); 
    6585    } 
    6686