001         package com.croftsoft.apps.mars.net;
002    
003         import java.awt.*;
004         import java.awt.event.*;
005    
006         import com.croftsoft.core.gui.event.UserInputAdapter;
007         import com.croftsoft.core.lang.NullArgumentException;
008         import com.croftsoft.core.math.geom.Point2DD;
009    
010         import com.croftsoft.apps.mars.net.request.FireRequest;
011         import com.croftsoft.apps.mars.net.request.MoveRequest;
012    
013         /*********************************************************************
014         * Handles user inputs and sends requests over the net.
015         *
016         * @version
017         *   2003-05-13
018         * @since
019         *   2003-04-07
020         * @author
021         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
022         *********************************************************************/
023    
024         public final class  NetController
025           extends UserInputAdapter
026         //////////////////////////////////////////////////////////////////////
027         //////////////////////////////////////////////////////////////////////
028         {
029    
030         private final String        playerName;
031    
032         private final Synchronizer  synchronizer;
033    
034         private final FireRequest   fireRequest;
035    
036         private final MoveRequest   moveRequest;
037    
038         //////////////////////////////////////////////////////////////////////
039         //////////////////////////////////////////////////////////////////////
040    
041         public  NetController (
042           String        playerName,
043           Synchronizer  synchronizer,
044           Component     component )
045         //////////////////////////////////////////////////////////////////////
046         {
047           NullArgumentException.check ( this.playerName   = playerName   );
048    
049           NullArgumentException.check ( this.synchronizer = synchronizer );
050    
051           NullArgumentException.check ( component );
052    
053           component.addMouseListener ( this );
054    
055           component.addMouseMotionListener ( this );
056    
057           component.addKeyListener ( this );
058    
059           component.requestFocus ( );
060    
061           fireRequest = new FireRequest ( playerName );
062    
063           moveRequest = new MoveRequest ( playerName );
064         }
065    
066         //////////////////////////////////////////////////////////////////////
067         // interface KeyListener methods
068         //////////////////////////////////////////////////////////////////////
069    
070         public void  keyPressed ( KeyEvent  keyEvent )
071         //////////////////////////////////////////////////////////////////////
072         {
073           if ( keyEvent.getKeyChar ( ) == ' ' )
074           {
075             fire ( );
076           }
077         }
078    
079         public void  mouseMoved ( MouseEvent  mouseEvent )
080         //////////////////////////////////////////////////////////////////////
081         {
082           Point  mousePoint = mouseEvent.getPoint ( );
083    
084           moveRequest.setDestination ( mousePoint.x, mousePoint.y );
085    
086           synchronizer.replace ( moveRequest );
087         }
088    
089         public void  mousePressed ( MouseEvent  mouseEvent )
090         //////////////////////////////////////////////////////////////////////
091         {
092           fire ( );
093         }
094    
095         //////////////////////////////////////////////////////////////////////
096         //////////////////////////////////////////////////////////////////////
097    
098         private void  fire ( )
099         //////////////////////////////////////////////////////////////////////
100         {
101           synchronizer.replace ( fireRequest );
102         }
103    
104         //////////////////////////////////////////////////////////////////////
105         //////////////////////////////////////////////////////////////////////
106         }