Changeset 543
- Timestamp:
- 05/19/08 13:51:07 (8 months ago)
- Files:
-
- trunk/src/defend/Camera.d (modified) (1 diff)
- trunk/src/defend/game/hud/Mouse.d (modified) (2 diffs)
- trunk/src/defend/game/net/Server.d (modified) (9 diffs)
- trunk/src/defend/objects/Core.d (modified) (1 diff)
- trunk/src/defend/objects/SceneNode.d (modified) (4 diffs)
- trunk/src/gen/math/Ray.d (modified) (3 diffs)
- trunk/src/gen/math/Vector.d (modified) (1 diff)
- trunk/src/gen/model/ModelObj.d (modified) (1 diff)
- trunk/src/gen/net/tcp/Socket.d (modified) (3 diffs)
- trunk/src/gen/scene/Graph.d (modified) (6 diffs)
- trunk/src/xf/omg/core/LinearAlgebra.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/defend/Camera.d
r541 r543 195 195 196 196 position = vec3(0, 0, 0); 197 197 198 rotate(vec3(-1, 0.0, 0)); 198 199 } trunk/src/defend/game/hud/Mouse.d
r541 r543 419 419 420 420 auto pt = mouse.mousePos; 421 422 //Stdout(camera.modelview()).newline;423 //Stdout(camera.projection()).newline;424 425 421 auto modelview = mat4d.from(camera.modelview()); 426 422 auto projection = mat4d.from(camera.projection()); … … 441 437 442 438 vec3d result = far - near; 443 result /= -result.z;444 439 445 440 result = result.normalized(); trunk/src/defend/game/net/Server.d
r525 r543 7 7 import tango.net.ServerSocket; 8 8 import tango.net.SocketConduit; 9 import tango.util.log.Trace; 9 10 import Integer = tango.text.convert.Integer; 10 11 … … 45 46 phase_counter_t whichPhase; 46 47 47 // Ping 48 uint pingLast = 0; 49 uint lastHighestPing = 0; 48 // Footex 49 Mutex mutex; 50 50 51 51 // Client info … … 66 66 67 67 // Ping info 68 uint pingSen d= 0;68 uint pingSent = 0; 69 69 uint pingCount = 0; 70 70 bool pingAnswer = true; 71 72 uint lastPing = 0; 73 uint lastHighestPing = 0; 74 75 const PING_INTERVAL = 1000; 71 76 72 77 // The background thread 73 78 void update() 74 79 { 80 void ping() 81 { 82 MessagePing message; 83 socket.send(message); 84 85 assert(pingAnswer); 86 pingAnswer = false; 87 88 pingSent = getTickCount(); 89 } 90 75 91 try 76 92 { … … 79 95 logger.info("sending ping"); 80 96 { 81 MessagePing message; 82 socket.send(message); 97 ping(); 83 98 } 84 99 … … 102 117 } 103 118 104 uint lastPing = 0;105 119 while(!socket.stop) 106 120 { 107 if(server.gameStarted && getTickCount() - lastPing > 1000 //&& 108 /*pingAnswer*/) 121 if(server.gameStarted && getTickCount() - pingSent > PING_INTERVAL) 109 122 { 110 if(!pingAnswer)123 synchronized(mutex) 111 124 { 112 logger.warn("no pong in 1 second"); 113 114 // man, wtf 115 Thread.sleep(2); 116 continue; 125 if(!pingAnswer) 126 { 127 logger.warn("pong is taking longer than 1 second"); 128 129 Thread.sleep(2); 130 continue; 131 } 132 133 ping(); 117 134 } 118 119 //logger.trace("sending ping");120 121 MessagePing message;122 socket.send(message);123 124 pingAnswer = false;125 pingSend = getTickCount();126 lastPing = getTickCount();127 135 } 128 136 129 137 Thread.yield(); 130 138 } 131 132 //logger.trace("thread's done for");133 139 } 134 140 catch(Exception exception) … … 167 173 void onPong(MessagePong* message) 168 174 { 169 pingLast = getTickCount() - pingSend; 170 pingAnswer = true; 171 172 if(!firstPong) firstPong = true; 173 174 lastHighestPing = pingLast; 175 176 /*debug(networking)*/ //if(pingCount == 0) 177 // logger.info("ping: {}", pingLast); 178 179 if(++pingCount == 5) 180 pingCount = 0; 175 synchronized(mutex) 176 { 177 //Trace.formatln("(pong got called)"); 178 179 lastPing = getTickCount() - pingSent; 180 181 assert(!pingAnswer); 182 pingAnswer = true; 183 184 if(!firstPong) firstPong = true; 185 186 lastHighestPing = lastPing; 187 188 //logger.info("ping: {}", lastPing); 189 } 181 190 } 182 191 … … 184 193 { 185 194 me = message.info; 186 logger.info("received info: {}", me .toString());195 logger.info("received info: {}", me); 187 196 188 197 infoReceived = true; … … 298 307 this.cm = cm; 299 308 this.server = server; 309 310 mutex = new Mutex; 300 311 301 312 syncChecks.create(2000); … … 638 649 639 650 public: 640 this(GameConfig c )641 { 642 config = c;651 this(GameConfig config) 652 { 653 this.config = config; 643 654 644 655 logger = Log.getLogger("server"); trunk/src/defend/objects/Core.d
r541 r543 1325 1325 { 1326 1326 // TODO: Emit a signal telling that the order isn't valid 1327 1328 // Why the hell does dmd append a space to T.stringof? 1329 logger.trace("invalid order (T = {}), not sending", T.stringof[0 .. $ - 1]); 1327 logger.trace("invalid order (T = {}), not sending", T.stringof); 1330 1328 } 1331 1329 }); trunk/src/defend/objects/SceneNode.d
r542 r543 95 95 { 96 96 renderer.setRenderState(RenderState.BackfaceCulling, true); 97 98 renderer.setMatrix(camera.projection(), MatrixType.Projection);99 renderer.setMatrix(camera.modelview(), MatrixType.Modelview);100 97 101 98 auto shader = Shader.acquire("data/shaders/model.cfg"); … … 147 144 function(NodeHolder[] nodes, Camera camera) 148 145 { 149 renderer.setMatrix(camera.projection(), MatrixType.Projection);150 renderer.setMatrix(camera.modelview(), MatrixType.Modelview);151 152 146 renderer.setShader(null); 153 147 renderer.setTexture(0, null); … … 198 192 199 193 renderer.setTexture(0, texture); 200 //Stdout("setting ")(texture.file).newline;201 194 202 195 shader.setUniform("color", parent.color); … … 231 224 renderer.pushMatrix(); 232 225 renderer.mulMatrix(absoluteModelview); 233 234 debug 235 { 236 if(sceneGraph.debugNodeVisible(this)) 237 renderer.drawBoundingBox(mesh.boundingBox, vec3(1, 0, 1)); 238 } 239 226 renderer.drawBoundingBox(mesh.boundingBox, vec3(1, 0, 1)); 240 227 renderer.popMatrix(); 241 228 } trunk/src/gen/math/Ray.d
r542 r543 1 1 module gen.math.Ray; 2 3 import tango.io.Stdout; 2 4 3 5 import tango.math.Math; … … 101 103 if(direction == Vec3!(T).zero) 102 104 return false; 103 105 104 106 with(bbox) 105 107 { 106 108 auto maxT = Vec3!(T)(-1, -1, -1); 107 auto div = 1 / direction;109 auto div = 1.0f / direction; 108 110 bool inside = true; 109 111 … … 138 140 if(i != index) 139 141 { 140 float temp = getVectorField(origin, i) + getVectorField(maxT, index) * getVectorField(direction, i); 142 float temp = getVectorField(origin, i) + 143 getVectorField(maxT, index) * getVectorField(direction, i); 141 144 142 if(temp < getVectorField(min, i) - Epsilon!(T) || temp > getVectorField(max, i) + Epsilon!(T)) 145 if(temp < getVectorField(min, i) - Epsilon!(T) || 146 temp > getVectorField(max, i) + Epsilon!(T)) 143 147 return false; 144 148 } trunk/src/gen/math/Vector.d
r541 r543 20 20 T.flt getVectorField(T)(T vector, uint index) 21 21 { 22 if(index == 0) return vector.x; 23 if(index == 1) return vector.y; 24 if(index == 2) return vector.z; 25 26 assert(false); 27 } 28 29 void setVectorField(T, U)(ref T vector, uint index, U value) 30 { 31 if(index == 0) vector.x = value; 32 else if(index == 1) vector.y = value; 33 else if(index == 2) vector.z = value; 34 else assert(false); 22 assert(index < T.dim); 23 return vector.ptr[index]; 24 } 25 26 U setVectorField(T, U)(ref T vector, uint index, U value) 27 { 28 assert(index < T.dim); 29 return vector.ptr[index] = value; 35 30 } 36 31 trunk/src/gen/model/ModelObj.d
r541 r543 178 178 179 179 char[][] parts = split(line, " "); 180 vec3 floats ;180 vec3 floats = vec3.zero; 181 181 182 182 char[] desc = descriptor(line); trunk/src/gen/net/tcp/Socket.d
r524 r543 71 71 scope stream = new ArrayReader(data); 72 72 73 //static if(messageBehaviour == MessageBehaviour.Queue)74 // Trace.formatln("message of type {}, length {}", T.stringof, data.length);75 76 73 T message; 77 74 unserialize(message, stream); 78 75 79 //static if(messageBehaviour == MessageBehaviour.Queue) 80 // Trace.formatln("unserialized"); 76 auto name = getMessageTypeName(T.type); 77 78 //if(name == "MessagePing" && messageBehaviour == MessageBehaviour.Queue) 79 // Trace.formatln("client: PING received"); 80 //else if(name == "MessagePong" && messageBehaviour == MessageBehaviour.Immediately) 81 // Trace.formatln("server: PONG received"); 81 82 82 83 messageHandlers[T.type](&message); … … 176 177 177 178 // debug 178 //auto name = getMessageTypeName(*(cast(message_type_t*)message.data[0 .. message_type_t.sizeof])); 179 180 //if(name == "MessagePing " || name == "MessagePong ") 181 // logger.trace("=> {}", name); 179 auto name = getMessageTypeName(*(cast(message_type_t*)message.data[0 .. 180 message_type_t.sizeof])); 181 182 //if(name == "MessagePing" && messageBehaviour == MessageBehaviour.Immediately) 183 // Trace.formatln("server: PING sent"); 184 //else if(name == "MessagePong" && messageBehaviour == MessageBehaviour.Queue) 185 // Trace.formatln("client: PONG sent"); 182 186 183 187 //logger.trace("REMAIN: {}", writeQueue.length); … … 241 245 auto message = messagePool.allocate(); 242 246 247 if(message.dataBuffer.length < data.length) 248 message.dataBuffer.realloc(data.length); 249 243 250 message.dataBuffer[0 .. data.length] = data[]; 244 251 message.data = message.dataBuffer[0 .. data.length]; trunk/src/gen/scene/Graph.d
r542 r543 171 171 function(NodeHolder[], Camera camera) // Setup function 172 172 { 173 renderer. setRenderState(RenderState.ZWrite, false);173 renderer.pushMatrix(); 174 174 renderer.identity(); 175 175 renderer.translate(camera.position()); … … 181 181 function // Clean function 182 182 { 183 renderer.popMatrix(); 184 183 185 renderer.setRenderState(RenderState.ZWrite, true); 184 186 renderer.setRenderState(RenderState.DepthTest, true); … … 193 195 194 196 function(NodeHolder[] nodes, Camera camera) 195 { 196 renderer.setMatrix(camera.projection(), MatrixType.Projection); 197 renderer.setMatrix(camera.modelview(), MatrixType.Modelview); 198 197 { 199 198 // Solid objects are sorted by their texture 200 199 nodes.quickSort((NodeHolder first, NodeHolder second) … … 219 218 function(NodeHolder[] nodes, Camera camera) 220 219 { 221 renderer.setMatrix(camera.projection(), MatrixType.Projection); 222 renderer.setMatrix(camera.modelview(), MatrixType.Modelview); 220 223 221 }, 224 222 … … 239 237 renderer.setRenderState(RenderState.ZWrite, false); 240 238 //renderer.setRenderState(RenderState.DepthTest, false); 241 242 renderer.setMatrix(camera.projection(), MatrixType.Projection);243 renderer.setMatrix(camera.modelview(), MatrixType.Modelview);244 239 245 240 // Blended objects are sorted by their distance from the camera … … 405 400 root.doProcess(camera); 406 401 }); 402 403 // Set the current camera's matrices 404 renderer.setMatrix(camera.projection(), MatrixType.Projection); 405 renderer.setMatrix(camera.modelview(), MatrixType.Modelview); 407 406 408 407 // Go through all render passes trunk/src/xf/omg/core/LinearAlgebra.d
r542 r543 960 960 961 961 static if (4 == rows) { 962 /* Mat4 projection(T aspect, T fov, T near, T far)963 {964 T f = 1.0f / tan(fov / 2);965 966 return Mat4(f / aspect, 0, 0, 0,967 0, f, 0, 0,968 0, 0, (far + near) / (near - far), -1,969 0, 0, 2.0f * near * far / (near - far), 0);970 }*/971 972 973 962 static Matrix perspective(real fov, real aspect, real near, real far) { 974 963 assert (fov <>= 0 && aspect <>= 0 && near <>= 0 && far <>= 0);
