Exemple #1
0
    IEnumerator StartRun()
    {
        state = State.CreatingObjects;
        yield return(null);

        duration = Convert.ToSingle(durationList[durationSelId]);
        // Generate random values for tweens
        rndStartupPos = new Vector3[numTweens];
        rndPositions  = new Vector3[numTweens];
        rndRotations  = new Vector3[numTweens];
        rndFloats     = new float[numTweens];
        for (int i = 0; i < numTweens; ++i)
        {
            rndStartupPos[i] = RandomVector3(50, 50, 20);
            rndPositions[i]  = RandomVector3(50, 50, 20);
            rndRotations[i]  = RandomVector3(180, 180, 180);
            rndFloats[i]     = UnityEngine.Random.Range(-1000f, 1000f);
        }
        // Generate testObjs
        if (testType == TestType.Transforms)
        {
            testObjsGos   = new GameObject[numTweens];
            testObjsTrans = new Transform[numTweens];
        }
        else
        {
            testObjsData = new TestObjectData[numTweens];
        }
        for (int i = 0; i < numTweens; ++i)
        {
            if (testType == TestType.Transforms)
            {
                GameObject go = (GameObject)Instantiate(prefab);
                go.SetActive(true);
                Transform t = go.transform;
                if (testSetup != TestSetup.Emit)
                {
                    t.position = rndStartupPos[i];
                }
                t.parent         = container;
                testObjsGos[i]   = go;
                testObjsTrans[i] = t;
                if (disableRenderers || testType == TestType.Floats)
                {
                    go.renderer.enabled = false;
                }
            }
            else
            {
                testObjsData[i] = new TestObjectData();
            }
        }
        if (engine == Engine.DOTween)
        {
            // Set max capacity for this run.
            // We could set it to the correct amount, but it would be somehow unfair for LeanTween
            int minCapacityToBeFair = Convert.ToInt32(numTweensList[numTweensList.Length - 1]);
            int capacityX1          = Convert.ToInt32(numTweensList[numTweensSelId]);
            int neededCapacity      = 0;
            int capacity            = minCapacityToBeFair;
            if (testType == TestType.Transforms && positionTween)
            {
                neededCapacity += capacityX1;
            }
            if (testType == TestType.Transforms && rotationTween)
            {
                neededCapacity += capacityX1;
            }
            if (testType == TestType.Transforms && scaleTween)
            {
                neededCapacity += capacityX1;
            }
            if (minCapacityToBeFair < neededCapacity)
            {
                capacity = neededCapacity;
            }
            DOTween.SetTweensCapacity(capacity, 0);
        }

        yield return(null);

        state = State.TweensSetup;
        yield return(null);

        totCreationTime = Time.realtimeSinceStartup;
        SetupTweens();
        totCreationTime = Time.realtimeSinceStartup - totCreationTime;
        yield return(null);

        state = State.Running;
        // Reset FPS so average is more correct
        fpsGadget.ResetFps();
    }
	IEnumerator StartRun()
	{
		state = State.CreatingObjects;
		yield return null;

		duration = Convert.ToSingle(durationList[durationSelId]);
		// Generate random values for tweens
		rndStartupPos = new Vector3[numTweens];
		rndPositions = new Vector3[numTweens];
		rndRotations = new Vector3[numTweens];
		rndFloats = new float[numTweens];
		for (int i = 0; i < numTweens; ++i) {
			rndStartupPos[i] = RandomVector3(50, 50, 20);
			rndPositions[i] = RandomVector3(50, 50, 20);
			rndRotations[i] = RandomVector3(180, 180, 180);
			rndFloats[i] = UnityEngine.Random.Range(-1000f, 1000f);
		}
		// Generate testObjs
		if (testType == TestType.Transforms) {
			testObjsGos = new GameObject[numTweens];
			testObjsTrans = new Transform[numTweens];
		} else {
			testObjsData = new TestObjectData[numTweens];
		}
		for (int i = 0; i < numTweens; ++i) {
			if (testType == TestType.Transforms) {
				GameObject go = (GameObject)Instantiate(prefab);
				go.SetActive(true);
				Transform t = go.transform;
				if (testSetup != TestSetup.Emit) t.position = rndStartupPos[i];
				t.parent = container;
				testObjsGos[i] = go;
				testObjsTrans[i] = t;
				if (disableRenderers || testType == TestType.Floats) go.GetComponent<Renderer>().enabled = false;
			} else testObjsData[i] = new TestObjectData();
		}
		if (engine == Engine.DOTween) {
			// Set max capacity for this run.
			// We could set it to the correct amount, but it would be somehow unfair for LeanTween
			int minCapacityToBeFair = Convert.ToInt32(numTweensList[numTweensList.Length - 1]);
			int capacityX1 = Convert.ToInt32(numTweensList[numTweensSelId]);
			int neededCapacity = 0;
			int capacity = minCapacityToBeFair;
			if (testType == TestType.Transforms && positionTween) neededCapacity += capacityX1;
			if (testType == TestType.Transforms && rotationTween) neededCapacity += capacityX1;
			if (testType == TestType.Transforms && scaleTween) neededCapacity += capacityX1;
			if (minCapacityToBeFair < neededCapacity) capacity = neededCapacity;
			DOTween.SetTweensCapacity(capacity, 0);
		}
		
		yield return null;
		state = State.TweensSetup;
		yield return null;
		totCreationTime = Time.realtimeSinceStartup;
		SetupTweens();
		totCreationTime = Time.realtimeSinceStartup - totCreationTime;
		yield return null;
		state = State.Running;
		// Reset FPS so average is more correct
		fpsGadget.ResetFps();
	}
