
import java.util.*;

public class Player extends GameItem implements Cloneable
{
    public static final double DEFAULT_RADIUS = 0.06;
    public static final double COLLIDE_DAMAGE = 0.002;
    public static final double SHOT_DELAY = 3.0;

    public String name;
    public double health;
    public double r;
    public double dr;
    public long lastShotTime;

    public Player(String name)
    {
        this.name = name;
        this.radius = DEFAULT_RADIUS;
        this.health = 1.0;
        this.r = Math.random() * Math.PI * 2;
        this.x = 0; /* will be assigned by world */
        this.y = 0; /* will be assigned by world */
        this.dr = 0;
        this.dx = 0;
        this.dy = 0;
        this.lastShotTime = 0;
    }

    public Player clone()
    {
        Player p = new Player(name);
        p.radius = radius;
        p.health = health;
        p.r = r;
        p.x = x;
        p.y = y;
        p.dr = dr;
        p.dx = dx;
        p.dy = dy;
        return p;
    }

    public boolean equals(Player other)
    {
        return this.name.equals(other.name) &&
               this.radius == other.radius &&
               this.health == other.health &&
               this.r == other.r &&
               this.dr == other.dr &&
               this.dx == other.dx &&
               this.dy == other.dy &&
               this.x == other.x &&
               this.y == other.y;
    }

    public String toString()
    {
        return String.format("%s:%.3f:%.3f:%.3f:%.3f:%.3f:%.3f:%.3f:%.3f",
               name, radius, health, x, y, r, dr, dx, dy);
    }

    public void fromString(String s)
    {
        StringTokenizer st = new StringTokenizer(s, ":");
        Vector<String> tokens = new Vector<String>();
        while (st.hasMoreTokens())
        {
            tokens.add(st.nextToken());
        }
        String[] arr = tokens.toArray(new String[1]);
        if (arr.length != 9)
            return;
        name = arr[0];
        radius = Double.parseDouble(arr[1]);
        health = Double.parseDouble(arr[2]);
        x = Double.parseDouble(arr[3]);
        y = Double.parseDouble(arr[4]);
        r = Double.parseDouble(arr[5]);
        dr = Double.parseDouble(arr[6]);
        dx = Double.parseDouble(arr[7]);
        dy = Double.parseDouble(arr[8]);
    }
}
