001         package com.croftsoft.apps.mars.view;
002    
003         import java.awt.*;
004         import java.io.*;
005         import javax.swing.*;
006    
007         import com.croftsoft.core.animation.ComponentAnimator;
008         import com.croftsoft.core.animation.animator.IconRowAnimator;
009         import com.croftsoft.core.awt.image.ImageCache;
010         import com.croftsoft.core.lang.NullArgumentException;
011    
012         import com.croftsoft.apps.mars.model.TankAccessor;
013    
014         /*********************************************************************
015         * Display the amount of ammo left in the tank.
016         *
017         * @version
018         *   2003-07-17
019         * @since
020         *   2003-03-28
021         * @author
022         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
023         *********************************************************************/
024    
025         public final class  TankAmmoAnimator
026           implements ComponentAnimator
027         //////////////////////////////////////////////////////////////////////
028         //////////////////////////////////////////////////////////////////////
029         {
030    
031         private static final String  BULLET_IMAGE_FILENAME = "bullet.png";
032    
033         //
034    
035         private final IconRowAnimator  iconRowAnimator;
036    
037         //
038    
039         private TankAccessor  tankAccessor;
040    
041         //////////////////////////////////////////////////////////////////////
042         // constructor methods
043         //////////////////////////////////////////////////////////////////////
044    
045         /*********************************************************************
046         * Main constructor.
047         *********************************************************************/
048         public  TankAmmoAnimator (
049           TankAccessor  tankAccessor,
050           ImageCache    imageCache,
051           JComponent    component )
052           throws IOException
053         //////////////////////////////////////////////////////////////////////
054         {
055           setTankAccessor ( tankAccessor );
056    
057           iconRowAnimator = new IconRowAnimator (
058             new ImageIcon ( imageCache.get ( BULLET_IMAGE_FILENAME ) ),
059             tankAccessor.getAmmo ( ),
060             component );
061         }
062    
063         //////////////////////////////////////////////////////////////////////
064         //////////////////////////////////////////////////////////////////////
065    
066         public void  setTankAccessor ( TankAccessor  tankAccessor )
067         //////////////////////////////////////////////////////////////////////
068         {
069           NullArgumentException.check ( this.tankAccessor = tankAccessor );
070         }
071    
072         //////////////////////////////////////////////////////////////////////
073         // interface ComponentAnimator methods
074         //////////////////////////////////////////////////////////////////////
075    
076         public void  update ( JComponent  component )
077         //////////////////////////////////////////////////////////////////////
078         {
079           iconRowAnimator.setCount ( tankAccessor.getAmmo ( ) );
080    
081           iconRowAnimator.update ( component );
082         }
083    
084         public void  paint (
085           JComponent  component,
086           Graphics2D  graphics )
087         //////////////////////////////////////////////////////////////////////
088         {
089           iconRowAnimator.paint ( component, graphics );
090         }
091    
092         //////////////////////////////////////////////////////////////////////
093         //////////////////////////////////////////////////////////////////////
094         }