This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/RenegadeSim/RenegadeSim.Java

526 lines
14 KiB
Java

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//RenegadeSim.java
import com.ms.wfc.app.*;
import com.ms.wfc.core.*;
import com.ms.wfc.ui.*;
import java.util.*;
/**
* @author: Application Wizard
* @version: 1.0
* This class can take a variable number of parameters on the command
* line. Program execution begins with the main() method. The class
* constructor is not invoked unless an object of type 'RenegadeSim'
* created in the main() method.
*/
public class RenegadeSim extends Form implements RenegadeNetCaller
{
private Date _seed = new Date();
private Random _rand = new Random(_seed.getSeconds());
public void doNew(Object sender, Event e)
{
// New
}
private void saveAsMenu_click(Object sender, Event e)
{
// Save As
}
private void saveMenu_click(Object sender, Event e)
{
// Save
}
private void doOpen(Object sender, Event e)
{
// Open
}
public void wordWrapMenu_click(Object sender, Event e)
{
// WordWrap
}
public void doDateTime(Object sender, Event e)
{
// Date/Time
}
public void doPaste(Object sender, Event e)
{
// Paste
try
{
}
catch (Exception ecx)
{
}
}
public void doCopy(Object sender, Event e)
{
// Copy
}
public void doCut(Object sender, Event e)
{
// Cut
}
public void exitMenu_click(Object sender, Event e)
{
// Exit
Application.exit();
}
private void aboutMenu_click(Object sender, Event e)
{
About myAbout = new About();
myAbout.showDialog ();
}
private void toolBar_buttonClick(Object source, ToolBarButtonClickEvent e)
{
if (e.button == openToolBarButton) {
// Open
doOpen(source,e);
}
else if (e.button == saveToolBarButton) {
// Save
doSave(source,e);
}
else if (e.button == setupToolBarButton) {
// Setup
ClientSetup myClientSetup = new ClientSetup();
myClientSetup.showDialog();
}
else {
; //nop
}
}
public RenegadeSim()
{
super();
//Required for Visual J++ Form Designer support
initForm();
//TODO: Add any constructor code after initForm call
RenegadeNet.startWinSock();
_refreshButtonStates();
Application.addOnIdle(new EventHandler(this.RenegadeSim_Idle));
}
/**
* RenegadeSim overrides dispose so it can clean up the
* component list.
*/
public void dispose()
{
super.dispose();
components.dispose();
RenegadeNet.stopWinSock();
}
private void RenegadeSim_Idle(Object sender, Event e)
{
// Set the statusBarStates
/*StatusBarPanel sbPanel[] = statusBar.getPanels ();
if ((GetKeyState(VK_CAPITAL) & 1) == 1)
sbPanel[1].setText ("CAP");
else
sbPanel[1].setText ("");
if ((GetKeyState(VK_NUMLOCK) & 1) == 1)
sbPanel[2].setText ("NUM");
else
sbPanel[2].setText (""); */
}
private boolean doSave(Object sender, Event e)
{
boolean bRc = false;
return bRc;
}
private void RenegadeSim_click(Object source, Event e)
{
}
private void label1_click(Object source, Event e)
{
}
private void butSimulate_click(Object source, Event e)
{
int[] indices = lbPlayers.getSelectedIndices();
int i = 0;
lbResults.removeAll();
for(i = 0; i < lbPlayers.getItemCount(); i++)
lbResults.addItem(new String("--"));
for(i = 0; i < indices.length; i++)
{
// Simulate a score. We want a score x such that -0.5 <= x <= 0.5
// and we want to weight it slightly more towards the positive side.
double score = _rand.nextDouble() - 0.3;
if( score > 0.5 ) score = 0.5;
if( score < -0.5 ) score = -0.5;
lbResults.setItem(indices[i], new String("" + (_rand.nextDouble() - 0.5)));
}
_refreshButtonStates();
}
private void butSelectToggle_click(Object source, Event e)
{
int[] indices = lbPlayers.getSelectedIndices();
for(int i = 0; i < lbPlayers.getItemCount(); i++)
lbPlayers.setSelected(i, (indices.length == 0));
_refreshButtonStates();
}
private void _refreshButtonStates()
{
boolean valid = false;
// Check for Send button
for(int i = 0; i < lbResults.getItemCount(); i++)
{
String item = (String)lbResults.getItem(i);
if( item.compareTo("--") != 0 )
valid = true;
}
butSend.setEnabled(valid);
// Check for simulate button
int[] indices = lbPlayers.getSelectedIndices();
butSimulate.setEnabled(indices.length > 0);
}
private void lbPlayers_selectedIndexChanged(Object source, Event e)
{
_refreshButtonStates();
}
private void butSend_click(Object source, Event e)
{
int[] indices = lbPlayers.getSelectedIndices();
String logins[] = new String[indices.length];
double scores[] = new double[indices.length];
Double tmpDouble = null;
for(int i = 0; i < indices.length; i++)
{
logins[i] = new String((String)lbPlayers.getItem(indices[i]));
try
{
tmpDouble = new Double((String)lbResults.getItem(indices[i]));
}
catch( NumberFormatException exp )
{
/* TODO: Error dialog... */
}
scores[i] = tmpDouble.doubleValue();
}
_setStatusMessage("Connecting to games2.westwood.com:4608...");
RenegadeNet net = new RenegadeNet(this);
net.sendGameResults(logins, scores);
}
public void grDoneCallback(int packetlen)
{
if( packetlen <= 0 )
_setStatusMessage("ERROR: " + packetlen + " (The server may be down)");
else
_setStatusMessage("Sent " + packetlen + " bytes to server successfully.");
}
private void _setStatusMessage(String s)
{
(statusBar.getPanels())[0].setText(s);
}
private void setupMenu_click(Object source, Event e)
{
ClientSetup myClientSetup = new ClientSetup();
myClientSetup.showDialog();
}
/**
* NOTE: The following code is required by the Visual J++ form
* designer. It can be modified using the form editor. Do not
* modify it using the code editor.
*/
Container components = new Container();
MainMenu mainMenu1 = new MainMenu();
MenuItem fileMenu = new MenuItem();
MenuItem openMenu = new MenuItem();
MenuItem saveMenu = new MenuItem();
MenuItem seperator3Menu = new MenuItem();
MenuItem exitMenu = new MenuItem();
Label label1 = new Label();
MenuItem helpMenu = new MenuItem();
MenuItem aboutMenu = new MenuItem();
MenuItem saveAsMenu = new MenuItem();
StatusBar statusBar = new StatusBar();
StatusBarPanel mainStatusBarPanel = new StatusBarPanel();
ListBox lbResults = new ListBox();
ToolBar toolBar = new ToolBar();
ToolBarButton openToolBarButton = new ToolBarButton();
ToolBarButton saveToolBarButton = new ToolBarButton();
ToolBarButton toolBarButton1 = new ToolBarButton();
ImageList toolBarImageList = new ImageList();
Label label2 = new Label();
Button butSend = new Button();
Button butSimulate = new Button();
ListBox lbPlayers = new ListBox();
GroupBox groupBox1 = new GroupBox();
Button butSelectToggle = new Button();
MenuItem setupMenu = new MenuItem();
MenuItem menuItem1 = new MenuItem();
ToolBarButton setupToolBarButton = new ToolBarButton();
private void initForm()
{
// NOTE: This form is storing resource information in an
// external file. Do not modify the string parameter to any
// resources.getObject() function call. For example, do not
// modify "foo1_location" in the following line of code
// even if the name of the Foo object changes:
// foo1.setLocation((Point)resources.getObject("foo1_location"));
IResourceManager resources = new ResourceManager(this, "RenegadeSim");
openMenu.setShortcut(Shortcut.CTRL_O);
openMenu.setText("&Open Results...");
openMenu.addOnClick(new EventHandler(this.doOpen));
saveMenu.setShortcut(Shortcut.CTRL_S);
saveMenu.setText("&Save Results...");
saveMenu.addOnClick(new EventHandler(this.saveMenu_click));
seperator3Menu.setText("-");
exitMenu.setText("E&xit");
exitMenu.addOnClick(new EventHandler(this.exitMenu_click));
label1.setLocation(new Point(16, 16));
label1.setSize(new Point(72, 16));
label1.setTabIndex(2);
label1.setTabStop(false);
label1.setText("Players:");
label1.addOnClick(new EventHandler(this.label1_click));
aboutMenu.setText("&About...");
aboutMenu.addOnClick(new EventHandler(this.aboutMenu_click));
helpMenu.setMenuItems(new MenuItem[] {
aboutMenu});
helpMenu.setText("&Help");
saveAsMenu.setText("Save &As...");
saveAsMenu.addOnClick(new EventHandler(this.saveAsMenu_click));
mainStatusBarPanel.setAutoSize(StatusBarPanelAutoSize.SPRING);
mainStatusBarPanel.setWidth(256);
statusBar.setBackColor(Color.CONTROL);
statusBar.setLocation(new Point(0, 289));
statusBar.setSize(new Point(272, 20));
statusBar.setTabIndex(1);
statusBar.setText("");
statusBar.setShowPanels(true);
statusBar.setPanels(new StatusBarPanel[] {
mainStatusBarPanel});
lbResults.setLocation(new Point(120, 32));
lbResults.setSize(new Point(128, 147));
lbResults.setTabIndex(1);
lbResults.setText("listBox1");
lbResults.setUseTabStops(true);
lbResults.setItems(new Object[] {
"--",
"--",
"--",
"--",
"--",
"--",
"--",
"--",
"--",
"--"});
openToolBarButton.setImageIndex(1);
openToolBarButton.setToolTipText("Open Results");
saveToolBarButton.setImageIndex(2);
saveToolBarButton.setToolTipText("Save Results");
toolBarButton1.setStyle(ToolBarButtonStyle.SEPARATOR);
toolBarButton1.setText("toolBarButton4");
toolBarImageList.setImageSize(new Point(16, 15));
toolBarImageList.setImageStream((ImageListStreamer)resources.getObject("toolBarImageList_imageStream"));
/* @designTimeOnly toolBarImageList.setLocation(new Point(176, 8)); */
label2.setLocation(new Point(120, 16));
label2.setSize(new Point(48, 16));
label2.setTabIndex(3);
label2.setTabStop(false);
label2.setText("Results:");
butSend.setLocation(new Point(184, 256));
butSend.setSize(new Point(80, 23));
butSend.setTabIndex(3);
butSend.setText("Send Results");
butSend.addOnClick(new EventHandler(this.butSend_click));
butSimulate.setLocation(new Point(128, 216));
butSimulate.setSize(new Point(128, 16));
butSimulate.setTabIndex(2);
butSimulate.setText("Simulate Game Results");
butSimulate.addOnClick(new EventHandler(this.butSimulate_click));
lbPlayers.setLocation(new Point(16, 32));
lbPlayers.setSize(new Point(88, 147));
lbPlayers.setTabIndex(0);
lbPlayers.setText("listBox1");
lbPlayers.setSelectionMode(SelectionMode.MULTI_SIMPLE);
lbPlayers.setUseTabStops(true);
lbPlayers.setItems(new Object[] {
"test1",
"test5",
"test7",
"test8",
"test9",
"test13",
"test14",
"test16",
"noxstinky",
"goodmach"});
lbPlayers.addOnSelectedIndexChanged(new EventHandler(this.lbPlayers_selectedIndexChanged));
groupBox1.setLocation(new Point(8, 32));
groupBox1.setSize(new Point(256, 216));
groupBox1.setTabIndex(6);
groupBox1.setTabStop(false);
groupBox1.setText("Renegade Game Simulator");
butSelectToggle.setLocation(new Point(16, 184));
butSelectToggle.setSize(new Point(88, 16));
butSelectToggle.setTabIndex(4);
butSelectToggle.setText("Select All / None");
butSelectToggle.addOnClick(new EventHandler(this.butSelectToggle_click));
setupMenu.setText("&Client Setup");
setupMenu.addOnClick(new EventHandler(this.setupMenu_click));
menuItem1.setText("-");
fileMenu.setMenuItems(new MenuItem[] {
openMenu,
saveMenu,
saveAsMenu,
seperator3Menu,
setupMenu,
menuItem1,
exitMenu});
fileMenu.setText("&File");
mainMenu1.setMenuItems(new MenuItem[] {
fileMenu,
helpMenu});
/* @designTimeOnly mainMenu1.setLocation(new Point(80, 8)); */
this.setAnchor(ControlAnchor.ALL);
this.setLocation(new Point(298, 88));
this.setText("Renegade Simulator Applet");
this.setAutoScaleBaseSize(new Point(5, 13));
this.setBorderStyle(FormBorderStyle.FIXED_TOOLWINDOW);
this.setClientSize(new Point(272, 309));
this.setMaximizeBox(false);
this.setMenu(mainMenu1);
this.addOnClick(new EventHandler(this.RenegadeSim_click));
setupToolBarButton.setImageIndex(4);
setupToolBarButton.setToolTipText("Client Setup");
toolBar.setSize(new Point(272, 25));
toolBar.setTabIndex(0);
toolBar.setButtons(new ToolBarButton[] {
openToolBarButton,
saveToolBarButton,
toolBarButton1,
setupToolBarButton});
toolBar.setDropDownArrows(true);
toolBar.setImageList(toolBarImageList);
toolBar.setShowToolTips(true);
toolBar.addOnButtonClick(new ToolBarButtonClickEventHandler(this.toolBar_buttonClick));
this.setNewControls(new Control[] {
butSimulate,
butSend,
groupBox1,
toolBar,
statusBar});
groupBox1.setNewControls(new Control[] {
butSelectToggle,
label2,
label1,
lbResults,
lbPlayers});
}
/**
* The main entry point for the application.
*
* @param args Array of parameters passed to the application
* via the command line.
*/
public static void main(String args[])
{
Application.run(new RenegadeSim());
}
public static final int VK_CAPITAL = 0x14;
public static final int VK_NUMLOCK = 0x90;
/**
* @dll.import("USER32",auto)
*/
public static native short GetKeyState(int nVirtKey);
}