Package tripleplay.game.trans

Source Code of tripleplay.game.trans.FlipTransition

//
// Triple Play - utilities for use in PlayN-based games
// Copyright (c) 2011-2014, Three Rings Design, Inc. - All rights reserved.
// http://github.com/threerings/tripleplay/blob/master/LICENSE

package tripleplay.game.trans;

import pythagoras.f.FloatMath;

import static playn.core.PlayN.graphics;

import tripleplay.game.Screen;
import tripleplay.shaders.RotateYShader;
import tripleplay.util.Interpolator;

/**
* Flips the current screen over, revealing the new screen as if it were on the reverse side of the
* current screen.
*/
public class FlipTransition extends InterpedTransition<FlipTransition>
{
    /** Reverses this transition, making it flip the other direction. */
    public FlipTransition unflip () { _unflip = true; return this; }

    @Override public void init (Screen oscreen, Screen nscreen) {
        super.init(oscreen, nscreen);
        nscreen.layer.setDepth(-1);
        _oshader = new RotateYShader(graphics().ctx(), 0.5f, 0.5f, 1);
        oscreen.layer.setShader(_oshader);
        _nshader = new RotateYShader(graphics().ctx(), 0.5f, 0.5f, 1);
        nscreen.layer.setShader(_nshader);
    }

    @Override public boolean update (Screen oscreen, Screen nscreen, float elapsed) {
        float pct = _interp.applyClamp(0, 1, elapsed, _duration);
        if (pct >= 0.5f && !_flipped) {
            nscreen.layer.setDepth(0);
            oscreen.layer.setDepth(-1);
            _flipped = true;
        }
        if (_unflip) pct = -pct;
        _oshader.angle = FloatMath.PI * pct;
        _nshader.angle = FloatMath.PI * (pct - 1);
        return elapsed >= _duration;
    }

    @Override public void complete (Screen oscreen, Screen nscreen) {
        super.complete(oscreen, nscreen);
        oscreen.layer.setDepth(0);
        oscreen.layer.setShader(null);
        nscreen.layer.setDepth(0);
        nscreen.layer.setShader(null);
    }

    @Override protected Interpolator defaultInterpolator () {
        return Interpolator.LINEAR;
    }

    protected boolean _flipped, _unflip;
    protected RotateYShader _oshader, _nshader;
}
TOP

Related Classes of tripleplay.game.trans.FlipTransition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.