Changeset 519

Show
Ignore:
Timestamp:
04/14/08 13:15:48 (9 months ago)
Author:
LeoD
Message:

minimap (only terrain layer so far)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/defend/game/Game.d

    r516 r519  
    3838import defend.Map; 
    3939import defend.MapGenerator; 
    40 import defend.MiniMap; 
    4140import defend.Loop; 
    4241import defend.com.Gateway; 
     
    8887    MainCamera mainCamera; 
    8988 
    90     // Mini map 
    91     MiniMap miniMap; 
    92  
    9389    // Demo recorder 
    9490    DemoRecorder demoRecorder; 
     
    220216            renderer.identity(); 
    221217            hud.render(); 
    222             miniMap.render(vec2i(renderer.width - 150, renderer.height - HUD_HEIGHT + 10)); 
    223218            renderer.setRenderState(RenderState.DepthTest, true); 
    224219        }); 
     
    247242    config = gameConfig; 
    248243    logger = Log.getLogger("game"); 
    249  
    250     final aspect = renderer.config.aspect; 
    251      
    252      
    253     final fov = Config("fov", 90); 
    254244     
    255245    GC.collect(); 
     
    262252     
    263253    // Initialize scene graph 
     254    final aspect = renderer.config.aspect; 
     255    final fov = Config("fov", 90); 
     256     
    264257    mainCamera = new MainCamera; 
    265258    mainCamera.projection = mat4.projection(aspect, fov, 1, 100); 
     
    291284    GC.collect(); 
    292285    GC.disable(); 
    293      
    294     // Mini map 
    295     miniMap = new MiniMap; 
    296      
     286 
    297287    // Initialize input 
    298288    bool exit = false; 
     
    350340    delete server; 
    351341    delete hud; 
    352     delete miniMap; 
    353342     
    354343    keyboard.remove(); 
  • trunk/src/defend/game/hud/Hud.d

    r505 r519  
    2929import defend.objects.Core; 
    3030import defend.game.hud.Mouse; 
     31import defend.game.hud.MiniMap; 
    3132import defend.game.hud.Console; 
    3233 
     
    3637    GuiController guiController; 
    3738    GuiRenderer guiRenderer; 
    38      
    3939    Window buttonsRoot; 
    4040     
     
    4242 
    4343    Mouse mouse; 
    44      
     44    MiniMap miniMap; 
    4545    KeyboardReader keyboard; 
    4646 
     
    270270            guiRenderer = new GuiRenderer(); 
    271271         
    272         mouse = new Mouse(gameObjects, guiController); 
     272        miniMap = new MiniMap; 
     273        mouse = new Mouse(gameObjects, guiController, miniMap); 
    273274 
    274275        bigFont = new FTFont("data/fonts/test.ttf", 15); 
     
    287288        } 
    288289 
     290        // Create buttons for game objects 
    289291        gameObjects.iterateCivs((Civ civ) 
    290292        { 
     
    394396        delete smallFont; 
    395397        delete mouse; 
     398        delete miniMap; 
    396399        delete profilingDisplay; 
    397400    } 
     
    434437         
    435438        renderSelection(); 
     439         
     440        miniMap.render(); 
    436441        mouse.render(); 
    437442    } 
  • trunk/src/defend/game/hud/MiniMap.d

    r518 r519  
    1 module defend.MiniMap; 
     1module defend.game.hud.MiniMap; 
    22 
    33import tango.io.Stdout; 
     
    1313import gen.util.Wrapper; 
    1414 
     15import defend.Config; 
    1516import defend.terrain.Terrain; 
    1617 
     
    1819{ 
    1920private: 
    20     const interval = 1000; 
    2121    const width = 128; 
    2222    const height = 128; 
     
    2525    Texture texture; 
    2626    Sprite sprite; 
     27 
     28    vec2i position; 
    2729 
    2830    void renderTerrain() 
     
    4042        glLoadIdentity(); 
    4143         
    42         glOrtho(viewport[2], 0, viewport[3], 0, 0, 1337); 
     44        glOrtho(terrain.dimension.x - 1, 0, terrain.dimension.y - 1, 0, 0, 1337); 
    4345         
    4446        renderer.identity(MatrixType.Modelview); 
    4547         
    46         auto center = vec2( (terrain.heightmap.size.x - 1), 
    47                            -(terrain.heightmap.size.y - 1)); 
     48        auto center = vec2( (terrain.dimension.x - 1), 
     49                           -(terrain.dimension.y - 1)); 
    4850         
    4951        gluLookAt(center.x, 500.0f, center.y, center.x, 0.0f, 
     
    7072 
    7173        sprite = new Sprite(texture, Rect(0, 0, width - 1, height - 1), true); 
     74        position = vec2i(renderer.width - 150, renderer.height - HUD_HEIGHT + 10); 
    7275    } 
    7376 
     
    7881    } 
    7982 
    80     void render(vec2i pos
     83    void render(
    8184    { 
    8285        assert(texture !is null); 
    8386        assert(sprite !is null); 
    8487 
    85         sprite.render(pos); 
     88        sprite.render(position); 
     89    } 
     90     
     91    bool pointInside(vec2i pos) 
     92    { 
     93        return pos.x >= position.x && pos.x <= position.x + width && 
     94               pos.y >= position.y && pos.y <= position.y + height; 
     95    } 
     96     
     97    vec2 translatePoint(vec2i pos, vec2i scale) 
     98    in 
     99    { 
     100        assert(pointInside(pos)); 
     101    } 
     102    body 
     103    { 
     104        auto offset = pos - position; 
     105         
     106        return vec2(scale.x / cast(float)width * offset.x, 
     107                    scale.y - scale.y / cast(float)height * offset.y); 
    86108    } 
    87109} 
  • trunk/src/defend/game/hud/Mouse.d

    r516 r519  
    2828import defend.Map; 
    2929import defend.Config; 
     30import defend.Camera; 
    3031import defend.com.Types; 
    3132import defend.terrain.Terrain; 
    3233import defend.terrain.Patch; 
    3334import defend.objects.Core; 
     35import defend.game.hud.MiniMap; 
    3436 
    3537class Mouse 
    3638{ 
    3739private: 
    38     Camera camera; 
     40    MainCamera camera; 
    3941    Sprite sprite; 
    4042    Ray!(float) _ray; 
     
    4244    GameObjectManager gameObjects; 
    4345    GuiController guiController; 
     46    MiniMap miniMap; 
    4447     
    4548    MapPos _mapPos; 
     
    5255    { 
    5356        Nothing, 
     57        MipMapMove, 
    5458        AreaSelection, 
    5559        ObjectPlacement 
     
    272276        { 
    273277        case Status.Nothing: 
     278            // Check if the click was on the mini map 
     279            if(miniMap.pointInside(input.position)) 
     280            { 
     281                status = Status.MipMapMove; 
     282                break; 
     283            } 
     284         
    274285            selectObjects(input); 
    275286            break; 
    276287         
    277288        case Status.AreaSelection: 
    278          
     289           assert(false); 
    279290            break; 
    280291         
     
    294305             
    295306        default: 
    296             return
     307            break
    297308        } 
    298309    } 
     
    312323            break; 
    313324             
     325        case Status.MipMapMove: 
     326            status = Status.Nothing; 
     327             
     328            break; 
     329             
    314330        default: 
    315             return
     331            break
    316332        } 
    317333    } 
     
    325341        { 
    326342        case Status.Nothing: 
    327             if(overTerrain && 
    328                selectionBuffer.length && 
    329                selectionBuffer[0].mayBeOrdered) 
     343            // Check if the click was on the mini map 
     344            if(miniMap.pointInside(input.position)) 
     345            { 
     346                auto translated = miniMap.translatePoint(mouse.mousePos, 
     347                                                         vec2i(terrain.dimension.x, 
     348                                                               terrain.dimension.y)); 
     349                                                                    
     350                gameObjects.order(gameObjects.gateway, selection, 
     351                                  OrderMapRightClick(cast(ushort)translated.x, 
     352                                                     cast(ushort)translated.y)); 
     353                 
     354                break; 
     355            } 
     356 
     357            if(overTerrain && selectionBuffer.length && selectionBuffer[0].mayBeOrdered) 
    330358            { 
    331359                GameObject target; 
     
    334362                foreach(obj; gameObjects) 
    335363                { 
    336                     if(obj.visible && 
    337                        !obj.selected && 
    338                        obj.intersectRay(ray)) 
     364                    if(obj.visible && !obj.selected && obj.intersectRay(ray)) 
    339365                    { 
    340366                        target = obj; 
     
    363389             
    364390        default: 
    365             return
     391            break
    366392        } 
    367393    } 
     
    537563    Signal!() SelectionChange; 
    538564 
    539     this(GameObjectManager gameObjects, GuiController guiController
     565    this(GameObjectManager gameObjects, GuiController guiController, MiniMap miniMap
    540566    { 
    541567        with(this.gameObjects = gameObjects) 
     
    546572 
    547573        this.guiController = guiController; 
    548  
    549         camera = sceneGraph.getCamera("main").core; 
     574        this.miniMap = miniMap; 
     575 
     576        camera = cast(MainCamera)sceneGraph.getCamera("main").core; 
    550577     
    551578        { 
     
    642669            switch(status) 
    643670            { 
     671            case Status.MipMapMove: 
     672                if(miniMap.pointInside(mouse.mousePos)) 
     673                {                                
     674                    auto translated = miniMap.translatePoint(mouse.mousePos, 
     675                                                             vec2i(terrain.dimension.x, 
     676                                                                   terrain.dimension.y)); 
     677                     
     678                    camera.position = vec3(translated.x, camera.position.y, 
     679                                           -translated.y + 10); 
     680                } 
     681                 
     682                break; 
     683             
    644684            case Status.AreaSelection: 
    645685                auto mousePos = mouse.mousePos; 
  • trunk/src/defend/game/net/Server.d

    r514 r519  
    523523            MessageTerrainInformation message; 
    524524            message.info = gameConfig.terrainInfo; 
    525              
    526             //message.dimension = 128;  
    527             //message.seed = random!(uint)(150, 2000); 
    528                   
     525 
    529526            cm.broadcast(message); 
    530527        }