Exemple #3
0
    void SetupTweens()
    {
        // Ease
        DG.Tweening.Ease           dotweenEase = easing == Easing.Linear ? DG.Tweening.Ease.Linear : DG.Tweening.Ease.InOutQuad;
        Holoville.HOTween.EaseType hotweenEase = easing == Easing.Linear ? Holoville.HOTween.EaseType.Linear : Holoville.HOTween.EaseType.EaseInOutQuad;
        LeanTweenType leanEase = easing == Easing.Linear ? LeanTweenType.linear : LeanTweenType.easeInOutQuad;
        GoEaseType    goEase   = easing == Easing.Linear ? GoEaseType.Linear : GoEaseType.QuadInOut;

        iTween.EaseType iTweenEase = easing == Easing.Linear ? iTween.EaseType.linear : iTween.EaseType.easeInOutQuad;
        // Loop
        int loops = testSetup == TestSetup.Emit ? 1 : -1;

        DG.Tweening.LoopType       dotweenLoopType = testSetup == TestSetup.YoyoLoop ? DG.Tweening.LoopType.Yoyo : DG.Tweening.LoopType.Restart;
        Holoville.HOTween.LoopType hotweenLoopType = testSetup == TestSetup.YoyoLoop ? Holoville.HOTween.LoopType.Yoyo : Holoville.HOTween.LoopType.Restart;
        LeanTweenType leanLoopType = testSetup == TestSetup.YoyoLoop ? LeanTweenType.pingPong : LeanTweenType.clamp;
        GoLoopType    goLoopType   = testSetup == TestSetup.YoyoLoop ? GoLoopType.PingPong : GoLoopType.RestartFromBeginning;

        iTween.LoopType iTweenLoopType = loops != -1 ? iTween.LoopType.none : testSetup == TestSetup.YoyoLoop ? iTween.LoopType.pingPong : iTween.LoopType.loop;
        // Create tweens
        switch (testType)
        {
        case TestType.Floats:
            for (int i = 0; i < numTweens; ++i)
            {
                TestObjectData data = testObjsData[i];
                switch (engine)
                {
                case Engine.HOTween:
                    HOTween.To(data, duration, new Holoville.HOTween.TweenParms()
                               .Prop("floatValue", rndFloats[i])
                               .Ease(hotweenEase)
                               .Loops(loops, hotweenLoopType)
                               );
                    break;

                case Engine.LeanTween:
                    LeanTween.value(this.gameObject, x => data.floatValue = x, data.floatValue, rndFloats[i], duration).setEase(leanEase).setRepeat(loops).setLoopType(leanLoopType);
                    break;

                case Engine.GoKit:
                    Go.to(data, duration, new GoTweenConfig()
                          .floatProp("floatValueProperty", rndFloats[i])
                          .setEaseType(goEase)
                          .setIterations(loops, goLoopType)
                          );
                    break;

                case Engine.iTween:
                    Hashtable hs = new Hashtable();
                    hs.Add("from", data.floatValue);
                    hs.Add("to", rndFloats[i]);
                    hs.Add("time", duration);
                    hs.Add("onupdate", "UpdateiTweenFloat");
                    hs.Add("looptype", iTweenLoopType);
                    hs.Add("easetype", iTweenEase);
                    iTween.ValueTo(this.gameObject, hs);
                    break;

                default:
                    // tCopy is needed to create correct closure object,
                    // otherwise closure will pass the same t to all the loop
                    TestObjectData dataCopy = data;
                    DOTween.To(() => dataCopy.floatValue, x => dataCopy.floatValue = x, rndFloats[i], duration).SetEase(dotweenEase).SetLoops(loops, dotweenLoopType);
                    break;
                }
            }
            break;

        default:
            for (int i = 0; i < numTweens; ++i)
            {
                float      twDuration = testSetup == TestSetup.Emit ? UnityEngine.Random.Range(0.25f, 1f) : duration;
                Transform  t          = testObjsTrans[i];
                GameObject go         = testObjsGos[i];         // Used by LeanTween and iTween
                switch (engine)
                {
                case Engine.HOTween:
                    Holoville.HOTween.TweenParms tp = new Holoville.HOTween.TweenParms()
                                                      .Ease(hotweenEase)
                                                      .Loops(loops, hotweenLoopType);
                    if (positionTween)
                    {
                        Vector3 toPos = rndPositions[i];
                        tp.Prop("position", toPos);
                        if (testSetup == TestSetup.Emit)
                        {
                            tp.OnComplete(() => EmitHOTweenPositionFor(t, toPos, twDuration, hotweenEase));
                        }
                    }
                    if (rotationTween)
                    {
                        Vector3 toRot = rndRotations[i];
                        tp.Prop("rotation", toRot);
                        if (testSetup == TestSetup.Emit)
                        {
                            tp.OnComplete(() => EmitHOTweenRotationFor(t, toRot, twDuration, hotweenEase));
                        }
                    }
                    if (scaleTween)
                    {
                        tp.Prop("localScale", rndScale);
                        if (testSetup == TestSetup.Emit)
                        {
                            tp.OnComplete(() => EmitHOTweenScaleFor(t, rndScale, twDuration, hotweenEase));
                        }
                    }
                    HOTween.To(t, twDuration, tp);
                    break;

                case Engine.LeanTween:
                    LTDescr leanTween;
                    if (positionTween)
                    {
                        Vector3 toPos = rndPositions[i];
                        leanTween = LeanTween.move(go, rndPositions[i], twDuration).setEase(leanEase).setRepeat(loops).setLoopType(leanLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            leanTween.setOnComplete(() => EmitLeanTweenPositionFor(t, go, toPos, twDuration, leanEase));
                        }
                    }
                    if (rotationTween)
                    {
                        Vector3 toRot = rndRotations[i];
                        leanTween = LeanTween.rotate(go, rndRotations[i], twDuration).setEase(leanEase).setRepeat(loops).setLoopType(leanLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            leanTween.setOnComplete(() => EmitLeanTweenRotationFor(t, go, toRot, twDuration, leanEase));
                        }
                    }
                    if (scaleTween)
                    {
                        leanTween = LeanTween.scale(go, rndScale, twDuration).setEase(leanEase).setRepeat(loops).setLoopType(leanLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            leanTween.setOnComplete(() => EmitLeanTweenScaleFor(t, go, rndScale, twDuration, leanEase));
                        }
                    }
                    break;

                case Engine.GoKit:
                    GoTweenConfig goConfig = new GoTweenConfig()
                                             .setEaseType(goEase)
                                             .setIterations(loops, goLoopType);
                    if (positionTween)
                    {
                        Vector3 toPos = rndPositions[i];
                        goConfig.addTweenProperty(new PositionTweenProperty(toPos));
                        if (testSetup == TestSetup.Emit)
                        {
                            goConfig.onComplete(x => EmitGoKitPositionFor(t, toPos, twDuration, goEase));
                        }
                    }
                    if (rotationTween)
                    {
                        Vector3 toRot = rndRotations[i];
                        goConfig.addTweenProperty(new RotationTweenProperty(toRot));
                        if (testSetup == TestSetup.Emit)
                        {
                            goConfig.onComplete(x => EmitGoKitRotationFor(t, toRot, twDuration, goEase));
                        }
                    }
                    if (scaleTween)
                    {
                        goConfig.addTweenProperty(new ScaleTweenProperty(rndScale));
                        if (testSetup == TestSetup.Emit)
                        {
                            goConfig.onComplete(x => EmitGoKitScaleFor(t, rndScale, twDuration, goEase));
                        }
                    }
                    Go.to(t, twDuration, goConfig);
                    break;

                case Engine.iTween:
                    Hashtable hs;
                    if (positionTween)
                    {
                        hs = new Hashtable();
                        hs.Add("position", rndPositions[i]);
                        hs.Add("time", twDuration);
                        hs.Add("looptype", iTweenLoopType);
                        hs.Add("easetype", iTweenEase);
                        iTween.MoveTo(go, hs);
                    }
                    if (rotationTween)
                    {
                        hs = new Hashtable();
                        hs.Add("rotation", rndRotations[i]);
                        hs.Add("time", twDuration);
                        hs.Add("looptype", iTweenLoopType);
                        hs.Add("easetype", iTweenEase);
                        iTween.RotateTo(go, hs);
                    }
                    if (scaleTween)
                    {
                        hs = new Hashtable();
                        hs.Add("scale", rndScale);
                        hs.Add("time", twDuration);
                        hs.Add("looptype", iTweenLoopType);
                        hs.Add("easetype", iTweenEase);
                        iTween.ScaleTo(go, hs);
                    }
                    break;

                default:
                    // tCopy is needed to create correct closure object,
                    // otherwise closure will pass the same t to all the loop
                    Transform         tCopy = t;
                    DG.Tweening.Tween dotween;
                    if (positionTween)
                    {
                        Vector3 toPos = rndPositions[i];
                        dotween = tCopy.DOMove(toPos, twDuration).SetEase(dotweenEase).SetLoops(loops, dotweenLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            dotween.OnComplete(() => EmitDOTweenPositionFor(t, toPos, twDuration, dotweenEase));
                        }
                    }
                    if (rotationTween)
                    {
                        Vector3 toRot = rndRotations[i];
                        dotween = tCopy.DORotate(toRot, twDuration).SetEase(dotweenEase).SetLoops(loops, dotweenLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            dotween.OnComplete(() => EmitDOTweenRotationFor(t, toRot, twDuration, dotweenEase));
                        }
                    }
                    if (scaleTween)
                    {
                        dotween = tCopy.DOScale(rndScale, twDuration).SetEase(dotweenEase).SetLoops(loops, dotweenLoopType);
                        if (testSetup == TestSetup.Emit)
                        {
                            dotween.OnComplete(() => EmitDOTweenScaleFor(t, rndScale, twDuration, dotweenEase));
                        }
                    }
                    break;
                }
            }
            break;
        }
    }