sim.app.asteroids.Shard Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mason Show documentation
Show all versions of mason Show documentation
MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.
The newest version!
/*
Copyright 2009 by Sean Luke
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package sim.app.asteroids;
import sim.engine.*;
import sim.field.continuous.*;
import sim.util.*;
import ec.util.*;
import java.awt.geom.*;
import java.awt.*;
import sim.portrayal.*;
/** Shard is an Element representing a broken-apart piece of something dying. Shards vary
in color and are provided their color during construction. Shards don't
collide with anything, and automatically end after a certain countdown, during which
they fade from their color to black.
*/
public class Shard extends Element
{
private static final long serialVersionUID = 1;
// current countdown of the Shard. Used to determine the current color of the Shard.
int count;
// initial color of the Shard before it starts to fade
Color color;
/** Initial default velocity of a Shard */
public static final double VELOCITY = 1;
/** Default lifetime of a Shart. */
public static final int LIFETIME = 100;
/** The largest possible explosion force when breaking into Shards. */
public static final double MAXIMUM_EXPLOSION_FORCE = 0.5;
/** The smallest possible explosion force when breaking into Shards. */
public static final double MAXIMUM_ROTATIONAL_VELOCITY = Math.PI / 180.0 * 5;
/** Creates a Shard and adds it to the field and to the schedule. */
public Shard(Asteroids asteroids, Shape shape, double orientation,
MutableDouble2D velocity, Double2D location, Color color)
{
this.velocity = velocity;
this.shape = shape;
this.color = color;
count = LIFETIME;
stopper = asteroids.schedule.scheduleRepeating(this);
rotationalVelocity = asteroids.random.nextDouble() * MAXIMUM_ROTATIONAL_VELOCITY *
(asteroids.random.nextBoolean() ? 1.0 : -1.0);
this.orientation = orientation;
asteroids.field.setObjectLocation(this, location);
asteroids.schedule.scheduleOnceIn(LIFETIME,
new Steppable()
{
public void step(SimState state)
{
end((Asteroids) state);
}
});
}
/** Steps the Shard, decreasing its count. */
public void step(SimState state)
{
super.step(state);
count--;
}
/** Shards vary in color. They start with their given color, then gradually fade to transparent. */
public Color getColor()
{
double v = count / (double)LIFETIME;
return new Color(color.getRed(), color.getGreen(), color.getBlue(), (int)(255 * v));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy