Changeset 541
- Timestamp:
- 05/18/08 06:03:34 (8 months ago)
- Files:
-
- trunk/src/defend/Camera.d (modified) (2 diffs)
- trunk/src/defend/Loop.d (deleted)
- trunk/src/defend/Main.d (modified) (7 diffs)
- trunk/src/defend/Map.d (modified) (4 diffs)
- trunk/src/defend/demo/Demo.d (modified) (3 diffs)
- trunk/src/defend/demo/Player.d (modified) (1 diff)
- trunk/src/defend/game/Game.d (modified) (5 diffs)
- trunk/src/defend/game/hud/Hud.d (modified) (4 diffs)
- trunk/src/defend/game/hud/Mouse.d (modified) (3 diffs)
- trunk/src/defend/objects/Core.d (modified) (1 diff)
- trunk/src/defend/objects/SceneNode.d (modified) (5 diffs)
- trunk/src/defend/objects/types/Building.d (modified) (1 diff)
- trunk/src/defend/objects/types/Citizen.d (modified) (1 diff)
- trunk/src/defend/objects/types/House.d (modified) (1 diff)
- trunk/src/defend/objects/types/Resource.d (modified) (2 diffs)
- trunk/src/defend/objects/types/Sheep.d (modified) (2 diffs)
- trunk/src/defend/objects/types/Unit.d (modified) (9 diffs)
- trunk/src/defend/terrain/Heightmap.d (modified) (5 diffs)
- trunk/src/defend/terrain/Patch.d (modified) (1 diff)
- trunk/src/defend/terrain/Terrain.d (modified) (1 diff)
- trunk/src/gen/font/FreeType.d (modified) (1 diff)
- trunk/src/gen/gui/Renderer.d (modified) (2 diffs)
- trunk/src/gen/gui/Window.d (modified) (1 diff)
- trunk/src/gen/math/BoundingBox.d (modified) (1 diff)
- trunk/src/gen/math/Frustum.d (modified) (1 diff)
- trunk/src/gen/math/Matrix.d (modified) (2 diffs)
- trunk/src/gen/math/Plane.d (modified) (1 diff)
- trunk/src/gen/math/Ray.d (modified) (9 diffs)
- trunk/src/gen/math/Rectangle.d (modified) (1 diff)
- trunk/src/gen/math/Vector.d (modified) (2 diffs)
- trunk/src/gen/model/Mesh.d (modified) (1 diff)
- trunk/src/gen/model/ModelObj.d (modified) (1 diff)
- trunk/src/gen/rend/Renderer.d (modified) (6 diffs)
- trunk/src/gen/rend/opengl/Renderer.d (modified) (7 diffs)
- trunk/src/gen/rend/opengl/Shader.d (modified) (1 diff)
- trunk/src/gen/rend/opengl/Texture.d (modified) (1 diff)
- trunk/src/gen/rend/opengl/sdl/Window.d (modified) (1 diff)
- trunk/src/gen/scene/MeshNode.d (modified) (1 diff)
- trunk/src/gen/scene/Node.d (modified) (7 diffs)
- trunk/src/gen/scene/ParticleSystem.d (modified) (2 diffs)
- trunk/src/gen/scene/StaticCamera.d (modified) (1 diff)
- trunk/src/gen/util/CompileTime.d (modified) (2 diffs)
- trunk/src/gen/util/GameState.d (added)
- trunk/src/gen/util/Resource.d (modified) (4 diffs)
- trunk/src/windefend.cbp (modified) (3 diffs)
- trunk/src/xf (added)
- trunk/src/xf/omg (added)
- trunk/src/xf/omg/core (added)
- trunk/src/xf/omg/core/Algebra.d (added)
- trunk/src/xf/omg/core/CoordSys.d (added)
- trunk/src/xf/omg/core/Fixed.d (added)
- trunk/src/xf/omg/core/LinearAlgebra.d (added)
- trunk/src/xf/omg/core/Misc.d (added)
- trunk/src/xf/omg/geom (added)
- trunk/src/xf/omg/geom/NormalQuantizer.d (added)
- trunk/src/xf/omg/geom/Plane.d (added)
- trunk/src/xf/omg/geom/Sphere.d (added)
- trunk/src/xf/omg/rand (added)
- trunk/src/xf/omg/rand/MersenneTwister.d (added)
- trunk/src/xf/omg/rand/Random.d (added)
- trunk/src/xf/omg/rt (added)
- trunk/src/xf/omg/rt/Common.d (added)
- trunk/src/xf/omg/util (added)
- trunk/src/xf/omg/util/Meta.d (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/defend/Camera.d
r534 r541 30 30 31 31 // The modelview matrix 32 mat4 _modelview ;32 mat4 _modelview = mat4.identity; 33 33 34 34 // Projection matrix 35 mat4 _projection ;35 mat4 _projection = mat4.identity; 36 36 37 37 // Input … … 160 160 cospitch * cosyaw); 161 161 162 _modelview = mat4(right.x, up.x, dir.x, 0.0,162 _modelview = createMat4(right.x, up.x, dir.x, 0.0, 163 163 right.y, up.y, dir.y, 0.0, 164 164 right.z, up.z, dir.z, 0.0, 165 -( pos.dot(right)),166 -( pos.dot(up)),167 -( pos.dot(dir)),165 -(vec3.dot(pos, right)), 166 -(vec3.dot(pos, up)), 167 -(vec3.dot(pos, dir)), 168 168 1.0); 169 169 trunk/src/defend/Main.d
r540 r541 25 25 import gen.util.Profiler : profile; 26 26 import gen.util.Wrapper : getTickCount; 27 import gen.util.HardwareTimer : HardwareTimer; 27 28 import gen.util.Config : Config; 28 29 import defend.Loop : Loop; 29 import gen.util.GameState : gameState; 30 30 31 import defend.Config : defendConfig, RuntimeException, DEFEND_NAME, DEFEND_VERSION; 31 32 import defend.com.TerrainInfo : TerrainInfo; 32 import defend.game.Game : game;33 import defend.game.Game : Game; 33 34 import defend.game.Config : GameMode, GameConfig, gameConfig; 34 35 import defend.player.Info : PlayerInfo; 35 import defend.demo.Demo : demoFile, demo;36 import defend.demo.Demo : demoFile, Demo; 36 37 import defend.objects.Import; 37 38 import defend.objects.Core; … … 50 51 51 52 // Print a header to the console 52 Stdout.format("{} {} (built {})", DEFEND_NAME, DEFEND_VERSION, __DATE__); 53 Stdout.newline; 54 Stdout("----------------------------------------------------"); 55 Stdout.newline; 56 Stdout.newline; 53 Stdout.formatln("{} {} (built {})", DEFEND_NAME, DEFEND_VERSION, __DATE__); 57 54 58 55 // Load the config … … 208 205 " --host=HOST\t\tconnect to HOST\n" 209 206 " --port=PORT\t\tset the port for multiplayer\n" 210 " --player-count\tnumber of players which have to connect to the server \n";207 " --player-count\tnumber of players which have to connect to the server"; 211 208 212 209 Stderr.newline; … … 220 217 { 221 218 case GameStateType.Demo: 219 //assert(false); 220 222 221 logger.info("playing demo `{}'", demoFile); 223 222 … … 226 225 227 226 .demoFile = demoFile; 228 Loop.setMainFunction!(demo); 227 //Loop.setMainFunction!(demo); 228 gameState.change(new Demo); 229 229 230 230 break; … … 239 239 240 240 .gameConfig = gameConfig; 241 Loop.setMainFunction!(game); 241 //Loop.setMainFunction!(game); 242 gameState.change(new Game); 242 243 } 243 244 } … … 293 294 logger.info("starting main loop"); 294 295 295 Loop(); 296 //Loop(); 297 298 // Main loop 299 { 300 HardwareTimer timer; 301 uint frameTime; 302 303 while(!gameState.exit) 304 { 305 timer.start(); 306 307 InputChannel.global.dispatch(); 308 309 //Stdout(frameTime).newline; 310 taskManager.update(cast(double)frameTime * 0.000001); 311 312 FPSCounter.update(); 313 314 Thread.yield(); 315 316 timer.stop(); 317 frameTime = timer.microseconds(); 318 } 319 } 320 321 gameState.shutdown; 296 322 297 323 logger.info("program execution finished normally"); trunk/src/defend/Map.d
r534 r541 73 73 void copyTiles() 74 74 { 75 foreach(x, y; size) 76 { 77 auto tile = getTile(x, y); 78 tile.height = terrain.getHeight(x, y); 79 tile.pos = MapPos(x, y); 80 81 if(tile.height < .3) 82 tile.type = 0; 83 else if(tile.height < .7) 84 tile.type = 1; 85 else 86 tile.type = 2; 75 for(uint x = 0; x < size.x; x++) 76 { 77 for(uint y = 0; y < size.y; y++) 78 { 79 auto tile = getTile(x, y); 80 tile.height = terrain.getHeight(x, y); 81 tile.pos = MapPos(x, y); 82 83 if(tile.height < .3) 84 tile.type = 0; 85 else if(tile.height < .7) 86 tile.type = 1; 87 else 88 tile.type = 2; 89 } 87 90 } 88 91 } … … 90 93 void calculateTileCosts() 91 94 { 92 foreach(x, y; size) 93 { 94 auto tile = getTile(x, y); 95 float variance = 0; 96 uint count = 0; 97 98 void calcTileCost(MapPos neighbor) 99 { 100 ++count; 101 auto neighborTile = getTile(neighbor); 102 final temp = neighborTile.height - 103 tile.height; 104 variance += temp * temp; 105 } 106 107 foreach(neighbor; possibleNeighbors(x, y)) 108 { 109 if(terrain.within(neighbor)) 110 calcTileCost(neighbor); 111 112 } 113 114 assert(count > 0); 115 116 variance /= cast(float)count; 117 tile.cost = variance + 0.1; 118 119 if(tile.cost > 1) 120 tile.cost = 1; 121 122 if(tile.cost < .5) 123 tile.walkable = true; 124 else 125 tile.walkable = false; 95 for(uint x = 0; x < size.x; x++) 96 { 97 for(uint y = 0; y < size.y; y++) 98 { 99 auto tile = getTile(x, y); 100 float variance = 0; 101 uint count = 0; 102 103 void calcTileCost(MapPos neighbor) 104 { 105 ++count; 106 auto neighborTile = getTile(neighbor); 107 final temp = neighborTile.height - 108 tile.height; 109 variance += temp * temp; 110 } 111 112 foreach(neighbor; possibleNeighbors(x, y)) 113 { 114 if(terrain.within(neighbor)) 115 calcTileCost(neighbor); 116 117 } 118 119 assert(count > 0); 120 121 variance /= cast(float)count; 122 tile.cost = variance + 0.1; 123 124 if(tile.cost > 1) 125 tile.cost = 1; 126 127 if(tile.cost < .5) 128 tile.walkable = true; 129 else 130 tile.walkable = false; 131 } 126 132 } 127 133 } … … 142 148 bool changed = true; 143 149 144 foreach(x, y; size) 145 { 146 getTile(x, y).set = counter++; 150 for(uint x = 0; x < size.x; x++) 151 { 152 for(uint y = 0; y < size.y; y++) 153 { 154 getTile(x, y).set = counter++; 155 } 147 156 } 148 157 … … 165 174 changed = false; 166 175 167 foreach(x, y; size) 168 { 169 auto tile = getTile(x, y); 170 171 if(tile.walkable) 172 setSet(tile); 176 for(uint x = 0; x < size.x; x++) 177 { 178 for(uint y = 0; y < size.y; y++) 179 { 180 auto tile = getTile(x, y); 181 182 if(tile.walkable) 183 setSet(tile); 184 } 173 185 } 174 186 } trunk/src/defend/demo/Demo.d
r512 r541 12 12 import gen.scene.Graph; 13 13 import gen.scene.MeshNode; 14 import gen.util.GameState; 14 15 15 16 import defend.Map; … … 27 28 char[] demoFile; 28 29 29 void demo() 30 class Demo : GameState 30 31 { 31 32 DemoPlayer demoPlayer; … … 56 57 } 57 58 58 demoPlayer = new DemoPlayer(demoFile); 59 demoPlayer.TerrainInformation.connect(&onTerrainInformation); 59 void init() 60 { 61 demoPlayer = new DemoPlayer(demoFile); 62 demoPlayer.TerrainInformation.connect(&onTerrainInformation); 60 63 61 players = new PlayerManager(demoPlayer);62 simulation = new Simulation(demoPlayer);63 64 gameObjects = new GameObjectManager(demoPlayer, players, simulation);64 players = new PlayerManager(demoPlayer); 65 simulation = new Simulation(demoPlayer); 66 67 gameObjects = new GameObjectManager(demoPlayer, players, simulation); 65 68 66 camera = new MainCamera;67 camera.projection = mat4.projection(renderer.config.aspect, 45.0, 1.0, 100.0);68 sceneGraph.addCamera("main", camera, vec3(0, 0, 0));69 camera = new MainCamera; 70 camera.projection = mat4.perspective(45.0, renderer.config.aspect, 1.0, 100.0); 71 sceneGraph.addCamera("main", camera, vec3.zero); 69 72 70 MeshNode.memoryPool.create(20);73 MeshNode.memoryPool.create(20); 71 74 72 demoPlayer.init();73 assert(terrain !is null);75 demoPlayer.init(); 76 assert(terrain !is null); 74 77 75 taskManager.addRepeatedTask(&InputChannel.global.update, 100); 76 taskManager.addRepeatedTask(&gameObjects.update, 30); 77 taskManager.addRepeatedTask(&sceneGraph.update, 60); 78 taskManager.addRepeatedTask(&renderer.window.update, 60); 79 taskManager.addPostFrameTask(&render); 78 taskManager.addRepeatedTask(&InputChannel.global.update, 100); 79 taskManager.addRepeatedTask(&gameObjects.update, 30); 80 taskManager.addRepeatedTask(&sceneGraph.update, 60); 81 taskManager.addRepeatedTask(&renderer.window.update, 60); 82 taskManager.addPostFrameTask(&render); 83 } 80 84 81 Fiber.yield(); 85 void done() 86 { 87 delete demoPlayer; 88 delete gameObjects; 89 delete players; 90 delete map; 82 91 83 delete demoPlayer; 84 delete gameObjects; 85 delete players; 86 delete map; 92 sceneGraph.reset(); 87 93 88 sceneGraph.reset(); 89 90 MeshNode.memoryPool.release(); 94 MeshNode.memoryPool.release(); 95 } 91 96 } trunk/src/defend/demo/Player.d
r471 r541 20 20 private: 21 21 FileConduit file; 22 float _speed = 1;22 float _speed = 20; 23 23 24 24 ubyte[] dataBuffer; trunk/src/defend/game/Game.d
r540 r541 35 35 import gen.util.Wrapper; 36 36 import gen.util.FPS; 37 import gen.util.GameState; 37 38 38 39 import defend.Camera; 39 40 import defend.Map; 40 41 import defend.MapGenerator; 41 import defend.Loop;42 42 import defend.com.Gateway; 43 43 import defend.Config; … … 55 55 import gen.scene.ModelNode; 56 56 57 /*scope align(1) static public private package package package export export*/ void game() 57 class Game : GameState 58 58 { 59 59 Logger logger; … … 120 120 void initShadowMapping() 121 121 { 122 auto size = defendConfig ("graphics")("shadowmapping").integer("size");122 auto size = defendConfig.graphics.shadowmapping.size; 123 123 auto fb = renderer.createFramebuffer(vec2i(size, size), ImageFormat.A); 124 124 125 125 auto camera = new StaticCamera(vec3(-20, 40, -39), vec3(-0.9, -1.57, 0), 126 mat4.p rojection(1, 70, 50, 200));127 128 sceneGraph.addCamera("shadow", camera, vec3(0 ), fb, true);126 mat4.perspective(70, 1, 50, 200)); 127 128 sceneGraph.addCamera("shadow", camera, vec3(0, 0, 0), fb, true); 129 129 } 130 130 … … 142 142 /* TODO: Change to another gamestate here, maybe go back 143 143 to the menu again */ 144 Loop.exit = true;145 144 gatewayShutdown = true; 145 gameState.exit = true; 146 146 } 147 147 … … 258 258 } 259 259 260 config = gameConfig; 261 logger = Log.getLogger("game"); 262 263 GC.collect(); 264 265 logMemoryUsage(); 266 logObjectUsage(); 267 268 // Preallocate objects 269 MeshNode.memoryPool.create(2000); 270 271 // Initialize scene graph 272 final aspect = renderer.config.aspect; 273 final fov = defendConfig("screen").integer("fov"); 274 275 mainCamera = new MainCamera; 276 mainCamera.projection = mat4.projection(aspect, fov * PI / 180, 1, 300); 277 sceneGraph.addCamera("main", mainCamera, vec3(0, 0, 0.2)); 278 279 if(defendConfig.graphics.shadowmapping.enable) 280 initShadowMapping(); 281 282 logger.info("initializing communication"); 283 initPlayerCommunication(); 284 285 gateway.ready(); 286 logger.info("waiting for communication process to finish"); 287 while(!startGame) 288 { 289 gateway.update(); 290 Thread.yield(); 291 } 292 logger.info("communication process finished"); 293 294 // Move the camera to the first object we find 295 foreach(object; gameObjects) 296 { 297 if(object.owner == gateway.id) 298 { 299 mainCamera.position = terrain.getWorldPos(object.mapPos) + vec3(5, 0, 5); 300 break; 301 } 302 } 303 304 // Create HUD and mouse 305 hud = new HUD(gameObjects); 306 307 particles = new ParticleSystemManager; 308 particles.addSystem("smoke", new SmokeParticleSystem("data/textures/smoke.bmp")); 309 310 logMemoryUsage(); 311 312 // Disable the GC 313 GC.collect(); 314 GC.disable(); 315 316 // Initialize input 317 bool exit = false; 318 319 keyboard = new KeyboardReader(InputChannel.global); 320 321 keyboard.keyDownHandlers[KeyType.L] = (KeyboardInput) 260 // Input 261 void toggleWireframe(KeyboardInput) 322 262 { 323 263 wireframe = !wireframe; 324 } ;325 326 keyboard.keyDownHandlers[KeyType.G] =(KeyboardInput)264 } 265 266 void toggleSceneGraphDebug(KeyboardInput) 327 267 { 328 268 sceneGraph.debugVisible = !sceneGraph.debugVisible; 329 }; 330 331 keyboard.keyDownHandlers[KeyType.Escape] = (KeyboardInput) 332 { 333 Loop.exit = true; 334 }; 335 336 //dumpGCStats(); 337 338 taskManager.addRepeatedTask(&InputChannel.global.update, 100); 339 taskManager.addRepeatedTask(&gameObjects.update, 30); 340 taskManager.addRepeatedTask(&sceneGraph.update, 60); 341 taskManager.addRepeatedTask(&gateway.update, 10); 342 taskManager.addRepeatedTask(&hud.update, 30); 343 taskManager.addRepeatedTask(&renderer.window.update, 60); 344 taskManager.addRepeatedTask(&particles.update, 20); 345 taskManager.addPostFrameTask(&render); 346 347 // All tasks have been set, let main run the main loop 348 Fiber.yield(); 349 350 taskManager.reset(); 351 352 logger.info("game shutting down"); 353 logMemoryUsage(); 354 355 if(server !is null) 356 { 357 logger.info("shutting down server"); 358 359 server.shutdown(); 360 } 361 362 logger.info("disconnecting gateway"); 363 gateway.disconnect(); 364 365 delete gameObjects; 366 delete map; 367 delete players; 368 delete gateway; 369 delete server; 370 delete hud; 371 372 keyboard.remove(); 373 374 if(demoRecorder) 375 delete demoRecorder; 376 377 sceneGraph.reset(); 378 MeshNode.memoryPool.release(); 379 380 delete particles; 381 382 GC.enable(); 383 GC.collect(); 384 385 logMemoryUsage(); 386 logObjectUsage(); 387 388 //dumpGCStats(); 269 } 270 271 void inputExit(KeyboardInput) 272 { 273 gameState.exit = true; 274 } 275 276 override void init() 277 { 278 config = gameConfig; 279 logger = Log.getLogger("game"); 280 281 GC.collect(); 282 283 logMemoryUsage(); 284 logObjectUsage(); 285 286 // Preallocate objects 287 MeshNode.memoryPool.create(2000); 288 289 // Initialize scene graph 290 mainCamera = new MainCamera; 291 mainCamera.projection = mat4.perspective(defendConfig("screen").integer("fov"), 292 renderer.config.aspect, 1, 300); 293 sceneGraph.addCamera("main", mainCamera, vec3(0, 0, 0.2)); 294 295 if(defendConfig.graphics.shadowmapping.enable) 296 initShadowMapping(); 297 298 logger.info("initializing communication"); 299 initPlayerCommunication(); 300 301 gateway.ready(); 302 logger.info("waiting for communication process to finish"); 303 while(!startGame) 304 { 305 gateway.update(); 306 Thread.yield(); 307 } 308 logger.info("communication process finished"); 309 310 // Move the camera to the first object we find 311 foreach(object; gameObjects) 312 { 313 if(object.owner == gateway.id) 314 { 315 mainCamera.position = terrain.getWorldPos(object.mapPos) + vec3(5, 0, 5); 316 break; 317 } 318 } 319 320 // Create HUD and mouse 321 hud = new HUD(gameObjects); 322 323 particles = new ParticleSystemManager; 324 particles.addSystem("smoke", new SmokeParticleSystem("data/textures/smoke.bmp")); 325 326 logMemoryUsage(); 327 328 // Disable the GC 329 GC.collect(); 330 GC.disable(); 331 332 // Initialize input 333 bool exit = false; 334 335 keyboard = new KeyboardReader(InputChannel.global); 336 337 keyboard.keyDownHandlers[KeyType.L] = &toggleWireframe; 338 keyboard.keyDownHandlers[KeyType.G] = &toggleSceneGraphDebug; 339 keyboard.keyDownHandlers[KeyType.Escape] = &inputExit; 340 341 //dumpGCStats(); 342 343 taskManager.addRepeatedTask(&InputChannel.global.update, 100); 344 taskManager.addRepeatedTask(&gameObjects.update, 30); 345 taskManager.addRepeatedTask(&sceneGraph.update, 60); 346 taskManager.addRepeatedTask(&gateway.update, 10); 347 taskManager.addRepeatedTask(&hud.update, 30); 348 taskManager.addRepeatedTask(&renderer.window.update, 60); 349 taskManager.addRepeatedTask(&particles.update, 20); 350 taskManager.addPostFrameTask(&render); 351 } 352 353 override void done() 354 { 355 logger.info("game shutting down"); 356 logMemoryUsage(); 357 358 if(server !is null) 359 { 360 logger.info("shutting down server"); 361 362 server.shutdown(); 363 } 364 365 logger.info("disconnecting gateway"); 366 gateway.disconnect(); 367 368 delete gameObjects; 369 delete map; 370 delete players; 371 delete gateway; 372 delete server; 373 delete hud; 374 375 keyboard.remove(); 376 377 if(demoRecorder) 378 delete demoRecorder; 379 380 sceneGraph.reset(); 381 MeshNode.memoryPool.release(); 382 383 delete particles; 384 385 GC.enable(); 386 GC.collect(); 387 388 logMemoryUsage(); 389 logObjectUsage(); 390 391 //dumpGCStats(); 392 } 389 393 } trunk/src/defend/game/hud/Hud.d
r524 r541 99 99 { 100 100 smallFont.write(guiRenderer, button.widget.globalPosition + vec2i(12, 15), 101 vec3(1 ), "{}", index);101 vec3(1, 1, 1), "{}", index); 102 102 } 103 103 } … … 107 107 { 108 108 auto pos = vec2i(240, renderer.height - HUD_HEIGHT + 10 + i * 15); 109 auto color = vec3 (1);109 auto color = vec3.one; 110 110 auto format = "{}: {}"; 111 111 … … 123 123 p.y = renderer.height - p.y; 124 124 125 smallFont.write(guiRenderer, vec2i(p.x, p.y), vec3 (1), "[{}]", obj.id);125 smallFont.write(guiRenderer, vec2i(p.x, p.y), vec3.one, "[{}]", obj.id); 126 126 } 127 127 } … … 130 130 void renderDebugInfo() 131 131 { 132 bigFont.write(guiRenderer, vec2i(10, 10), vec3 (1), "FPS: {}", FPSCounter.get());132 bigFont.write(guiRenderer, vec2i(10, 10), vec3.one, "FPS: {}", FPSCounter.get()); 133 133 134 134 debug trunk/src/defend/game/hud/Mouse.d
r529 r541 420 420 auto pt = mouse.mousePos; 421 421 422 auto modelview = camera.modelview().convert!(double); 423 auto projection = camera.projection().convert!(double); 422 //Stdout(camera.modelview()).newline; 423 //Stdout(camera.projection()).newline; 424 425 auto modelview = mat4d.from(camera.modelview()); 426 auto projection = mat4d.from(camera.projection()); 424 427 425 428 viewport[2] = renderer.width; … … 584 587 mouseCube = new ModelNode(sceneGraph.root, "data/models/box/box.obj"); 585 588 586 mouseCube.scaling = vec3(0.05 );589 mouseCube.scaling = vec3(0.05, 0.05, 0.05); 587 590 mouseCube.hide = true; 588 591 mouseCube.renderShadow = true; … … 617 620 GLint[4] viewport; 618 621 619 auto modelview = camera.modelview().convert!(double);620 auto projection = camera.projection().convert!(double);622 auto modelview = mat4d.from(camera.modelview()); 623 auto projection = mat4d.from(camera.projection()); 621 624 622 625 viewport[2] = renderer.width; trunk/src/defend/objects/Core.d
r524 r541 36 36 import defend.objects.Effector; 37 37 38 // TODO: Find a way to split this f ucking file into multiple files, without circular imports.38 // TODO: Find a way to split this file into multiple files, without circular imports. 39 39 40 40 // ------------------------------------------------------------------------------------------------ trunk/src/defend/objects/SceneNode.d
r540 r541 27 27 { 28 28 bbox = model.boundingBox; 29 29 30 30 bbox.min *= scaling; 31 31 bbox.max *= scaling; … … 47 47 foreach(mesh; model.meshes) 48 48 new GameObjectMesh(this, mesh); 49 50 calcBoundingBox(); 49 51 } 50 52 … … 62 64 override void process(Camera camera) 63 65 { 66 //Stdout("check for ")(camera)(" = ")(camera.frustum.boundingBoxVisible(bbox)).newline; 67 64 68 visible = camera.frustum.boundingBoxVisible(bbox); 65 69 } … … 120 124 if(defendConfig.graphics.shadowmapping.enable) 121 125 { 122 shadowCamera = sceneGraph.getCamera("shadow"); 126 if(!shadowCamera) 127 shadowCamera = sceneGraph.getCamera("shadow"); 123 128 124 129 shader.setUniform("shadowTexture", 2); 125 shader.setUniform("lightTransform", shadowCamera.core.projection * shadowCamera.core.modelview); 130 shader.setUniform("lightTransform", shadowCamera.core.projection * 131 shadowCamera.core.modelview); 126 132 shader.setUniform("modelTransform", absoluteModelview); 127 133 … … 142 148 else 143 149 { 150 Stdout("ok.").newline; 151 144 152 renderer.setTexture(0, null); 145 153 renderer.setShader(null); 146 154 } 147 155 148 //mesh.texture = Texture.loadResource("data/models/house/model.png"); 149 //mesh.render(); 150 renderer.draw(mesh.vertices, null, mesh.type); 156 mesh.render(); 157 158 debug 159 { 160 if(sceneGraph.debugNodeVisible(this)) 161 renderer.drawBoundingBox(mesh.boundingBox, vec3(1, 0, 1)); 162 } 151 163 152 164 renderer.popMatrix(); trunk/src/defend/objects/types/Building.d
r524 r541 566 566 sceneNode.translation = realPos + buildingInfo.posOffset; 567 567 sceneNode.scaling = buildingInfo.scale; 568 sceneNode.rotation = vec3 (0);568 sceneNode.rotation = vec3.zero; 569 569 570 570 buildSteps = buildingInfo.buildSteps / 10; trunk/src/defend/objects/types/Citizen.d
r521 r541 30 30 parentType = "unit"; 31 31 posOffset = vec3(0, 1, 0); 32 scale = vec3 (1);32 scale = vec3.one; 33 33 developmentSteps = 18; 34 34 canBuild = [ "house" ]; trunk/src/defend/objects/types/House.d
r521 r541 21 21 dimension = vec2i(5, 6); 22 22 posOffset = vec3(2, 0.2, -2.5); 23 scale = vec3(0.4 );23 scale = vec3(0.4, 0.4, 0.4); 24 24 buildSteps = 10000; 25 25 canBuild = [ "sheep", "citizen" ]; trunk/src/defend/objects/types/Resource.d
r485 r541 37 37 model = "data/models/box/box.obj"; 38 38 posOffset = vec3(0, 0.5, 0); 39 scale = vec3(0.5 );39 scale = vec3(0.5, 0.5, 0.5); 40 40 dimension = vec2i(1, 1); 41 41 initialAmount = 1000; … … 124 124 sceneNode.translation = realPos + typeInfo.posOffset; 125 125 sceneNode.scaling = typeInfo.scale; 126 sceneNode.rotation = vec3 (0);126 sceneNode.rotation = vec3.zero; 127 127 128 128 markMap(false); trunk/src/defend/objects/types/Sheep.d
r521 r541 1 1 module defend.objects.types.Sheep; 2 3 import tango.io.Stdout;4 2 5 3 import gen.scene.Graph; … … 30 28 parentType = "unit"; 31 29 posOffset = vec3(0, 1, 0); 32 scale = vec3 (1);30 scale = vec3.one; 33 31 developmentSteps = 18; 34 32 properties[GameObject.Property.MaxLife] = 500; trunk/src/defend/objects/types/Unit.d
