Пример #1
0
        public override void initialize()
        {
            var textureAtlas = contentManager.Load <TextureAtlas>("bin/MacOSX/TextureAtlasTest/AtlasImages");

            var parentEntity = createEntity("parent");

            parentEntity.transform.position = new Vector2(300, 300);
            parentEntity.transform.rotation = MathHelper.PiOver4;
            parentEntity.addComponent(new Sprite(textureAtlas.getSubtexture("Ninja_Idle_0")));


            var childEntity = createEntity("child");

            childEntity.transform.parent        = parentEntity.transform;
            childEntity.transform.localPosition = new Vector2(50, 0);
            childEntity.transform.scale         = new Vector2(2, 2);
            childEntity.transform.rotation      = 0.5f;
            childEntity.addComponent(new Sprite(textureAtlas.getSubtexture("Ninja_Idle_1")));


            var childTwoEntity = createEntity("childTwo");

            childTwoEntity.transform.parent = childEntity.transform;
            childTwoEntity.addComponent(new Sprite(textureAtlas.getSubtexture("Ninja_Idle_2")));
            childTwoEntity.transform.localPosition = new Vector2(50, 0);
            childTwoEntity.transform.rotation      = 0.5f;


            PropertyTweens.floatPropertyTo(parentEntity.transform, "rotation", MathHelper.TwoPi, 1).start();
            //PropertyTweens.floatPropertyTo( childTwoEntity.transform, "rotation", MathHelper.TwoPi, 1 ).start();
        }
        void LightTweenCompleted(ITween <Vector2> tween)
        {
            // get a random point on screen and a random delay for the tweens
            var target = new Vector2(Random.Range(50, SceneRenderTargetSize.X - 100),
                                     Random.Range(50, SceneRenderTargetSize.Y - 100));
            var delay = Random.Range(0f, 1f);

            var transform = tween.GetTargetObject() as Transform;

            tween.PrepareForReuse(transform.Position, target, 2f)
            .SetCompletionHandler(LightTweenCompleted)
            .SetDelay(delay)
            .Start();

            // every so often add a scale tween
            if (Random.Chance(60))
            {
                transform.TweenLocalScaleTo(transform.LocalScale.X * 2f, 1f)
                .SetLoops(LoopType.PingPong)
                .SetEaseType(EaseType.CubicIn)
                .SetDelay(delay)
                .Start();
            }

            // every so often change our color
            if (Random.Chance(80))
            {
                var sprite = transform.Entity.GetComponent <SpriteRenderer>();
                PropertyTweens.ColorPropertyTo(sprite, "Color", Random.NextColor(), 2f)
                .SetDelay(delay)
                .Start();
            }
        }
Пример #3
0
        void lightTweenCompleted(ITween <Vector2> tween)
        {
            // get a random point on screen and a random delay for the tweens
            var target = new Vector2(Nez.Random.range(50, sceneRenderTargetSize.X - 100), Nez.Random.range(50, sceneRenderTargetSize.Y - 100));
            var delay  = Nez.Random.range(0f, 1f);

            var transform = tween.getTargetObject() as Transform;

            tween.prepareForReuse(transform.position, target, 2f)
            .setCompletionHandler(lightTweenCompleted)
            .setDelay(delay)
            .start();

            // every so often add a scale tween
            if (Nez.Random.chance(0.6f))
            {
                transform.tweenLocalScaleTo(transform.localScale.X * 2f, 1f)
                .setLoops(LoopType.PingPong)
                .setEaseType(EaseType.CubicIn)
                .setDelay(delay)
                .start();
            }

            // every so often change our color
            if (Nez.Random.chance(0.8f))
            {
                var sprite = transform.entity.getComponent <Sprite>();
                PropertyTweens.colorPropertyTo(sprite, "color", Nez.Random.nextColor(), 2f)
                .setDelay(delay)
                .start();
            }
        }
