Exemple #1
0
        public void End(TouchContainer touch)
        {
            var p = touch.Touch.scenePos;

            Debug.Log($"touch end: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}");
            _originPool.Return(this);
        }
    void OnStartTouch(TouchContainer container)
    {
        var trail = _trailsPool.Obtain(null);

        if (trail == null)
        {
            return;
        }
        container.TouchListener = trail;
    }
        /// <summary>
        /// Get the planar velocity of a touch and its current and previous intersection-point in the selected plane's space
        /// </summary>
        /// <param name="touch"></param>
        /// <param name="plane">Arbitrary matrix of the XY plane to do the intersection with</param>
        /// <param name="context">Notui context to provide screen space/alignment information</param>
        /// <param name="currpos">Current intersection point in the space of the plane</param>
        /// <param name="prevpos">Previous intersection point in the space of the plane</param>
        /// <returns>Velocity of the touch relative to the space of the plane</returns>
        public static Vector3 GetPlanarVelocity(this TouchContainer touch, Matrix4x4 plane, NotuiContext context, out Vector3 currpos, out Vector3 prevpos)
        {
            // get planar coords for current touch position
            var hit = Intersections.PlaneRay(touch.WorldPosition, touch.ViewDir, plane, out var capos, out var crpos);

            currpos = crpos;

            // get planar coords for the previous touch position
            touch.GetPreviousWorldPosition(context, out var popos, out var pdir);
            var phit = Intersections.PlaneRay(popos, pdir, plane, out var papos, out var prpos);

            prevpos = prpos;
            return(crpos - prpos);
        }
        /// <summary>
        /// Get the previous world position of a touch
        /// </summary>
        /// <param name="touch">Touch in question</param>
        /// <param name="context">Context of the touch</param>
        /// <param name="popos">Previous world position</param>
        /// <param name="pdir">Previous ray direction</param>
        public static void GetPreviousWorldPosition(this TouchContainer touch, NotuiContext context, out Vector3 popos, out Vector3 pdir)
        {
            var prevpoint = touch.Point - touch.Velocity;

            Coordinates.GetPointWorldPosDir(prevpoint, context.ProjectionWithAspectRatioInverse, context.ViewInverse, out popos, out pdir);
        }
Exemple #5
0
        public void Update(TouchContainer touch)
        {
            var p = touch.Touch.scenePos;

            Debug.Log($"touch move: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}");
        }
Exemple #6
0
        public void Start(TouchContainer touch)
        {
            var p = touch.Touch.scenePos;

            Debug.Log($"touch start: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}");
        }
Exemple #7
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (Init)
            {
                PrevTouchSpread.SliceCount = 0;
                AutoIDs.SliceCount         = 0;
                Init = false;
            }

            SpreadMax = Math.Min(FPoints.SliceCount, FID.SliceCount);

            var dt = FHDEHost.FrameTime - lastftime;

            lastftime = FHDEHost.FrameTime;

            foreach (var touch in Touches.Values)
            {
                touch.Mainloop((float)dt);
            }

            for (int i = 0; i < SpreadMax; i++)
            {
                int tid = FID[i];
                if (Touches.ContainsKey(tid))
                {
                    TouchContainer tc = Touches[tid];
                    if (tc is FilteredTouch ftc)
                    {
                        ftc.FilterMinCutoff        = FMinCutoff[i];
                        ftc.FilterBeta             = FBeta[i];
                        ftc.FilterCutoffDerivative = FCutoffDerivative[i];
                    }
                    tc.Update(FPoints[i].AsSystemVector(), (float)dt);
                }
                else
                {
                    TouchContainer tc = FUseFilter[i] ? new FilteredTouch(tid, FMinCutoff[i], FBeta[i]) : new TouchContainer(tid);
                    tc.Mainloop((float)dt);
                    if (FUseFilter[i])
                    {
                        var ftc = (FilteredTouch)tc;
                        ftc.FilterCutoffDerivative = FCutoffDerivative[i];
                    }
                    tc.Update(FPoints[i].AsSystemVector(), (float)dt);
                    Touches.Add(tid, tc);
                }
            }

            var removables = (from touch in Touches.Values where touch.ExpireFrames > FExpire[0] select touch.Id)
                             .ToArray();

            foreach (var tid in removables)
            {
                Touches.Remove(tid);
            }

            this.SetSliceCountForAllOutput(Touches.Count);
            int ii = 0;

            foreach (var touch in Touches.Values)
            {
                FContainer[ii] = touch;
                FPointsOut[ii] = touch.Point.AsVVector();
                FVelOut[ii]    = touch.Velocity.AsVVector();
                FIDOut[ii]     = touch.Id;
                FAge[ii]       = touch.Age.Elapsed.TotalSeconds;
                FExpiry[ii]    = touch.ExpireFrames;
                FNew[ii]       = touch.AgeFrames < 2;
                ii++;
            }
        }