// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   gameClient.java

package boggle.client;

import boggle.server.gameServerInterface;
import boggle.settings;
import boggle.timer;
import boggle.timerCaller;
import java.awt.Button;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.ScrollPane;
import java.awt.TextComponent;
import java.awt.TextField;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintStream;
import java.rmi.Naming;

// Referenced classes of package boggle.client:
//            automatedClient, gamePanel

class gameClient extends Dialog
    implements timerCaller
{
    class SymAction
        implements ActionListener
    {

        public void actionPerformed(ActionEvent actionevent)
        {
            Object obj = actionevent.getSource();
            if(obj == inputField)
            {
                textField1_EnterHit(actionevent);
                return;
            }
            if(obj == quitButton)
            {
                setVisible(false);
                getParent().setVisible(true);
                dispose();
            }
        }

        SymAction()
        {
        }
    }


    public gameClient(Frame frame, int i, boolean flag, int j, int k)
    {
        super(frame, false);
        fComponentsAdjusted = false;
        serverOK = true;
        player = i;
        language = j;
        setLayout(null);
        setVisible(false);
        setSize(getInsets().left + getInsets().right + 386, getInsets().top + getInsets().bottom + 308);
        timerLabel = new Label("", 1);
        timerLabel.setVisible(false);
        timerLabel.setBounds(getInsets().left + 180, getInsets().top + 53, 48, 20);
        timerLabel.setBackground(new Color(65280));
        add(timerLabel);
        inputField = new TextField();
        inputField.setVisible(false);
        inputField.setBounds(getInsets().left + 180, getInsets().top + 83, 200, 23);
        add(inputField);
        greenbox = new Label("");
        greenbox.setVisible(false);
        greenbox.setBounds(getInsets().left + 180, getInsets().top + 15, 200, 20);
        greenbox.setBackground(new Color(65280));
        add(greenbox);
        greenbox.setEnabled(false);
        redbox = new Label("");
        redbox.setVisible(false);
        redbox.setBounds(getInsets().left + 180, getInsets().top + 15, 1, 1);
        redbox.setBackground(new Color(0xff0000));
        add(redbox);
        redbox.setEnabled(false);
        badWordList = new List(0, false);
        add(badWordList);
        badWordList.setBounds(getInsets().left + 240, getInsets().top + 180, 132, 120);
        badWordList.setEnabled(true);
        goodWordsLabel = new Label("Correct Words", 1);
        goodWordsLabel.setBounds(getInsets().left + 12, getInsets().top + 156, 132, 16);
        add(goodWordsLabel);
        badWordsLabel = new Label("Incorrect Words", 1);
        badWordsLabel.setBounds(getInsets().left + 240, getInsets().top + 156, 132, 16);
        add(badWordsLabel);
        scoreLabel = new Label("Score", 1);
        scoreLabel.setBounds(getInsets().left + 156, getInsets().top + 156, 48, 16);
        add(scoreLabel);
        goodWordListHolder = new ScrollPane(0);
        goodWordListHolder.setBounds(getInsets().left + 12, getInsets().top + 180, 216, 120);
        goodWordList = new Panel();
        goodWordList.setLayout(null);
        goodWordList.setBounds(0, 0, 199, 116);
        goodWordListHolder.add(goodWordList);
        add(goodWordListHolder);
        quitButton = new Button();
        quitButton.setActionCommand("button");
        quitButton.setLabel("Dismiss");
        quitButton.setVisible(false);
        quitButton.setBounds(getInsets().left + 240, getInsets().top + 84, 74, 25);
        add(quitButton);
        setTitle("Boggle Game");
        setResizable(true);
        SymAction symaction = new SymAction();
        inputField.addActionListener(symaction);
        quitButton.addActionListener(symaction);
        ticker = new timer(this, 1, true);
        try
        {
            server = (gameServerInterface)Naming.lookup("//" + settings.getHostName() + "/GameServer");
            if(flag)
            {
                gameNumber = server.newGame(i, k, language);
                gameType = k;
            } else
            {
                gameType = server.joinGame(i, k);
                System.out.println("joining, know gameType");
                gameNumber = k;
                if(gameType < 0)
                {
                    serverOK = false;
                    stopGame();
                }
            }
            if(serverOK)
            {
                System.out.println("serverOK, getting gameDef");
                gameDef = server.getGameDefinition(gameNumber);
                System.out.println("got gameDef");
                nowPlayingPanel = settings.getGamePanel(gameType, getInsets().left + 10 + getInsets().right, getInsets().top + 10 + getInsets().bottom, gameDef);
                add(nowPlayingPanel);
                charlie = new automatedClient(nowPlayingPanel);
                return;
            }
        }
        catch(Exception exception)
        {
            serverOK = false;
            stopGame();
            System.out.println("mainClient: Problem with GameServer!");
            System.out.println(exception.getMessage());
            exception.printStackTrace();
        }
    }

    void startGame()
    {
        startTime = nowPlayingPanel.getPlayTime();
        minutes = startTime / 60;
        seconds = startTime - minutes * 60;
        score = 0;
        goodWordList.removeAll();
        goodWordList.setSize(new Dimension(212, 116));
        goodList = new String[500];
        badList = new String[500];
        badWordList.removeAll();
        goodIndex = 0;
        badIndex = 0;
        inputField.setVisible(true);
        inputField.invalidate();
        timerLabel.setVisible(true);
        timerLabel.invalidate();
        redbox.setVisible(true);
        greenbox.setVisible(true);
        inputField.requestFocus();
        validate();
        charlie.start();
        ticker.start();
    }

    void stopGame()
    {
        if(serverOK)
            try
            {
                server.finalScore(player, gameNumber, score);
                server.finalScore(0, gameNumber, charlie.finish());
            }
            catch(Exception exception)
            {
                System.out.println("Can't submit your score!!! Sorry.");
                System.out.println(exception.getMessage());
                exception.printStackTrace();
            }
        inputField.setVisible(false);
        quitButton.setVisible(true);
        ticker.setRepeat(false);
    }

    void textField1_EnterHit(ActionEvent actionevent)
    {
        for(int i = 0; i < goodIndex; i++)
            if(goodList[i].equals(inputField.getText()))
            {
                inputField.setText("");
                inputField.requestFocus();
                return;
            }

        for(int j = 0; j < badIndex; j++)
            if(badList[j].equals(inputField.getText()))
            {
                inputField.setText("");
                inputField.requestFocus();
                return;
            }

        int k = nowPlayingPanel.score(inputField.getText());
        if(k < 0)
        {
            badList[badIndex++] = inputField.getText();
            badWordList.add(inputField.getText());
        } else
        {
            goodList[goodIndex] = inputField.getText();
            score += k;
            Label label = new Label(inputField.getText(), 0);
            label.setBounds(0, 16 * goodIndex, 135, 16);
            label.setVisible(true);
            goodWordList.add(label);
            label.invalidate();
            Label label1 = new Label(String.valueOf(k), 1);
            label1.setBounds(145, 16 * goodIndex, 35, 16);
            goodWordList.add(label1);
            label1.invalidate();
            int l = 16 * (goodIndex + 1);
            if(goodWordList.getSize().height < l)
            {
                goodWordList.setSize(new Dimension(190, l));
                goodWordList.invalidate();
                goodWordListHolder.validate();
                goodWordListHolder.setScrollPosition(0, l);
            }
            goodIndex++;
        }
        inputField.setText("");
        inputField.requestFocus();
    }

    public void timerAction()
    {
        if(seconds != 0)
            seconds--;
        else
        if(minutes == 0)
        {
            stopGame();
        } else
        {
            seconds = 59;
            minutes--;
        }
        if(seconds < 10)
            timerLabel.setText(minutes + ":" + 0 + seconds);
        else
            timerLabel.setText(minutes + ":" + seconds);
        double d = minutes * 60 + seconds;
        d /= startTime;
        double d1 = 200D * (1.0D - d);
        double d2 = 200D * d;
        redbox.setSize((int)d1, 20);
        greenbox.setBounds(getInsets().left + 180 + (int)d1, getInsets().top + 15, (int)d2, 20);
        inputField.requestFocus();
    }

    public void addNotify()
    {
        Dimension dimension = getSize();
        super.addNotify();
        if(fComponentsAdjusted)
            return;
        setSize(getInsets().left + getInsets().right + dimension.width, getInsets().top + getInsets().bottom + dimension.height);
        Component acomponent[] = getComponents();
        for(int i = 0; i < acomponent.length; i++)
        {
            Point point = acomponent[i].getLocation();
            point.translate(getInsets().left, getInsets().top);
            acomponent[i].setLocation(point);
        }

        fComponentsAdjusted = true;
    }

    public void setVisible(boolean flag)
    {
        if(flag)
        {
            Rectangle rectangle = getParent().getBounds();
            Rectangle rectangle1 = getBounds();
            setLocation(rectangle.x + (rectangle.width - rectangle1.width) / 2, rectangle.y + (rectangle.height - rectangle1.height) / 2);
        }
        super.setVisible(flag);
        if(flag && serverOK)
            startGame();
    }

    Label timerLabel;
    TextField inputField;
    Label greenbox;
    Label redbox;
    List badWordList;
    Label goodWordsLabel;
    Label badWordsLabel;
    Label scoreLabel;
    ScrollPane goodWordListHolder;
    Panel goodWordList;
    Button quitButton;
    boolean fComponentsAdjusted;
    private gamePanel nowPlayingPanel;
    private int goodIndex;
    private int badIndex;
    private int startTime;
    private int minutes;
    private int seconds;
    private int player;
    private timer ticker;
    private int gameNumber;
    private int language;
    private int score;
    private gameServerInterface server;
    private int gameType;
    private String gameDef;
    private boolean serverOK;
    private String goodList[];
    private String badList[];
    private automatedClient charlie;
}

