private void onCollision(Collidable c1, Spatial sp1, Collidable c2) { c1.health -= c2.damage; c2.health -= c1.damage; c1.onCollision(new eCollision(c1, c2)); c2.onCollision(new eCollision(c1, c2)); for (int i = 0; i < c2.children.Count; i++) { checkCollision(c1, sp1, c2.children[i], c2.children[i].getComponent<Spatial>()); } }
private void checkCollision(Collidable c1, Spatial sp1, Collidable c2, Spatial sp2) { Vector3[] points1 = new Vector3[2]; Vector3[] points2 = new Vector3[2]; points1[0] = Vector3.Transform(c1.boundingBox.Min, sp1.transform); points1[1] = Vector3.Transform(c1.boundingBox.Max, sp1.transform); points2[0] = Vector3.Transform(c2.boundingBox.Min, sp2.transform); points2[1] = Vector3.Transform(c2.boundingBox.Max, sp2.transform); BoundingBox collsionBoundingBox2 = BoundingBox.CreateFromPoints(points1); BoundingBox collsionBoundingBox1 = BoundingBox.CreateFromPoints(points2); if (collsionBoundingBox1.Intersects(collsionBoundingBox2)) { Drawable3D dw1 = c1.getComponent<Drawable3D>(); Drawable3D dw2 = c2.getComponent<Drawable3D>(); if (dw1 != null && dw2 != null) { foreach (BoundingBox bb1 in dw1.boundingBoxes) { points1[0] = Vector3.Transform(bb1.Min, sp1.transform); points1[1] = Vector3.Transform(bb1.Max, sp1.transform); collsionBoundingBox1 = BoundingBox.CreateFromPoints(points1); foreach (BoundingBox bb2 in dw2.boundingBoxes) { points2[0] = Vector3.Transform(bb2.Min, sp2.transform); points2[1] = Vector3.Transform(bb2.Max, sp2.transform); collsionBoundingBox2 = BoundingBox.CreateFromPoints(points2); if (collsionBoundingBox1.Intersects(collsionBoundingBox2)) { onCollision(c1, sp1, c2); } } } } else { onCollision(c1, sp1, c2); } } }