From 2a984f70a0680c218e21def1b60b24deab09a43e Mon Sep 17 00:00:00 2001 From: rmh3093 Date: Thu, 24 Jul 2008 20:11:50 -0400 Subject: [PATCH] better version --- motsim/MOTSIM.class | Bin 6147 -> 5659 bytes motsim/MOTSIM.java | 19 ++- motsim2/.classpath | 6 + motsim2/.project | 17 ++ motsim2/MOTSIM.class | Bin 0 -> 934 bytes motsim2/MOTSIM.java | 58 +++++++ motsim2/MOTSIM_Controller$StartListener.class | Bin 0 -> 2939 bytes motsim2/MOTSIM_Controller$TargetMover.class | Bin 0 -> 1864 bytes motsim2/MOTSIM_Controller.class | Bin 0 -> 1114 bytes motsim2/MOTSIM_Controller.java | 108 +++++++++++++ motsim2/MOTSIM_Model.class | Bin 0 -> 446 bytes motsim2/MOTSIM_Model.java | 46 ++++++ motsim2/MOTSIM_View$ControlPanel.class | Bin 0 -> 2520 bytes motsim2/MOTSIM_View$TrialPanel.class | Bin 0 -> 3913 bytes motsim2/MOTSIM_View.class | Bin 0 -> 1043 bytes motsim2/MOTSIM_View.java | 213 ++++++++++++++++++++++++++ motsim2/Target.class | Bin 0 -> 683 bytes motsim2/Target.java | 29 ++++ motsim2/TrialDataDynamic.class | Bin 0 -> 7941 bytes motsim2/TrialDataDynamic.java | 161 +++++++++++++++++++ 20 files changed, 655 insertions(+), 2 deletions(-) rewrite motsim/MOTSIM.class (83%) create mode 100644 motsim2/.classpath create mode 100644 motsim2/.project create mode 100644 motsim2/MOTSIM.class create mode 100644 motsim2/MOTSIM.java create mode 100644 motsim2/MOTSIM_Controller$StartListener.class create mode 100644 motsim2/MOTSIM_Controller$TargetMover.class create mode 100644 motsim2/MOTSIM_Controller.class create mode 100644 motsim2/MOTSIM_Controller.java create mode 100644 motsim2/MOTSIM_Model.class create mode 100644 motsim2/MOTSIM_Model.java create mode 100644 motsim2/MOTSIM_View$ControlPanel.class create mode 100644 motsim2/MOTSIM_View$TrialPanel.class create mode 100644 motsim2/MOTSIM_View.class create mode 100644 motsim2/MOTSIM_View.java create mode 100644 motsim2/Target.class create mode 100644 motsim2/Target.java create mode 100644 motsim2/TrialDataDynamic.class create mode 100644 motsim2/TrialDataDynamic.java diff --git a/motsim/MOTSIM.class b/motsim/MOTSIM.class dissimilarity index 83% index 53d5da66a163025e776291be6e693dcdb26702ef..78c0cc73f3595d0f444836993a41f7ad8b268e99 100644 GIT binary patch literal 5659 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 + + + + + diff --git a/motsim2/.project b/motsim2/.project new file mode 100644 index 0000000..28884c6 --- /dev/null +++ b/motsim2/.project @@ -0,0 +1,17 @@ + + + motsim2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/motsim2/MOTSIM.class b/motsim2/MOTSIM.class new file mode 100644 index 0000000000000000000000000000000000000000..e139ea16839d45d83068d8d0df566fe4ec68ef7f GIT binary patch literal 934 zcwTi=>uM807(LU(ZnNF=7So$rt%+@JO}tmF2oewqn^s5(M1RO84spt6S9Z7hD!zsw z4H)nNd?@kEZlI}`9hjM&bH4L^bN1VxzrOzfa39YM%m~c3j!)W$EdyzRrBmmV({LSc z&^Yd$%6>%nx$;!>LLgNtcLdT+|GhMkLdL=s%o>;%uo8uLEkdpd6Bz>w0`rsOj*_2E zWU-_pmIane_H@8OxuemXg{zn)8b(eKHGMA%eD}5EN!P$Ck0&7$z?FfCJl3`3hQQVz zlJ->USU-%Av~FvA+QEZoE`ftmhCfz4@=;&ed=CT^o> zpdhgRKaPbv*by*88Ff^sdak5*r8nBbMO%6D=xo@N!HE+CE4JTv+>R3{{XRKNM;}xu zFgGdVfQAnJC{)AviUJFlugqKttV=qOKMwe;4$Xohwa zC~puuDUcz_2?ne!_YV&1X!~bDU%pcM7Lz8ZYaTo0(4*H)*9k+(cx&1*Y*RZ0{mgL3 z=HhJd?F-Tzz}?CSb7Pp@5iEO*Y_~eXVykwJl`-<&YHftIqrG!%*1q9J`W)L|W2Ifr zJIHX}rAi4F%It;;Hc;bNtfGKDB6T!4N@P`%Tx3Nn{{#5lNkWsh_%L(toOAA3zjM!=K6~^8fGhErfgu9Znwnd} zp{DkF$M#ZABB4@MVb4r?jh5>vTcr#H1V(K$yUp5!X~$}tJGQBaXJDwn6rXDLc(tlq z*>DiG@)iqBs2+qrr&S%#MT-7}MxP%tWi1vh;VJ7|@Og%ou2?we z^tvFSwa~y-0^h}Q)l77;I^(M6H1@|=oq=na&^~g=_Eb!zg183POVr^8 zs<7;W3Zfwt#A4iR;3lHAe-b5@U@7S_U1ZZ!?fF{cjGud6^9>kPCIDFe9@tva&-TlKO(H?YB4d_OfnHcH%v+ldE{c$idz2j9CK8iLr2 zEe6_Ye{cy26CDH^wXR5+opCF|B#bZksyn1WrmiTq8c>CJiURm2xDW)%rxQw)(up z3;JtlTv@TWrw_d-aljYYp)vci#4C7}@y1PeHR0)Z>_**XuS>jvH<{t2(_Pe;Vxzv9 z-j;X=?=svDx~NjFw2P`lCYD}6^_sEN>1ER2!v_Z5XJrQ!koZtHN~KP| zO7ON(QT9+$kC%@nKEbC1ndjty(EobM!$Z4%NaAx1$ciHG45Uk@WlKDz%&37Zr{%!m zlk3kWM$U^ZgD>=K3kGo*NA>O)BP>Sd+AiDH^DIAezLGeBuL(M@PfN~RX=CJQbz1E= z65r};socMom}QpylK-1-6rtF##+;-4EK8b9{0L6X$o3|))1R*fPIJawSPL;0cDhm# zwcOIfc*1}@EYN2OfsmdL^$F8;m76otH=3E|qHIyPctp`c-yMbN{9!2LQw}j|l>Tqv z-_8&|%q^)E+%4p{rUYx|W*}>hVB{fRW;EYJDFZ@w4Byh<2Qe1oxDrm7kkc@vjB@29 z&8kU5rZF+MOvx=X(wLRT+$^p*iEFaBE{hv8sL%7V2<6YDQJ+QQ>Vw!b|4XbDIEnR5 z^UiB%%VJX&k$GuYStK)XOISTw+?Bzu^Q8OJc$lJYbWwoI6KU)nA9x#5@5cu+*jp_4 z9I3m`3+^uw+)r0t5;$FqViWdJ`c<^!AhzHb z=gui~;0$H|=3w~;3jbm&&T_s8#KdHdlPXw#(P|LTg~=C9@4mzLEL$^n;|Ki6GVkM` z!YOo9?k5Udi?VZAhJXQK;Ai3`44k9A@*KgydXj{uRhJ4;(=Yz}SNz6xCiQWI;dkyc ST>s!Yk2m-kKknK16Zj8-yA2uu literal 0 HcwPel00001 diff --git a/motsim2/MOTSIM_Controller$TargetMover.class b/motsim2/MOTSIM_Controller$TargetMover.class new file mode 100644 index 0000000000000000000000000000000000000000..5ebc00c37ba59493ef68dff27593226425d1dd83 GIT binary patch literal 1864 zcwTK(TT@$A6#h1WY?ADjl%`m%rCw0ER8keI5=t*zN-zNi0=9Uehh#T7aB@yOX9sAt z-WC5rosK^Fz;kCptvaKQzWM5_f50al`!241LLeEMne4OoT5Er6t#7ThfB)}?p8&jw zO^zmplj-TqTr#~h;@HY{EK9mw8Nm3G#o%hAjbT`|^-xMkS+`1JCM%qor`L;JpT zwrtzRvLzXUs$hCuXBdvA4&Ww8J!IOZ8fNI|eu%zjfuVWC$;l8H4he9yh7mxUKnPKW zK({t%OPRKuDi@cfo2mM2PdQn`S}dbz+8c#?rD-<7B7@YyOW(~3_RUSUqEL>N!w z8ICUUdO#`gES_U%HI;M?<+z%$o;r-=t~?Pz5BfNIYxQW*3Y^CC#Dy(46ho|rP*=$W zN1V!1r6h!YydbDEUSbGm9mma?wxNj3X!V}4uHrL}X)8+mWxT?1miTDY2)v5d7}y5= zlNv7}Fobgy!mHH;+~9M@`m`4vbT zsvxk8EXCtGWjjZx-J?B|x};LzI`Y&(1;d;2t4H0xsHrgpRzV7y&;(dB zhE07LMiCB&O?~rl3xSfJDelUWL3L}X=8ISu3TqtYhN;gKTxsM4)OHQ1>VE^L}8IeYH6?K*&@dW44wNhNt^o8EtizcjcsIQNl`(_j*@FlRXdR8@z9(y zva4yMv^&V*Ij8Jq<+!O29S6p}Mzh)(CwiD7yz z&f^k21{qw$HR|pUF^bz5!?(DMA2ESH$nH-}5=x3t(s+O&VtvLhK!+|9W4i_D#5Udj zh&+Bwrwa%LcBmi$P6AE?g&p#wPaOUJIdV3#gLs2Mr`9sP+|mXA#4r1&_>8{ov}5#g MeNOu##rXyBKT9OIdH?_b literal 0 HcwPel00001 diff --git a/motsim2/MOTSIM_Controller.class b/motsim2/MOTSIM_Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..da4077990adec480ffa13e0ae270160886ba6a5c GIT binary patch literal 1114 zcwTi=YflqF6g^W4E6bLrP(&#YQQPt;FGU4WQer~ViU~~@8**0qyTl=s}w_Z&z02I2yP zXRNq6&Ag^@=K?_lF`LG%0`SAd$w%X4z~qT>2}sOu1uLC@{F74!jOdo zhDo2!lzSoY&_XwQ^lr?8fd>Z0S>C^*dNF|~1|AFawIExVM2exH;w$AI1@<>Zz=lwH z5$1O7nsNi%b2m*SF|CeG4cm<^D}j?(pe73q{Eh0$*Y zKV?iKR`64jU+O4@J#%JlWj|P?m zraI8)4mhFk7SY5amUVF}Y-0KzEt#^3HM}&iE-?N-E(@=)!Pd)awGCZhwxwaJuG}!! zUQsk)^T0dzE9#@I`!d#{VM!whSbHuL@{SAw#l|Jtm<+rVnCvXJboUxL>^9G8tpGEe zU>850IRAW9&_6z@$a1Wa?SsWN#+wQBa~+`PFhl31vey{Q&R=09yKsfk> (view.screen_size.width - + t.string_width)) || + ((t.coordinate.x + t.velX) < 0)) { + t.velX = t.velX * -1; + } + if (((t.coordinate.y + t.velY) > view.screen_size.height) || + ((t.coordinate.y + t.velY - t.font_size) < 0)) { + t.velY = t.velY * -1; + } + t.coordinate.x = (int)Math.round(t.coordinate.x + t.velX); + t.coordinate.y = (int)Math.round(t.coordinate.y + t.velY); + } + view.tp.repaint(); + try { + Thread.sleep(20); + } catch (InterruptedException e) { + } + } + } + } + + class StartListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + model.targets = tdd.generate_targets((Integer)view.cp. + targets_spinner.getValue()); + view.startTrial(); + for (Target t : model.targets) { + t.string_width = view.tp.getGraphics().getFontMetrics(). + stringWidth(t.callsign); + t.font_size = view.tp.getFont().getSize(); + int max; + max = view.screen_size.width - t.string_width; + if (t.coordinate.x > max) + t.coordinate.x = max; + max = view.screen_size.height - t.font_size; + if (t.coordinate.y > max) + t.coordinate.y = max; + } + model.move_targets = true; + model.borderstyle = + view.cp.borderstyle_combobox.getSelectedItem().toString(); + targetMoverThread = new Thread(new TargetMover()); + targetMoverThread.start(); + } + } + +} diff --git a/motsim2/MOTSIM_Model.class b/motsim2/MOTSIM_Model.class new file mode 100644 index 0000000000000000000000000000000000000000..cedd736464d8bdf4894ece26fd72a7d41d86616d GIT binary patch literal 446 zcwS{tO-sW-5PjRm#-=g-@LTZUO{*C2+R}?43W+_W^x&mz(k0!JCa~QU{8=7E@Zb;d zM~RbEwBW+d?(DpI@6CRGy?+3>!HJ0qgY6GT!Gk~Xv#Cf-7!0jBUvW3#Y3vTexrj7_ zskw@UUNY=@Wi{6_aqszZ76{#As0T7mxz3efIQ@_4d!w?yHz2IN$W~(VOURxW8eyiU zLM`=kLIfS}&p@D+Ok?V*^<^scfT4PRF=jAs$*zSe+BSCJ)IrW{)L}6+J(-Hfd=UyY z;^CSwi+D2TN*4LgqoHS#q^wUEMyJ(%L#u1NqVrPr?NM|}wk`}@62}$xDYMsT9N@6zIx5k} E-vP~DApigX literal 0 HcwPel00001 diff --git a/motsim2/MOTSIM_Model.java b/motsim2/MOTSIM_Model.java new file mode 100644 index 0000000..ccfadb4 --- /dev/null +++ b/motsim2/MOTSIM_Model.java @@ -0,0 +1,46 @@ +import java.util.HashSet; + +/** + * MOTSIM_Model.java + * motsim + */ + +/* + Copyright (c) 2008, Ryan M. Hope + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +public class MOTSIM_Model { + + HashSet targets; + boolean move_targets; + String borderstyle; + + public MOTSIM_Model() { + move_targets = true; + } + +} diff --git a/motsim2/MOTSIM_View$ControlPanel.class b/motsim2/MOTSIM_View$ControlPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..02344333ce6609b56681d9208e044c85aa84bd88 GIT binary patch literal 2520 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 literal 0 HcwPel00001 diff --git a/motsim2/MOTSIM_View.class b/motsim2/MOTSIM_View.class new file mode 100644 index 0000000000000000000000000000000000000000..e43f88b6b38908f368c6e9b82fb1846e06053520 GIT binary patch literal 1043 zcwTi<*>2N76g}fCrjFaJgi@ALDBvW}gtAkFgi;C>4ylwV5>J(5hT`Jb$ey$kf5k%p zfy4*!QHbkFAWoIq@}2FRbI;uC-+zAm0Zy16kUHZISG z4i#q@G$|~bsp1aZWPXn|G*F9p_jD{kBVNZJ1~%VuBGb7TX(OrwgTCugi<_<$hMexB z$ITIYs*E*KP0+8Ll3yCpL)PR-spOb}E=Q^)#RM_3$WhGGstbi)pj7>aLbW!++3I(k z`-)2=tbL(<1=lDRkfiv6;tr|4L=msBPCMl>7uRt^W++JyjNY3xA7|Ji7K^f1f5Lc6 zX{saKo=R&{;x$<`rKCOvPb3-YbA=j_(B=qtPYSh3U~i6)g8MQ)z(aW-g<8z;h~^C% H9|L~@by?Z1 literal 0 HcwPel00001 diff --git a/motsim2/MOTSIM_View.java b/motsim2/MOTSIM_View.java new file mode 100644 index 0000000..41cf886 --- /dev/null +++ b/motsim2/MOTSIM_View.java @@ -0,0 +1,213 @@ +/** + * MOTSIM_View.java + * motsim + */ + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsEnvironment; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.font.FontRenderContext; +import java.awt.geom.Rectangle2D; + +import javax.swing.ComboBoxModel; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; + +/* + Copyright (c) 2008, Ryan M. Hope + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +public class MOTSIM_View { + + MOTSIM_Model model; + ControlPanel cp; + TrialPanel tp; + ActionListener startActionListener; + Dimension screen_size; + + public MOTSIM_View(MOTSIM_Model model) { + this.model = model; + screen_size = Toolkit.getDefaultToolkit().getScreenSize(); + } + + public void startControlPanel() { + cp = new ControlPanel(); + } + + public void startTrial() { + tp = new TrialPanel(); + } + + @SuppressWarnings("serial") + class ControlPanel extends JFrame { + + JLabel targets_label; + JSpinner targets_spinner; + JPanel targets_panel; + JPanel start_panel; + JButton start_button; + JPanel borderstyle_panel; + JLabel borderstyle_label; + JComboBox borderstyle_combobox; + + String[] borderStyles = { "Reflect", "Wrap", "Maintain"}; + + public ControlPanel() { + setDefaultCloseOperation(EXIT_ON_CLOSE); + setPreferredSize(new Dimension(275, 80)); + setTitle("MOTSIM Control Panel"); + setResizable(false); + setLocationRelativeTo(null); + setLayout(new GridLayout(3,1)); + targets_panel = new JPanel(new FlowLayout()); + targets_label = new JLabel("Number of targets: "); + targets_spinner = + new JSpinner(new SpinnerNumberModel(10, 1, 50, 1)); + targets_spinner.setFocusable(false); + targets_panel.add(targets_label); + targets_panel.add(targets_spinner); + add(targets_panel); + borderstyle_panel = new JPanel(new FlowLayout()); + borderstyle_label = new JLabel("Border Style: "); + borderstyle_combobox = new JComboBox(borderStyles); + borderstyle_panel.add(borderstyle_label); + borderstyle_panel.add(borderstyle_combobox); + add(borderstyle_panel); + start_panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + start_button = new JButton("Start"); + start_button.setActionCommand("START"); + start_button.setSelected(true); + start_panel.add(start_button); + add(start_panel); + pack(); + } + + void addStartListener(ActionListener l) { + start_button.addActionListener(l); + } + + } + + @SuppressWarnings("serial") + class TrialPanel extends JFrame + implements MouseMotionListener, WindowListener { + + Graphics bufferGraphics; + Image offscreen; + + int curX, curY; + + public TrialPanel() { + setPreferredSize(screen_size); + setResizable(false); + setLocationRelativeTo(null); + setUndecorated(true); + GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().setFullScreenWindow(this); + addWindowListener(this); + addMouseMotionListener(this); + setBackground(Color.black); + offscreen = createImage(screen_size.width, screen_size.height); + bufferGraphics = offscreen.getGraphics(); + } + + public void drawTargets(Graphics g) { + for (Target t : model.targets ) { + /*String s = t.coordinate.x + "," + t.coordinate.y + " - " + + t.moveAngle; + bufferGraphics.drawString(s, t.coordinate.x, + t.coordinate.y);*/ + bufferGraphics.drawString(t.callsign, t.coordinate.x, + t.coordinate.y); + } + + } + + public void paint(Graphics g) { + bufferGraphics.clearRect(0, 0, screen_size.width, + screen_size.height); + bufferGraphics.setColor(Color.red); + drawTargets(g); + bufferGraphics.fillRect(curX, curY, 20, 20); + g.drawImage(offscreen, 0, 0, this); + } + + public void update(Graphics g) { + paint(g); + } + + public void mouseDragged(MouseEvent e) { + } + + public void mouseMoved(MouseEvent e) { + curX = e.getX(); + curY = e.getY(); + repaint(); + } + + public void windowActivated(WindowEvent e) { + } + + public void windowClosed(WindowEvent e) { + } + + public void windowClosing(WindowEvent e) { + } + + public void windowDeactivated(WindowEvent e) { + model.move_targets = false; + } + + public void windowDeiconified(WindowEvent e) { + } + + public void windowIconified(WindowEvent e) { + } + + public void windowOpened(WindowEvent e) { + } + + } + +} diff --git a/motsim2/Target.class b/motsim2/Target.class new file mode 100644 index 0000000000000000000000000000000000000000..3ef798cf4f410d5d1c1598c035a9a11ca285a1c1 GIT binary patch literal 683 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 generate_callsigns(int count) { + + HashSet callsigns = new HashSet(count); + + while (callsigns.size() < count) { + int randomInt = rand.nextInt(callsign_prefixes.length); + int callsign_suffix = 0; + while (callsign_suffix < 100) { + callsign_suffix = rand.nextInt(1000); + } + callsigns.add(callsign_prefixes[randomInt] + + String.valueOf(callsign_suffix)); + } + + return callsigns; + + } + + /** + * Generate a set of random coordinates between 0.0 and 1.0. + * + * @param count The number of coordinates to generate. + * @return A HashSet of coordinates. + */ + private HashSet generate_coordinates(int count) { + + HashSet coordinates = new HashSet(count); + + while (coordinates.size() < count) { + int x = (int)Math.round(screen_size.width * rand.nextDouble()); + int y = (int)Math.round(screen_size.height * rand.nextDouble()); + Point point = new Point(); + point.setLocation(x, y); + coordinates.add(point); + } + + return coordinates; + + } + + /** + * Generate a random set of targets. + * + * @param count The number of callsigns to generate. + * @return A HashSet of coordinates. + */ + protected HashSet generate_targets( int count ) { + + HashSet targets = new HashSet( count ); + HashSet callsigns = generate_callsigns( count ); + HashSet coordinates = generate_coordinates( count ); + Iterator callsignsIter = callsigns.iterator(); + Iterator coordinatesIter = coordinates.iterator(); + + while ( ( targets.size() < count ) && + ( callsignsIter.hasNext() && callsignsIter.hasNext() ) ) { + int angle = rand.nextInt(360); + Target target = + new Target( callsignsIter.next(), coordinatesIter.next(), + angle, calcAngleMoveX(angle), calcAngleMoveY(angle)); + targets.add( target ); + } + + return targets; + + } + + protected void addTarget(HashSet targets) { + + HashSet callsigns; + HashSet coordinates; + Iterator callsignsIter; + Iterator coordinatesIter; + + int size = targets.size() + 1; + while ( targets.size() < size ) { + callsigns = generate_callsigns(1); + coordinates = generate_coordinates(1); + callsignsIter = callsigns.iterator(); + coordinatesIter = coordinates.iterator(); + int angle = rand.nextInt(360); + Target target = + new Target(callsignsIter.next(), coordinatesIter.next(), angle, + calcAngleMoveX(angle), calcAngleMoveY(angle)); + targets.add( target ); + } + + } + + public double calcAngleMoveX(double angle) { + return (double) (Math.cos(angle * Math.PI / 180)); + } + + public double calcAngleMoveY(double angle) { + return (double) (Math.sin(angle * Math.PI / 180)); + } + +} -- 2.11.4.GIT