Example #1
0
        protected void LateUpdate()
        {
            for (var i = fingers.Count - 1; i >= 0; i--)
            {
                var finger = fingers[i];
                var link   = P3dInputManager.Link.Find(ref links, finger);
                var down   = finger.Down;
                var set    = true;

                link.Move(finger.ScreenPosition);

                if (finger.Index == P3dInputManager.HOVER_FINGER_INDEX)
                {
                    if (showPreview == true)
                    {
                        RecordAndPaintAt(link, finger.ScreenPosition, link.ScreenOld, true, 0.0f, this);
                    }

                    continue;
                }

                if (NeedsDrawAngle == true)
                {
                    down = link.State == 2;
                    set  = link.State >= 2;
                }

                if (set == true)
                {
                    switch (frequency)
                    {
                    case FrequencyType.PixelInterval: PaintSmooth(link, down, interval); break;

                    case FrequencyType.ScaledPixelInterval: PaintSmooth(link, down, interval / P3dInputManager.ScaleFactor); break;

                    case FrequencyType.TimeInterval: PaintInterval(link, down); break;

                    case FrequencyType.OnceOnRelease: PaintRelease(link, down); break;

                    case FrequencyType.OnceOnPress: PaintPress(link, down); break;

                    case FrequencyType.OnceEveryFrame: PaintEvery(link, down); break;
                    }
                }

                if (finger.Up == true)
                {
                    fingers.Remove(finger);

                    connector.BreakHits(link);

                    OnFingerUp(link);

                    link.Clear();
                }
            }
        }
        private void SubmitHit(bool preview)
        {
            if (pointA != null && pointB != null)
            {
                var vector        = pointB.position - pointA.position;
                var maxDistance   = vector.magnitude;
                var ray           = new Ray(pointA.position, vector);
                var hit2D         = Physics2D.GetRayIntersection(ray, float.PositiveInfinity, layers);
                var hit3D         = default(RaycastHit);
                var finalPosition = default(Vector3);
                var finalRotation = default(Quaternion);

                // Hit 3D?
                if (Physics.Raycast(ray, out hit3D, maxDistance, layers) == true && (hit2D.collider == null || hit3D.distance < hit2D.distance))
                {
                    CalcHitData(hit3D.point, hit3D.normal, ray, out finalPosition, out finalRotation);

                    fraction = (hit3D.distance + offset) / maxDistance;

                    if (emit == EmitType.PointsIn3D)
                    {
                        connector.SubmitPoint(gameObject, preview, priority, pressure, finalPosition, finalRotation, this);
                    }
                    else if (emit == EmitType.PointsOnUV)
                    {
                        connector.HitCache.InvokeCoord(gameObject, preview, priority, pressure, new P3dHit(hit3D), finalRotation);
                    }
                    else if (emit == EmitType.TrianglesIn3D)
                    {
                        connector.HitCache.InvokeTriangle(gameObject, preview, priority, pressure, hit3D, finalRotation);
                    }
                }
                // Hit 2D?
                else if (hit2D.collider != null)
                {
                    CalcHitData(hit2D.point, hit2D.normal, ray, out finalPosition, out finalRotation);

                    fraction = (hit3D.distance + offset) / maxDistance;

                    if (emit == EmitType.PointsIn3D)
                    {
                        connector.SubmitPoint(gameObject, preview, priority, pressure, finalPosition, finalRotation, this);
                    }
                }
                else
                {
                    connector.BreakHits(this);

                    fraction = 1.0f;
                }
            }
        }
Example #3
0
        protected void LateUpdate()
        {
            for (var i = fingers.Count - 1; i >= 0; i--)
            {
                var finger = fingers[i];

                if (finger.Index == P3dInputManager.HOVER_FINGER_INDEX)
                {
                    continue;
                }

                if (finger.Up == true)
                {
                    if (storeStates == true)
                    {
                        P3dStateManager.StoreAllStates();
                    }
                }

                switch (frequency)
                {
                case FrequencyType.StartAndEnd: PaintStartEnd(finger); break;

                case FrequencyType.PixelInterval: PaintStartInterval(finger, interval, false); break;

                case FrequencyType.ScaledPixelInterval: PaintStartInterval(finger, interval / P3dInputManager.ScaleFactor, false); break;

                case FrequencyType.StretchedPixelInterval: PaintStartInterval(finger, interval, true); break;

                case FrequencyType.StretchedScaledPixelInterval: PaintStartInterval(finger, interval / P3dInputManager.ScaleFactor, true); break;

                case FrequencyType.Start: PaintOne(finger, 0.0f); break;

                case FrequencyType.End: PaintOne(finger, 1.0f); break;
                }

                connector.BreakHits(finger);

                if (finger.Up == true)
                {
                    fingers.Remove(finger);
                }
            }
        }
Example #4
0
        protected void PaintAt(P3dPointConnector connector, P3dHitCache hitCache, Vector2 screenPosition, Vector2 screenPositionOld, bool preview, float pressure, object owner)
        {
            var camera = P3dHelper.GetCamera(_camera);

            if (camera != null)
            {
                if (touchOffset != 0.0f && P3dInputManager.TouchCount > 0)
                {
                    screenPosition.y += touchOffset / P3dInputManager.ScaleFactor;
                }

                var ray           = camera.ScreenPointToRay(screenPosition);
                var hit2D         = Physics2D.GetRayIntersection(ray, float.PositiveInfinity, layers);
                var hit3D         = default(RaycastHit);
                var finalPosition = default(Vector3);
                var finalRotation = default(Quaternion);

                // Hit 3D?
                if (Physics.Raycast(ray, out hit3D, float.PositiveInfinity, layers) == true && (hit2D.collider == null || hit3D.distance < hit2D.distance))
                {
                    CalcHitData(hit3D.point, hit3D.normal, ray, camera, screenPositionOld, out finalPosition, out finalRotation);

                    if (emit == EmitType.PointsIn3D)
                    {
                        if (connector != null)
                        {
                            connector.SubmitPoint(gameObject, preview, priority, pressure, finalPosition, finalRotation, owner);
                        }
                        else
                        {
                            hitCache.InvokePoint(gameObject, preview, priority, pressure, finalPosition, finalRotation);
                        }

                        return;
                    }
                    else if (emit == EmitType.PointsOnUV)
                    {
                        hitCache.InvokeCoord(gameObject, preview, priority, pressure, new P3dHit(hit3D), finalRotation);

                        return;
                    }
                    else if (emit == EmitType.TrianglesIn3D)
                    {
                        hitCache.InvokeTriangle(gameObject, preview, priority, pressure, hit3D, finalRotation);

                        return;
                    }
                }
                // Hit 2D?
                else if (hit2D.collider != null)
                {
                    CalcHitData(hit2D.point, hit2D.normal, ray, camera, screenPositionOld, out finalPosition, out finalRotation);

                    if (emit == EmitType.PointsIn3D)
                    {
                        if (connector != null)
                        {
                            connector.SubmitPoint(gameObject, preview, priority, pressure, finalPosition, finalRotation, owner);
                        }
                        else
                        {
                            hitCache.InvokePoint(gameObject, preview, priority, pressure, finalPosition, finalRotation);
                        }

                        return;
                    }
                }
            }

            if (connector != null)
            {
                connector.BreakHits(owner);
            }
        }