コード例 #1
0
ファイル: Level.cs プロジェクト: Mega-Wolf/LoonyEngine
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Level.cs プロジェクト: Mega-Wolf/LoonyEngine
        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);
                //     }
                // }
            }
        }