Пример #4
0
        /// <summary>
        /// Called when tooltip is hidden. Default implementation sets actions to animate hiding and to remove the Element from the stage
        /// when the actions are complete.
        /// </summary>
        /// <returns>The action.</returns>
        /// <param name="tooltip">Tooltip.</param>
        protected void hideAction(Tooltip tooltip)
        {
            var container = tooltip.getContainer();

            if (animations)
            {
                PropertyTweens.floatPropertyTo(container, "scaleX", 0.2f, 0.2f).setEaseType(EaseType.QuintOut).start();
                PropertyTweens.floatPropertyTo(container, "scaleY", 0.2f, 0.2f).setEaseType(EaseType.QuintOut)
                .setCompletionHandler(t => container.remove()).start();
            }
            else
            {
                container.remove();
            }
        }
Пример #5
0
        /// <summary>
        /// Called when tooltip is shown. Default implementation sets actions to animate showing.
        /// </summary>
        /// <returns>The action.</returns>
        /// <param name="tooltip">Tooltip.</param>
        protected void showAction(Tooltip tooltip)
        {
            var container = tooltip.getContainer();

            if (animations)
            {
                var actionTime = _time > 0 ? 0.3f : 0.15f;
                container.setTransform(true);
                container.setScale(0.5f);
                PropertyTweens.floatPropertyTo(container, "scaleX", 1, actionTime).setEaseType(EaseType.QuintIn).start();
                PropertyTweens.floatPropertyTo(container, "scaleY", 1, actionTime).setEaseType(EaseType.QuintIn).start();
            }
            else
            {
                container.setScale(1);
            }
        }
Пример #6
0
 public static ITween <Vector3> Tween(this object self, string memberName, Vector3 to, float duration)
 {
     return(PropertyTweens.Vector3PropertyTo(self, memberName, to, duration));
 }
Пример #7
0
 public static ITween <Color> Tween(this object self, string memberName, Color to, float duration)
 {
     return(PropertyTweens.ColorPropertyTo(self, memberName, to, duration));
 }
Пример #8
0
 public static ITween <float> Tween(this object self, string memberName, float to, float duration)
 {
     return(PropertyTweens.FloatPropertyTo(self, memberName, to, duration));
 }
Пример #9
0
 // Use this for initialization
 void Start()
 {
     InitialPosition = transform.position;
     PropertyTweens.floatPropertyTo(this, "PositionY", Range.y, duration).setEaseType(ease).setLoops(LoopType.PingPong, 100).start();
 }
Пример #10
0
        protected override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (Input.rightMouseButtonPressed)
            {
                Debug.log("window size: {0} x {1}", Window.ClientBounds.Width, Window.ClientBounds.Height);
            }

            if (Input.leftMouseButtonPressed)
            {
                var screenPt = scene.camera.screenToWorldPoint(Input.scaledMousePosition);
                var worldPt  = scene.camera.worldToScreenPoint(screenPt);
                Debug.log("mouse pos: {0}, scaled mouse pos: {1}, screen to world point: {2}, world to screen point: {3}", Input.rawMousePosition, Input.scaledMousePosition, screenPt, worldPt);

                var spriteDude = scene.findEntity("sprite-dude");
                if (spriteDude != null)
                {
                    spriteDude.getComponent <Sprite <int> >().pause();
                    var worldPos = scene.camera.screenToWorldPoint(Input.scaledMousePosition);
                    PropertyTweens.vector2PropertyTo(spriteDude.transform, "position", worldPos, 0.5f)
                    .setLoops(LoopType.PingPong, 1)
                    .setContext(spriteDude)
                    .setCompletionHandler(tween =>
                    {
                        var sprite = (tween.context as Entity).getComponent <Sprite <int> >();

                        // if the scene changed during the tween sprite will be null
                        if (sprite != null)
                        {
                            sprite.unPause();
                        }
                    })
                    .start();

                    PropertyTweens.vector2PropertyTo(spriteDude.transform, "scale", new Vector2(1.5f, 2.5f), 1f)
                    .setLoops(LoopType.PingPong, 1)
                    .start();

                    PropertyTweens.floatPropertyTo(spriteDude.transform, "rotation", MathHelper.PiOver2, 1f)
                    .setLoops(LoopType.PingPong, 1)
                    .start();
                }

                var playerDude = scene.findEntity("player-moon");
                if (playerDude != null)
                {
                    var start = playerDude.transform.position + new Vector2(64f, 0f);
                    var end   = playerDude.transform.position + new Vector2(256f, 0f);
                    Debug.drawLine(start, end, Color.Black, 2f);
                    var hit = Physics.linecast(start, end);
                    if (hit.collider != null)
                    {
                        Debug.log("ray HIT {0}, collider: {1}", hit, hit.collider.entity);
                    }
                }


                var cam = scene.findEntity("camera-follow");
                if (cam != null && cam.getComponent <CameraShake>() != null)
                {
                    cam.getComponent <CameraShake>().shake();
                }


                var particles = scene.findEntity("particles");
                if (particles != null && particles.getComponent <ParticleEmitter>() != null)
                {
                    if (particles.getComponent <ParticleEmitter>().isPlaying)
                    {
                        particles.getComponent <ParticleEmitter>().pause();
                    }
                    else
                    {
                        particles.getComponent <ParticleEmitter>().play();
                    }
                }
            }

            // allow click-drag to move the camera
            if (Input.leftMouseButtonDown)
            {
                var deltaPos = Input.scaledMousePositionDelta;
                scene.camera.position -= deltaPos;
            }

            if (Input.mouseWheelDelta != 0)
            {
                scene.camera.zoomIn(Input.mouseWheelDelta * 0.0001f);
            }
        }
