001         package com.croftsoft.apps.cyborg;
002         
003         import java.awt.*;
004         import java.awt.event.*;
005    
006         import com.croftsoft.core.gui.controller.NilController;
007         import com.croftsoft.core.lang.NullArgumentException;
008         
009         /*********************************************************************
010         * Receives and processes user input.
011         * 
012         * @version
013         *   $Id: CyborgController.java,v 1.20 2008/04/19 21:30:58 croft Exp $
014         * @since
015         *   2005-03-16
016         * @author
017         *   <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
018         *********************************************************************/
019    
020         public final class  CyborgController
021           extends NilController
022         //////////////////////////////////////////////////////////////////////
023         //////////////////////////////////////////////////////////////////////
024         {
025           
026         private final CyborgModel     cyborgModel;
027         
028         private final CyborgOperator  cyborgOperator;
029         
030         //
031         
032         private String   actionCommand;
033         
034         private Integer  max;
035         
036         private Point    point;
037         
038         private String   transform;
039         
040         private Double
041           alpha,
042           offset;
043         
044         //
045         
046         private boolean  manual;
047         
048         private double   x;
049         
050         private double   y;
051           
052         //////////////////////////////////////////////////////////////////////
053         //////////////////////////////////////////////////////////////////////
054         
055         public  CyborgController (
056           CyborgModel     cyborgModel,
057           CyborgOperator  cyborgOperator )
058         //////////////////////////////////////////////////////////////////////
059         {
060           NullArgumentException.check ( this.cyborgModel = cyborgModel );
061           
062           NullArgumentException.check (
063             this.cyborgOperator = cyborgOperator );
064           
065           point = new Point ( );
066         }
067         
068         //////////////////////////////////////////////////////////////////////
069         //////////////////////////////////////////////////////////////////////
070         
071         public void  changeMax ( Integer  max )
072         //////////////////////////////////////////////////////////////////////
073         {
074           this.max = max;
075         }
076         
077         public void  setAlpha ( Double  alpha )
078         //////////////////////////////////////////////////////////////////////
079         {
080           this.alpha = alpha;
081         }
082         
083         public void  setOffset ( Double  offset )
084         //////////////////////////////////////////////////////////////////////
085         {
086           this.offset = offset;
087         }
088         
089         public void  changeTransform ( String  transform )
090         //////////////////////////////////////////////////////////////////////
091         {
092           this.transform = transform;
093         }
094         
095         public void  actionPerformed ( ActionEvent  actionEvent )
096         //////////////////////////////////////////////////////////////////////
097         {
098           actionCommand = actionEvent.getActionCommand ( );
099         }
100         
101         public void  mouseMoved ( MouseEvent  mouseEvent )
102         //////////////////////////////////////////////////////////////////////
103         {
104           point = mouseEvent.getPoint ( );
105         }
106         
107         public void  update ( )
108         //////////////////////////////////////////////////////////////////////
109         {
110           if ( alpha != null )
111           {
112             cyborgModel.setAlpha ( alpha.doubleValue ( ) );
113             
114             alpha = null;
115           }
116           
117           if ( offset != null )
118           {
119             cyborgModel.setOffset ( offset.doubleValue ( ) );
120             
121             offset = null;
122           }
123           
124           if ( max != null )
125           {
126             cyborgModel.setMax ( max.intValue ( ) );
127             
128             max = null;
129           }
130           
131           if ( actionCommand != null )
132           {
133             if ( actionCommand.equals (
134               CyborgConfig.ACTION_COMMAND_ANIMATE ) )
135             {
136               cyborgModel.setAnimate ( !cyborgModel.getAnimate ( ) );
137             }
138             else if ( actionCommand.equals (
139               CyborgConfig.ACTION_COMMAND_AUTOMATIC ) )
140             {
141               manual = false;
142               
143               CyborgConfig.INSTANCE.getLog ( ).record ( actionCommand );
144               
145               cyborgModel.reset ( );
146             }
147             else if ( actionCommand.equals (
148               CyborgConfig.ACTION_COMMAND_FORCE_LENGTH ) )
149             {
150               cyborgModel.setForceLength ( !cyborgModel.getForceLength ( ) );
151               
152               cyborgModel.reset ( );
153             }
154             else if ( actionCommand.equals (
155               CyborgConfig.ACTION_COMMAND_MANUAL ) )
156             {
157               manual = true;
158               
159               CyborgConfig.INSTANCE.getLog ( ).record ( actionCommand );
160               
161               cyborgModel.reset ( );
162             }
163             else if ( actionCommand.equals (
164               CyborgConfig.ACTION_COMMAND_PAUSE ) )
165             {
166               cyborgModel.setPaused ( true );
167             }
168             else if ( actionCommand.equals (
169               CyborgConfig.ACTION_COMMAND_RESUME ) )
170             {
171               cyborgModel.setPaused ( false );
172             }
173             else if ( actionCommand.equals (
174               CyborgConfig.ACTION_COMMAND_REALTIME ) )
175             {
176               cyborgModel.setRealTime ( !cyborgModel.getRealTime ( ) );
177             }
178             
179             actionCommand = null;
180           }
181           
182           if ( transform != null )
183           {
184             cyborgModel.setTransform ( transform );
185               
186             transform = null;
187           }
188           
189           if ( !manual )
190           {
191             cyborgOperator.update ( );
192             
193             return;
194           }
195           
196           if ( point == null )
197           {
198             return;
199           }
200           
201           x = CyborgAnimator.toX ( point.x );
202           
203           y = CyborgAnimator.toY ( point.y );
204           
205           if ( x < -1.0 )
206           {
207             x = -1.0;
208           }
209           else if ( x > 1.0 )
210           {
211             x = 1.0;
212           }
213           
214           if ( y < -1.0 )
215           {
216             y = -1.0;
217           }
218           else if ( y > 1.0 )
219           {
220             y = 1.0;
221           }
222           
223           cyborgModel.setAimX ( x );
224           
225           cyborgModel.setAimY ( y );
226           
227           point = null;
228         }
229         
230         //////////////////////////////////////////////////////////////////////
231         //////////////////////////////////////////////////////////////////////
232         }