/*******************************************************************************
* Copyright (c) 2013 Nick Robinson All rights reserved. This program and the accompanying materials are made available under the terms of
* the GNU Public License v3.0 which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html
******************************************************************************/
package uk.co.nickthecoder.drunkinvaders;
import java.util.ArrayList;
import java.util.List;
import uk.co.nickthecoder.itchy.AbstractRole;
import uk.co.nickthecoder.itchy.Actor;
import uk.co.nickthecoder.itchy.Itchy;
import uk.co.nickthecoder.itchy.Role;
import uk.co.nickthecoder.itchy.StageView;
import uk.co.nickthecoder.itchy.property.DoubleProperty;
import uk.co.nickthecoder.itchy.property.Property;
import uk.co.nickthecoder.itchy.property.StringProperty;
public class Bullet extends AbstractRole implements Shootable
{
protected static final List<Property<Role, ?>> properties = new ArrayList<Property<Role, ?>>();
static {
properties.add(new DoubleProperty<Role>("speed"));
properties.add(new StringProperty<Role>("targetTagName"));
}
public double speed = 5.0;
public String targetTagName;
public Bullet()
{
this("shootable");
}
public Bullet( String tagName )
{
super();
this.targetTagName = tagName;
}
@Override
public List<Property<Role, ?>> getProperties()
{
return properties;
}
@Override
public void shot( Actor by )
{
this.deathEvent("shot");
}
@Override
public void tick()
{
getActor().moveForwards(this.speed);
StageView mainView = Itchy.getGame().getLayout().findStageView("main");
if (!mainView.getVisibleRectangle().overlaps(getActor().getAppearance().getWorldRectangle())) {
getActor().kill();
}
getCollisionStrategy().update();
for (Role otherRole : collisions(this.targetTagName)) {
((Shootable) otherRole).shot(getActor());
getActor().kill();
break;
}
}
}