scg/ch01/spacesprites/LittleRoundProjectile

From FANG

Jump to: navigation, search

001 package scg.ch01.spacesprites;
002 
003 import fang2.core.Game;
004 import fang2.core.Sprite;
005 import fang2.sprites.OvalSprite;
006 import fang2.transformers.HitClassTransformer;
007 import fang2.transformers.HitSpriteTransformer;
008 import fang2.transformers.HitTarget;
009 import fang2.transformers.Shootable;
010 import fang2.transformers.TimeLimitedTransformer;
011 import fang2.transformers.WrapTransformer;
012 
013 import java.awt.Color;
014 
015 /** A standardized projectile. */
016 public class LittleRoundProjectile
017   extends OvalSprite
018   implements HitTarget {
019   /** the default color for LRP */
020   private static final Color DEFAULT_LRP_COLOR = Game.getColor(
021       "orange");
022   /** the default size of the LRP in screens */
023   private static final double DEFAULT_LRP_DIAMETER = 0.02;
024 
025   /** the transformer we use to keep track of hitting a target */
026   private HitSpriteTransformer targets;
027 
028   /**
029    * the transformer we use to keep track of specific sprites as targets
030    */
031   private HitClassTransformer targetClasses;
032 
033   /** where this projectile records a score (for a hit) */
034   private final ScoreSprite score;
035   
036   /**
037    * Construct a new little round projectile with the given size (in
038    * screens) and the given color.
039    *
040    @param  diameterInScreens  size, in screens, of the projectile
041    @param  color              the color the projectile should have
042    */
043   public LittleRoundProjectile(double diameterInScreens, Color color, ScoreSprite score{
044     super(diameterInScreens, diameterInScreens);
045     setColor(color);
046     this.score = score;
047     addTransformer(new WrapTransformer());
048   }
049 
050   /**
051    * Construct a new little round projectile with the given size (in
052    * screens) and the default color.
053    *
054    @param  diameterInScreens  size, in screens, of the projectile
055    */
056   public LittleRoundProjectile(double diameterInScreens, ScoreSprite score{
057     this(diameterInScreens, DEFAULT_LRP_COLOR, score);
058   }
059 
060   /**
061    * Construct a new little round projectile with the default
062    * appearance: orange, 0.02 screens across.
063    */
064   public LittleRoundProjectile(ScoreSprite score{
065     this(DEFAULT_LRP_DIAMETER, DEFAULT_LRP_COLOR, score);
066   }
067 
068   
069   /**
070    * Add a whole class of sprites as valid targets for this projectile
071    @param targetClass the {@link Sprite} derived class to shoot at
072    */
073   public void addTarget(Class<? extends Sprite> targetClass{
074     if (targetClasses == null{
075       targetClasses = new HitClassTransformer(this, targetClass);
076       addTransformer(targetClasses);
077     } else {
078       targetClasses.add(targetClass);
079     }
080   }
081 
082   /**
083    * Add a specific sprite as a valid target for this projectile
084    @param target the {@link Sprite} to shoot
085    */
086   public void addTarget(Sprite target{
087     if (targets == null{
088       targets = new HitSpriteTransformer(target);
089       addTransformer(targets);
090     } else {
091       targets.add(target);
092     }
093   }
094 
095   /** 
096    Set it so that this projectile only remains viable for a fixed amount of time.
097    @param seconds
098    */
099   public void addTimeToLive(double seconds{
100     addTransformer(new TimeLimitedTransformer(0.9));
101   }
102   
103   /**
104    * What to do when we hit a target!
105    */
106   public boolean react(Sprite target{
107     if (target instanceof Shootable{
108       Shootable shootable = (Shootabletarget;
109       shootable.shot(this);
110       score.increment();
111     }
112     
113     removeFromCanvas();
114     return true;
115   }
116 }
117 
118 //Uploaded on Mon Mar 29 21:41:15 EDT 2010


Download/View scg/ch01/spacesprites/LittleRoundProjectile.java





Views
Personal tools
Add to 
del.icio.usAdd to 
diggAdd to 
FacebookAdd to 
favoritesAdd to 
GoogleAdd to 
MySpaceAdd to 
PrintAdd to 
SlashdotAdd to 
StumbleUponAdd to 
Twitter

Games
Games