![JAR search and dependency download from the Maven repository](/logo.png)
com.rafaskoberg.gdx.typinglabel.effects.SlideEffect Maven / Gradle / Ivy
package com.rafaskoberg.gdx.typinglabel.effects;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.IntFloatMap;
import com.rafaskoberg.gdx.typinglabel.Effect;
import com.rafaskoberg.gdx.typinglabel.TypingGlyph;
import com.rafaskoberg.gdx.typinglabel.TypingLabel;
/** Moves the text horizontally easing it into the final position. Doesn't repeat itself. */
public class SlideEffect extends Effect {
private static final float DEFAULT_DISTANCE = 2f;
private static final float DEFAULT_INTENSITY = 0.375f;
private float distance = 1; // How much of their height they should move
private float intensity = 1; // How fast the glyphs should move
private boolean elastic = false; // Whether or not the glyphs have an elastic movement
private IntFloatMap timePassedByGlyphIndex = new IntFloatMap();
public SlideEffect(TypingLabel label, String[] params) {
super(label);
// Distance
if(params.length > 0) {
this.distance = paramAsFloat(params[0], 1);
}
// Intensity
if(params.length > 1) {
this.intensity = paramAsFloat(params[1], 1);
}
// Elastic
if(params.length > 2) {
this.elastic = paramAsBoolean(params[2]);
}
}
@Override
protected void onApply(TypingGlyph glyph, int localIndex, float delta) {
// Calculate real intensity
float realIntensity = intensity * (elastic ? 3f : 1f) * DEFAULT_INTENSITY;
// Calculate progress
float timePassed = timePassedByGlyphIndex.getAndIncrement(localIndex, 0, delta);
float progress = MathUtils.clamp(timePassed / realIntensity, 0, 1);
// Calculate offset
Interpolation interpolation = elastic ? Interpolation.swingOut : Interpolation.sine;
float interpolatedValue = interpolation.apply(1, 0, progress);
float x = getLineHeight() * distance * interpolatedValue * DEFAULT_DISTANCE;
// Apply changes
glyph.xoffset += x;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy