All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.app.asteroids.Shard Maven / Gradle / Ivy

Go to download

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