From 58c224e1ef76d0c213464617fb464f3cc09722f1 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Mon, 7 Mar 2011 02:10:10 +0000 Subject: Rehash of transmit code... --- src/tesseract/World.java | 281 +++++------------------------------------------ 1 file changed, 30 insertions(+), 251 deletions(-) (limited to 'src/tesseract/World.java') diff --git a/src/tesseract/World.java b/src/tesseract/World.java index 648b802..67527ca 100644 --- a/src/tesseract/World.java +++ b/src/tesseract/World.java @@ -228,72 +228,11 @@ public class World implements Observer { // Spawn new objects? List newChildren = ((PhysicalObject) obj).spawnChildren(1f / UPDATE_RATE); + if (newChildren != null) { children.addAll(newChildren); } - - // If it leaves the bounds of the world, DESTROY IT - /*if (!obj.isExisting() - || !myVirtualWorldBounds.intersect( - new Point3d(obj.getPosition())) - ) { - obj.detach(); - itr.remove(); - }*/ } - - // Collision Detection - /*for (int i = 0; i < myObjects.size() - 1; i++) { - for (int j = i + 1; j < myObjects.size(); j++) { - myObjects.get(i).resolveCollisions(myObjects.get(j)); - } - }*/ - - // Iterate over objects in the world for collisons. - //Iterator itr1 = myObjects.iterator(); - //Iterator itr2 = myObjects.iterator(); - //if(itr2.hasNext()) { - // itr2.next(); - // } - -/* while (itr1.hasNext()) { - PhysicalObject obj1 = itr1.next(); - while (itr2.hasNext()) { - PhysicalObject obj2 = itr2.next(); - obj1.resolveCollisions(obj2);y - } - } - */ - /*int indexToRemove = -1; - for (int i = 0; i < myObjects.size() - 1; i++) { - for (int j = i + 1; j < myObjects.size(); j++) { - //Used to get size of CollsionInfo and if > 0 then there is a collison. - ArrayList collisions = - CollisionDetector.calculateCollisions(myObjects.get(i), myObjects.get(j)); - - PhysicalObject i_object = myObjects.get(i); - PhysicalObject j_object = myObjects.get(j); - - if (collisions.size() > 0) { - if (myObjects.get(i).equals(my_side2)) { - System.out.println("Hit Side 2" + myObjects.get(i).getPosition()); - //myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - // (myObjects.get(j).getVelocity().getX(), myObjects.get(j).getVelocity().getY()), myObjects.get(j)); - indexToRemove = j; - myObjects.get(j).detach(); - //i_object.resolveCollisions(j_object); - - } - myObjects.get(i).resolveCollisions(myObjects.get(j)); - } - } - } - - if ( indexToRemove >= 0) { - myObjects.remove(indexToRemove); - System.out.println("Remove index: " + indexToRemove); - }*/ - /* In the "tick" method of your application, rather than call the old form of @@ -313,208 +252,48 @@ public class World implements Observer { collision detection algorithm from being executed twice when objects collide. */ - // Collision Detection with Aldens mar4 suggestions - //int indexToRemove = -1; - ArrayList indexesToRemove = new ArrayList(); for (int i = 0; i < myObjects.size() - 1; i++) { - for (int j = i + 1; j < myObjects.size(); j++) { - - //Used to get size of CollsionInfo and if > 0 then there is a collison. ArrayList collisions = - CollisionDetector.calculateCollisions(myObjects.get(i), myObjects.get(j)); + CollisionDetector.calculateCollisions(myObjects.get(i), myObjects.get(j)); + + if (collisions.size() > 0) { + HalfSpace hs = null; + PhysicalObject o = null; - PhysicalObject i_object = myObjects.get(i); - PhysicalObject j_object = myObjects.get(j); - - if (collisions.size() > 0) { + if (myObjects.get(i) instanceof HalfSpace) { + // If i is a halfspace, j must be an object + hs = (HalfSpace) myObjects.get(i); + o = myObjects.get(j); - //i and j are not a HalfSpaces, then they are regular objects colliding - if (!(i_object instanceof HalfSpace) && !(j_object instanceof HalfSpace)) { - i_object.resolveCollisions(j_object, collisions); - - System.out.println("Hit others" + i_object.getPosition()); - } + } else if (myObjects.get(j) instanceof HalfSpace) { + // If j is a halfspace, i must be an object + hs = (HalfSpace) myObjects.get(j); + o = myObjects.get(i); + } - //i is a top or bottom so resolve regular collision - if (i_object.equals(my_top) || i_object.equals(my_bottom)) { - i_object.resolveCollisions(j_object, collisions); - - System.out.println("i hit top or bottom" + i_object.getPosition()); - } - - //j is a top or bottom so resolve regular collision - if (j_object.equals(my_top) || j_object.equals(my_bottom)) { - i_object.resolveCollisions(j_object, collisions); - System.out.println("j hit top or bottom" + j_object.getPosition()); - } - - //if 'i' side and a neighbor exists, transmit j object to that node - if (i_object.equals(my_side1)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - System.out.println("Hit Side 1 J" + i_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(j_object.getVelocity().getX(), j_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //j_object.switchZ(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (j_object.getVelocity().getX(), j_object.getVelocity().getZ()), j_object); - indexesToRemove.add(j); - j_object.detach(); - } - } - i_object.resolveCollisions(j_object, collisions); - } - - if (i_object.equals(my_side2)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 2 J" + i_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(j_object.getVelocity().getX(), j_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //j_object.switchX(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (j_object.getVelocity().getX(), j_object.getVelocity().getZ()), j_object); - indexesToRemove.add(j); - j_object.detach(); - } - } - i_object.resolveCollisions(j_object, collisions); - } - - if (i_object.equals(my_side3)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 3 J" + i_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(j_object.getVelocity().getX(), j_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //j_object.switchZ(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (j_object.getVelocity().getX(), j_object.getVelocity().getZ()), j_object); - indexesToRemove.add(j); - j_object.detach(); - } - } - i_object.resolveCollisions(j_object, collisions); - } - if (i_object.equals(my_side4)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 4 J" + i_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(j_object.getVelocity().getX(), j_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //j_object.switchX(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (j_object.getVelocity().getX(), j_object.getVelocity().getZ()), j_object); - indexesToRemove.add(j); - j_object.detach(); - } - } - i_object.resolveCollisions(j_object, collisions); - } + // Was there a halfspace involved? If so, was it a side? + if (hs != null && hs.normal.y != 1 && hs.normal.y != -1) { + // Side collision, is there a peer? + PeerInformation peer = myPeer.getPeerInDirection(o.getVelocity().x, -o.getVelocity().z); - //if 'j' side and a neighbor exists, transmit i object to that node - if (j_object.equals(my_side1)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 1" + j_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(i_object.getVelocity().getX(), i_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //i_object.switchZ(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (i_object.getVelocity().getX(), i_object.getVelocity().getZ()), i_object); - indexesToRemove.add(i); - i_object.detach(); - } - } - j_object.resolveCollisions(i_object, collisions); - } - if (j_object.equals(my_side2)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 2" + i_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(i_object.getVelocity().getX(), i_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //i_object.switchX(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (i_object.getVelocity().getX(), i_object.getVelocity().getZ()), i_object); - indexesToRemove.add(i); - i_object.detach(); - } - } - j_object.resolveCollisions(i_object, collisions); - } - if (j_object.equals(my_side3)) { - int test = myPeer.getPeerSize(); - if(test > 0) { + if (peer != null) { + o.switchX(); + o.switchZ(); + myPeer.sendPayloadToPeer(peer, o); + o.detach(); + myObjects.remove(o); - System.out.println("Hit Side 3" + j_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(i_object.getVelocity().getX(), i_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //i_object.switchZ(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (i_object.getVelocity().getX(), i_object.getVelocity().getZ()), i_object); - indexesToRemove.add(i); - i_object.detach(); - } - } - j_object.resolveCollisions(i_object, collisions); + // Moving on + continue; } - if (j_object.equals(my_side4)) { - int test = myPeer.getPeerSize(); - if(test > 0) { - - System.out.println("Hit Side 4" + j_object.getPosition()); - PeerInformation info = myPeer.getPeerInDirection(i_object.getVelocity().getX(), i_object.getVelocity().getZ()); - System.out.println("PeerInfo: " + info); - if (info != null) { - //i_object.switchX(); - myPeer.sendPayloadToPeer(myPeer.getPeerInDirection - (i_object.getVelocity().getX(), i_object.getVelocity().getZ()), i_object); - indexesToRemove.add(i); - i_object.detach(); - } - } - j_object.resolveCollisions(i_object, collisions); - } - } else { - i_object.resolveCollisions(j_object, collisions); } + + // Collision as usual... + myObjects.get(i).resolveCollisions(myObjects.get(j), collisions); } } - - /*if ( indexToRemove >= 0) { - myObjects.remove(indexToRemove); - System.out.println("Remove index: " + indexToRemove); - }*/ - //if the object leaves the world, remove it from myObjects list) { - if (indexesToRemove.size() > 0) { - for (Integer k : indexesToRemove) { - int i = k; - try { - myObjects.remove(i); - System.out.println("Remove index: " + i); - } catch (IndexOutOfBoundsException e) { - System.out.println("Array was out of bounds again"); - System.out.println("k is:" + i); - System.out.println("myObjecst size is: " + myObjects.size()); - } - } - indexesToRemove.clear(); - System.out.println("Size of Remove index: " + indexesToRemove.size()); } // Add new children to the world. -- cgit v1.2.3