Changeset 551

Show
Ignore:
Timestamp:
05/21/08 11:31:28 (8 months ago)
Author:
LeoD
Message:

fog of war

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/run/data/shaders/model-pixel.glsl

    r540 r551  
    2424#if defined(OBJECTS_LIGHTMAP) 
    2525    vec4 light = texture2D(lightTexture, vec2(gl_TexCoord[1])); 
    26     gl_FragColor *= (light * 2)
     26    gl_FragColor *= light
    2727#endif 
    2828     
  • trunk/run/data/shaders/terrain-pixel.glsl

    r540 r551  
    2929    c3 *= a.b * inverse; 
    3030     
    31     gl_FragColor = (c1 + c2 + c3) * (l * 2)
     31    gl_FragColor = (c1 + c2 + c3) * l
    3232     
    3333#if defined(SHADOWMAPPING) 
  • trunk/src/defend/Graphics.d

    r550 r551  
    1919import defend.Config : defendConfig; 
    2020import defend.Camera : MainCamera; 
     21import defend.FogOfWar : FogOfWar; 
    2122import defend.objects.SceneNode : GameObjectMesh; 
    2223 
  • trunk/src/defend/game/Game.d

    r547 r551  
    2222import defend.Config; 
    2323import defend.Graphics; 
     24import defend.FogOfWar; 
    2425import defend.MapGenerator; 
    2526import defend.com.Gateway; 
     
    3435import defend.terrain.Terrain; 
    3536 
     37// List of defend globals 
     38// defend.Map : map 
     39// defend.FogOfWar : fogOfWar 
     40// defend.terrain.Terrain : terrain 
     41 
    3642class Game : GameState 
    3743{ 
     
    264270        } 
    265271 
    266         // Create HUD and mouse 
     272        // Fog of war 
     273        fogOfWar = new FogOfWar(gameObjects, terrain.lightmapTexture, vec2i.from(terrain.dimension)); 
     274 
     275        // Create the HUD 
    267276        hud = new HUD(gameObjects); 
    268277         
     
    274283 
    275284        // Initialize input 
    276         bool exit = false; 
    277          
    278285        keyboard = new KeyboardReader(InputChannel.global); 
    279286         
     
    314321        delete server; 
    315322        delete hud; 
     323        delete fogOfWar; 
    316324         
    317325        keyboard.remove(); 
  • trunk/src/defend/game/hud/MiniMap.d

    r544 r551  
    1818 
    1919import defend.Config; 
     20import defend.FogOfWar; 
    2021import defend.terrain.Terrain; 
    2122 
     
    5657                  center.y, 0.0f, 0.0f, 1.0f); 
    5758 
    58         renderer.setClearColor(vec3(0, 0, 255)); 
    5959        renderer.clear(); 
    6060        terrain.renderOrthogonal(); 
     
    7878        } 
    7979         
    80         sprite = new Sprite(texture, Rect(0, 0, width - 1, height - 1), true); 
     80        sprite = new Sprite(fogOfWar.texture, Rect(0, 0, width - 1, height - 1), true); 
    8181        sprite.scaling = vec2(128.0f / width, 128.0f / width); 
    8282         
  • trunk/src/defend/game/hud/Mouse.d

    r546 r551  
    745745    { 
    746746        auto mousePos = mouse.mousePos; 
    747  
     747     
     748        renderer.setRenderState(RenderState.Blending, true); 
    748749        sprite.render(mousePos); 
     750        renderer.setRenderState(RenderState.Blending, false); 
    749751         
    750752        glDisable(GL_TEXTURE_2D); 
  • trunk/src/defend/game/net/Server.d

    r543 r551  
    574574        // Start first phase 
    575575        synchronized(phaseMutex) 
    576             startPhase(0, 500, numberSimulationSteps(500)); 
     576            startPhase(0, 100, numberSimulationSteps(100)); 
    577577    } 
    578578     
  • trunk/src/defend/objects/Core.d

    r550 r551  
    691691    enum Property : property_t 
    692692    { 
    693         MaxLife 
     693        MaxLife, 
     694        Sight 
    694695    } 
    695696 
     
    725726    final void pause(int f) { movePause = f; } 
    726727    int life() { return _life; } 
     728     
     729    vec3 center() { return realPos; } 
    727730     
    728731    void life(int i) 
  • trunk/src/defend/objects/SceneNode.d

    r546 r551  
    1616 
    1717import defend.Config; 
     18import defend.FogOfWar; 
    1819import defend.terrain.Terrain; 
    1920 
     
    108109                    shader.setUniform("mapSize", vec3(terrain.dimension.x, terrain.dimension.y, 0)); 
    109110                     
    110                     renderer.setTexture(1, terrain.lightmapTexture); 
     111                    renderer.setTexture(1, fogOfWar.texture); 
    111112                } 
    112113                 
  • trunk/src/defend/objects/types/Building.d

    r550 r551  
    522522             
    523523            renderer.drawLine(realPos + vec3(buildingInfo.dimension.x / 2, 
    524                               buildingInfo.dimension.y / 2, 0), 
     524                                             buildingInfo.dimension.y / 2, 0), 
    525525                              terrain.getWorldPos(buildTarget), 
    526526                              vec3(1, 1, 1)); 
     
    529529            glLineWidth(1); 
    530530        } 
     531         
     532        /*renderer.drawLine(realPos, realPos + vec3(0, 10, 0), vec3(1, 1, 0)); 
     533         
     534        { 
     535            auto x = center; 
     536             
     537            renderer.drawLine(x, x + vec3(0, 10, 0), vec3(1, 0, 0)); 
     538        }*/ 
    531539    } 
    532540     
     
    601609    } 
    602610     
     611    override vec3 center() 
     612    { 
     613        return (_sceneNode.boundingBox.min + _sceneNode.boundingBox.max) * 0.5f; 
     614    } 
     615     
    603616    override bool visible() 
    604617    { 
  • trunk/src/defend/objects/types/Citizen.d

    r549 r551  
    3737            properties[Unit.Property.MovementSpeed] = 50; 
    3838            properties[Unit.Property.AttackSpeed]   = 250; 
     39            properties[GameObject.Property.Sight]   = 15; 
    3940        } 
    4041 
  • trunk/src/defend/objects/types/House.d

    r541 r551  
    1919            model = "data/models/house/model.obj"; 
    2020            parentType = "building"; 
    21             dimension = vec2i(5, 6); 
     21            dimension = vec2i(4, 6); 
    2222            posOffset = vec3(2, 0.2, -2.5); 
    2323            scale = vec3(0.4, 0.4, 0.4); 
     
    2727            miniPic = "data/minipics/house.png"; 
    2828            properties[GameObject.Property.MaxLife] = 2000; 
     29            properties[GameObject.Property.Sight] = 50; 
    2930        } 
    3031         
  • trunk/src/defend/objects/types/Sheep.d

    r541 r551  
    3434            properties[Unit.Property.MovementSpeed] = 100; 
    3535            properties[Unit.Property.AttackSpeed]   = 50; 
     36            properties[GameObject.Property.Sight]   = 20; 
    3637        } 
    3738         
  • trunk/src/defend/objects/types/Unit.d

    r550 r551  
    723723                if(!moving && mapPos != finalGoal) 
    724724                { 
    725                     logger.spam("continuing to final goal after pause"); 
     725                    debug(gameobjects) 
     726                        logger.spam("continuing to final goal after pause"); 
     727                     
    726728                    move(finalGoal, false, false, true); 
    727729                } 
     
    762764                     
    763765                    status = Status.Idle; 
    764                     path = []
     766                    path = null
    765767                     
    766768                    direction = finalDirection; 
     
    768770                    if(mapPos != finalGoal) 
    769771                    { 
    770                         logger.spam("moving to the final goal now"); 
     772                        debug(gameobjects) 
     773                            logger.spam("moving to the final goal now"); 
     774                         
    771775                        move(finalGoal, false, false, true); 
    772776                    } 
     
    833837    } 
    834838     
     839    override vec3 center() 
     840    { 
     841        return (_sceneNode.boundingBox.min + _sceneNode.boundingBox.max) * 0.5f; 
     842    } 
     843     
    835844    override ModelNode sceneNode() 
    836845    { 
  • trunk/src/defend/terrain/Terrain.d

    r541 r551  
    2929 
    3030import defend.Config; 
     31import defend.FogOfWar; 
    3132import defend.com.Types; 
    3233import defend.terrain.Vertex; 
     
    7879        if(x > 0) 
    7980        { 
    80             x0 = getHeightForImage(x-1, y, size); 
     81            x0 = getHeightForImage(x - 1, y, size); 
    8182        } 
    8283        else 
     
    8889        if(y > 0) 
    8990        { 
    90             y0 = getHeightForImage(x, y-1, size); 
     91            y0 = getHeightForImage(x, y - 1, size); 
    9192        }  
    9293        else 
     
    9899        if(x+1 < size) 
    99100        { 
    100             x1 = getHeightForImage(x+1, y, size); 
     101            x1 = getHeightForImage(x + 1, y, size); 
    101102        } 
    102103        else 
     
    108109        if(y+1 < size) 
    109110        { 
    110             y1 = getHeightForImage(x, y+1, size); 
     111            y1 = getHeightForImage(x, y + 1, size); 
    111112        } 
    112113        else 
     
    117118         
    118119 
    119         vec3 n1 = vec3(x0 - x1, xl, 0); 
    120         n1 = n1.normalized(); 
    121         vec3 n2 = vec3(0, yl, y1 - y0); 
    122         n2 = n2.normalized(); 
    123          
    124         vec3 normal = n1 + n2; 
    125         normal = normal.normalized(); 
    126          
    127         assert(normal.x <>= 0); 
    128         assert(normal.y <>= 0); 
    129         assert(normal.z <>= 0); 
    130          
     120        vec3 n1 = vec3(x0 - x1, xl, 0).normalized(); 
     121        vec3 n2 = vec3(0, yl, y1 - y0).normalized(); 
     122        vec3 normal = (n1 + n2).normalized(); 
     123         
     124        assert(normal.ok); 
    131125        assert(normal.length < 1.01f); 
    132126         
     
    396390            renderer.setTexture(2, diffuseMaps[1]); 
    397391            renderer.setTexture(3, diffuseMaps[2]); 
    398             renderer.setTexture(4, lightmapTexture); 
     392            renderer.setTexture(4, fogOfWar.texture); 
    399393             
    400394            shader.setUniform("alphaMap", 0); 
  • trunk/src/gen/image/Image.d

    r510 r551  
    5757    } 
    5858 
    59     this(uint w, uint h, ImageFormat f
     59    this(uint w, uint h, ImageFormat f = ImageFormat.RGB
    6060    { 
    6161        _width = w; 
  • trunk/src/gen/math/Misc.d

    r375 r551  
    99{ 
    1010    return a > b ? a : b; 
     11} 
     12 
     13T clamp(T, U, V)(T value, U min_, V max_) 
     14{ 
     15    return max(min(value, max_), min_); 
    1116} 
    1217 
  • trunk/src/gen/rend/Renderer.d

    r548 r551  
    109109    OneMinusDstColor, 
    110110    SrcAlpha, 
    111     OneMinusScrAlpha, 
     111    OneMinusSrcAlpha, 
    112112    DstAlpha, 
    113113    OneMinusDstAlpha 
     
    194194{ 
    195195    /** 
    196      * Set the color for clearing the screen 
    197      */ 
    198     void setClearColor(vec3 color); 
    199      
    200     /** 
    201196     * Clears the screen. 
    202197     */ 
    203     void clear(bool color = true, bool depth = true); 
     198    void clear(vec3 color = vec3.zero, bool color = true, bool depth = true); 
    204199     
    205200    /** 
     
    246241     * Sets an orthogonal projection matrix 
    247242     */ 
    248     void orthogonal(); 
     243    void orthogonal(vec2i size = vec2i.zero); 
    249244     
    250245    /** 
  • trunk/src/gen/rend/opengl/FBO.d

    r544 r551  
    33import derelict.opengl.extension.ext.framebuffer_object; 
    44 
     5import gen.util.Memory; 
    56import gen.image.Image; 
    67import gen.rend.Framebuffer; 
     
    3132 
    3233public: 
     34    mixin MAllocator; 
     35 
    3336    this(OGLTexture target) 
    3437    { 
  • trunk/src/gen/rend/opengl/Renderer.d

    r544 r551  
    7979        blendFuncMap[BlendFunc.OneMinusDstColor] = GL_ONE_MINUS_DST_COLOR; 
    8080        blendFuncMap[BlendFunc.SrcAlpha] = GL_SRC_ALPHA; 
    81         blendFuncMap[BlendFunc.OneMinusScrAlpha] = GL_ONE_MINUS_SRC_ALPHA; 
     81        blendFuncMap[BlendFunc.OneMinusSrcAlpha] = GL_ONE_MINUS_SRC_ALPHA; 
    8282        blendFuncMap[BlendFunc.DstAlpha] = GL_DST_ALPHA; 
    8383        blendFuncMap[BlendFunc.OneMinusDstAlpha] = GL_ONE_MINUS_DST_ALPHA; 
     
    304304    } 
    305305 
    306     override void setClearColor(vec3 color) 
    307     { 
    308         glClearColor(color.tuple, 0.0); 
    309     } 
    310      
    311     override void clear(bool color = true, bool depth = true) 
    312     { 
     306    override void clear(vec3 color2 = vec3.zero, bool color = true, bool depth = true) 
     307    { 
     308        glClearColor(color2.tuple, 0.0); 
    313309        glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
    314310    } 
     
    376372    } 
    377373     
    378     override void orthogonal() 
    379     { 
    380         GLint[4] viewport; 
    381         glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
     374    override void orthogonal(vec2i size = vec2i.zero) 
     375    { 
     376        if(size == vec2i.zero) 
     377            size = config.dimension; 
     378     
     379        //GLint[4] viewport; 
     380        //glGetIntegerv(GL_VIEWPORT, viewport.ptr); 
    382381         
    383382        glMatrixMode(GL_PROJECTION); 
    384383        glLoadIdentity(); 
    385         glOrtho(0, viewport[2], viewport[3], 0, 0, 1337); 
     384        glOrtho(0, size.x, size.y, 0, 0, 1337); 
    386385    } 
    387386     
  • trunk/src/gen/scene/Graph.d

    r544 r551  
    406406                    { 
    407407                        renderer.setFramebuffer(cam.framebuffer); 
    408                         renderer.setClearColor(cam.clearColor); 
    409                         renderer.clear(); 
     408                        renderer.clear(cam.clearColor); 
    410409                    } 
    411410                } 
  • trunk/src/gen/scene/ParticleSystem.d

    r548 r551  
    127127    { 
    128128        renderer.setRenderState(RenderState.Blending, true); 
    129         renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusScrAlpha); 
     129        renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusSrcAlpha); 
    130130 
    131131        auto matData = currentModelview.ptr; 
  • trunk/src/gen/util/Log.d

    r550 r551  
    3333        return loggers[name] = new Logger(name); 
    3434    } 
     35     
     36    alias getLogger opIndex; 
    3537     
    3638    static void addAppender(LogAppender appender) 
  • trunk/src/gen/util/Sprite.d

    r544 r551  
    2525    vec2 _scaling = vec2.one; 
    2626 
     27    void createBuffer(vec2 begin, vec2 end, bool reverse) 
     28    { 
     29        if(reverse) 
     30            swap(begin.y, end.y); 
     31         
     32        auto vertices =  
     33        [ VertexTexPos(vec3(0,  0, 0), vec2(begin.x, begin.y)), 
     34          VertexTexPos(vec3(width, 0, 0), vec2(end.x, begin.y)), 
     35          VertexTexPos(vec3(width, height, 0), vec2(end.x, end.y)), 
     36          VertexTexPos(vec3(0,  height, 0), vec2(begin.x, end.y)) ]; 
     37         
     38        block = renderer.createVertexArray(VertexTexPos.format, 4, VertexArrayUsage.StaticDraw); 
     39        block.setVertices(vertices); 
     40        block.synchronize();     
     41    } 
     42 
    2743public: 
    2844    mixin MAllocator; 
     
    3450 
    3551    void scaling(vec2 s) { _scaling = s; } 
     52    void scaling(float s) { scaling = vec2(s, s); } 
    3653 
    3754    this(char[] file, bool reverse = false) 
     
    5168         
    5269        auto begin = vec2(cast(float)area.left / texture.width, 
    53                           cast(float)area.top / texture.height); 
     70                          cast(float)area.top / texture.height); 
    5471         
    5572        auto end = vec2(cast(float)area.right / texture.width, 
    56                          cast(float)area.bottom / texture.height); 
    57          
    58         if(reverse) 
    59             swap(begin.y, end.y); 
    60          
    61         // TODO: Remove array literals, they use GC memory 
    62         final vertices =  
    63         [ VertexTexPos(vec3(0,  0, 0), vec2(begin.x, begin.y)), 
    64           VertexTexPos(vec3(width, 0, 0), vec2(end.x, begin.y)), 
    65           VertexTexPos(vec3(width, height, 0), vec2(end.x, end.y)), 
    66           VertexTexPos(vec3(0,  height, 0), vec2(begin.x, end.y)) ]; 
    67          
    68         block = renderer.createVertexArray(VertexTexPos.format, 4, VertexArrayUsage.StaticDraw); 
    69         block.setVertices(vertices); 
    70         block.synchronize(); 
     73                        cast(float)area.bottom / texture.height); 
     74                         
     75        createBuffer(begin, end, reverse); 
     76    } 
     77     
     78    this(vec2i size, bool reverse = false) 
     79    { 
     80        area = Rect(0, 0, size.x, size.y); 
     81        createBuffer(vec2.zero, vec2.one, reverse); 
    7182    } 
    7283     
     
    7586        delete block; 
    7687         
    77         Texture.release(texture); 
     88        if(texture) 
     89            Texture.release(texture); 
    7890    } 
    7991 
    80     void render(
     92    void render(Texture otherTexture = null
    8193    { 
    82         if(texture.format == ImageFormat.RGBA) 
    83             renderer.setRenderState(RenderState.Blending, true); 
    84          
    85         renderer.setTexture(0, texture); 
     94        renderer.setTexture(0, (otherTexture !is null) ? otherTexture : texture); 
    8695        renderer.draw(block, null, PrimitiveType.Quad); 
    87          
    88         if(texture.format == ImageFormat.RGBA) 
    89             renderer.setRenderState(RenderState.Blending, false); 
    9096    } 
    9197     
    92     void render(vec2i position
     98    void render(vec2 position, Texture otherTexture = null
    9399    { 
    94100        renderer.pushMatrix(); 
    95101        renderer.translate(position.x, position.y, 0.0); 
    96         renderer.scale(_scaling.tuple, 1); 
     102        renderer.scale(_scaling.tuple, 0.0); 
    97103         
    98         render(); 
     104        render(otherTexture); 
    99105         
    100106        renderer.popMatrix(); 
    101107    } 
     108     
     109    void render(vec2i position, Texture otherTexture = null) 
     110    { 
     111        render(vec2.from(position), otherTexture); 
     112    } 
    102113} 
  • trunk/src/windefend.cbp

    r550 r551  
    9797        <Unit filename="defend\Camera.d" /> 
    9898        <Unit filename="defend\Config.d" /> 
     99        <Unit filename="defend\FogOfWar.d" /> 
    99100        <Unit filename="defend\Graphics.d" /> 
    100101        <Unit filename="defend\Main.d" /> 
  • trunk/src/xf/omg/core/LinearAlgebra.d

    r543 r551  
    333333    } 
    334334     
    335     Vector opDiv_r(T)(T lhs) { 
     335    Vector opDiv_r(flt lhs) { 
    336336        assert (!isNaN(lhs)); 
    337337