view game/AnimatedPointElement.java @ 138:9eb791e2fa17

Optimize board updating logic, so that the old placed tiles need not to be redrawn from scratch on each screen update, as they do not change usually.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 Nov 2011 11:04:09 +0200
parents 4c0dec72e2f0
children 5eea4719b429
line wrap: on
line source

/*
 * Ristipolku animated game element
 * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org>
 */
package game;

import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.math.*;


public class AnimatedPointElement
{
    private float stime, value, steps;
    private IDMPoint pos;
    private Interpolate lerpV, lerpX, lerpY;
    boolean active, first;
    String text;

    public AnimatedPointElement(IDMPoint start, String text)
    {
        Random rnd = new Random();
        steps = 100;

        lerpX = new Interpolate(start.x - rnd.nextInt(100) + 50, start.x, steps);
        lerpY = new Interpolate(start.y - rnd.nextInt(100) + 50, start.y, steps);
        lerpV = new Interpolate(0.0f, 1.0f, steps);

        pos = new IDMPoint(start);
        active = false;
        first = true;
        this.text = text;
    }

    public void animate(float time)
    {
        if (first)
        {
            first = false;
            active = true;
            stime = time;
        }

        if (active)
        {
            float t = (time - stime);
            if (t >= steps)
            {
                t = steps;
                active = false;
            }

            value = lerpV.getValue(t);
            pos.x = lerpX.getValue(t);
            pos.y = lerpY.getValue(t);
        }
    }

    public void paint(Graphics2D g)
    {
        if (!active)
            return;

        Paint psave = g.getPaint();
        AffineTransform tsave = g.getTransform();
        Composite csave = g.getComposite();

//        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, typeValue));
        g.setFont(G.fonts[2]);
        g.setPaint(new Color(value, value, value, value));
        g.drawString(text, pos.x, pos.y);

        g.setTransform(tsave);
        g.setComposite(csave);
        g.setPaint(psave);
    }
}