Пример #11
0
    void OnGUI()
    {
        DemoGUIHelpers.setupGUIButtons();
        _duration = DemoGUIHelpers.durationSlider(_duration);


        if (_springTween == null)
        {
            if (GUILayout.Button("Custom Property Tween (wackyDoodleWidth)"))
            {
                PropertyTweens.floatPropertyTo(this, "wackyDoodleWidth", 1f, 6f, _duration)
                .setLoops(LoopType.PingPong)
                .start();
            }


            if (GUILayout.Button("Position via Property Tween"))
            {
                PropertyTweens.vector3PropertyTo(cube, "position", cube.position, new Vector3(5f, 5f, 5f), _duration)
                .setLoops(LoopType.PingPong)
                .start();
            }



            if (GUILayout.Button("Tween Party (color, position, scale and rotation)"))
            {
                var party = new TweenParty(_duration);
                party.addTween(cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black))
                .addTween(cube.ZKpositionTo(new Vector3(7f, 4f)))
                .addTween(cube.ZKlocalScaleTo(new Vector3(1f, 4f)))
                .addTween(cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one)))
                .setLoops(LoopType.PingPong)
                .start();
            }


            if (GUILayout.Button("Tween Chain (same props as the party)"))
            {
                var chain = new TweenChain();
                chain.appendTween(cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black, _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKpositionTo(new Vector3(7f, 4f), _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKlocalScaleTo(new Vector3(1f, 4f), _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one), _duration).setLoops(LoopType.PingPong))
                .start();
            }


            if (GUILayout.Button("Chaining Tweens Directly (same props as the party)"))
            {
                cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black).setLoops(LoopType.PingPong)
                .setNextTween
                (
                    cube.ZKpositionTo(new Vector3(7f, 4f)).setLoops(LoopType.PingPong).setNextTween
                    (
                        cube.ZKlocalScaleTo(new Vector3(1f, 4f)).setLoops(LoopType.PingPong).setNextTween
                        (
                            cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one)).setLoops(LoopType.PingPong)
                        )
                    )
                )
                .start();
            }


            if (GUILayout.Button("Start Spring Position"))
            {
                _springTween = new TransformSpringTween(cube, TransformTargetType.Position, cube.position);
            }


            if (GUILayout.Button("Start Spring Scale"))
            {
                _springTween = new TransformSpringTween(cube, TransformTargetType.LocalScale, cube.localScale);
            }
        }
        else
        {
            GUILayout.Label("While the spring tween is active the cube will spring to\n" +
                            "whichever location you click or scale x/y to that location\n" +
                            "if you chose a scale spring. The sliders below let you tweak\n" +
                            "the spring contants.\n\n" +
                            "For the scale tween, try clicking places on a horizontal or vertical\n" +
                            "axis to get a feel for how it works.");

            springSliders();

            if (GUILayout.Button("Stop Spring"))
            {
                _springTween.stop();
                _springTween    = null;
                cube.position   = new Vector3(-1f, -2f);
                cube.localScale = Vector3.one;
            }
        }


        DemoGUIHelpers.easeTypesGUI();
    }
