Changeset 551
- Timestamp:
- 05/21/08 11:31:28 (8 months ago)
- Files:
-
- trunk/run/data/shaders/model-pixel.glsl (modified) (1 diff)
- trunk/run/data/shaders/terrain-pixel.glsl (modified) (1 diff)
- trunk/src/defend/FogOfWar.d (added)
- trunk/src/defend/Graphics.d (modified) (1 diff)
- trunk/src/defend/game/Game.d (modified) (5 diffs)
- trunk/src/defend/game/hud/MiniMap.d (modified) (3 diffs)
- trunk/src/defend/game/hud/Mouse.d (modified) (1 diff)
- trunk/src/defend/game/net/Server.d (modified) (1 diff)
- trunk/src/defend/objects/Core.d (modified) (2 diffs)
- trunk/src/defend/objects/SceneNode.d (modified) (2 diffs)
- trunk/src/defend/objects/types/Building.d (modified) (3 diffs)
- trunk/src/defend/objects/types/Citizen.d (modified) (1 diff)
- trunk/src/defend/objects/types/House.d (modified) (2 diffs)
- trunk/src/defend/objects/types/Sheep.d (modified) (1 diff)
- trunk/src/defend/objects/types/Unit.d (modified) (4 diffs)
- trunk/src/defend/terrain/Terrain.d (modified) (7 diffs)
- trunk/src/gen/image/Image.d (modified) (1 diff)
- trunk/src/gen/math/Misc.d (modified) (1 diff)
- trunk/src/gen/rend/Renderer.d (modified) (3 diffs)
- trunk/src/gen/rend/opengl/FBO.d (modified) (2 diffs)
- trunk/src/gen/rend/opengl/Renderer.d (modified) (3 diffs)
- trunk/src/gen/scene/Graph.d (modified) (1 diff)
- trunk/src/gen/scene/ParticleSystem.d (modified) (1 diff)
- trunk/src/gen/util/Log.d (modified) (1 diff)
- trunk/src/gen/util/Sprite.d (modified) (4 diffs)
- trunk/src/windefend.cbp (modified) (1 diff)
- trunk/src/xf/omg/core/LinearAlgebra.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/run/data/shaders/model-pixel.glsl
r540 r551 24 24 #if defined(OBJECTS_LIGHTMAP) 25 25 vec4 light = texture2D(lightTexture, vec2(gl_TexCoord[1])); 26 gl_FragColor *= (light * 2);26 gl_FragColor *= light; 27 27 #endif 28 28 trunk/run/data/shaders/terrain-pixel.glsl
r540 r551 29 29 c3 *= a.b * inverse; 30 30 31 gl_FragColor = (c1 + c2 + c3) * (l * 2);31 gl_FragColor = (c1 + c2 + c3) * l; 32 32 33 33 #if defined(SHADOWMAPPING) trunk/src/defend/Graphics.d
r550 r551 19 19 import defend.Config : defendConfig; 20 20 import defend.Camera : MainCamera; 21 import defend.FogOfWar : FogOfWar; 21 22 import defend.objects.SceneNode : GameObjectMesh; 22 23 trunk/src/defend/game/Game.d
r547 r551 22 22 import defend.Config; 23 23 import defend.Graphics; 24 import defend.FogOfWar; 24 25 import defend.MapGenerator; 25 26 import defend.com.Gateway; … … 34 35 import defend.terrain.Terrain; 35 36 37 // List of defend globals 38 // defend.Map : map 39 // defend.FogOfWar : fogOfWar 40 // defend.terrain.Terrain : terrain 41 36 42 class Game : GameState 37 43 { … … 264 270 } 265 271 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 267 276 hud = new HUD(gameObjects); 268 277 … … 274 283 275 284 // Initialize input 276 bool exit = false;277 278 285 keyboard = new KeyboardReader(InputChannel.global); 279 286 … … 314 321 delete server; 315 322 delete hud; 323 delete fogOfWar; 316 324 317 325 keyboard.remove(); trunk/src/defend/game/hud/MiniMap.d
r544 r551 18 18 19 19 import defend.Config; 20 import defend.FogOfWar; 20 21 import defend.terrain.Terrain; 21 22 … … 56 57 center.y, 0.0f, 0.0f, 1.0f); 57 58 58 renderer.setClearColor(vec3(0, 0, 255));59 59 renderer.clear(); 60 60 terrain.renderOrthogonal(); … … 78 78 } 79 79 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); 81 81 sprite.scaling = vec2(128.0f / width, 128.0f / width); 82 82 trunk/src/defend/game/hud/Mouse.d
r546 r551 745 745 { 746 746 auto mousePos = mouse.mousePos; 747 747 748 renderer.setRenderState(RenderState.Blending, true); 748 749 sprite.render(mousePos); 750 renderer.setRenderState(RenderState.Blending, false); 749 751 750 752 glDisable(GL_TEXTURE_2D); trunk/src/defend/game/net/Server.d
r543 r551 574 574 // Start first phase 575 575 synchronized(phaseMutex) 576 startPhase(0, 500, numberSimulationSteps(500));576 startPhase(0, 100, numberSimulationSteps(100)); 577 577 } 578 578 trunk/src/defend/objects/Core.d
r550 r551 691 691 enum Property : property_t 692 692 { 693 MaxLife 693 MaxLife, 694 Sight 694 695 } 695 696 … … 725 726 final void pause(int f) { movePause = f; } 726 727 int life() { return _life; } 728 729 vec3 center() { return realPos; } 727 730 728 731 void life(int i) trunk/src/defend/objects/SceneNode.d
r546 r551 16 16 17 17 import defend.Config; 18 import defend.FogOfWar; 18 19 import defend.terrain.Terrain; 19 20 … … 108 109 shader.setUniform("mapSize", vec3(terrain.dimension.x, terrain.dimension.y, 0)); 109 110 110 renderer.setTexture(1, terrain.lightmapTexture);111 renderer.setTexture(1, fogOfWar.texture); 111 112 } 112 113 trunk/src/defend/objects/types/Building.d
r550 r551 522 522 523 523 renderer.drawLine(realPos + vec3(buildingInfo.dimension.x / 2, 524 buildingInfo.dimension.y / 2, 0),524 buildingInfo.dimension.y / 2, 0), 525 525 terrain.getWorldPos(buildTarget), 526 526 vec3(1, 1, 1)); … … 529 529 glLineWidth(1); 530 530 } 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 }*/ 531 539 } 532 540 … … 601 609 } 602 610 611 override vec3 center() 612 { 613 return (_sceneNode.boundingBox.min + _sceneNode.boundingBox.max) * 0.5f; 614 } 615 603 616 override bool visible() 604 617 { trunk/src/defend/objects/types/Citizen.d
r549 r551 37 37 properties[Unit.Property.MovementSpeed] = 50; 38 38 properties[Unit.Property.AttackSpeed] = 250; 39 properties[GameObject.Property.Sight] = 15; 39 40 } 40 41 trunk/src/defend/objects/types/House.d
r541 r551 19 19 model = "data/models/house/model.obj"; 20 20 parentType = "building"; 21 dimension = vec2i( 5, 6);21 dimension = vec2i(4, 6); 22 22 posOffset = vec3(2, 0.2, -2.5); 23 23 scale = vec3(0.4, 0.4, 0.4); … … 27 27 miniPic = "data/minipics/house.png"; 28 28 properties[GameObject.Property.MaxLife] = 2000; 29 properties[GameObject.Property.Sight] = 50; 29 30 } 30 31 trunk/src/defend/objects/types/Sheep.d
r541 r551 34 34 properties[Unit.Property.MovementSpeed] = 100; 35 35 properties[Unit.Property.AttackSpeed] = 50; 36 properties[GameObject.Property.Sight] = 20; 36 37 } 37 38 trunk/src/defend/objects/types/Unit.d
r550 r551 723 723 if(!moving && mapPos != finalGoal) 724 724 { 725 logger.spam("continuing to final goal after pause"); 725 debug(gameobjects) 726 logger.spam("continuing to final goal after pause"); 727 726 728 move(finalGoal, false, false, true); 727 729 } … … 762 764 763 765 status = Status.Idle; 764 path = [];766 path = null; 765 767 766 768 direction = finalDirection; … … 768 770 if(mapPos != finalGoal) 769 771 { 770 logger.spam("moving to the final goal now"); 772 debug(gameobjects) 773 logger.spam("moving to the final goal now"); 774 771 775 move(finalGoal, false, false, true); 772 776 } … … 833 837 } 834 838 839 override vec3 center() 840 { 841 return (_sceneNode.boundingBox.min + _sceneNode.boundingBox.max) * 0.5f; 842 } 843 835 844 override ModelNode sceneNode() 836 845 { trunk/src/defend/terrain/Terrain.d
r541 r551 29 29 30 30 import defend.Config; 31 import defend.FogOfWar; 31 32 import defend.com.Types; 32 33 import defend.terrain.Vertex; … … 78 79 if(x > 0) 79 80 { 80 x0 = getHeightForImage(x -1, y, size);81 x0 = getHeightForImage(x - 1, y, size); 81 82 } 82 83 else … … 88 89 if(y > 0) 89 90 { 90 y0 = getHeightForImage(x, y -1, size);91 y0 = getHeightForImage(x, y - 1, size); 91 92 } 92 93 else … … 98 99 if(x+1 < size) 99 100 { 100 x1 = getHeightForImage(x +1, y, size);101 x1 = getHeightForImage(x + 1, y, size); 101 102 } 102 103 else … … 108 109 if(y+1 < size) 109 110 { 110 y1 = getHeightForImage(x, y +1, size);111 y1 = getHeightForImage(x, y + 1, size); 111 112 } 112 113 else … … 117 118 118 119 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); 131 125 assert(normal.length < 1.01f); 132 126 … … 396 390 renderer.setTexture(2, diffuseMaps[1]); 397 391 renderer.setTexture(3, diffuseMaps[2]); 398 renderer.setTexture(4, lightmapTexture);392 renderer.setTexture(4, fogOfWar.texture); 399 393 400 394 shader.setUniform("alphaMap", 0); trunk/src/gen/image/Image.d
r510 r551 57 57 } 58 58 59 this(uint w, uint h, ImageFormat f )59 this(uint w, uint h, ImageFormat f = ImageFormat.RGB) 60 60 { 61 61 _width = w; trunk/src/gen/math/Misc.d
r375 r551 9 9 { 10 10 return a > b ? a : b; 11 } 12 13 T clamp(T, U, V)(T value, U min_, V max_) 14 { 15 return max(min(value, max_), min_); 11 16 } 12 17 trunk/src/gen/rend/Renderer.d
r548 r551 109 109 OneMinusDstColor, 110 110 SrcAlpha, 111 OneMinusS crAlpha,111 OneMinusSrcAlpha, 112 112 DstAlpha, 113 113 OneMinusDstAlpha … … 194 194 { 195 195 /** 196 * Set the color for clearing the screen197 */198 void setClearColor(vec3 color);199 200 /**201 196 * Clears the screen. 202 197 */ 203 void clear( bool color = true, bool depth = true);198 void clear(vec3 color = vec3.zero, bool color = true, bool depth = true); 204 199 205 200 /** … … 246 241 * Sets an orthogonal projection matrix 247 242 */ 248 void orthogonal( );243 void orthogonal(vec2i size = vec2i.zero); 249 244 250 245 /** trunk/src/gen/rend/opengl/FBO.d
r544 r551 3 3 import derelict.opengl.extension.ext.framebuffer_object; 4 4 5 import gen.util.Memory; 5 6 import gen.image.Image; 6 7 import gen.rend.Framebuffer; … … 31 32 32 33 public: 34 mixin MAllocator; 35 33 36 this(OGLTexture target) 34 37 { trunk/src/gen/rend/opengl/Renderer.d
r544 r551 79 79 blendFuncMap[BlendFunc.OneMinusDstColor] = GL_ONE_MINUS_DST_COLOR; 80 80 blendFuncMap[BlendFunc.SrcAlpha] = GL_SRC_ALPHA; 81 blendFuncMap[BlendFunc.OneMinusS crAlpha] = GL_ONE_MINUS_SRC_ALPHA;81 blendFuncMap[BlendFunc.OneMinusSrcAlpha] = GL_ONE_MINUS_SRC_ALPHA; 82 82 blendFuncMap[BlendFunc.DstAlpha] = GL_DST_ALPHA; 83 83 blendFuncMap[BlendFunc.OneMinusDstAlpha] = GL_ONE_MINUS_DST_ALPHA; … … 304 304 } 305 305 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); 313 309 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 314 310 } … … 376 372 } 377 373 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); 382 381 383 382 glMatrixMode(GL_PROJECTION); 384 383 glLoadIdentity(); 385 glOrtho(0, viewport[2], viewport[3], 0, 0, 1337);384 glOrtho(0, size.x, size.y, 0, 0, 1337); 386 385 } 387 386 trunk/src/gen/scene/Graph.d
r544 r551 406 406 { 407 407 renderer.setFramebuffer(cam.framebuffer); 408 renderer.setClearColor(cam.clearColor); 409 renderer.clear(); 408 renderer.clear(cam.clearColor); 410 409 } 411 410 } trunk/src/gen/scene/ParticleSystem.d
r548 r551 127 127 { 128 128 renderer.setRenderState(RenderState.Blending, true); 129 renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusS crAlpha);129 renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusSrcAlpha); 130 130 131 131 auto matData = currentModelview.ptr; trunk/src/gen/util/Log.d
r550 r551 33 33 return loggers[name] = new Logger(name); 34 34 } 35 36 alias getLogger opIndex; 35 37 36 38 static void addAppender(LogAppender appender) trunk/src/gen/util/Sprite.d
r544 r551 25 25 vec2 _scaling = vec2.one; 26 26 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 27 43 public: 28 44 mixin MAllocator; … … 34 50 35 51 void scaling(vec2 s) { _scaling = s; } 52 void scaling(float s) { scaling = vec2(s, s); } 36 53 37 54 this(char[] file, bool reverse = false) … … 51 68 52 69 auto begin = vec2(cast(float)area.left / texture.width, 53 cast(float)area.top / texture.height);70 cast(float)area.top / texture.height); 54 71 55 72 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); 71 82 } 72 83 … … 75 86 delete block; 76 87 77 Texture.release(texture); 88 if(texture) 89 Texture.release(texture); 78 90 } 79 91 80 void render( )92 void render(Texture otherTexture = null) 81 93 { 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); 86 95 renderer.draw(block, null, PrimitiveType.Quad); 87 88 if(texture.format == ImageFormat.RGBA)89 renderer.setRenderState(RenderState.Blending, false);90 96 } 91 97 92 void render(vec2 i position)98 void render(vec2 position, Texture otherTexture = null) 93 99 { 94 100 renderer.pushMatrix(); 95 101 renderer.translate(position.x, position.y, 0.0); 96 renderer.scale(_scaling.tuple, 1);102 renderer.scale(_scaling.tuple, 0.0); 97 103 98 render( );104 render(otherTexture); 99 105 100 106 renderer.popMatrix(); 101 107 } 108 109 void render(vec2i position, Texture otherTexture = null) 110 { 111 render(vec2.from(position), otherTexture); 112 } 102 113 } trunk/src/windefend.cbp
r550 r551 97 97 <Unit filename="defend\Camera.d" /> 98 98 <Unit filename="defend\Config.d" /> 99 <Unit filename="defend\FogOfWar.d" /> 99 100 <Unit filename="defend\Graphics.d" /> 100 101 <Unit filename="defend\Main.d" /> trunk/src/xf/omg/core/LinearAlgebra.d
r543 r551 333 333 } 334 334 335 Vector opDiv_r( T)(Tlhs) {335 Vector opDiv_r(flt lhs) { 336 336 assert (!isNaN(lhs)); 337 337
