Esempio n. 1
0
        public void AttachToCat(StackableCat previous)
        {
            _hinge           = previous.gameObject.AddComponent <HingeJoint2D>();
            _hinge.useLimits = true;

            var rotationOffset = -previous.transform.eulerAngles.z;
            var limits         = new JointAngleLimits2D
            {
                min = (-135f + rotationOffset + 360f) % 360f,
                max = (-45f + rotationOffset + 360f) % 360f
            };

            _hinge.limits        = limits;
            _hinge.connectedBody = _rigidBody;
            var motor = new JointMotor2D
            {
                motorSpeed     = 10,
                maxMotorTorque = 10000
            };

            _hinge.motor    = motor;
            _hinge.useMotor = true;

            _distance = previous.gameObject.AddComponent <DistanceJoint2D>();
            _distance.autoConfigureDistance = false;
            _distance.distance      = 2.5f;
            _distance.connectedBody = _rigidBody;

            _rigidBody.bodyType  = RigidbodyType2D.Dynamic;
            _rigidBody.simulated = true;
        }
Esempio n. 2
0
        public void StackInstantiatedCat(StackableCat placedCat)
        {
            var catTransform = placedCat.transform;

            var catPosition = catTransform.position;
            var horizontalPlacementCenter = catPosition.x;
            var placementHeight           = catPosition.y;

            catTransform.SetParent(_stackRoot, true);

            var stacked = new StackedCat
            {
                Cat = placedCat,
                InitialCenterOffset = horizontalPlacementCenter,
            };

            if (_stackedCats.Count > 0)
            {
                stacked.Cat.AttachToCat(_stackedCats[_stackedCats.Count - 1].Cat);
            }
            else
            {
                stacked.Cat.FixToPosition();
            }

            _stackedCats.Add(stacked);
        }
Esempio n. 3
0
        private void PlaceAndGrabNewCat()
        {
            if (_grabbedCat)
            {
                _catStacker.StackInstantiatedCat(_grabbedCat);
                _grabbedCat = null;
            }

            var randomCatPrefab = _catStacker.GetRandomCatPrefab();

            _grabbedCat = Instantiate(randomCatPrefab, _handTransform);
            _grabbedCat.transform.Translate(Vector3.back * 0.2f);
            var angles = _grabbedCat.transform.localEulerAngles;

            angles.z += Random.Range(_catRotationMin, _catRotationMax);
            _grabbedCat.transform.localEulerAngles = angles;
            //_grabbedCat.transform.RotateAround();
            _grabbedCat.transform.localScale = Vector3.zero;
        }
Esempio n. 4
0
        public void StackCat(StackableCat catPrefab, float position, float rotation)
        {
            var height = catPrefab.DetermineHeight() * _overlapMultiplier;

            var placementHeight           = height;
            var horizontalPlacementCenter = position;

            if (_stackedCats.Count > 0)
            {
                var lastCat = _stackedCats[_stackedCats.Count - 1];
                placementHeight           += lastCat.Position.y;
                horizontalPlacementCenter += lastCat.InitialCenterOffset;
            }

            var placedCat = Instantiate(
                catPrefab,
                Vector3.zero,
                Quaternion.Euler(0, 0, rotation),
                _stackRoot);

            placedCat.transform.localPosition = new Vector3(horizontalPlacementCenter, placementHeight, 0);
            StackInstantiatedCat(placedCat);
        }