Пример #12
0
        public override void initialize()
        {
            base.initialize();

            Screen.setSize(1280, 720);

            // render layer for all lights and any emissive Sprites
            var LIGHT_RENDER_LAYER = 5;

            clearColor = Color.MonoGameOrange;

            // create a Renderer that renders all but the light layer and screen space layer
            addRenderer(new RenderLayerExcludeRenderer(0, LIGHT_RENDER_LAYER, SCREEN_SPACE_RENDER_LAYER));

            // create a Renderer that renders only the light layer into a render target
            var lightRenderer = addRenderer(new RenderLayerRenderer(-1, LIGHT_RENDER_LAYER));

            lightRenderer.renderTargetClearColor = new Color(10, 10, 10, 255);
            lightRenderer.renderTexture          = new RenderTexture();

            // add a PostProcessor that renders the light render target
            addPostProcessor(new SpriteLightPostProcessor(0, lightRenderer.renderTexture));

            var lightTexture     = contentManager.Load <Texture2D>("Shadows/sprite-light");
            var moonTexture      = contentManager.Load <Texture2D>("Shared/moon");
            var blockTexture     = contentManager.Load <Texture2D>("Shadows/Block");
            var blockGlowTexture = contentManager.Load <Texture2D>("Shadows/BlockGlow");

            // create some moons
            Action <Vector2, string, bool> boxMaker = (Vector2 pos, string name, bool isTrigger) =>
            {
                var ent = createEntity(name);
                ent.transform.position = pos;
                ent.addComponent(new Sprite(blockTexture));
                var collider = ent.colliders.add(new BoxCollider());

                // add a glow sprite on the light render layer
                var glowSprite = new Sprite(blockGlowTexture);
                glowSprite.renderLayer = LIGHT_RENDER_LAYER;
                ent.addComponent(glowSprite);

                if (isTrigger)
                {
                    collider.isTrigger = true;
                    ent.addComponent(new TriggerListener());
                }
            };

            boxMaker(new Vector2(0, 100), "moon1", false);
            boxMaker(new Vector2(150, 100), "moon11", false);
            boxMaker(new Vector2(300, 100), "moon12", false);
            boxMaker(new Vector2(450, 100), "moon13", false);
            boxMaker(new Vector2(600, 100), "moon14", false);

            boxMaker(new Vector2(50, 500), "moon3", true);
            boxMaker(new Vector2(500, 250), "moon4", false);

            var moonEnt = createEntity("moon");

            moonEnt.addComponent(new Sprite(moonTexture));
            moonEnt.transform.position = new Vector2(100, 0);

            moonEnt = createEntity("moon2");
            moonEnt.addComponent(new Sprite(moonTexture));
            moonEnt.transform.position = new Vector2(-500, 0);


            var lightEnt = createEntity("sprite-light");

            lightEnt.addComponent(new Sprite(lightTexture));
            lightEnt.transform.position = new Vector2(-700, 0);
            lightEnt.transform.scale    = new Vector2(4);
            lightEnt.getComponent <Sprite>().renderLayer = LIGHT_RENDER_LAYER;


            // add an animation to "moon4"
            findEntity("moon4").addComponent(new MovingPlatform(250, 400));

            // create a player moon
            var entity = createEntity("player-block");

            entity.transform.position = new Vector2(220, 220);
            var sprite = new Sprite(blockTexture);

            sprite.renderLayer = LIGHT_RENDER_LAYER;
            entity.addComponent(sprite);
            entity.addComponent(new SimpleMover());
            entity.colliders.add(new BoxCollider());


            // add a follow camera
            camera.entity.addComponent(new FollowCamera(entity));
            camera.entity.addComponent(new CameraShake());


            // setup some lights and animate the colors
            var pointLight = new Nez.Shadows.PointLight(600, Color.Red);

            pointLight.renderLayer = LIGHT_RENDER_LAYER;
            pointLight.power       = 1f;
            var light = createEntity("light");

            light.transform.position = new Vector2(650f, 300f);
            light.addComponent(pointLight);

            PropertyTweens.colorPropertyTo(pointLight, "color", new Color(0, 0, 255, 255), 1f)
            .setEaseType(EaseType.Linear)
            .setLoops(LoopType.PingPong, 100)
            .start();

            PropertyTweens.floatPropertyTo(pointLight, "power", 0.1f, 1f)
            .setEaseType(EaseType.Linear)
            .setLoops(LoopType.PingPong, 100)
            .start();


            pointLight             = new Nez.Shadows.PointLight(500, Color.Yellow);
            pointLight.renderLayer = LIGHT_RENDER_LAYER;
            light = createEntity("light-two");
            light.transform.position = new Vector2(-50f);
            light.addComponent(pointLight);

            PropertyTweens.colorPropertyTo(pointLight, "color", new Color(0, 255, 0, 255), 1f)
            .setEaseType(EaseType.Linear)
            .setLoops(LoopType.PingPong, 100)
            .start();


            pointLight             = new Nez.Shadows.PointLight(500, Color.AliceBlue);
            pointLight.renderLayer = LIGHT_RENDER_LAYER;
            light = createEntity("light-three");
            light.transform.position = new Vector2(100f);
            light.addComponent(pointLight);
        }
