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; }
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); }
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; }
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); }