コード例 #1
0
    IScrollerElementSnapProcessConstArg CreateMockConstArg()
    {
        IScrollerElementSnapProcessConstArg arg = Substitute.For <IScrollerElementSnapProcessConstArg>();

        arg.processManager.Returns(Substitute.For <IProcessManager>());
        arg.scroller.Returns(Substitute.For <IScroller>());
        arg.scrollerElement.Returns(Substitute.For <IUIElement>());
        arg.dimension.Returns(0);

        arg.targetElementLocalPositionOnAxis.Returns(0f);
        arg.initialVelocityOnAxis.Returns(0f);
        arg.stopVelocity.Returns(0.05f);

        return(arg);
    }
コード例 #2
0
    public void UpdateProcess_Demo(Vector2 initialLocalPos, float targetLocalPosOnAxis, float initialVelOnAxis, int dimension, float diffThreshold, float stopVelocity)
    {
        IScrollerElementSnapProcessConstArg arg = CreateMockConstArg();
        IUIElement scrollerElement = Substitute.For <IUIElement>();

        arg.scrollerElement.Returns(scrollerElement);
        scrollerElement.GetLocalPosition().Returns(initialLocalPos);
        arg.dimension.Returns(dimension);
        arg.targetElementLocalPositionOnAxis.Returns(targetLocalPosOnAxis);
        arg.processManager.GetScrollerElementSnapSpringCoefficient().Returns(5f);
        arg.initialVelocityOnAxis.Returns(initialVelOnAxis);
        arg.stopVelocity.Returns(stopVelocity);
        TestScrollerElementSnapProcess process = new TestScrollerElementSnapProcess(arg);

        float   deltaT         = .02f;
        bool    done           = false;
        Vector2 passedLocalPos = Vector2.zero;

        scrollerElement.SetLocalPosition(Arg.Do <Vector2>(x => passedLocalPos = x));

        float prevLocalPosOnAxis = initialLocalPos[dimension];

        DKUtility.DebugHelper.PrintInRed("initPos: " + initialLocalPos.ToString() + ", targetPosOnAxis: " + targetLocalPosOnAxis.ToString() + ", initVel: " + initialVelOnAxis.ToString() + ", dimension: " + dimension.ToString());

        float delta;

        while (!done)
        {
            process.UpdateProcess(deltaT);
            delta = Mathf.Abs(passedLocalPos[dimension] - prevLocalPosOnAxis) / deltaT;
            Debug.Log("scrollerElementLocalPos: " + passedLocalPos.ToString() + ", delta: " + delta.ToString());

            if (delta <= stopVelocity)
            {
                done = true;
            }

            prevLocalPosOnAxis = passedLocalPos[dimension];
        }
    }
コード例 #3
0
        public ScrollerElementSnapProcess(
            IScrollerElementSnapProcessConstArg arg
            ) : base(
                arg
                )
        {
            IUIElement scrollerElement = arg.scrollerElement;
            int        dimension       = arg.dimension;
            float      targetElementLocalPositionOnAxis = arg.targetElementLocalPositionOnAxis;
            float      initialVelOnAxis = arg.initialVelocityOnAxis;

            float initialElementLocalPosOnAxis = scrollerElement.GetLocalPosition()[dimension];

            thisTargetElementLocalPositionOnAxis = targetElementLocalPositionOnAxis;

            float springCoefficient = thisProcessManager.GetScrollerElementSnapSpringCoefficient();

            thisSpringCalculator = new RealTimeCriticallyDampedSpringCalculator(initialElementLocalPosOnAxis, targetElementLocalPositionOnAxis, initialVelOnAxis, springCoefficient);

            prevLocalPosOnAxis = scrollerElement.GetLocalPosition()[dimension];
            thisInitVel        = initialVelOnAxis;
        }
コード例 #4
0
 public TestScrollerElementSnapProcess(IScrollerElementSnapProcessConstArg arg) : base(arg)
 {
 }