protected override void UpdateShape(GameObject root)
        {
            Fix64Vec2 s = CalculateSize();

            if (s != Fix64Vec2.zero)
            {
                Fix64Vec2[] scaled = new Fix64Vec2[convexVertsCount];

                for (int i = 0; i < convexVertsCount; i++)
                {
                    scaled[i] = convexVerts[i] * s;
                }

                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                Parallel2D.UpdatePolygon(_shape, _fixture, scaled, convexVertsCount, center, angle);
            }
        }
        public override PShape2D CreateShape(GameObject root)
        {
            Fix64 radius = CalculateRadius();
            Fix64 height = CalculateHeight();

            CalculatePoints(height, radius, ref v1, ref v2);

            if (v1 == Fix64Vec2.zero || v2 == Fix64Vec2.zero)
            {
                return(null);
            }
            else
            {
                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                return(Parallel2D.CreateCapsule(v1, v2, radius, center, angle));
            }
        }
示例#3
0
        public static Fix64Quat FromEulerAngles(Fix64Vec3 value)
        {
            Fix64 yaw_y   = Fix64.DegToRad(value.y);
            Fix64 pitch_x = Fix64.DegToRad(value.x);
            Fix64 roll_z  = Fix64.DegToRad(value.z);

            return(Fix64Quat.FromYawPitchRoll(yaw_y, pitch_x, roll_z));
        }
示例#4
0
        protected override void UpdateShape(GameObject root)
        {
            Fix64Vec2 s = CalculateSize();

            if (s != Fix64Vec2.zero)
            {
                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                Parallel2D.UpdateBox(_shape, _fixture, s.x, s.y, center, angle);
            }
        }
        protected override void UpdateShape(GameObject root)
        {
            Fix64 radius = CalculateRadius();
            Fix64 height = CalculateHeight();

            CalculatePoints(height, radius, ref v1, ref v2);

            if (v1 != Fix64Vec2.zero && v2 != Fix64Vec2.zero)
            {
                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                Parallel2D.UpdateCapsule(_shape, _fixture, v1, v2, radius, center, angle);
            }
        }
示例#6
0
        public override PShape2D CreateShape(GameObject root)
        {
            Fix64Vec2 s = CalculateSize();

            if (s != Fix64Vec2.zero)
            {
                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                return(Parallel2D.CreateBox(s.x, s.y, center, angle));
            }
            else
            {
                return(null);
            }
        }
        public override PShape2D CreateShape(GameObject root)
        {
            Fix64Vec2 s = CalculateSize();

            if (s != Fix64Vec2.zero)
            {
                Fix64     angle  = Fix64.zero;
                Fix64Vec2 center = Fix64Vec2.zero;

                if (gameObject != root)
                {
                    angle  = Fix64.DegToRad(_pTransform.localEulerAngles.z);
                    center = (Fix64Vec2)_pTransform.localPosition;
                }

                if (s == Fix64Vec2.one)
                {
                    return(Parallel2D.CreatePolygon(convexVerts, convexVertsCount, center, angle));
                }
                else
                {
                    Fix64Vec2[] scaled = new Fix64Vec2[convexVertsCount];

                    for (int i = 0; i < convexVertsCount; i++)
                    {
                        scaled[i] = convexVerts[i] * s;
                    }

                    return(Parallel2D.CreatePolygon(scaled, convexVertsCount, center, angle));
                }
            }
            else
            {
                return(null);
            }
        }
示例#8
0
        void UpdateRigidbodyTransform()
        {
            if (_rigidbody2D == null)
            {
                _rigidbody2D = GetComponent <ParallelRigidbody2D>();
            }

            if (_rigidbody3D == null)
            {
                _rigidbody3D = GetComponent <ParallelRigidbody3D>();
            }

            if (_rigidbody2D != null)
            {
                Parallel2D.UpdateBodyTransForm(_rigidbody2D._body2D, (Fix64Vec2)_localPosition, Fix64.DegToRad(_internalLocalEularAngles.z));
            }

            if (_rigidbody3D != null)
            {
                Parallel3D.UpdateBodyTransForm(_rigidbody3D._body3D, _localPosition, _internalLocalRotation);
            }
        }