// -*- Mode: Jde -*-
//
// File           : Kokeilu3.java
//
// Author         : Esko Nuutila <Esko.Nuutila@hut.fi>
//
// Created        : Mon Sep 24 14:20:31 2001 by enu
// Last modified  : Mon Sep 24 14:22:48 2001 by enu
//

import java.awt.Color;

// Tämä luokka testaa neliöiden ja kolmioiden piirtoa ja siirtoa.
// Kotitehtävien tekemiseksi ei tarvi tutustua tähän koodiin tai ymmärtää sitä.
// Jos käännettäessä tulee jokin virhe, älä muuta tätä luokkaa vaan omaa koodiasi.
public class Kokeilu3 extends Piirto {
    // Määritellään vakiot, jotka kuvaavat piirrettävien olioiden kokoa ja väriä.
    private static final int leveys = 400;
    private static final int korkeus = 400;
    private static final int fps = 50;
    private static final int rs = 380;
    private static final int rx = 10;
    private static final int ry = 10;
    private static final Color rc = Color.green;
    private static final int ns = 120;
    private static final Color nc = Color.blue;
    private static final int k1s = 30;
    private static final Color k1c = Color.magenta;
    private static final int k2s = 30;
    private static final Color k2c = Color.magenta;

    // Piirrettävien olioiden paikkaa ja nopeutta kuvaavat ominaisuudet
    private double nx;
    private double ny;
    private double ndx;
    private double ndy;
    private double k1x;
    private double k1y;
    private double k2x;
    private double k2y;
    private double kdx;
    private double kdy;
    private int kierros;

    // Piirrettävät oliot
    private Nelio reunus;
    private Nelio nelio;
    private Kolmio kolmio1;
    private Kolmio kolmio2;

    public Kokeilu3() {
        super("Kokeilu3", leveys, korkeus, fps, true);
	luoKuviot();
    }

    private void luoKuviot() {
	// Reunustava neliö
	reunus = new Nelio(rx, ry, rs, rc);

	// Liikkuva neliö
	nx = 20;
	ny = 20;
	nelio = new Nelio((int)nx, (int)ny, ns, nc);

	// Pieni liikkuva kolmio
	k1x = 105;
	k1y = 25;
	kolmio1 = new Kolmio((int)k1x, (int)k1y,
			     (int)(k1x + k1s), (int)k1y,
			     (int)(k1x + k1s/2), (int)(k1y + k1s),
			     k1c);

	// Pieni liikkuva kolmio
	k2x = 25;
	k2y = 25;
	kolmio2 = new Kolmio((int)k2x, (int)k2y,
			     (int)(k2x + k2s), (int)k2y,
			     (int)(k2x + k2s/2), (int)(k2y + k2s),
			     k2c);

	// Alustetaan liikenopeudet
	ndx = 1.0;
	ndy = 0.0;
	kdx = 2.0/3;
	kdy = 1.0/3;
	kierros = 0;
    }

    public void piirräKaikki() {
	// Piirto
	pyyhiKaikki();
	reunus.piirrä(this);
	nelio.piirrä(this);
	kolmio1.piirrä(this);
	kolmio2.piirrä(this);

	// Siirto
	nelio.siirrä(ndx, ndy);
	kolmio1.siirrä(kdx, kdy);
	kolmio2.siirrä(kdx, kdy);
	kierros++;
	if (kierros % (2*ns) == 0) {
	    double tmp = ndx;
	    ndx = ndy;
	    ndy = tmp;
	    tmp = kdx;
	    kdx = kdy;
	    kdy = tmp;
	}
	if (kierros % (4*ns) == 0) {
	    ndx = -ndx;
	    ndy = -ndy;
	    kdx = -kdx;
	    kdy = -kdy;
	}
    }

    public static void main(String[] args) {
	Kokeilu3 k = new Kokeilu3();
	k.käynnistä();
    }
}