Пример #13
0
        public override void Initialize()
        {
            base.Initialize();

            Screen.SetSize(1280, 720);

            // render layer for all lights and any emissive Sprites
            var lightRenderLayer = 5;

            ClearColor = Color.White;

            // create a Renderer that renders all but the light layer and screen space layer
            AddRenderer(new RenderLayerExcludeRenderer(0, lightRenderLayer, ScreenSpaceRenderLayer));

            // create a Renderer that renders only the light layer into a render target
            var lightRenderer = AddRenderer(new RenderLayerRenderer(-1, lightRenderLayer));

            lightRenderer.RenderTargetClearColor = new Color(10, 10, 10, 255);
            lightRenderer.RenderTexture          = new RenderTexture();

            // add a PostProcessor that renders the light render target and blurs it
            AddPostProcessor(new PolyLightPostProcessor(0, lightRenderer.RenderTexture))
            .SetEnableBlur(true)
            .SetBlurAmount(0.5f);

            var lightTexture     = Content.LoadTexture(Nez.Content.Shadows.Spritelight);
            var moonTexture      = Content.LoadTexture(Nez.Content.Shared.Moon);
            var blockTexture     = Content.LoadTexture(Nez.Content.Shadows.Block);
            var blockGlowTexture = Content.LoadTexture(Nez.Content.Shadows.BlockGlow);

            // create some boxes
            Action <Vector2, string, bool> boxMaker = (Vector2 pos, string name, bool isTrigger) =>
            {
                var ent = CreateEntity(name);
                ent.Position = pos;
                ent.AddComponent(new SpriteRenderer(blockTexture));
                var collider = ent.AddComponent <BoxCollider>();

                // add a glow sprite on the light render layer
                var glowSprite = new SpriteRenderer(blockGlowTexture);
                glowSprite.RenderLayer = lightRenderLayer;
                ent.AddComponent(glowSprite);

                if (isTrigger)
                {
                    collider.IsTrigger = true;
                    ent.AddComponent(new TriggerListener());
                }
            };

            boxMaker(new Vector2(0, 100), "box0", false);
            boxMaker(new Vector2(150, 100), "box1", false);
            boxMaker(new Vector2(300, 100), "box2", false);
            boxMaker(new Vector2(450, 100), "box3", false);
            boxMaker(new Vector2(600, 100), "box4", false);

            boxMaker(new Vector2(50, 500), "box5", true);
            boxMaker(new Vector2(500, 250), "box6", false);

            var moonEnt = CreateEntity("moon");

            moonEnt.AddComponent(new SpriteRenderer(moonTexture));
            moonEnt.Position = new Vector2(100, 0);

            moonEnt = CreateEntity("moon2");
            moonEnt.AddComponent(new SpriteRenderer(moonTexture));
            moonEnt.Position = new Vector2(-500, 0);


            var lightEnt = CreateEntity("sprite-light");

            lightEnt.AddComponent(new SpriteRenderer(lightTexture));
            lightEnt.Position = new Vector2(-700, 0);
            lightEnt.Scale    = new Vector2(4);
            lightEnt.GetComponent <SpriteRenderer>().RenderLayer = lightRenderLayer;


            // add an animation to "box4"
            FindEntity("box4").AddComponent(new MovingPlatform(250, 400));

            // create a player block
            var entity = CreateEntity("player-block");

            entity.SetPosition(new Vector2(220, 220))
            .AddComponent(new SpriteRenderer(blockTexture).SetRenderLayer(lightRenderLayer))
            .AddComponent(new SimpleMover())
            .AddComponent <BoxCollider>();


            // add a follow camera
            Camera.Entity.AddComponent(new FollowCamera(entity));
            Camera.Entity.AddComponent(new CameraShake());


            // setup some lights and animate the colors
            var pointLight = new PolyLight(600, Color.Red);

            pointLight.RenderLayer = lightRenderLayer;
            pointLight.Power       = 1f;

            var light = CreateEntity("light");

            light.SetPosition(new Vector2(700f, 300f))
            .AddComponent(pointLight);

            pointLight.TweenColorTo(new Color(0, 0, 255, 255), 1f)
            .SetEaseType(EaseType.Linear)
            .SetLoops(LoopType.PingPong, 100)
            .Start();

            PropertyTweens.FloatPropertyTo(pointLight, "Power", 0.1f, 1f)
            .SetEaseType(EaseType.Linear)
            .SetLoops(LoopType.PingPong, 100)
            .Start();


            pointLight             = new PolyLight(500, Color.Yellow);
            pointLight.RenderLayer = lightRenderLayer;
            light          = CreateEntity("light-two");
            light.Position = new Vector2(-50f);
            light.AddComponent(pointLight);

            pointLight.TweenColorTo(new Color(0, 255, 0, 255), 1f)
            .SetEaseType(EaseType.Linear)
            .SetLoops(LoopType.PingPong, 100)
            .Start();


            pointLight             = new PolyLight(500, Color.AliceBlue);
            pointLight.RenderLayer = lightRenderLayer;
            light          = CreateEntity("light-three");
            light.Position = new Vector2(100, 250);
            light.AddComponent(pointLight);

            pointLight.TweenColorTo(new Color(200, 100, 155, 255), 1f)
            .SetEaseType(EaseType.QuadIn)
            .SetLoops(LoopType.PingPong, 100)
            .Start();
        }
