private void TryGenerateCircle() { ICollider2D circleDummyCollider = new Circle(new PositionMagnitude(1)); float size = f_size.Evaluate(Random.value); float velocity = f_velocity.Evaluate(Random.value); int layer = Mathf.RoundToInt(f_layers.Evaluate(Random.value)); bool isTrigger = Random.value < f_triggerProbability; Position position = new Position(2 * f_levelSize.x * f_startX.Evaluate(Random.value), 2 * f_levelSize.y * f_startY.Evaluate(Random.value)); position = TemporaryHelperFunctions.ComponentWiseClamp(position, Position.zero + new Position(size / 2, size / 2), 2 * new Position(f_levelSize) - new Position(size / 2, size / 2)); AABB propRect = new AABB(position - size * Position.one, position + size * Position.one); bool works = true; // f_rbs does not cover the changes to the RB; I have to ask a simulation to get that data //foreach (Rigidbody rigidbody in f_rbs) { foreach (Rigidbody rigidbody in SuperPhysicsManager.Instance.PhysicsManagers[0].Rigidbodies) { if ( (!rigidbody.ColliderData.IsTrigger && !isTrigger) && SuperPhysicsManager.Instance.PhysicsMatrix.DoCollide(rigidbody.ColliderData.LayerNumber, layer) && Intersections.DoIntersectAABBAABB(rigidbody.ColliderData.GlobalAABB, propRect)) { works = false; break; } } if (!works) { return; } Transform2D subT = Transform2D.New(f_rootTransform); subT.Position = new Position((propRect.Right + propRect.Left).Float / 2, (propRect.Top + propRect.Bottom).Float / 2); subT.Scale = size; GameObject subGO = GameObject.New(subT); Rigidbody rb = Rigidbody.New( new DynamicData(new Velocity(velocity * Random.insideUnitCircle), Acceleration.zero), new ObjectData(new PhysicsMaterial(), new Mass(1)), new ColliderData(circleDummyCollider, isTrigger, layer, subT)); subGO.AddComponent(rb); AddRB(rb); f_dynamics.Add(rb); }
public GameObject CloneLeave() { Transform2D newTransform = Transform2D.New(null); newTransform.Position = Transform.Position; newTransform.Angle = Transform.Angle; newTransform.Scale = Transform.Scale; GameObject newGO = GameObject.New(newTransform); foreach (Component comp in f_components) { comp.Clone(newGO); } return(newGO); }
private void Start() { f_rootTransform = Transform2D.New(null); f_root = GameObject.New(f_rootTransform); ICollider2D aabbDummyCollider = new AABB(new Position(-1, -1), new Position(1, 1)); /* Create a border of AABBs */ { // for (int x = 0; x <= f_levelSize.x; ++x) { // for (int y = 0; y < 2; ++y) { // Transform2D subT = Transform2D.New(f_rootTransform); // subT.Position = new Position(x * 2, y * f_levelSize.y * 2); // GameObject subGO = GameObject.New(subT); // Rigidbody rb = Rigidbody.New( // new DynamicData(Velocity.zero, Acceleration.zero), // new ObjectData(new PhysicsMaterial(), new Mass(1)), // new ColliderData(aabbDummyCollider, false, 0, subT)); // subGO.AddComponent(rb); // AddRB(rb); // } // } // for (int y = 1; y < f_levelSize.y; ++y) { // for (int x = 0; x < 2; ++x) { // Transform2D subT = Transform2D.New(f_rootTransform); // subT.Position = new Position(x * f_levelSize.x * 2, y * 2); // GameObject subGO = GameObject.New(subT); // Rigidbody rb = Rigidbody.New( // new DynamicData(Velocity.zero, Acceleration.zero), // new ObjectData(new PhysicsMaterial(), new Mass(1)), // new ColliderData(aabbDummyCollider, false, 0, subT)); // subGO.AddComponent(rb); // AddRB(rb); // } // } } }