package minizoo.c;
import java.awt.*;
import java.awt.geom.Point2D;
import java.util.Random;
import minizoo.App;
import minizoo.c.animal.duck.Duck;
import minizoo.c.animal.lion.Lion;
import minizoo.c.animal.penguin.Penguin;
import minizoo.c.animal.sheep.Sheep;
import minizoo.c.core.Vector2d;
import minizoo.e.State;
import minizoo.i.DancingMachine;
import minizoo.i.TouchListener;
public class Animal extends Entity implements TouchListener, DancingMachine {
public boolean isLDir = true;
public Animal(String name) {
super(name);
ent = (new Random()).nextFloat();
}
float ent = 0f;
@Override
public void update(float elapsed) {
super.update(elapsed);
float targetX = ((float)Math.sin(getUpdatedTime()/3f - ent) + 1) * App.ScreenWidth * 0.5f;
Vector2d pos = getPosition();
if (this instanceof Lion || this instanceof Duck) {
if (pos.x < 0) {
setPosition(App.ScreenWidth, (float)getPosition().y);
}
return;
} else if (currState == State.Picking) {
ent = (new Random()).nextFloat() * 10f;
return;
}
if (this instanceof Sheep) {
targetX = ((float)Math.sin(getUpdatedTime()/30f - ent) + 1) * App.ScreenWidth * 0.5f;
}
if (pos.x < targetX) {
setScale((float)Math.abs(getScale().x) * (isLDir? -1f:1f), (float)getScale().y);
} else if (pos.x > targetX) {
setScale((float)Math.abs(getScale().x) * (isLDir? 1f:-1f), (float)getScale().y);
}
pos.x = (targetX-pos.x)*elapsed + pos.x;
setPosition(pos);
}
@Override
public void Hover(boolean isHover) {
System.out.println("Hover " + isHover + " " + this.name);
if (isHover) {
scale.x *= 1.05;
scale.y *= 1.05;
} else {
scale.x /= 1.05;
scale.y /= 1.05;
}
}
@Override
public void Drag(Point2D point) {
position.x = point.getX() - sx;
position.y = point.getY() - sy;
}
double sx, sy;
boolean isMoving = false;
public void movingStop() {
isMoving = false;
// stopAction("moving");
}
public void movingStart() {
isMoving = true;
/*
float stepWidth = 30f;
int maxCount = (int)((App.ScreenWidth)/stepWidth);
this.runAction(
Forever.c(
Sequence.c(
Repeat.c((int) (getPosition().x / stepWidth), EaseLinear.c(MoveBy.c(1.2f, -stepWidth, 0))),
ScaleTo.c(0f, -(float)getScale().x, (float)getScale().y),
Repeat.c(maxCount, EaseLinear.c(MoveBy.c(1.2f, stepWidth, 0))),
ScaleTo.c(0f, (float)getScale().x, (float)getScale().y),
Repeat.c(maxCount - (int) (getPosition().x / stepWidth), EaseLinear.c(MoveBy.c(1.2f, -stepWidth, 0))))), "moving");
*/
}
@Override
public void Press(boolean isPress, Point2D point) {
System.out.println("Press " + isPress + " " + point);
sx = point.getX() - position.x;
sy = point.getY() - position.y;
if (isPress) {
movingStop();
} else {
if (App.isDancingTime) {
doDance(true);
} else {
movingStart();
}
}
}
@Override
public void Click() {
}
@Override
public void DoubleClick() {
System.out.println("Double Click");
}
@Override
public boolean isNeededSupportingDoubleClicking() {
return false;
}
@Override
public void visit(Graphics2D g2) {
super.visit(g2);
// g2.setColor(getTintedColor(Color.white));
// g2.fillRect(0, 0, (int)getContentSize().x, (int)getContentSize().y);
}
protected State currState = State.Default;
protected State prevState = State.Default;
@Override
public void doDance(boolean begin) { }
}