Пример #14
0
    void OnGUI()
    {
        DemoGUIHelpers.setupGUIButtons();


        if (_springTween == null)
        {
            _duration = DemoGUIHelpers.durationSlider(_duration);


            if (GUILayout.Button("Custom Property Tween (wackyDoodleWidth)"))
            {
                PropertyTweens.floatPropertyTo(this, "wackyDoodleWidth", 6f, _duration)
                .setFrom(1f)
                .setLoops(LoopType.PingPong)
                .start();
            }


            if (GUILayout.Button("Position via Property Tween"))
            {
                PropertyTweens.vector3PropertyTo(cube, "position", new Vector3(5f, 5f, 5f), _duration)
                .setLoops(LoopType.PingPong)
                .start();
            }



            if (GUILayout.Button("Tween Party (color, position, scale and rotation)"))
            {
                var party = new TweenParty(_duration);
                party.addTween(cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black))
                .addTween(cube.ZKpositionTo(new Vector3(7f, 4f)))
                .addTween(cube.ZKlocalScaleTo(new Vector3(1f, 4f)))
                .addTween(cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one)))
                .setLoops(LoopType.PingPong)
                .start();
            }


            if (GUILayout.Button("Tween Chain (same props as the party)"))
            {
                var chain = new TweenChain();
                chain.appendTween(cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black, _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKpositionTo(new Vector3(7f, 4f), _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKlocalScaleTo(new Vector3(1f, 4f), _duration).setLoops(LoopType.PingPong))
                .appendTween(cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one), _duration).setLoops(LoopType.PingPong))
                .start();
            }


            if (GUILayout.Button("Chaining Tweens Directly (same props as the party)"))
            {
                cube.GetComponent <Renderer>().material.ZKcolorTo(Color.black, _duration).setLoops(LoopType.PingPong)
                .setNextTween
                (
                    cube.ZKpositionTo(new Vector3(7f, 4f), _duration).setLoops(LoopType.PingPong).setNextTween
                    (
                        cube.ZKlocalScaleTo(new Vector3(1f, 4f), _duration).setLoops(LoopType.PingPong).setNextTween
                        (
                            cube.ZKrotationTo(Quaternion.AngleAxis(180f, Vector3.one), _duration).setLoops(LoopType.PingPong)
                        )
                    )
                )
                .start();
            }


            GUILayout.Space(10);
            if (GUILayout.Button("Start Spring Position"))
            {
                _springTween = new TransformSpringTween(cube, TransformTargetType.Position, cube.position);
            }


            if (GUILayout.Button("Start Spring Position (overdamped)"))
            {
                _springTween = new TransformSpringTween(cube, TransformTargetType.Position, cube.position);
                _springTween.dampingRatio     = 1.5f;
                _springTween.angularFrequency = 20f;
            }


            if (GUILayout.Button("Start Spring Scale"))
            {
                _springTween = new TransformSpringTween(cube, TransformTargetType.LocalScale, cube.localScale);
            }
            GUILayout.Space(10);


            if (GUILayout.Button("Run Action Every 1s After 2s Delay"))
            {
                ActionTask.every(2f, 1f, this, task =>
                {
                    // by using the context we get away with not allocating when passing this Action around!
                    (task.context as ZestKitOtherGoodies).methodCalledForDemonstrationPurposes();
                });
            }


            if (GUILayout.Button("ActionTask Interoperability"))
            {
                Debug.Log("The Story: An ActionTask with a 2s delay will be created with a continueWith ActionTask appended to it that will tick every 0.3s for 2s. The original ActionTask will have a waitFor called that is an ActionTask with a 1s delay. Follow?");
                Debug.Log("--- current time: " + Time.time);

                ActionTask.afterDelay(2f, this, task =>
                {
                    Debug.Log("--- root task ticked: " + Time.time);
                }).continueWith
                (
                    ActionTask.create(this, task =>
                {
                    Debug.Log("+++ continueWith task elapsed time: " + task.elapsedTime);
                    if (task.elapsedTime > 2f)
                    {
                        task.stop();
                    }
                })
                    .setDelay(1f)
                    .setRepeats(0.3f)
                ).waitFor
                (
                    ActionTask.afterDelay(1f, this, task =>
                {
                    Debug.Log("--- waitFor ticked: " + Time.time);
                })
                );
            }

            DemoGUIHelpers.easeTypesGUI();
        }
        else
        {
            GUILayout.Label("While the spring tween is active the cube will spring to\n" +
                            "whichever location you click or scale x/y to that location\n" +
                            "if you chose a scale spring. The sliders below let you tweak\n" +
                            "the spring contants.\n\n" +
                            "For the scale tween, try clicking places on a horizontal or vertical\n" +
                            "axis to get a feel for how it works.");

            springSliders();

            var prefix        = _springTween.targetType == TransformTargetType.Position ? "Spring position to:" : "Spring scale to:";
            var mousePosWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            var labelText     = string.Format("{0}\nx: {1:F1}\ny: {2:F1}", prefix, mousePosWorld.x, mousePosWorld.y);
            GUI.Label(new Rect(Input.mousePosition.x, Screen.height - Input.mousePosition.y - 50f, 130f, 50f), labelText);


            if (GUILayout.Button("Stop Spring"))
            {
                _springTween.stop();
                _springTween    = null;
                cube.position   = new Vector3(-1f, -2f);
                cube.localScale = Vector3.one;
            }
        }
    }
Пример #15
0
 public static ITween <System.Numerics.Vector2> Tween(this object self, string memberName, System.Numerics.Vector2 to, float duration)
 {
     return(PropertyTweens.Vector2PropertyTo(self, memberName, to, duration));
 }