├── .gitignore ├── .travis.yml ├── AutoRefAPI.md ├── CHANGELOG.md ├── README.md ├── TCM.md ├── build.xml ├── deps ├── gluegen-rt-natives-android-aarch64.jar ├── gluegen-rt-natives-android-armv6.jar ├── gluegen-rt-natives-linux-amd64.jar ├── gluegen-rt-natives-linux-armv6.jar ├── gluegen-rt-natives-linux-armv6hf.jar ├── gluegen-rt-natives-linux-i586.jar ├── gluegen-rt-natives-macosx-universal.jar ├── gluegen-rt-natives-solaris-amd64.jar ├── gluegen-rt-natives-solaris-i586.jar ├── gluegen-rt-natives-windows-amd64.jar ├── gluegen-rt-natives-windows-i586.jar ├── gluegen-rt.jar ├── hamcrest-core-1.3.jar ├── javax.servlet.jar ├── jogl-all-natives-android-aarch64.jar ├── jogl-all-natives-android-armv6.jar ├── jogl-all-natives-linux-amd64.jar ├── jogl-all-natives-linux-armv6.jar ├── jogl-all-natives-linux-armv6hf.jar ├── jogl-all-natives-linux-i586.jar ├── jogl-all-natives-macosx-universal.jar ├── jogl-all-natives-solaris-amd64.jar ├── jogl-all-natives-solaris-i586.jar ├── jogl-all-natives-windows-amd64.jar ├── jogl-all-natives-windows-i586.jar ├── jogl-all.jar ├── json-simple-1.1.jar └── junit-4.12.jar ├── include ├── RoboCupGameControlData.h ├── SPLCoachMessage.h └── SPLStandardMessage.h ├── lib └── libgamectrl.so ├── protocols └── python │ ├── gamestate.py │ └── receiver.py ├── resources ├── config │ ├── hl_adult │ │ ├── 25.jpg │ │ ├── 26.jpg │ │ ├── 27.png │ │ ├── 28.png │ │ ├── background.jpg │ │ ├── old │ │ │ └── thu.png │ │ └── teams.cfg │ ├── hl_dropin │ │ ├── 31.png │ │ ├── 32.png │ │ ├── background.jpg │ │ └── teams.cfg │ ├── hl_kid │ │ ├── 1.png │ │ ├── 10.jpg │ │ ├── 11.png │ │ ├── 12.JPG │ │ ├── 12.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.jpg │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.jpg │ │ ├── 8.png │ │ ├── 9.jpg │ │ ├── background.jpg │ │ ├── old │ │ │ ├── bitbots-wolves.png │ │ │ ├── ichiro.png │ │ │ ├── ikid.jpg │ │ │ ├── mrl.png │ │ │ ├── starkit.png │ │ │ └── sycu.png │ │ └── teams.cfg │ ├── hl_sim_adult │ │ ├── 25.jpg │ │ ├── 27.png │ │ ├── background.jpg │ │ └── teams.cfg │ ├── hl_sim_kid │ │ ├── 11.png │ │ ├── 14.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── background.jpg │ │ └── teams.cfg │ ├── hl_teen │ │ ├── 18.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── background.jpg │ │ └── teams.cfg │ ├── icons │ │ ├── field.png │ │ ├── goalkeeper.png │ │ ├── goalkeeper_fade.png │ │ ├── hl_adult │ │ │ ├── robot_left_blue.png │ │ │ ├── robot_left_red.png │ │ │ ├── robot_right_blue.png │ │ │ └── robot_right_red.png │ │ ├── hl_kid │ │ │ ├── robot_left_blue.png │ │ │ ├── robot_left_red.png │ │ │ ├── robot_right_blue.png │ │ │ └── robot_right_red.png │ │ ├── hl_teen │ │ │ ├── robot_left_blue.png │ │ │ ├── robot_left_red.png │ │ │ ├── robot_right_blue.png │ │ │ └── robot_right_red.png │ │ ├── pause.png │ │ ├── play.png │ │ ├── plus.png │ │ ├── reset.png │ │ ├── spl │ │ │ ├── robot_left_black.png │ │ │ ├── robot_left_blue.png │ │ │ ├── robot_left_brown.png │ │ │ ├── robot_left_gray.png │ │ │ ├── robot_left_green.png │ │ │ ├── robot_left_orange.png │ │ │ ├── robot_left_purple.png │ │ │ ├── robot_left_red.png │ │ │ ├── robot_left_white.png │ │ │ ├── robot_left_yellow.png │ │ │ ├── robot_right_black.png │ │ │ ├── robot_right_blue.png │ │ │ ├── robot_right_brown.png │ │ │ ├── robot_right_gray.png │ │ │ ├── robot_right_green.png │ │ │ ├── robot_right_orange.png │ │ │ ├── robot_right_purple.png │ │ │ ├── robot_right_red.png │ │ │ ├── robot_right_white.png │ │ │ └── robot_right_yellow.png │ │ ├── spl_dropin │ │ │ ├── robot_left_blue.png │ │ │ ├── robot_left_red.png │ │ │ ├── robot_right_blue.png │ │ │ └── robot_right_red.png │ │ ├── time_ground.png │ │ ├── time_ground_small.png │ │ ├── timeline_ground.png │ │ ├── wlan_status_green.png │ │ ├── wlan_status_grey.png │ │ ├── wlan_status_red.png │ │ └── wlan_status_yellow.png │ ├── old_logos │ │ ├── 1.png │ │ ├── 15.png │ │ ├── 19.png │ │ ├── 23.png │ │ ├── 34.png │ │ ├── 8.png │ │ └── 9.png │ ├── sim │ │ └── game.json │ ├── spl │ │ ├── 1.png │ │ ├── 10.gif │ │ ├── 11.png │ │ ├── 12.gif │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.gif │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── 26.gif │ │ ├── 27.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 3.gif │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 32.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 35.png │ │ ├── 36.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 4.gif │ │ ├── 41.png │ │ ├── 44.png │ │ ├── 5.png │ │ ├── 6.gif │ │ ├── 7.png │ │ ├── 8.png │ │ ├── 9.png │ │ ├── backgroundr.png │ │ └── teams.cfg │ └── spl_dropin │ │ ├── 98.png │ │ ├── 99.png │ │ ├── backgroundr.jpg │ │ └── teams.cfg ├── plugins │ └── 05 │ │ ├── B-Human │ │ ├── build.xml │ │ └── src │ │ │ ├── bhuman │ │ │ ├── drawings │ │ │ │ ├── Goal.java │ │ │ │ ├── Obstacle.java │ │ │ │ ├── Thumbnail.java │ │ │ │ └── WhistleHeard.java │ │ │ └── message │ │ │ │ ├── BHumanMessage.java │ │ │ │ ├── Message.java │ │ │ │ ├── MessageQueue.java │ │ │ │ ├── Thumbnail.java │ │ │ │ ├── data │ │ │ │ ├── Angle.java │ │ │ │ ├── ArrayReader.java │ │ │ │ ├── Eigen.java │ │ │ │ ├── EnumReader.java │ │ │ │ ├── JointData.java │ │ │ │ ├── NativeReaders.java │ │ │ │ ├── Role.java │ │ │ │ ├── SimpleStreamReader.java │ │ │ │ └── StreamReader.java │ │ │ │ └── messages │ │ │ │ ├── BehaviorStatus.java │ │ │ │ ├── GoalPercept.java │ │ │ │ ├── NetworkThumbnail.java │ │ │ │ ├── ObstacleModelCompressed.java │ │ │ │ ├── RobotHealth.java │ │ │ │ └── Whistle.java │ │ │ └── util │ │ │ └── Unsigned.java │ │ └── resources │ │ ├── MessageIDs.h │ │ └── whistle.png └── scene │ ├── Ball2010SPL.rsi2 │ ├── Field2015SPL.rsi2 │ ├── NaoV4H21.rsi2 │ ├── TeamComm.ros2 │ └── Textures │ ├── ascii.png │ ├── net.png │ ├── shadow.png │ ├── textures-button_gray.png │ └── textures-ear.png ├── sim_client └── main.py ├── src ├── analyzer │ ├── GUI.java │ ├── LogAnalyzer.java │ ├── LogInfo.java │ └── Parser.java ├── common │ ├── ApplicationLock.java │ ├── Log.java │ └── TotalScaleLayout.java ├── controller │ ├── Clock.java │ ├── EventHandler.java │ ├── GameController.java │ ├── GameControllerDebug.java │ ├── GameControllerSimulator.java │ ├── SystemClock.java │ ├── action │ │ ├── ActionBoard.java │ │ ├── ActionType.java │ │ ├── GCAction.java │ │ ├── clock │ │ │ └── ClockTick.java │ │ ├── net │ │ │ ├── Manual.java │ │ │ └── SPLCoachMessageReceived.java │ │ └── ui │ │ │ ├── AbortGameInterruption.java │ │ │ ├── CancelUndo.java │ │ │ ├── CardIncrease.java │ │ │ ├── ClockPause.java │ │ │ ├── ClockReset.java │ │ │ ├── CornerKick.java │ │ │ ├── DirectFreeKick.java │ │ │ ├── DropBall.java │ │ │ ├── DropInPointsEvaluation.java │ │ │ ├── DropinPointDelta.java │ │ │ ├── GameInterruption.java │ │ │ ├── GlobalStuck.java │ │ │ ├── Goal.java │ │ │ ├── GoalKick.java │ │ │ ├── IncGameClock.java │ │ │ ├── IndirectFreeKick.java │ │ │ ├── KickOff.java │ │ │ ├── MakeGoalieAction.java │ │ │ ├── Out.java │ │ │ ├── PenaltyKick.java │ │ │ ├── Quit.java │ │ │ ├── RefereeTimeout.java │ │ │ ├── RetakeGameInterruption.java │ │ │ ├── Robot.java │ │ │ ├── TeammatePushing.java │ │ │ ├── Testmode.java │ │ │ ├── ThrowIn.java │ │ │ ├── TimeOut.java │ │ │ ├── Undo.java │ │ │ ├── half │ │ │ ├── FirstHalf.java │ │ │ ├── FirstHalfOvertime.java │ │ │ ├── PenaltyShoot.java │ │ │ ├── SecondHalf.java │ │ │ └── SecondHalfOvertime.java │ │ │ ├── penalty │ │ │ ├── BallManipulation.java │ │ │ ├── HLPushing.java │ │ │ ├── Penalty.java │ │ │ ├── PickUpHL.java │ │ │ └── Substitute.java │ │ │ └── state │ │ │ ├── Finish.java │ │ │ ├── Initial.java │ │ │ ├── Play.java │ │ │ ├── Ready.java │ │ │ └── Set.java │ ├── net │ │ ├── AutoRefServer.java │ │ ├── GameControlReturnDataReceiver.java │ │ ├── RobotOnlineStatus.java │ │ ├── RobotWatcher.java │ │ ├── SPLCoachMessageReceiver.java │ │ └── Sender.java │ └── ui │ │ ├── GCGUI.java │ │ ├── KeyboardListener.java │ │ ├── gameplay │ │ ├── CommonGUI.java │ │ └── GUI.java │ │ ├── helper │ │ └── FontHelper.java │ │ ├── localization │ │ ├── Localization.java │ │ └── LocalizationManager.java │ │ ├── setup │ │ ├── ImagePanel.java │ │ └── StartInput.java │ │ └── ui │ │ ├── AbstractUI.java │ │ ├── components │ │ ├── AbstractComponent.java │ │ ├── ClockComponent.java │ │ ├── DropInStatSnippet.java │ │ ├── DropInTeamComponent.java │ │ ├── GameMetaInfo.java │ │ ├── GameStateComponent.java │ │ ├── GameStateHistoryLogger.java │ │ ├── HLTeamActions.java │ │ ├── PenaltyComponent.java │ │ ├── Refreshable.java │ │ ├── Robot.java │ │ ├── RobotWithDropInCounter.java │ │ ├── SequenceGameStates.java │ │ ├── SimulatorUpdateComponent.java │ │ ├── TeamActions.java │ │ ├── TeamComponent.java │ │ └── YellowRedCardTeamComponent.java │ │ ├── composites │ │ ├── HL_DropIn.java │ │ ├── HL_GUI.java │ │ └── HL_SimGui.java │ │ └── customized │ │ ├── AbortButton.java │ │ ├── BestFitImagePanel.java │ │ ├── Button.java │ │ ├── CountDownBar.java │ │ ├── GameInterruptionButton.java │ │ ├── ImageButton.java │ │ ├── ImagePanel.java │ │ ├── JMultiStepIndicatorButton.java │ │ ├── RetakeButton.java │ │ └── ToggleButton.java ├── data │ ├── Helper.java │ ├── PlayerInfo.java │ ├── Rules.java │ ├── Teams.java │ ├── communication │ │ ├── GameControlData.java │ │ ├── GameControlReturnData.java │ │ └── TeamInfo.java │ ├── hl │ │ ├── HL.java │ │ ├── HLAdult.java │ │ ├── HLDropIn.java │ │ ├── HLDropIn2.java │ │ ├── HLDropIn3.java │ │ ├── HLDropIn4.java │ │ ├── HLDropIn5.java │ │ ├── HLSim.java │ │ ├── HLSimulationAdult.java │ │ ├── HLSimulationKid.java │ │ └── HLTeen.java │ ├── spl │ │ ├── SPLCoachMessage.java │ │ └── SPLStandardMessage.java │ ├── states │ │ ├── AdvancedData.java │ │ ├── ExtraClock.java │ │ ├── GameClock.java │ │ ├── GamePreparationData.java │ │ ├── PrepTeam.java │ │ └── SecondaryStateInfo.java │ ├── teams │ │ ├── TeamLoadInfo.java │ │ └── TeamsLoader.java │ └── values │ │ ├── DocumentingMarkdown.java │ │ ├── GameStates.java │ │ ├── GameTypes.java │ │ ├── Penalties.java │ │ ├── PlayerResponses.java │ │ ├── ProtocolHelper.java │ │ ├── SecondaryGameStates.java │ │ ├── Side.java │ │ └── TeamColors.java ├── libgamectrl │ ├── CMakeLists.txt │ ├── GameCtrl.cpp │ ├── README.txt │ ├── UdpComm.cpp │ ├── UdpComm.h │ └── qiproject.xml └── teamcomm │ ├── Config.java │ ├── PluginLoader.java │ ├── TeamCommunicationMonitor.java │ ├── data │ ├── AdvancedMessage.java │ ├── GameState.java │ ├── RobotState.java │ └── event │ │ ├── RobotStateEvent.java │ │ ├── RobotStateEventListener.java │ │ ├── TeamEvent.java │ │ └── TeamEventListener.java │ ├── gui │ ├── Camera.java │ ├── LogReplayFrame.java │ ├── MainWindow.java │ ├── RobotDetailFrame.java │ ├── RobotPanel.java │ ├── TeamLogoLoader.java │ ├── View3D.java │ ├── View3DCanvas.java │ ├── View3DGSV.java │ └── drawings │ │ ├── Drawing.java │ │ ├── Image.java │ │ ├── PerPlayer.java │ │ ├── RoSi2Element.java │ │ ├── RoSi2Loader.java │ │ ├── Static.java │ │ ├── Text.java │ │ ├── TextureLoader.java │ │ └── common │ │ ├── Ball.java │ │ ├── Field.java │ │ ├── FieldSmall.java │ │ ├── GameControllerInfo.java │ │ ├── Player.java │ │ ├── PlayerNumber.java │ │ └── PlayerTarget.java │ └── net │ ├── GameControlDataReceiver.java │ ├── SPLStandardMessagePackage.java │ ├── SPLStandardMessageReceiver.java │ ├── SPLStandardMessageReceiverTCM.java │ └── logging │ ├── LogReplayEvent.java │ ├── LogReplayEventListener.java │ ├── LogReplayTask.java │ ├── LogReplayer.java │ └── Logger.java ├── test ├── TestGameControlData.java ├── TestGamePreparationData.java ├── TestPrepTeam.java ├── TestRules.java ├── TestSecondaryState.java ├── TestTeamLoader.java ├── actions │ ├── TestFreeKickAction.java │ ├── TestPenaltyKickAction.java │ ├── TestTimeOut.java │ └── states │ │ └── TestFinishAction.java └── ui │ └── components │ └── TestTeamComponent.java └── test_resources └── config ├── hl_adult ├── background.jpg └── teams.cfg ├── hl_dropin ├── 100.png ├── 101.png ├── background.jpg └── teams.cfg ├── hl_kid ├── background.jpg └── teams.cfg ├── hl_teen ├── 33.jpg ├── background.jpg └── teams.cfg ├── icons ├── field.png ├── hl_adult │ ├── robot_left_blue.png │ ├── robot_left_red.png │ ├── robot_right_blue.png │ └── robot_right_red.png ├── hl_kid │ ├── robot_left_blue.png │ ├── robot_left_red.png │ ├── robot_right_blue.png │ └── robot_right_red.png ├── hl_teen │ ├── robot_left_blue.png │ ├── robot_left_red.png │ ├── robot_right_blue.png │ └── robot_right_red.png ├── pause.png ├── play.png ├── plus.png ├── reset.png ├── spl │ ├── robot_left_black.png │ ├── robot_left_blue.png │ ├── robot_left_brown.png │ ├── robot_left_gray.png │ ├── robot_left_green.png │ ├── robot_left_orange.png │ ├── robot_left_purple.png │ ├── robot_left_red.png │ ├── robot_left_white.png │ ├── robot_left_yellow.png │ ├── robot_right_black.png │ ├── robot_right_blue.png │ ├── robot_right_brown.png │ ├── robot_right_gray.png │ ├── robot_right_green.png │ ├── robot_right_orange.png │ ├── robot_right_purple.png │ ├── robot_right_red.png │ ├── robot_right_white.png │ └── robot_right_yellow.png ├── spl_dropin │ ├── robot_left_blue.png │ ├── robot_left_red.png │ ├── robot_right_blue.png │ └── robot_right_red.png ├── time_ground.png ├── time_ground_small.png ├── timeline_ground.png ├── wlan_status_green.png ├── wlan_status_grey.png ├── wlan_status_red.png └── wlan_status_yellow.png ├── spl ├── 1.png ├── 2.gif ├── 3.gif ├── 4.gif ├── backgroundr.png └── teams.cfg └── spl_dropin ├── 98.png ├── 99.png ├── backgroundr.jpg └── teams.cfg /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | nbproject/ 3 | *~ 4 | error.txt 5 | /resources/plugins/05/resources/bhumanpath.cfg 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | script: ant test 3 | jdk: oraclejdk8 4 | dist: precise 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Changelog 2 | 3 | The changelog shows which changes are planned and implemented and in which 4 | tag they are considered working. An item will be listed in the form: 5 | - [x] Implemented feature (version) 6 | - [ ] Planned but not implemented feature 7 | 8 | 9 | ### 2017 - v2 10 | - [x] Drop in challenge for Humanoid League (2017.2) 11 | - [x] Moved to Protocol Version 12 (2017.2) 12 | - Split up FREE_KICK into DIRECT_FREE_KICK and INDIRECT_FREE_KICK 13 | - Updated bytes for secondary states 14 | - secondary state info got additional field with meaning during free kick 15 | - Added number of yellow cards and number of red cards to RobotInfo 16 | - [x] Direct and Indirect Free-Kick are delivering additional info in secondary state info (2017.2) 17 | - [X] Moved humanoid normal games to new component based UI (2017.2) 18 | - [x] Removed switch of kick-off after timeout for HL 19 | 20 | ### 2017 - v1 21 | - [x] Updated Game Controller to Java 1.8 (2017.1) 22 | - [x] Remove support for Protocol Version 7 (2017.1) 23 | - [x] Updated Penalty bytes for Humanoid League (2017.1) 24 | - HL_BALL_MANIPULATION: 1 (dec) -> 30 (dec) 25 | - HL_PHYSICAL_CONTACT: 2 (dec) -> 31 (dec) 26 | - HL_ILLEGAL_ATTACK: 3 (dec) -> 32 (dec) 27 | - HL_ILLEGAL_DEFENSE: 4 (dec) -> 33 (dec) 28 | - HL_PICKUP_OR_INCAPABLE: 5 (dec) -> 34 (dec) 29 | - HL_SERVICE: 6 (dec) -> 35 (dec) 30 | - [x] Moved to Protocol Version 11 (2017.1) 31 | - Added Secondary State FREE_KICK 32 | - Added Secondary State PENALTY_KICK 33 | - Added Secondary State Information to the protocol (4 bytes describing details about the secondary state) 34 | - [x] Penalty Kick during the Game (2017.1) 35 | - Restricted pressing Finish during PenaltyKick Preparation 36 | - [x] Free Kick during the Game (2017.1) 37 | - Restricted pressing Finish during a FreeKick Preparation 38 | - [x] Referee Timeout (2017.1) 39 | - [x] Align Adult League (2017.1) 40 | 41 | -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-android-aarch64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-android-aarch64.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-android-armv6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-android-armv6.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-linux-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-linux-amd64.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-linux-armv6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-linux-armv6.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-linux-armv6hf.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-linux-armv6hf.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-linux-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-linux-i586.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-macosx-universal.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-macosx-universal.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-solaris-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-solaris-amd64.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-solaris-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-solaris-i586.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-windows-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-windows-amd64.jar -------------------------------------------------------------------------------- /deps/gluegen-rt-natives-windows-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt-natives-windows-i586.jar -------------------------------------------------------------------------------- /deps/gluegen-rt.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/gluegen-rt.jar -------------------------------------------------------------------------------- /deps/hamcrest-core-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/hamcrest-core-1.3.jar -------------------------------------------------------------------------------- /deps/javax.servlet.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/javax.servlet.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-android-aarch64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-android-aarch64.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-android-armv6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-android-armv6.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-linux-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-linux-amd64.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-linux-armv6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-linux-armv6.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-linux-armv6hf.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-linux-armv6hf.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-linux-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-linux-i586.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-macosx-universal.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-macosx-universal.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-solaris-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-solaris-amd64.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-solaris-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-solaris-i586.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-windows-amd64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-windows-amd64.jar -------------------------------------------------------------------------------- /deps/jogl-all-natives-windows-i586.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all-natives-windows-i586.jar -------------------------------------------------------------------------------- /deps/jogl-all.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/jogl-all.jar -------------------------------------------------------------------------------- /deps/json-simple-1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/json-simple-1.1.jar -------------------------------------------------------------------------------- /deps/junit-4.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/deps/junit-4.12.jar -------------------------------------------------------------------------------- /include/SPLCoachMessage.h: -------------------------------------------------------------------------------- 1 | #ifndef SPLCOACHMESSAGE_H 2 | #define SPLCOACHMESSAGE_H 3 | 4 | #include 5 | #ifdef __cplusplus 6 | #endif 7 | 8 | #define SPL_COACH_MESSAGE_PORT 3839 9 | 10 | #define SPL_COACH_MESSAGE_STRUCT_HEADER "SPLC" 11 | #define SPL_COACH_MESSAGE_STRUCT_VERSION 4 12 | #define SPL_COACH_MESSAGE_SIZE 253 13 | 14 | struct SPLCoachMessage 15 | { 16 | char header[4]; // "SPLC" 17 | uint8_t version; // SPL_COACH_MESSAGE_STRUCT_VERSION 18 | uint8_t team; // team number 19 | uint8_t sequence; // sequence number of this message 20 | 21 | // buffer for message 22 | uint8_t message[SPL_COACH_MESSAGE_SIZE]; 23 | 24 | #ifdef __cplusplus 25 | // constructor 26 | SPLCoachMessage() : version(SPL_COACH_MESSAGE_STRUCT_VERSION) 27 | { 28 | const char* init = SPL_COACH_MESSAGE_STRUCT_HEADER; 29 | for(unsigned int i = 0; i < sizeof(header); ++i) 30 | header[i] = init[i]; 31 | } 32 | #endif 33 | }; 34 | 35 | #endif // SPLCOACHMESSAGE_H 36 | -------------------------------------------------------------------------------- /lib/libgamectrl.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/lib/libgamectrl.so -------------------------------------------------------------------------------- /resources/config/hl_adult/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/25.jpg -------------------------------------------------------------------------------- /resources/config/hl_adult/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/26.jpg -------------------------------------------------------------------------------- /resources/config/hl_adult/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/27.png -------------------------------------------------------------------------------- /resources/config/hl_adult/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/28.png -------------------------------------------------------------------------------- /resources/config/hl_adult/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_adult/old/thu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_adult/old/thu.png -------------------------------------------------------------------------------- /resources/config/hl_adult/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 25=HERoEHS 3 | 26=NimbRo AdultSize 4 | 27=RoMeLa UCLA 5 | 28=Sweaty 6 | -------------------------------------------------------------------------------- /resources/config/hl_dropin/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_dropin/31.png -------------------------------------------------------------------------------- /resources/config/hl_dropin/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_dropin/32.png -------------------------------------------------------------------------------- /resources/config/hl_dropin/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_dropin/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_dropin/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 31=Team A 3 | 32=Team B 4 | -------------------------------------------------------------------------------- /resources/config/hl_kid/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/1.png -------------------------------------------------------------------------------- /resources/config/hl_kid/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/10.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/11.png -------------------------------------------------------------------------------- /resources/config/hl_kid/12.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/12.JPG -------------------------------------------------------------------------------- /resources/config/hl_kid/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/12.png -------------------------------------------------------------------------------- /resources/config/hl_kid/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/2.png -------------------------------------------------------------------------------- /resources/config/hl_kid/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/3.png -------------------------------------------------------------------------------- /resources/config/hl_kid/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/4.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/5.png -------------------------------------------------------------------------------- /resources/config/hl_kid/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/6.png -------------------------------------------------------------------------------- /resources/config/hl_kid/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/7.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/8.png -------------------------------------------------------------------------------- /resources/config/hl_kid/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/9.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/old/bitbots-wolves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/bitbots-wolves.png -------------------------------------------------------------------------------- /resources/config/hl_kid/old/ichiro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/ichiro.png -------------------------------------------------------------------------------- /resources/config/hl_kid/old/ikid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/ikid.jpg -------------------------------------------------------------------------------- /resources/config/hl_kid/old/mrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/mrl.png -------------------------------------------------------------------------------- /resources/config/hl_kid/old/starkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/starkit.png -------------------------------------------------------------------------------- /resources/config/hl_kid/old/sycu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_kid/old/sycu.png -------------------------------------------------------------------------------- /resources/config/hl_kid/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 1=NUbots 3 | 2=Bold Hearts 4 | 3=CIT Brains 5 | 4=RO:BIT 6 | 5=Barelang FC 7 | 6=Hamburg Bit-Bots 8 | 7=RoboFEI 9 | 8=WF Wolves 10 | 9=ITAndroids 11 | 10=UTRA Robosoccer 12 | 11=Rhoban Football Club 13 | 12=TH-MOS 14 | 13=Eepis Robot Soccer 15 | 14=MRL-HSL 16 | 15=ZJUNlict 17 | -------------------------------------------------------------------------------- /resources/config/hl_sim_adult/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_adult/25.jpg -------------------------------------------------------------------------------- /resources/config/hl_sim_adult/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_adult/27.png -------------------------------------------------------------------------------- /resources/config/hl_sim_adult/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_adult/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_sim_adult/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 25=HERoEHS 3 | 26=hexaclus 4 | 27=Sweaty 5 | 28=RoboFEI Adult -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_kid/11.png -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_kid/14.png -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_kid/3.png -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_kid/4.png -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_sim_kid/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_sim_kid/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 1=01. RoboterFußball-Club Berlin 3 | 2=AIUTMAN 4 | 3=Bold Hearts 5 | 4=CIT Brains 6 | 5=EDROM 7 | 6=Electric Sheep 8 | 7=Hamburg Bit-Bots 9 | 8=Ichiro 10 | 9=ITAndroids 11 | 10=KNR_Melson 12 | 11=MRL-HSL 13 | 12=NUbots 14 | 13=RoboFEI 15 | 14=Starkit 16 | 15=TH-MOS 17 | 16=UTRA Robosoccer 18 | 17=WF Wolves -------------------------------------------------------------------------------- /resources/config/hl_teen/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/18.png -------------------------------------------------------------------------------- /resources/config/hl_teen/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/20.png -------------------------------------------------------------------------------- /resources/config/hl_teen/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/21.png -------------------------------------------------------------------------------- /resources/config/hl_teen/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/22.png -------------------------------------------------------------------------------- /resources/config/hl_teen/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/23.png -------------------------------------------------------------------------------- /resources/config/hl_teen/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/24.png -------------------------------------------------------------------------------- /resources/config/hl_teen/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/hl_teen/background.jpg -------------------------------------------------------------------------------- /resources/config/hl_teen/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 17=Behrobot 3 | 18=Hamburg Bit-Bots and WF Wolves 4 | 19=Ichiro Teen Size 5 | 20=MRL HSL 6 | 21=RO:BIT 7 | 22=RoboFEI 8 | 23=The NUbots 9 | 24=ZJLabers 10 | -------------------------------------------------------------------------------- /resources/config/icons/field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/field.png -------------------------------------------------------------------------------- /resources/config/icons/goalkeeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/goalkeeper.png -------------------------------------------------------------------------------- /resources/config/icons/goalkeeper_fade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/goalkeeper_fade.png -------------------------------------------------------------------------------- /resources/config/icons/hl_adult/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_adult/robot_left_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_adult/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_adult/robot_left_red.png -------------------------------------------------------------------------------- /resources/config/icons/hl_adult/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_adult/robot_right_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_adult/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_adult/robot_right_red.png -------------------------------------------------------------------------------- /resources/config/icons/hl_kid/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_kid/robot_left_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_kid/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_kid/robot_left_red.png -------------------------------------------------------------------------------- /resources/config/icons/hl_kid/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_kid/robot_right_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_kid/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_kid/robot_right_red.png -------------------------------------------------------------------------------- /resources/config/icons/hl_teen/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_teen/robot_left_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_teen/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_teen/robot_left_red.png -------------------------------------------------------------------------------- /resources/config/icons/hl_teen/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_teen/robot_right_blue.png -------------------------------------------------------------------------------- /resources/config/icons/hl_teen/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/hl_teen/robot_right_red.png -------------------------------------------------------------------------------- /resources/config/icons/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/pause.png -------------------------------------------------------------------------------- /resources/config/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/play.png -------------------------------------------------------------------------------- /resources/config/icons/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/plus.png -------------------------------------------------------------------------------- /resources/config/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/reset.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_black.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_blue.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_brown.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_gray.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_green.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_orange.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_purple.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_red.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_white.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_left_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_left_yellow.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_black.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_blue.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_brown.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_gray.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_green.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_orange.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_purple.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_red.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_white.png -------------------------------------------------------------------------------- /resources/config/icons/spl/robot_right_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl/robot_right_yellow.png -------------------------------------------------------------------------------- /resources/config/icons/spl_dropin/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl_dropin/robot_left_blue.png -------------------------------------------------------------------------------- /resources/config/icons/spl_dropin/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl_dropin/robot_left_red.png -------------------------------------------------------------------------------- /resources/config/icons/spl_dropin/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl_dropin/robot_right_blue.png -------------------------------------------------------------------------------- /resources/config/icons/spl_dropin/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/spl_dropin/robot_right_red.png -------------------------------------------------------------------------------- /resources/config/icons/time_ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/time_ground.png -------------------------------------------------------------------------------- /resources/config/icons/time_ground_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/time_ground_small.png -------------------------------------------------------------------------------- /resources/config/icons/timeline_ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/timeline_ground.png -------------------------------------------------------------------------------- /resources/config/icons/wlan_status_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/wlan_status_green.png -------------------------------------------------------------------------------- /resources/config/icons/wlan_status_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/wlan_status_grey.png -------------------------------------------------------------------------------- /resources/config/icons/wlan_status_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/wlan_status_red.png -------------------------------------------------------------------------------- /resources/config/icons/wlan_status_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/icons/wlan_status_yellow.png -------------------------------------------------------------------------------- /resources/config/old_logos/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/1.png -------------------------------------------------------------------------------- /resources/config/old_logos/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/15.png -------------------------------------------------------------------------------- /resources/config/old_logos/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/19.png -------------------------------------------------------------------------------- /resources/config/old_logos/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/23.png -------------------------------------------------------------------------------- /resources/config/old_logos/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/34.png -------------------------------------------------------------------------------- /resources/config/old_logos/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/8.png -------------------------------------------------------------------------------- /resources/config/old_logos/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/old_logos/9.png -------------------------------------------------------------------------------- /resources/config/sim/game.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "NORMAL", 3 | "class": "KID", 4 | "host": "192.168.1.133", 5 | "red": { 6 | "id": 1, 7 | "config": "team_1.json", 8 | "hosts": [ 9 | "192.168.123.21", 10 | "192.168.123.22", 11 | "192.168.123.23", 12 | "192.168.123.24" 13 | ], 14 | "ports": [ 15 | 10001, 16 | 10002, 17 | 10003, 18 | 10004 19 | ] 20 | }, 21 | "blue": { 22 | "id": 2, 23 | "config": "team_2.json", 24 | "hosts": [ 25 | "127.0.0.1", 26 | "192.168.123.41", 27 | "192.168.123.42", 28 | "192.168.123.43", 29 | "192.168.123.44" 30 | ], 31 | "ports": [ 32 | 10021, 33 | 10022, 34 | 10023, 35 | 10024 36 | ] 37 | } 38 | } -------------------------------------------------------------------------------- /resources/config/spl/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/1.png -------------------------------------------------------------------------------- /resources/config/spl/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/10.gif -------------------------------------------------------------------------------- /resources/config/spl/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/11.png -------------------------------------------------------------------------------- /resources/config/spl/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/12.gif -------------------------------------------------------------------------------- /resources/config/spl/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/13.png -------------------------------------------------------------------------------- /resources/config/spl/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/14.png -------------------------------------------------------------------------------- /resources/config/spl/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/15.png -------------------------------------------------------------------------------- /resources/config/spl/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/16.png -------------------------------------------------------------------------------- /resources/config/spl/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/17.png -------------------------------------------------------------------------------- /resources/config/spl/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/18.png -------------------------------------------------------------------------------- /resources/config/spl/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/19.png -------------------------------------------------------------------------------- /resources/config/spl/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/2.gif -------------------------------------------------------------------------------- /resources/config/spl/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/20.png -------------------------------------------------------------------------------- /resources/config/spl/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/21.png -------------------------------------------------------------------------------- /resources/config/spl/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/22.png -------------------------------------------------------------------------------- /resources/config/spl/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/23.png -------------------------------------------------------------------------------- /resources/config/spl/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/24.png -------------------------------------------------------------------------------- /resources/config/spl/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/26.gif -------------------------------------------------------------------------------- /resources/config/spl/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/27.png -------------------------------------------------------------------------------- /resources/config/spl/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/28.png -------------------------------------------------------------------------------- /resources/config/spl/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/29.png -------------------------------------------------------------------------------- /resources/config/spl/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/3.gif -------------------------------------------------------------------------------- /resources/config/spl/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/30.png -------------------------------------------------------------------------------- /resources/config/spl/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/31.png -------------------------------------------------------------------------------- /resources/config/spl/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/32.png -------------------------------------------------------------------------------- /resources/config/spl/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/33.png -------------------------------------------------------------------------------- /resources/config/spl/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/34.png -------------------------------------------------------------------------------- /resources/config/spl/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/35.png -------------------------------------------------------------------------------- /resources/config/spl/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/36.png -------------------------------------------------------------------------------- /resources/config/spl/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/37.png -------------------------------------------------------------------------------- /resources/config/spl/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/38.png -------------------------------------------------------------------------------- /resources/config/spl/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/39.png -------------------------------------------------------------------------------- /resources/config/spl/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/4.gif -------------------------------------------------------------------------------- /resources/config/spl/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/41.png -------------------------------------------------------------------------------- /resources/config/spl/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/44.png -------------------------------------------------------------------------------- /resources/config/spl/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/5.png -------------------------------------------------------------------------------- /resources/config/spl/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/6.gif -------------------------------------------------------------------------------- /resources/config/spl/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/7.png -------------------------------------------------------------------------------- /resources/config/spl/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/8.png -------------------------------------------------------------------------------- /resources/config/spl/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/9.png -------------------------------------------------------------------------------- /resources/config/spl/backgroundr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl/backgroundr.png -------------------------------------------------------------------------------- /resources/config/spl/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 1=UT Austin Villa,white,orange 3 | 2=Austrian Kangaroos 4 | 3=Bembelbots 5 | 4=Berlin United 6 | 5=B-Human,black,red 7 | 6=Cerberus 8 | 7=DAInamite,red,blue 9 | 8=Dutch Nao Team,blue,red 10 | 9=Edinferno 11 | 10=Kouretes 12 | 11=MiPal 13 | 12=Nao Devils Dortmund,yellow,black 14 | 13=Nao-Team HTWK,blue,yellow 15 | 14=Northern Bites,black,white 16 | 15=NTU RoboPAL,red,yellow 17 | 16=RoboCanes 18 | 17=RoboEireann,green,white 19 | 18=UNSW Australia,yellow,blue 20 | 19=SPQR Team,red,blue 21 | 20=TJArk 22 | 21=UChile Robotics Team 23 | 22=UPennalizers,blue,red 24 | 23=Crude Scientists 25 | 24=HULKs,gray,blue 26 | 26=MRL-SPL,blue,red 27 | 27=Philosopher,white,black 28 | 28=Rimal Team 29 | 29=SpelBots 30 | 30=Team-NUST 31 | 31=UnBeatables 32 | 32=UTH-CAR 33 | 33=nomadZ,red,blue 34 | 34=SPURT 35 | 35=Blue Spider 36 | 36=Camellia Dragons,purple,yellow 37 | 37=JoiTech-SPL 38 | 38=Linköping Humanoids,blue,orange 39 | 39=WrightOcean 40 | 40=Mars 41 | 41=Aztlan Team 42 | 42=CMSingle 43 | 43=TeamSP 44 | 44=Luxembourg United 45 | -------------------------------------------------------------------------------- /resources/config/spl_dropin/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl_dropin/98.png -------------------------------------------------------------------------------- /resources/config/spl_dropin/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl_dropin/99.png -------------------------------------------------------------------------------- /resources/config/spl_dropin/backgroundr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/config/spl_dropin/backgroundr.jpg -------------------------------------------------------------------------------- /resources/config/spl_dropin/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 98=Team Blue,blue 3 | 99=Team Red,red -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/drawings/Thumbnail.java: -------------------------------------------------------------------------------- 1 | package bhuman.drawings; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import data.SPLStandardMessage; 5 | import teamcomm.gui.Camera; 6 | import teamcomm.data.RobotState; 7 | import teamcomm.gui.drawings.TextureLoader; 8 | import teamcomm.gui.drawings.Image; 9 | import teamcomm.gui.drawings.PerPlayer; 10 | 11 | /** 12 | * Custom drawing for a small camera image. 13 | * 14 | * @author Felix Thielke 15 | */ 16 | public class Thumbnail extends PerPlayer { 17 | 18 | public Thumbnail() { 19 | super(); 20 | setActive(false); 21 | } 22 | 23 | @Override 24 | protected void init(final GL2 gl) { 25 | setActive(false); 26 | } 27 | 28 | @Override 29 | public void draw(final GL2 gl, final RobotState rs, final Camera camera) { 30 | if (rs.getLastMessage() != null) { 31 | final SPLStandardMessage msg = rs.getLastMessage(); 32 | final TextureLoader.Texture tex = bhuman.message.Thumbnail.getInstance(msg.teamNum + "," + msg.playerNum).getLastImage(gl); 33 | 34 | if (tex != null) { 35 | gl.glPushMatrix(); 36 | gl.glTranslatef(msg.pose[0] / 1000.f, msg.pose[1] / 1000.f, 1.5f); 37 | camera.turnTowardsCamera(gl); 38 | Image.drawImage(gl, tex, 0, 0, 0.75f); 39 | gl.glPopMatrix(); 40 | } 41 | } 42 | } 43 | 44 | @Override 45 | public boolean hasAlpha() { 46 | return false; 47 | } 48 | 49 | @Override 50 | public int getPriority() { 51 | return 9; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/Angle.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | /** 6 | * Class for angles. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public class Angle implements SimpleStreamReader { 11 | 12 | /** 13 | * Angle in radians. 14 | */ 15 | public float radians; 16 | 17 | @Override 18 | public int getStreamedSize() { 19 | return NativeReaders.floatReader.getStreamedSize(); 20 | } 21 | 22 | @Override 23 | public Angle read(ByteBuffer stream) { 24 | radians = NativeReaders.floatReader.read(stream); 25 | return this; 26 | } 27 | 28 | /** 29 | * Returns the value of this angle in degrees. 30 | * 31 | * @return value of this angle in degrees 32 | */ 33 | public float toDegrees() { 34 | return (float) ((double) radians * 180.0 / Math.PI); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/EnumReader.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | /** 6 | * 7 | * @author Felix Thielke 8 | */ 9 | public class EnumReader> implements SimpleStreamReader { 10 | 11 | private final Class enumClass; 12 | 13 | public EnumReader(final Class enumClass) { 14 | this.enumClass = enumClass; 15 | } 16 | 17 | @Override 18 | public int getStreamedSize() { 19 | try { 20 | if (enumClass.getEnumConstants().length >= (1 << 8)) { 21 | return NativeReaders.uintReader.getStreamedSize(); 22 | } 23 | } catch (final SecurityException | IllegalArgumentException ex) { 24 | } 25 | return NativeReaders.ucharReader.getStreamedSize(); 26 | } 27 | 28 | @Override 29 | public E read(final ByteBuffer stream) { 30 | try { 31 | final E[] values = enumClass.getEnumConstants(); 32 | final int val; 33 | if (values.length >= (1 << 8)) { 34 | val = NativeReaders.intReader.read(stream); 35 | } else { 36 | val = NativeReaders.ucharReader.read(stream); 37 | } 38 | if (val < values.length) { 39 | return values[val]; 40 | } 41 | } catch (final SecurityException | IllegalArgumentException ex) { 42 | } 43 | 44 | return null; 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/JointData.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | /** 4 | * Class containing joint data declarations. 5 | * 6 | * @author Felix Thielke 7 | */ 8 | public class JointData { 9 | 10 | /** 11 | * Enum containing all joints. 12 | */ 13 | public static enum Joint { 14 | 15 | HeadYaw, 16 | HeadPitch, 17 | LShoulderPitch, 18 | LShoulderRoll, 19 | LElbowYaw, 20 | LElbowRoll, 21 | RShoulderPitch, 22 | RShoulderRoll, 23 | RElbowYaw, 24 | RElbowRoll, 25 | LHipYawPitch, 26 | LHipRoll, 27 | LHipPitch, 28 | LKneePitch, 29 | LAnklePitch, 30 | LAnkleRoll, 31 | RHipYawPitch, 32 | RHipRoll, 33 | RHipPitch, 34 | RKneePitch, 35 | RAnklePitch, 36 | RAnkleRoll 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/Role.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | /** 6 | * Class for player roles. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public class Role implements SimpleStreamReader { 11 | 12 | /** 13 | * Enum of all roles. 14 | */ 15 | public static enum RoleType { 16 | 17 | undefined, 18 | keeper, 19 | attackingKeeper, 20 | striker, 21 | defender, 22 | supporter, 23 | penaltyStriker, 24 | penaltyKeeper, 25 | none 26 | } 27 | 28 | /** 29 | * Role. 30 | */ 31 | public RoleType role; 32 | 33 | @Override 34 | public int getStreamedSize() { 35 | return new EnumReader<>(RoleType.class).getStreamedSize(); 36 | } 37 | 38 | @Override 39 | public Role read(ByteBuffer stream) { 40 | role = new EnumReader<>(RoleType.class).read(stream); 41 | return this; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return role.toString(); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/SimpleStreamReader.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | /** 4 | * Interface for classes whose instances can read fixed-size objects from a 5 | * stream. 6 | * 7 | * @author Felix Thielke 8 | * @param type of the objects that can be read 9 | */ 10 | public interface SimpleStreamReader extends StreamReader { 11 | 12 | /** 13 | * Returns the size in bytes of objects that are read by this object. 14 | * 15 | * @return size in bytes 16 | */ 17 | public int getStreamedSize(); 18 | } 19 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/data/StreamReader.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.data; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | /** 6 | * Interface for classes whose instances can read objects from a stream. 7 | * 8 | * @author Felix Thielke 9 | * @param type of the objects that can be read 10 | */ 11 | public interface StreamReader { 12 | 13 | /** 14 | * Reads an object from the given stream. 15 | * 16 | * @param stream stream to read from 17 | * @return object 18 | */ 19 | public T read(final ByteBuffer stream); 20 | } 21 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/messages/NetworkThumbnail.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.messages; 2 | 3 | import bhuman.message.Message; 4 | import bhuman.message.data.NativeReaders; 5 | import java.nio.ByteBuffer; 6 | 7 | /** 8 | * Class for the NetworkThumbnail message. 9 | * 10 | * @author Felix Thielke 11 | */ 12 | public class NetworkThumbnail extends Message { 13 | 14 | /** 15 | * Sequence number of the current part of the image (starts at 0). 16 | */ 17 | public byte sequence; 18 | /** 19 | * Part of the RLE-encoded image data. 20 | */ 21 | public byte[] data; 22 | 23 | @Override 24 | public NetworkThumbnail read(final ByteBuffer stream) { 25 | sequence = NativeReaders.scharReader.read(stream); 26 | int count = stream.getInt(); 27 | NativeReaders.SCharArrayReader reader = new NativeReaders.SCharArrayReader(count); 28 | if (stream.remaining() != reader.getStreamedSize()) { 29 | return null; 30 | } 31 | data = reader.read(stream); 32 | 33 | return this; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/bhuman/message/messages/Whistle.java: -------------------------------------------------------------------------------- 1 | package bhuman.message.messages; 2 | 3 | import bhuman.message.Message; 4 | import bhuman.message.data.NativeReaders; 5 | import bhuman.message.data.SimpleStreamReader; 6 | import java.nio.ByteBuffer; 7 | 8 | /** 9 | * Class for the Whistle message. 10 | * 11 | * @author Felix Thielke 12 | */ 13 | public class Whistle extends Message implements SimpleStreamReader { 14 | 15 | /** 16 | * Confidence based on hearing capability. 17 | */ 18 | public byte confidenceOfLastWhistleDetection; 19 | /** 20 | * Timestamp. 21 | */ 22 | public long lastTimeWhistleDetected; 23 | /** 24 | * The last point of time when the robot received audio data. 25 | */ 26 | public long lastTimeOfIncomingSound; 27 | /** 28 | * Name of the last detected whistle. 29 | */ 30 | public String whistleName; 31 | 32 | @Override 33 | public Whistle read(final ByteBuffer stream) { 34 | confidenceOfLastWhistleDetection = NativeReaders.scharReader.read(stream); 35 | lastTimeWhistleDetected = NativeReaders.uintReader.read(stream); 36 | lastTimeOfIncomingSound = NativeReaders.uintReader.read(stream); 37 | whistleName = NativeReaders.stringReader.read(stream); 38 | 39 | return this; 40 | } 41 | 42 | @Override 43 | public int getStreamedSize() { 44 | return -1; // Size unknown because of whistle's name 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /resources/plugins/05/B-Human/src/util/Unsigned.java: -------------------------------------------------------------------------------- 1 | package util; 2 | 3 | /** 4 | * Utility class for getting unsigned from signed values. 5 | * 6 | * @author Felix Thielke 7 | */ 8 | public class Unsigned { 9 | 10 | /** 11 | * Convert the given byte value to an unsigned byte. 12 | * 13 | * @param b signed value 14 | * @return unsigned value 15 | */ 16 | public static short toUnsigned(final byte b) { 17 | return (short) (b < 0 ? b + (1 << Byte.SIZE) : b); 18 | } 19 | 20 | /** 21 | * Convert the given short value to an unsigned short. 22 | * 23 | * @param s signed value 24 | * @return unsigned value 25 | */ 26 | public static int toUnsigned(final short s) { 27 | return (s < 0 ? s + (1 << Short.SIZE) : s); 28 | } 29 | 30 | /** 31 | * Convert the given int value to an unsigned int. 32 | * 33 | * @param i signed value 34 | * @return unsigned value 35 | */ 36 | public static long toUnsigned(final int i) { 37 | return i < 0 ? i + (1l << (long) Integer.SIZE) : i; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /resources/plugins/05/resources/whistle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/plugins/05/resources/whistle.png -------------------------------------------------------------------------------- /resources/scene/Ball2010SPL.rsi2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/scene/TeamComm.ros2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /resources/scene/Textures/ascii.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/scene/Textures/ascii.png -------------------------------------------------------------------------------- /resources/scene/Textures/net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/scene/Textures/net.png -------------------------------------------------------------------------------- /resources/scene/Textures/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/scene/Textures/shadow.png -------------------------------------------------------------------------------- /resources/scene/Textures/textures-button_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/scene/Textures/textures-button_gray.png -------------------------------------------------------------------------------- /resources/scene/Textures/textures-ear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/resources/scene/Textures/textures-ear.png -------------------------------------------------------------------------------- /sim_client/main.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import socket 4 | import time 5 | 6 | HOST = '127.0.0.1' # The server's hostname or IP address 7 | PORT = 8750 # The port used by the server 8 | 9 | 10 | with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 11 | s.connect((HOST, PORT)) 12 | 13 | start = time.time() 14 | ready, set, play, penalized, scored, kickoff = False, False, False, False, False, False 15 | 16 | message_numb = 0 17 | 18 | while True: 19 | delta = time.time() - start 20 | 21 | clock_data = f'{message_numb}:CLOCK:{int(delta * 3 * 1000)}\n' 22 | print(clock_data) 23 | 24 | s.sendall(clock_data.encode('ascii')) 25 | 26 | if delta > 12 and not kickoff: 27 | kickoff = True 28 | s.sendall(f"{message_numb}:SIDE_LEFT:26\n".encode('ascii')) 29 | 30 | if delta > 3 and not ready: 31 | ready = True 32 | s.sendall(f"{message_numb}:STATE:READY\n".encode('ascii')) 33 | 34 | if delta > 7 and not set: 35 | set = True 36 | s.sendall(f"{message_numb}:STATE:SET\n".encode('ascii')) 37 | 38 | if delta > 12 and not play: 39 | play = True 40 | s.sendall(f"{message_numb}:STATE:PLAY\n".encode('ascii')) 41 | 42 | if delta > 15 and play and not penalized: 43 | penalized = True 44 | s.sendall(f"{message_numb}:PENALTY:27:1:BALL_MANIPULATION\n".encode('ascii')) 45 | 46 | if delta > 17 and play and not scored: 47 | scored = True 48 | s.sendall(f"{message_numb}:SCORE:27\n".encode('ascii')) 49 | 50 | data = s.recv(1024) 51 | if data: 52 | print(data) 53 | 54 | message_numb += 1 55 | time.sleep(0.2) 56 | 57 | -------------------------------------------------------------------------------- /src/analyzer/LogAnalyzer.java: -------------------------------------------------------------------------------- 1 | package analyzer; 2 | 3 | import java.io.File; 4 | import java.io.FileWriter; 5 | import java.util.LinkedList; 6 | 7 | /** 8 | * @author Michel Bartsch 9 | * 10 | * The log-analyzer-program starts in this class. 11 | * The main components are initialized here. 12 | */ 13 | public class LogAnalyzer 14 | { 15 | /* Path the the log files to analyze. */ 16 | public final static String PATH = "logs"; 17 | /* Path where dropped logs will be moved to by the clean feature. */ 18 | public final static String PATH_DROPPED = "logs/dropped"; 19 | 20 | /* List of all logs */ 21 | public static LinkedList logs; 22 | /* The output file to write the statistics into.*/ 23 | public static File stats; 24 | /* Use this to write into the output file. */ 25 | public static FileWriter writer; 26 | 27 | /** 28 | * The program starts here. 29 | * 30 | * @param args This is ignored. 31 | */ 32 | public static void main(String[] args) 33 | { 34 | load(); 35 | new GUI(); 36 | } 37 | 38 | /** 39 | * Loads all the logs, can be used at the beginning and to update 40 | * the list as well. 41 | */ 42 | public static void load() 43 | { 44 | logs = new LinkedList(); 45 | File dir = new File(PATH); 46 | File[] files = dir.listFiles(); 47 | for (File file: files) { 48 | if (file.isFile() && file.getName().startsWith("log_")) { 49 | logs.add(new LogInfo(file)); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /src/controller/Clock.java: -------------------------------------------------------------------------------- 1 | package controller; 2 | 3 | import controller.action.ActionBoard; 4 | 5 | /** 6 | * 7 | * @author Michel Bartsch 8 | * 9 | * This class is no thread, it continous the main-thread and fires the action ClockTick. 10 | */ 11 | public class Clock 12 | { 13 | /** 14 | * The time in millis to sleep before next ClockTick. This does not mean 15 | * it fires after this time, it will allways take some more millis depending 16 | * on the performance. 17 | */ 18 | public static int HEARTBEAT = 500; // 2Hz 19 | 20 | /** The instance of the singleton. */ 21 | private static Clock instance; 22 | 23 | /** The thread of this clock. */ 24 | private Thread thread; 25 | 26 | /** 27 | * Returns the instance of the singleton. If the Clock wasn't initialized once before, a new instance will 28 | * be created and returned (lazy instantiation) 29 | * 30 | * @return The instance of the Clock 31 | */ 32 | public static Clock getInstance() 33 | { 34 | if (instance == null) { 35 | instance = new Clock(); 36 | } 37 | return instance; 38 | } 39 | /** 40 | * Lets the Clock start to run. 41 | */ 42 | public void start() 43 | { 44 | thread = Thread.currentThread(); 45 | while (!thread.isInterrupted()) 46 | { 47 | ActionBoard.clock.actionPerformed(null); 48 | try { 49 | Thread.sleep(HEARTBEAT); 50 | } catch (InterruptedException e) { 51 | thread.interrupt(); 52 | } 53 | } 54 | } 55 | 56 | public void interrupt() 57 | { 58 | thread.interrupt(); 59 | } 60 | } -------------------------------------------------------------------------------- /src/controller/GameControllerDebug.java: -------------------------------------------------------------------------------- 1 | package controller; 2 | 3 | public class GameControllerDebug { 4 | 5 | public static void main(String[] args) { 6 | // Setting the config path right 7 | System.out.println(System.setProperty("CONFIG_ROOT", "resources/")); 8 | 9 | // Executing the actual game controller 10 | GameController.main(args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/controller/SystemClock.java: -------------------------------------------------------------------------------- 1 | package controller; 2 | 3 | public class SystemClock { 4 | 5 | private static SystemClock instance; 6 | private long currentTime = 0; 7 | private static boolean systemTime = true; 8 | 9 | 10 | /** 11 | * Returns the instance of the singleton. If the Clock wasn't initialized once before, a new instance will 12 | * be created and returned (lazy instantiation) 13 | * 14 | * @return The instance of the Clock 15 | */ 16 | public static SystemClock getInstance() 17 | { 18 | if (instance == null) { 19 | instance = new SystemClock(); 20 | } 21 | return instance; 22 | } 23 | 24 | /** 25 | * Sets the mode of the GameController to not use the real time but a provided time 26 | */ 27 | public static void setSimulatedTime() { 28 | systemTime = false; 29 | } 30 | 31 | 32 | public long getCurrentTimeMillis() { 33 | if (systemTime) { return System.currentTimeMillis(); } 34 | else { return (long) (currentTime); } 35 | } 36 | 37 | public synchronized void setTime(long time) { 38 | this.currentTime = time; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/controller/action/ActionType.java: -------------------------------------------------------------------------------- 1 | package controller.action; 2 | 3 | 4 | /** 5 | * Each action has such a type to easily distinguish between them. 6 | */ 7 | public enum ActionType 8 | { 9 | /** It is a clock action, actually only the ClockTick has this */ 10 | CLOCK, 11 | /** It is an actions executed by an user interface. */ 12 | UI, 13 | /** The action is executed by network events. */ 14 | NET 15 | } -------------------------------------------------------------------------------- /src/controller/action/net/SPLCoachMessageReceived.java: -------------------------------------------------------------------------------- 1 | package controller.action.net; 2 | 3 | import controller.action.ActionType; 4 | import controller.action.GCAction; 5 | import controller.net.RobotWatcher; 6 | import data.states.AdvancedData; 7 | import data.spl.SPLCoachMessage; 8 | import data.values.Penalties; 9 | 10 | public class SPLCoachMessageReceived extends GCAction 11 | { 12 | private SPLCoachMessage message; 13 | 14 | public SPLCoachMessageReceived(SPLCoachMessage message) 15 | { 16 | super(ActionType.NET); 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public void perform(AdvancedData data) 22 | { 23 | System.out.println("Remove me i am useless"); 24 | } 25 | 26 | @Override 27 | public boolean isLegal(AdvancedData data) 28 | { 29 | return true; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/controller/action/ui/AbortGameInterruption.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionBoard; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | import data.values.SecondaryGameStates; 9 | 10 | 11 | /** 12 | * @author Maike Paetzel 13 | * 14 | * This action performs aborts a currently ongoing Game Interruption. 15 | * This is usually used when the ball is touched by a player from the team the 16 | * game interruption was awarded to pefore the ball was in play. 17 | */ 18 | public class AbortGameInterruption extends GCAction { 19 | /** 20 | * Which side has the advantage with this game interruption 21 | */ 22 | private int side; 23 | 24 | public AbortGameInterruption(int side) { 25 | super(ActionType.UI); 26 | this.side = side; 27 | } 28 | 29 | 30 | @Override 31 | public void perform(AdvancedData data) 32 | { 33 | SecondaryGameStates secGameState = data.secGameState; 34 | data.secGameState = data.previousSecGameState; 35 | data.previousSecGameState = secGameState; 36 | data.secGameStateInfo.reset(); 37 | Log.setNextMessage("Aborting: " + secGameState.toString() + " " + data.team[side].teamColor.toString()); 38 | 39 | data.gameClock.clearSecondaryClock(); 40 | ActionBoard.clockPause.perform(data); 41 | 42 | } 43 | 44 | @Override 45 | public boolean isLegal(AdvancedData data) { 46 | byte[] bytes = data.secGameStateInfo.toByteArray(); 47 | byte team = bytes[0]; 48 | boolean isGoodTeam = team == data.team[side].teamNumber; 49 | return data.secGameState.isGameInterruption() && isGoodTeam; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/controller/action/ui/CancelUndo.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import controller.action.ActionType; 4 | import controller.action.GCAction; 5 | import data.states.AdvancedData; 6 | 7 | 8 | /** 9 | * @author Thomas Roefer 10 | * 11 | * Cancels an undo action in progress. 12 | * This a dummy action, because the undo buttons track 13 | * whether they created the previous event, and this is 14 | * one possibilty to generate a different event. 15 | */ 16 | public class CancelUndo extends GCAction 17 | { 18 | /** 19 | * Creates a new CancelUndo action. 20 | * Look at the ActionBoard before using this. 21 | */ 22 | public CancelUndo() 23 | { 24 | super(ActionType.UI); 25 | } 26 | 27 | /** 28 | * Performs this action to manipulate the data (model). 29 | * 30 | * @param data The current data to work on. 31 | */ 32 | @Override 33 | public void perform(AdvancedData data) 34 | { 35 | } 36 | 37 | /** 38 | * Checks if this action is legal with the given data (model). 39 | * Illegal actions are not performed by the EventHandler. 40 | * 41 | * @param data The current data to check with. 42 | */ 43 | @Override 44 | public boolean isLegal(AdvancedData data) 45 | { 46 | return true; 47 | } 48 | } -------------------------------------------------------------------------------- /src/controller/action/ui/ClockPause.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionBoard; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | 9 | 10 | /** 11 | * @author Michel Bartsch 12 | * 13 | * This action means that the clock is to be paused. 14 | */ 15 | public class ClockPause extends GCAction 16 | { 17 | /** 18 | * Creates a new ClockPause action. 19 | * Look at the ActionBoard before using this. 20 | */ 21 | public ClockPause() 22 | { 23 | super(ActionType.UI); 24 | } 25 | 26 | /** 27 | * Performs this action to manipulate the data (model). 28 | * 29 | * @param data The current data to work on. 30 | */ 31 | @Override 32 | public void perform(AdvancedData data) 33 | { 34 | if (ActionBoard.clock.isClockRunning(data)) { 35 | if (data.manPlay) { 36 | data.manRemainingGameTimeOffset += data.getTime() - data.manWhenClockChanged; 37 | data.manPlay = false; 38 | } else { 39 | data.manWhenClockChanged = data.getTime(); 40 | data.setManualPause(true); 41 | } 42 | Log.state(data, "Time manual paused"); 43 | } else { 44 | if (data.manPause) { 45 | data.setManualPause(false); 46 | data.manTimeOffset -= data.getTime() - data.manWhenClockChanged; 47 | } else { 48 | data.manWhenClockChanged = data.getTime(); 49 | data.manPlay = true; 50 | } 51 | Log.state(data, "Time manual running"); 52 | } 53 | } 54 | 55 | /** 56 | * Checks if this action is legal with the given data (model). 57 | * Illegal actions are not performed by the EventHandler. 58 | * 59 | * @param data The current data to check with. 60 | */ 61 | @Override 62 | public boolean isLegal(AdvancedData data) 63 | { 64 | return data.testmode; 65 | } 66 | } -------------------------------------------------------------------------------- /src/controller/action/ui/ClockReset.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.states.AdvancedData; 7 | 8 | 9 | /** 10 | * @author Michel Bartsch 11 | * 12 | * This action means that the clock is to be resetted. 13 | */ 14 | public class ClockReset extends GCAction 15 | { 16 | /** 17 | * Creates a new ClockReset action. 18 | * Look at the ActionBoard before using this. 19 | */ 20 | public ClockReset() 21 | { 22 | super(ActionType.UI); 23 | } 24 | 25 | /** 26 | * Performs this action to manipulate the data (model). 27 | * 28 | * @param data The current data to work on. 29 | */ 30 | @Override 31 | public void perform(AdvancedData data) 32 | { 33 | data.timeBeforeCurrentGameState = 0; 34 | data.whenCurrentGameStateBegan = data.getTime(); 35 | data.manWhenClockChanged = data.whenCurrentGameStateBegan; 36 | data.manRemainingGameTimeOffset = 0; 37 | Log.state(data, "Time reset"); 38 | } 39 | 40 | /** 41 | * Checks if this action is legal with the given data (model). 42 | * Illegal actions are not performed by the EventHandler. 43 | * 44 | * @param data The current data to check with. 45 | */ 46 | @Override 47 | public boolean isLegal(AdvancedData data) 48 | { 49 | return data.testmode; 50 | } 51 | } -------------------------------------------------------------------------------- /src/controller/action/ui/CornerKick.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Ludovic Hofer 7 | */ 8 | public class CornerKick extends GameInterruption 9 | { 10 | public CornerKick(int side) 11 | { 12 | super(side, SecondaryGameStates.CORNER_KICK); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/controller/action/ui/DirectFreeKick.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Robert Kessler 7 | * 8 | * This action performs the switch to the Secondary Game State: Free Kick 9 | * It stops the global clock and prepares the secondary clock to run down to zero 10 | * When the action is resolved then - the normal clock continues and the previous state 11 | * is taken again. Based on which side the action is executed for the FreeKick Mode in the 12 | * Secondary State Object is updated 13 | */ 14 | public class DirectFreeKick extends GameInterruption 15 | { 16 | public DirectFreeKick(int side) 17 | { 18 | super(side, SecondaryGameStates.DIRECT_FREEKICK); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /src/controller/action/ui/DropBall.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionBoard; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | import data.communication.GameControlData; 9 | import data.values.GameStates; 10 | 11 | 12 | /** 13 | * @author Michel Bartsch 14 | * 15 | * This action means that a global game stuck has occured. 16 | */ 17 | public class DropBall extends GCAction 18 | { 19 | /** 20 | * Creates a new DropBall action. 21 | * Look at the ActionBoard before using this. 22 | */ 23 | public DropBall() 24 | { 25 | super(ActionType.UI); 26 | } 27 | 28 | /** 29 | * Performs this action to manipulate the data (model). 30 | * 31 | * @param data The current data to work on. 32 | */ 33 | @Override 34 | public void perform(AdvancedData data) 35 | { 36 | data.kickOffTeam = GameControlData.DROPBALL; 37 | Log.setNextMessage("Dropped Ball"); 38 | ActionBoard.ready.perform(data); 39 | } 40 | 41 | /** 42 | * Checks if this action is legal with the given data (model). 43 | * Illegal actions are not performed by the EventHandler. 44 | * 45 | * @param data The current data to check with. 46 | */ 47 | @Override 48 | public boolean isLegal(AdvancedData data) 49 | { 50 | return (data.gameState == GameStates.PLAYING) || data.testmode; 51 | } 52 | } -------------------------------------------------------------------------------- /src/controller/action/ui/DropInPointsEvaluation.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import controller.action.ActionType; 4 | import controller.action.GCAction; 5 | import data.PlayerInfo; 6 | import data.states.AdvancedData; 7 | import data.values.GameTypes; 8 | import data.values.Penalties; 9 | import data.values.Side; 10 | 11 | public class DropInPointsEvaluation extends GCAction { 12 | 13 | private final Side scoring_side; 14 | 15 | public DropInPointsEvaluation(Side scoring_side) { 16 | super(ActionType.UI); 17 | this.scoring_side = scoring_side; 18 | } 19 | 20 | @Override 21 | public void perform(AdvancedData data) { 22 | for(PlayerInfo pi : data.getTeam(this.scoring_side).player){ 23 | if (pi.penalty == Penalties.NONE && pi.redCardCount == 0) { 24 | pi.dropInPoints += 1; 25 | } 26 | } 27 | 28 | for(PlayerInfo pi : data.getTeam(this.scoring_side.getOther()).player){ 29 | pi.dropInPoints -= 1; 30 | } 31 | 32 | data.gameClock.addExtraClock("Add point for scoring robot!", 10); 33 | } 34 | 35 | @Override 36 | public boolean isLegal(AdvancedData data) { 37 | return true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/controller/action/ui/DropinPointDelta.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import controller.action.ActionType; 4 | import controller.action.GCAction; 5 | import data.states.AdvancedData; 6 | import data.values.GameTypes; 7 | import data.values.Side; 8 | 9 | public class DropinPointDelta extends GCAction { 10 | 11 | private final Side side; 12 | private final int player; 13 | private final int delta; 14 | 15 | public DropinPointDelta(Side side, int player, int delta) { 16 | super(ActionType.UI); 17 | this.player = player; 18 | this.side = side; 19 | this.delta = delta; 20 | } 21 | 22 | @Override 23 | public void perform(AdvancedData data) { 24 | data.getTeam(this.side).player[this.player].dropInPoints += this.delta; 25 | } 26 | 27 | @Override 28 | public boolean isLegal(AdvancedData data) { 29 | return data.gameType == GameTypes.DROPIN || data.testmode; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/controller/action/ui/GlobalStuck.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionBoard; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | import data.values.GameStates; 9 | 10 | 11 | /** 12 | * @author Michel Bartsch 13 | * 14 | * This action means that a global game stuck has occured. 15 | */ 16 | public class GlobalStuck extends GCAction 17 | { 18 | /** On which side (0:left, 1:right) */ 19 | private int side; 20 | 21 | 22 | /** 23 | * Creates a new GlobalStuck action. 24 | * Look at the ActionBoard before using this. 25 | * 26 | * @param side On which side (0:left, 1:right) 27 | */ 28 | public GlobalStuck(int side) 29 | { 30 | super(ActionType.UI); 31 | this.side = side; 32 | } 33 | 34 | /** 35 | * Performs this action to manipulate the data (model). 36 | * 37 | * @param data The current data to work on. 38 | */ 39 | @Override 40 | public void perform(AdvancedData data) 41 | { 42 | data.kickOffTeam = data.team[1 - side].teamNumber; 43 | data.kickOffReason = AdvancedData.KICKOFF_GAMESTUCK; 44 | Log.setNextMessage("Global Game Stuck, Kickoff " + data.team[data.kickOffTeam == data.team[0].teamNumber ? 0 : 1].teamColor); 45 | ActionBoard.ready.perform(data); 46 | } 47 | 48 | /** 49 | * Checks if this action is legal with the given data (model). 50 | * Illegal actions are not performed by the EventHandler. 51 | * 52 | * @param data The current data to check with. 53 | */ 54 | @Override 55 | public boolean isLegal(AdvancedData data) 56 | { 57 | return (data.gameState == GameStates.PLAYING) || data.testmode; 58 | } 59 | } -------------------------------------------------------------------------------- /src/controller/action/ui/GoalKick.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Ludovic Hofer 7 | */ 8 | public class GoalKick extends GameInterruption 9 | { 10 | public GoalKick(int side) 11 | { 12 | super(side, SecondaryGameStates.GOAL_KICK); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/controller/action/ui/IncGameClock.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | import data.values.GameStates; 9 | 10 | public class IncGameClock extends GCAction 11 | { 12 | public IncGameClock() 13 | { 14 | super(ActionType.UI); 15 | } 16 | 17 | @Override 18 | public void perform(AdvancedData data) 19 | { 20 | data.timeBeforeCurrentGameState -= 1000*60; 21 | Log.state(data, "Increase Game Clock"); 22 | } 23 | 24 | @Override 25 | public boolean isLegal(AdvancedData data) 26 | { 27 | return data.gameState != GameStates.PLAYING 28 | && data.timeBeforeCurrentGameState >= 1000*60 29 | || data.testmode; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/controller/action/ui/IndirectFreeKick.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Robert Kessler 7 | * 8 | * This action performs the switch to the Secondary Game State: Free Kick 9 | * It stops the global clock and prepares the secondary clock to run down to zero 10 | * When the action is resolved then - the normal clock continues and the previous state 11 | * is taken again. Based on which side the action is executed for the FreeKick Mode in the 12 | * Secondary State Object is updated 13 | */ 14 | public class IndirectFreeKick extends GameInterruption 15 | { 16 | public IndirectFreeKick(int side) 17 | { 18 | super(side, SecondaryGameStates.INDIRECT_FREEKICK); 19 | } 20 | } -------------------------------------------------------------------------------- /src/controller/action/ui/MakeGoalieAction.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import controller.action.ActionType; 4 | import controller.action.GCAction; 5 | import data.PlayerInfo; 6 | import data.states.AdvancedData; 7 | import data.values.GameStates; 8 | import data.values.Side; 9 | 10 | 11 | public class MakeGoalieAction extends GCAction { 12 | 13 | private final Side side; 14 | private final int player; 15 | 16 | public MakeGoalieAction(Side side, int player) { 17 | super(ActionType.UI); 18 | this.player = player; 19 | this.side = side; 20 | } 21 | 22 | @Override 23 | public void perform(AdvancedData data) { 24 | // Set all players goalie prop to zero 25 | for (PlayerInfo pi : data.getTeam(this.side).player){ 26 | pi.isGoalie = 0; 27 | } 28 | 29 | // Set the one being goalie 30 | data.getTeam(this.side).player[this.player].isGoalie = 1; 31 | } 32 | 33 | @Override 34 | public boolean isLegal(AdvancedData data) { 35 | //GoalKeeper can only be changed during a stoppage of the game 36 | //A stoppage is defined as the game not being in play (INITIAL, READY, SET, FINISHED) 37 | //or being in the procedure of a game interruption (free kick, corner kick, goal kick, throw in, penalty kick) 38 | boolean in_legal_game_state = data.gameState == GameStates.INITIAL 39 | || data.gameState == GameStates.READY 40 | || data.gameState == GameStates.SET 41 | || data.gameState == GameStates.FINISHED; 42 | boolean in_game_interruption = data.gameState == GameStates.PLAYING 43 | && data.secGameState.isGameInterruption(); 44 | return in_legal_game_state || in_game_interruption; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/controller/action/ui/Out.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.states.AdvancedData; 7 | import data.values.GameStates; 8 | 9 | 10 | /** 11 | * @author Michel Bartsch 12 | * 13 | * This action means that the ball is out. 14 | */ 15 | public class Out extends GCAction 16 | { 17 | /** On which side (0:left, 1:right) */ 18 | private int side; 19 | 20 | 21 | /** 22 | * Creates a new Out action. 23 | * Look at the ActionBoard before using this. 24 | * 25 | * @param side On which side (0:left, 1:right) 26 | */ 27 | public Out(int side) 28 | { 29 | super(ActionType.UI); 30 | this.side = side; 31 | } 32 | 33 | /** 34 | * Performs this action to manipulate the data (model). 35 | * 36 | * @param data The current data to work on. 37 | */ 38 | @Override 39 | public void perform(AdvancedData data) 40 | { 41 | data.whenDropIn = data.getTime(); 42 | data.dropInTeam = data.team[side].teamNumber; 43 | Log.state(data, "Out by " + data.team[side].teamColor); 44 | } 45 | 46 | /** 47 | * Checks if this action is legal with the given data (model). 48 | * Illegal actions are not performed by the EventHandler. 49 | * 50 | * @param data The current data to check with. 51 | */ 52 | @Override 53 | public boolean isLegal(AdvancedData data) 54 | { 55 | return (data.gameState == GameStates.PLAYING) || (data.testmode); 56 | } 57 | } -------------------------------------------------------------------------------- /src/controller/action/ui/PenaltyKick.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Michel Bartsch 7 | * 8 | * This action means that a timeOut is to be taken or ending. 9 | */ 10 | public class PenaltyKick extends GameInterruption 11 | { 12 | 13 | /** 14 | * Creates a new TimeOut action. 15 | * Look at the ActionBoard before using this. 16 | * 17 | * @param side On which side (0:left, 1:right) 18 | */ 19 | public PenaltyKick(int side) 20 | { 21 | super(side, SecondaryGameStates.PENALTYKICK); 22 | } 23 | } -------------------------------------------------------------------------------- /src/controller/action/ui/Quit.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import controller.Clock; 4 | import controller.EventHandler; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | 9 | 10 | /** 11 | * @author Michel Bartsch 12 | * 13 | * This action means that the operator tries to close the GameController. 14 | */ 15 | public class Quit extends GCAction 16 | { 17 | /** 18 | * Creates a new Quit action. 19 | * Look at the ActionBoard before using this. 20 | */ 21 | public Quit() 22 | { 23 | super(ActionType.UI); 24 | } 25 | 26 | /** 27 | * Performs this action to manipulate the data (model). 28 | * 29 | * @param data The current data to work on. 30 | */ 31 | @Override 32 | public void perform(AdvancedData data) 33 | { 34 | if (EventHandler.getInstance().lastUIEvent == this) { 35 | Clock.getInstance().interrupt(); 36 | } 37 | } 38 | 39 | /** 40 | * Checks if this action is legal with the given data (model). 41 | * Illegal actions are not performed by the EventHandler. 42 | * 43 | * @param data The current data to check with. 44 | */ 45 | @Override 46 | public boolean isLegal(AdvancedData data) 47 | { 48 | return true; 49 | } 50 | } -------------------------------------------------------------------------------- /src/controller/action/ui/RetakeGameInterruption.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.states.AdvancedData; 7 | 8 | public class RetakeGameInterruption extends GCAction { 9 | /** 10 | * Which side has the advantage with this game interruption 11 | */ 12 | private int side; 13 | 14 | public RetakeGameInterruption(int side) { 15 | super(ActionType.UI); 16 | this.side = side; 17 | } 18 | 19 | 20 | @Override 21 | public void perform(AdvancedData data) 22 | { 23 | data.secGameStateInfo.setFreeKickData(data.team[side].teamNumber, (byte) 0); 24 | data.gameClock.clearSecondaryClock(); 25 | 26 | Log.setNextMessage("Retaking: " + data.secGameState.toString() + " " + data.team[side].teamColor.toString()); 27 | } 28 | 29 | @Override 30 | public boolean isLegal(AdvancedData data) { 31 | byte[] bytes = data.secGameStateInfo.toByteArray(); 32 | byte team = bytes[0]; 33 | boolean isGoodTeam = team == data.team[side].teamNumber; 34 | return data.secGameState.isGameInterruption() && isGoodTeam; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/controller/action/ui/TeammatePushing.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.EventHandler; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | import data.PlayerInfo; 9 | import data.Rules; 10 | import data.values.GameStates; 11 | 12 | public class TeammatePushing extends GCAction { 13 | 14 | public TeammatePushing() { 15 | super(ActionType.UI); 16 | } 17 | 18 | @Override 19 | public void performOn(AdvancedData data, PlayerInfo player, int side, int number) { 20 | Log.state(data, "Teammate Pushing " + data.team[side].teamColor + " " + (number+1)); 21 | } 22 | 23 | @Override 24 | public boolean isLegal(AdvancedData data) { 25 | return Rules.league.dropInPlayerMode 26 | && (data.gameState == GameStates.READY 27 | || data.gameState == GameStates.PLAYING) 28 | || data.testmode; 29 | } 30 | 31 | @Override 32 | public void perform(AdvancedData data) { 33 | if (EventHandler.getInstance().lastUIEvent == this) { 34 | EventHandler.getInstance().noLastUIEvent = true; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/controller/action/ui/Testmode.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.states.AdvancedData; 7 | 8 | 9 | /** 10 | * @author Michel Bartsch 11 | * 12 | * This action means that the testmode should be toggled on or off. 13 | */ 14 | public class Testmode extends GCAction 15 | { 16 | /** 17 | * Creates a new Testmode action. 18 | * Look at the ActionBoard before using this. 19 | */ 20 | public Testmode() 21 | { 22 | super(ActionType.UI); 23 | } 24 | 25 | /** 26 | * Performs this action to manipulate the data (model). 27 | * 28 | * @param data The current data to work on. 29 | */ 30 | @Override 31 | public void perform(AdvancedData data) 32 | { 33 | data.testmode = !data.testmode; 34 | Log.toFile("Testmode = "+data.testmode); 35 | } 36 | 37 | /** 38 | * Checks if this action is legal with the given data (model). 39 | * Illegal actions are not performed by the EventHandler. 40 | * 41 | * @param data The current data to check with. 42 | */ 43 | @Override 44 | public boolean isLegal(AdvancedData data) 45 | { 46 | return true; 47 | } 48 | } -------------------------------------------------------------------------------- /src/controller/action/ui/ThrowIn.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import data.values.SecondaryGameStates; 4 | 5 | /** 6 | * @author Ludovic Hofer 7 | */ 8 | public class ThrowIn extends GameInterruption 9 | { 10 | public ThrowIn(int side) 11 | { 12 | super(side, SecondaryGameStates.THROW_IN); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/controller/action/ui/Undo.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui; 2 | 3 | import common.Log; 4 | import controller.EventHandler; 5 | import controller.action.ActionType; 6 | import controller.action.GCAction; 7 | import data.states.AdvancedData; 8 | 9 | 10 | /** 11 | * @author Michel Bartsch 12 | * 13 | * This action means that the operator wants to go back in the timeline. 14 | */ 15 | public class Undo extends GCAction 16 | { 17 | /** This is true, if this action has just been executed */ 18 | public boolean executed = false; 19 | /** How far to go back in the timeline by this action. */ 20 | private int states; 21 | 22 | 23 | /** 24 | * Creates a new Undo action. 25 | * Look at the ActionBoard before using this. 26 | * 27 | * @param states How far to go back in the timeline by this action. 28 | */ 29 | public Undo(int states) 30 | { 31 | super(ActionType.UI); 32 | this.states = states; 33 | } 34 | 35 | /** 36 | * Performs this action to manipulate the data (model). 37 | * 38 | * @param data The current data to work on. 39 | */ 40 | @Override 41 | public void perform(AdvancedData data) 42 | { 43 | if ((EventHandler.getInstance().lastUIEvent == this) 44 | && (!executed) ) { 45 | executed= true; 46 | Log.toFile("Undo "+states+" States to "+Log.goBack(data, states)); 47 | } else { 48 | executed = false; 49 | } 50 | } 51 | 52 | /** 53 | * Checks if this action is legal with the given data (model). 54 | * Illegal actions are not performed by the EventHandler. 55 | * 56 | * @param data The current data to check with. 57 | */ 58 | @Override 59 | public boolean isLegal(AdvancedData data) 60 | { 61 | return true; 62 | } 63 | } -------------------------------------------------------------------------------- /src/controller/action/ui/penalty/BallManipulation.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this template, choose Tools | Templates 3 | * and open the template in the editor. 4 | */ 5 | package controller.action.ui.penalty; 6 | 7 | import common.Log; 8 | import data.states.AdvancedData; 9 | import data.PlayerInfo; 10 | import data.values.GameStates; 11 | import data.values.Penalties; 12 | 13 | /** 14 | * 15 | * @author Michel-Zen 16 | */ 17 | public class BallManipulation extends Penalty 18 | { 19 | /** 20 | * Performs this action`s penalty on a selected player. 21 | * 22 | * @param data The current data to work on. 23 | * @param player The player to penalise. 24 | * @param side The side the player is playing on (0:left, 1:right). 25 | * @param number The player`s number, beginning with 0! 26 | */ 27 | @Override 28 | public void performOn(AdvancedData data, PlayerInfo player, int side, int number) 29 | { 30 | player.penalty = Penalties.HL_BALL_MANIPULATION; 31 | handleRepeatedPenalty(data, player, side, number); 32 | data.whenPenalized[side][number] = data.getTime(); 33 | data.isServingPenalty[side][number] = false; 34 | Log.state(data, "Ball Manipulation " + data.team[side].teamColor + " " + (number+1)); 35 | } 36 | 37 | /** 38 | * Checks if this action is legal with the given data (model). 39 | * Illegal actions are not performed by the EventHandler. 40 | * 41 | * @param data The current data to check with. 42 | */ 43 | @Override 44 | public boolean isLegal(AdvancedData data) 45 | { 46 | return (data.gameState == GameStates.PLAYING) || data.testmode; 47 | } 48 | } -------------------------------------------------------------------------------- /src/controller/action/ui/penalty/HLPushing.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui.penalty; 2 | 3 | import common.Log; 4 | import data.PlayerInfo; 5 | import data.states.AdvancedData; 6 | import data.values.GameStates; 7 | import data.values.Penalties; 8 | 9 | /** 10 | * This action means that the player pushing penalty has been selected. 11 | * 12 | * @author Michel Bartsch 13 | */ 14 | public class HLPushing extends Penalty 15 | { 16 | /** 17 | * Performs this action`s penalty on a selected player. 18 | * 19 | * @param data The current data to work on. 20 | * @param player The player to penalise. 21 | * @param side The side the player is playing on (0:left, 1:right). 22 | * @param number The player`s number, beginning with 0! 23 | */ 24 | @Override 25 | public void performOn(AdvancedData data, PlayerInfo player, int side, int number) 26 | { 27 | player.penalty = Penalties.HL_PHYSICAL_CONTACT; 28 | data.pushes[side]++; 29 | handleRepeatedPenalty(data, player, side, number, GameStates.PLAYING); 30 | data.whenPenalized[side][number] = data.getTime(); 31 | data.isServingPenalty[side][number] = false; 32 | 33 | Log.state(data, "Player Pushing " + data.team[side].teamColor + " " + (number+1)); 34 | } 35 | 36 | /** 37 | * Checks if this action is legal with the given data (model). 38 | * Illegal actions are not performed by the EventHandler. 39 | * 40 | * @param data The current data to check with. 41 | */ 42 | @Override 43 | public boolean isLegal(AdvancedData data) 44 | { 45 | return (data.gameState == GameStates.READY) 46 | || (data.gameState == GameStates.PLAYING) 47 | || (data.testmode); 48 | } 49 | 50 | public boolean equals(Object other){ 51 | return other instanceof HLPushing; 52 | } 53 | } -------------------------------------------------------------------------------- /src/controller/action/ui/penalty/PickUpHL.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui.penalty; 2 | 3 | import common.Log; 4 | import data.states.AdvancedData; 5 | import data.PlayerInfo; 6 | import data.values.Penalties; 7 | 8 | /** 9 | * 10 | * @author Michel-Zen 11 | */ 12 | public class PickUpHL extends Penalty 13 | { 14 | /** 15 | * Performs this action`s penalty on a selected player. 16 | * 17 | * @param data The current data to work on. 18 | * @param player The player to penalise. 19 | * @param side The side the player is playing on (0:left, 1:right). 20 | * @param number The player`s number, beginning with 0! 21 | */ 22 | @Override 23 | public void performOn(AdvancedData data, PlayerInfo player, int side, int number) 24 | { 25 | player.penalty = Penalties.HL_PICKUP_OR_INCAPABLE; 26 | handleRepeatedPenalty(data, player, side, number); 27 | data.whenPenalized[side][number] = data.getTime(); 28 | data.isServingPenalty[side][number] = false; 29 | Log.state(data, "Request for PickUp / Incapable Player " + data.team[side].teamColor + " " + (number+1)); 30 | } 31 | 32 | /** 33 | * Checks if this action is legal with the given data (model). 34 | * Illegal actions are not performed by the EventHandler. 35 | * 36 | * @param data The current data to check with. 37 | */ 38 | @Override 39 | public boolean isLegal(AdvancedData data) 40 | { 41 | return true; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/controller/action/ui/penalty/Substitute.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui.penalty; 2 | 3 | import common.Log; 4 | import data.states.AdvancedData; 5 | import data.PlayerInfo; 6 | import data.Rules; 7 | import data.values.Penalties; 8 | 9 | /** 10 | * @author Michel Bartsch 11 | * 12 | * This action means that the substitution player penalty has been selected. 13 | */ 14 | public class Substitute extends Penalty 15 | { 16 | /** 17 | * Performs this action`s penalty on a selected player. 18 | * 19 | * @param data The current data to work on. 20 | * @param player The player to penalise. 21 | * @param side The side the player is playing on (0:left, 1:right). 22 | * @param number The player`s number, beginning with 0! 23 | */ 24 | @Override 25 | public void performOn(AdvancedData data, PlayerInfo player, int side, int number) 26 | { 27 | if (player.penalty != Penalties.NONE) { 28 | data.addToPenaltyQueue(side, data.whenPenalized[side][number], player.penalty, data.robotPenaltyCount[side][number]); 29 | } 30 | 31 | player.penalty = Penalties.SUBSTITUTE; 32 | data.robotPenaltyCount[side][number] = 0; 33 | data.whenPenalized[side][number] = data.getTime(); 34 | data.isServingPenalty[side][number] = false; 35 | Log.state(data, "Leaving Player " + data.team[side].teamColor + " " + (number+1)); 36 | } 37 | 38 | /** 39 | * Checks if this action is legal with the given data (model). 40 | * Illegal actions are not performed by the EventHandler. 41 | * 42 | * @param data The current data to check with. 43 | */ 44 | @Override 45 | public boolean isLegal(AdvancedData data) 46 | { 47 | return Rules.league.teamSize > Rules.league.robotsPlaying; 48 | } 49 | } -------------------------------------------------------------------------------- /src/controller/action/ui/state/Initial.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui.state; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.states.AdvancedData; 7 | import data.Rules; 8 | import data.values.GameStates; 9 | 10 | /** 11 | * @author Michel Bartsch 12 | * 13 | * This action means that the state is to be set to initial. 14 | */ 15 | public class Initial extends GCAction 16 | { 17 | /** 18 | * Creates a new Initial action. 19 | * Look at the ActionBoard before using this. 20 | */ 21 | public Initial() 22 | { 23 | super(ActionType.UI); 24 | } 25 | 26 | /** 27 | * Performs this action to manipulate the data (model). 28 | * 29 | * @param data The current data to work on. 30 | */ 31 | @Override 32 | public void perform(AdvancedData data) 33 | { 34 | if (data.gameState == GameStates.INITIAL) { 35 | return; 36 | } 37 | if (Rules.league.returnRobotsInGameStoppages) { 38 | data.resetPenaltyTimes(); 39 | } 40 | data.whenCurrentGameStateBegan = data.getTime(); 41 | data.gameState = GameStates.INITIAL; 42 | Log.state(data, "Initial"); 43 | } 44 | 45 | /** 46 | * Checks if this action is legal with the given data (model). 47 | * Illegal actions are not performed by the EventHandler. 48 | * 49 | * @param data The current data to check with. 50 | */ 51 | @Override 52 | public boolean isLegal(AdvancedData data) 53 | { 54 | return (data.gameState == GameStates.INITIAL) 55 | || data.testmode; 56 | } 57 | } -------------------------------------------------------------------------------- /src/controller/action/ui/state/Play.java: -------------------------------------------------------------------------------- 1 | package controller.action.ui.state; 2 | 3 | import common.Log; 4 | import controller.action.ActionType; 5 | import controller.action.GCAction; 6 | import data.Rules; 7 | import data.states.AdvancedData; 8 | import data.values.GameStates; 9 | import data.values.GameTypes; 10 | 11 | 12 | /** 13 | * @author Michel Bartsch 14 | * 15 | * This action means that the state is to be set to play. 16 | */ 17 | public class Play extends GCAction 18 | { 19 | /** 20 | * Creates a new Play action. 21 | * Look at the ActionBoard before using this. 22 | */ 23 | public Play() 24 | { 25 | super(ActionType.UI); 26 | } 27 | 28 | /** 29 | * Performs this action to manipulate the data (model). 30 | * 31 | * @param data The current data to work on. 32 | */ 33 | @Override 34 | public void perform(AdvancedData data) 35 | { 36 | if (data.gameState == GameStates.PLAYING) { 37 | return; 38 | } 39 | if ((data.gameType != GameTypes.PLAYOFF || !Rules.league.enableAddingTimeInCurrentStateForPlayoffs) && data.timeBeforeCurrentGameState != 0) { 40 | data.addTimeInCurrentState(); 41 | } 42 | data.whenCurrentGameStateBegan = data.getTime(); 43 | data.gameState = GameStates.PLAYING; 44 | Log.state(data, "Playing"); 45 | } 46 | 47 | /** 48 | * Checks if this action is legal with the given data (model). 49 | * Illegal actions are not performed by the EventHandler. 50 | * 51 | * @param data The current data to check with. 52 | */ 53 | @Override 54 | public boolean isLegal(AdvancedData data) 55 | { 56 | return (data.gameState == GameStates.SET) 57 | || (data.gameState == GameStates.PLAYING) 58 | || data.testmode; 59 | } 60 | } -------------------------------------------------------------------------------- /src/controller/net/RobotOnlineStatus.java: -------------------------------------------------------------------------------- 1 | package controller.net; 2 | 3 | /** 4 | * @author Marcel Steinbeck 5 | * 6 | * These enum provides all online status of a robot 7 | */ 8 | public enum RobotOnlineStatus { 9 | UNKNOWN, HIGH_LATENCY, ONLINE, OFFLINE 10 | } 11 | -------------------------------------------------------------------------------- /src/controller/ui/GCGUI.java: -------------------------------------------------------------------------------- 1 | package controller.ui; 2 | 3 | import data.states.AdvancedData; 4 | 5 | 6 | /** 7 | * 8 | * @author Michel Bartsch 9 | * 10 | * This inteface is for a GUI. 11 | * Evertimes the model changes the update method will be called with the new 12 | * model as data. 13 | * 14 | * In additional a GUI can get the last action that caused the change from 15 | * the EventHandler, but this should not be used too often to avoid 16 | * dependencies. 17 | */ 18 | public interface GCGUI 19 | { 20 | /** 21 | * Called evertimes the model has changed, so the GUI can update it´s 22 | * view. 23 | * 24 | * @param data The Model to view. 25 | */ 26 | void update(AdvancedData data); 27 | 28 | void dispose(); 29 | } -------------------------------------------------------------------------------- /src/controller/ui/gameplay/CommonGUI.java: -------------------------------------------------------------------------------- 1 | package controller.ui.gameplay; 2 | 3 | import data.states.AdvancedData; 4 | 5 | /** 6 | * Created by rkessler on 2017-03-23. 7 | */ 8 | public interface CommonGUI { 9 | 10 | void setupGuiElement(); 11 | 12 | void setupLayout(); 13 | 14 | void setupActionHandlers(); 15 | 16 | void update(AdvancedData data); 17 | 18 | void dispose(); 19 | } -------------------------------------------------------------------------------- /src/controller/ui/helper/FontHelper.java: -------------------------------------------------------------------------------- 1 | package controller.ui.helper; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Created by rkessler on 2017-06-24. 7 | */ 8 | public class FontHelper { 9 | 10 | protected static final int TITLE_FONT_SIZE = 24; 11 | protected static final int HEADLINE_FONT_SIZE = 30; 12 | protected static final String STANDARD_FONT = "Helvetica"; 13 | 14 | static public Font boldStandardFont(){ 15 | return new Font(STANDARD_FONT, Font.BOLD, TITLE_FONT_SIZE); 16 | } 17 | 18 | protected static final int TIME_FONT_SIZE = 50; 19 | protected static final int TIME_SUB_FONT_SIZE = 40; 20 | protected static final int TIME_EXTRA_CLOCK_SIZE = 20; 21 | 22 | public static Font timeFont = new Font(STANDARD_FONT, Font.PLAIN, TIME_FONT_SIZE); 23 | public static Font timeSubFont = new Font(STANDARD_FONT, Font.PLAIN, TIME_SUB_FONT_SIZE); 24 | public static Font extraClockFont = new Font(STANDARD_FONT, Font.PLAIN, TIME_EXTRA_CLOCK_SIZE); 25 | 26 | static public Font boldHeadlineFont(){ 27 | return new Font(STANDARD_FONT, Font.BOLD, HEADLINE_FONT_SIZE); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/controller/ui/localization/Localization.java: -------------------------------------------------------------------------------- 1 | package controller.ui.localization; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-23. 5 | */ 6 | public class Localization { 7 | 8 | public final String DIRECT_FREE_KICK = "Direct Free Kick"; 9 | public final String INDIRECT_FREE_KICK = "Indirect Free Kick"; 10 | public final String PENALTY_KICK = "Penalty Kick"; 11 | public final String CORNER_KICK = "Corner Kick"; 12 | public final String GOAL_KICK = "Goal Kick"; 13 | public final String THROW_IN = "Throw-In"; 14 | 15 | public final String RETAKE = "Retake"; 16 | public final String ABORT = "Abort"; 17 | 18 | public final String COACH = "Coach"; 19 | public final String EJECTED = "Ejected"; 20 | 21 | public final String ILLEGAL_BALL_CONTACT = "illegal ball contact"; 22 | public final String PUSHING = "pushing"; 23 | 24 | 25 | public final String TAKE_TIMEOUT = "Take Timeout"; 26 | public final String END_TIMEOUT = "End Timeout"; 27 | 28 | public final String TAKE_REFEREE_TIMEOUT = "Take
Referee
Timeout"; 29 | public final String END_REFEREE_TIMEOUT = "End
Referee
Timeout"; 30 | } 31 | -------------------------------------------------------------------------------- /src/controller/ui/localization/LocalizationManager.java: -------------------------------------------------------------------------------- 1 | package controller.ui.localization; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-23. 5 | */ 6 | public class LocalizationManager { 7 | 8 | private static LocalizationManager _instance = null; 9 | 10 | public static LocalizationManager getInstance(){ 11 | if (_instance == null){ 12 | _instance = new LocalizationManager(); 13 | } 14 | return _instance; 15 | } 16 | 17 | public static Localization getLocalization(){ 18 | if (_instance == null){ 19 | _instance = new LocalizationManager(); 20 | } 21 | return _instance.currentLocalization; 22 | } 23 | 24 | private Localization currentLocalization; 25 | 26 | private LocalizationManager(){ 27 | this.currentLocalization = new Localization(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/controller/ui/setup/ImagePanel.java: -------------------------------------------------------------------------------- 1 | package controller.ui.setup; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * @author Michel Bartsch 8 | * 9 | * This is a normal JPanel, but it has a background image. 10 | */ 11 | class ImagePanel extends JPanel 12 | { 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** The image that is shown in the background. */ 16 | private Image image; 17 | 18 | /** 19 | * Creates a new ImagePanel. 20 | * 21 | * @param image The Image to be shown in the background. 22 | */ 23 | public ImagePanel(Image image) 24 | { 25 | this.image = image; 26 | } 27 | 28 | public ImagePanel() 29 | { 30 | this.image = null; 31 | } 32 | 33 | public void setVisible(){ 34 | 35 | } 36 | 37 | /** 38 | * Changes the background image. 39 | * 40 | * @param image Changes the image to this one. 41 | */ 42 | public void setImage(Image image) 43 | { 44 | this.image = image; 45 | } 46 | 47 | /** 48 | * Paints this Component, should be called automatically. 49 | * 50 | * @param g This components graphical content. 51 | */ 52 | @Override 53 | public void paintComponent(Graphics g) { 54 | if (image != null) { 55 | if (super.isOpaque()) { 56 | g.setColor(Color.WHITE); 57 | g.fillRect(0, 0, getWidth(), getHeight()); 58 | } 59 | g.drawImage(image, (getWidth() - image.getWidth(null)) / 2, 0, image.getWidth(null), image.getHeight(null), null); 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /src/controller/ui/ui/AbstractUI.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui; 2 | 3 | import controller.Clock; 4 | import controller.ui.GCGUI; 5 | import controller.ui.ui.components.AbstractComponent; 6 | import data.states.AdvancedData; 7 | import data.states.GamePreparationData; 8 | 9 | import javax.swing.*; 10 | import java.awt.event.WindowAdapter; 11 | import java.awt.event.WindowEvent; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | /** 16 | * A modern extensible component based UI system which can be extended with elements 17 | */ 18 | public abstract class AbstractUI extends JFrame implements GCGUI { 19 | 20 | protected List elementsReceivingUpdates; 21 | protected AdvancedData initialData; 22 | protected GamePreparationData gamePrepData; 23 | 24 | public AbstractUI(boolean fullscreen, AdvancedData initialData, GamePreparationData gamePrepData){ 25 | super("GameController"); 26 | 27 | elementsReceivingUpdates = new ArrayList<>(); 28 | this.initialData = initialData; 29 | this.gamePrepData = gamePrepData; 30 | 31 | addWindowListener(new WindowAdapter() 32 | { 33 | @Override 34 | public void windowClosing(WindowEvent e) { 35 | Clock.getInstance().interrupt(); 36 | dispose(); 37 | } 38 | }); 39 | } 40 | 41 | @Override 42 | public void update(AdvancedData data) { 43 | for(AbstractComponent uiPart : elementsReceivingUpdates){ 44 | uiPart.update(data); 45 | } 46 | repaint(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/controller/ui/ui/components/AbstractComponent.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.components; 2 | 3 | import data.states.AdvancedData; 4 | import data.values.Penalties; 5 | 6 | import javax.swing.*; 7 | import java.awt.*; 8 | 9 | /** 10 | * Created by rkessler on 2017-03-27. 11 | */ 12 | public abstract class AbstractComponent extends JPanel { 13 | 14 | private static final Color COLOR_HIGHLIGHT = Color.YELLOW; 15 | private static final Color COLOR_STANDARD = (new JButton()).getBackground(); 16 | private static final boolean IS_OSX = System.getProperty("os.name").contains("OS X"); 17 | 18 | /** 19 | * Set the given button highlighted or normal. 20 | * 21 | * @param button The button to highlight. 22 | * @param highlight If the button should be highlighted. 23 | */ 24 | void highlight(AbstractButton button, boolean highlight) 25 | { 26 | button.setBackground(highlight ? COLOR_HIGHLIGHT : COLOR_STANDARD); 27 | if (IS_OSX) { 28 | button.setOpaque(highlight); 29 | button.setBorderPainted(!highlight); 30 | } 31 | } 32 | 33 | void highlight(AbstractButton button) 34 | { 35 | if (button.getBackground() == COLOR_STANDARD){ 36 | button.setBackground(COLOR_HIGHLIGHT); 37 | } else { 38 | button.setBackground(COLOR_STANDARD); 39 | } 40 | } 41 | 42 | void resetHighlighting(AbstractButton button){ 43 | button.setBackground(COLOR_STANDARD); 44 | } 45 | 46 | public abstract void update(AdvancedData data); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/controller/ui/ui/components/DropInStatSnippet.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.components; 2 | 3 | import common.TotalScaleLayout; 4 | import controller.action.ui.CardIncrease; 5 | import controller.action.ui.DropinPointDelta; 6 | import controller.ui.ui.customized.Button; 7 | import data.states.AdvancedData; 8 | import data.values.Side; 9 | 10 | import javax.swing.*; 11 | import java.awt.*; 12 | import java.awt.event.ActionEvent; 13 | import java.awt.event.ActionListener; 14 | 15 | /** 16 | * A small component counting drop in points 17 | * Can be added to the robot label if necessary 18 | * Created by rkessler on 2017-03-29. 19 | */ 20 | public class DropInStatSnippet extends AbstractComponent { 21 | 22 | private Side side; 23 | private int robotId; 24 | 25 | private JButton robotPointsInc; 26 | private JButton robotPointsDec; 27 | private JLabel robotPointsLabel; 28 | 29 | public DropInStatSnippet(Side side, int robotId) { 30 | this.side = side; 31 | this.robotId = robotId; 32 | 33 | robotPointsInc = new Button("+"); 34 | robotPointsDec = new Button("-"); 35 | robotPointsLabel = new JLabel("0 Points"); 36 | 37 | robotPointsInc.addActionListener(new DropinPointDelta(side, this.robotId, 1)); 38 | robotPointsDec.addActionListener(new DropinPointDelta(side, this.robotId, -1)); 39 | 40 | defineLayout(); 41 | } 42 | 43 | public void defineLayout() { 44 | TotalScaleLayout layout = new TotalScaleLayout(this); 45 | this.setLayout(layout); 46 | 47 | layout.add(0, 0, 1, 0.35, robotPointsInc); 48 | layout.add(0, 0.35, 1, 0.35, robotPointsDec); 49 | layout.add(0, 0.70, 1, 0.3, robotPointsLabel); 50 | } 51 | 52 | @Override 53 | public void update(AdvancedData data) 54 | { 55 | int points = data.getTeam(this.side).player[robotId].dropInPoints; 56 | robotPointsLabel.setText(points + " Points"); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/controller/ui/ui/components/Refreshable.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.components; 2 | 3 | /** 4 | * Created by rkessler on 2017-05-01. 5 | */ 6 | public interface Refreshable { 7 | 8 | void refresh(); 9 | } 10 | -------------------------------------------------------------------------------- /src/controller/ui/ui/components/RobotWithDropInCounter.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.components; 2 | 3 | import common.TotalScaleLayout; 4 | import data.states.AdvancedData; 5 | import data.values.Side; 6 | 7 | /** 8 | * Created by rkessler on 2017-06-11. 9 | */ 10 | public class RobotWithDropInCounter extends Robot { 11 | 12 | private DropInStatSnippet diss; 13 | 14 | public RobotWithDropInCounter(Side side, int id) { 15 | super(side, id); 16 | diss = new DropInStatSnippet(side, id); 17 | } 18 | 19 | 20 | public void setup() { 21 | super.setup(); 22 | } 23 | 24 | public void updateLayout(double aspectRatio) { 25 | TotalScaleLayout robotLayout = new TotalScaleLayout(robot); 26 | robot.setLayout(robotLayout); 27 | robot.removeAll(); 28 | 29 | // Figure out a way to make this easier 30 | double rightOffset = 0.21; 31 | 32 | double cardWidth = 0.4 / aspectRatio; 33 | 34 | robotLayout.add(1 - rightOffset + 0.02, 0.1, 0.18, 0.75, diss); 35 | 36 | robotLayout.add(1 - cardWidth - rightOffset, 0.1, cardWidth, 0.75, warningCard); 37 | robotLayout.add(1 - 2 *cardWidth - rightOffset, 0.1, cardWidth, 0.75, yellowCard); 38 | robotLayout.add(1 - 3 * cardWidth - rightOffset, 0.1, cardWidth, 0.75, redCard); 39 | 40 | double restWidth = 1 - 2 * cardWidth - rightOffset; 41 | 42 | robotLayout.add(0, 0, restWidth, 0.9, robotLabel); 43 | 44 | robotLayout.add(0, 0.9, 1, 0.1, progressBar); 45 | } 46 | 47 | 48 | @Override 49 | public void update(AdvancedData data) { 50 | super.update(data); 51 | diss.update(data); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/AbortButton.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | /** 3 | * @author Maike Paetzel 4 | * 5 | * This class allows to represents the button that aborts GameInterruptions 6 | */ 7 | public class AbortButton extends Button { 8 | public AbortButton(String caption){ 9 | super(caption); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/BestFitImagePanel.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | import java.awt.image.BufferedImage; 6 | 7 | /** 8 | * Created by rkessler on 2017-03-28. 9 | */ 10 | public class BestFitImagePanel extends ImagePanel 11 | { 12 | protected static final long serialVersionUID = 1L; 13 | 14 | /** The image that is shown in the background. */ 15 | protected Image image; 16 | 17 | /** 18 | * Creates a new ImagePanel. 19 | * 20 | * @param image The Image to be shown in the background. 21 | */ 22 | public BestFitImagePanel(Image image) { 23 | super(image); 24 | } 25 | 26 | public void setImage(Image image) 27 | { 28 | this.image = image; 29 | this.rescale(); 30 | } 31 | 32 | 33 | private void rescale(){ 34 | int new_width = (int) (this.getHeight() * ((double) image.getWidth(null) / image.getHeight(null))); 35 | image = image.getScaledInstance(new_width, this.getHeight(), 1); 36 | } 37 | 38 | @Override 39 | public void paintComponent(Graphics g) 40 | { 41 | if (super.isOpaque()) { 42 | Color color = UIManager.getColor ( "Panel.background" ); 43 | g.setColor(color); 44 | g.fillRect(0, 0, getWidth(), getHeight()); 45 | } 46 | 47 | if (image != null) { 48 | int offset = getWidth() - image.getWidth(null); 49 | g.drawImage(image, offset/2, 0, image.getWidth(null), image.getHeight(null), null); 50 | } 51 | } 52 | } 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/Button.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import controller.ui.gameplay.GUI; 4 | 5 | import javax.swing.*; 6 | 7 | /** 8 | * Created by rkessler on 2017-03-30. 9 | */ 10 | public class Button extends JButton 11 | { 12 | protected static final long serialVersionUID = -1533689100759569853L; 13 | 14 | public static final String BUTTON_MASK = GUI.IS_APPLE_JAVA 15 | ? "
%s
" 16 | : "
%s
"; 17 | 18 | public Button() 19 | { 20 | setMargin(GUI.insets); 21 | } 22 | 23 | public Button(String text) 24 | { 25 | setMargin(GUI.insets); 26 | setText(text); 27 | } 28 | 29 | public void setText(String text) 30 | { 31 | super.setText(String.format(BUTTON_MASK, text)); 32 | } 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/CountDownBar.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | import java.awt.event.ComponentAdapter; 6 | import java.awt.event.ComponentEvent; 7 | import java.awt.geom.Arc2D; 8 | 9 | /** 10 | * Created by rkessler on 2017-06-18. 11 | */ 12 | public class CountDownBar extends JPanel { 13 | 14 | private double percent = 0; 15 | 16 | public CountDownBar() { 17 | super(); 18 | this.repaint(); 19 | this.setOpaque(false); 20 | 21 | 22 | } 23 | 24 | protected void paintComponent(Graphics g) { 25 | super.paintComponent(g); 26 | 27 | if (this.isVisible()) { 28 | 29 | g.setColor(new Color(255, 91, 88)); 30 | Graphics2D g2 = (Graphics2D) g; 31 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 32 | 33 | g2.fillRect(0, 0, (int) (this.getWidth() * (100 - percent) * 0.01), getHeight()); 34 | } 35 | } 36 | 37 | public void updateValue(double percent) { 38 | this.percent = percent; 39 | this.setVisible(percent > 0); 40 | this.repaint(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/GameInterruptionButton.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | 4 | /** 5 | * @author Ludovic Hofer 6 | * 7 | * This class allows to represents the button for all the game interruptions which behaves similarly such as: 8 | * - Penalty Kick 9 | * - Direct Free Kick 10 | * - Indirect Free Kick 11 | * - Corner Kick 12 | * - Goal Kick 13 | * - Throw-in 14 | */ 15 | public class GameInterruptionButton extends JMultiStepIndicatorButton { 16 | 17 | public GameInterruptionButton(String caption) { 18 | super(caption, 3); 19 | base_message = caption; 20 | } 21 | 22 | public void setSubMode(byte subMode) { 23 | switch(subMode){ 24 | case 0: 25 | setText(base_message + ": Start placing"); 26 | setStep(1); 27 | break; 28 | case 1: 29 | setText(base_message + ": End placing"); 30 | setStep(2); 31 | break; 32 | case 2: 33 | setText(base_message + ": Execute"); 34 | setStep(3); 35 | break; 36 | } 37 | } 38 | 39 | public void setInitialMode() { 40 | setText(base_message); 41 | setStep(0); 42 | } 43 | 44 | private String base_message; 45 | } 46 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/ImageButton.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * Created by rkessler on 2017-03-28. 8 | */ 9 | public class ImageButton extends JButton 10 | { 11 | protected static final long serialVersionUID = 1L; 12 | 13 | 14 | /** The image that is shown in the background. */ 15 | protected Image image; 16 | 17 | /** 18 | * Creates a new ImageButton. 19 | * 20 | * @param image The Image to be shown in the background. 21 | */ 22 | public ImageButton(Image image) 23 | { 24 | this.image = image; 25 | } 26 | 27 | /** 28 | * Changes the background image. 29 | * 30 | * @param image Changes the image to this one. 31 | */ 32 | public void setImage(Image image) 33 | { 34 | this.image = image; 35 | } 36 | 37 | /** 38 | * Paints this Component, should be called automatically. 39 | * 40 | * @param g This components graphical content. 41 | */ 42 | @Override 43 | public void paintComponent(Graphics g) 44 | { 45 | if (super.isOpaque()) { 46 | g.clearRect(0, 0, getWidth(), getHeight()); 47 | } 48 | g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 49 | } 50 | } 51 | 52 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/ImagePanel.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * Created by rkessler on 2017-03-28. 8 | */ 9 | public class ImagePanel extends JPanel 10 | { 11 | protected static final long serialVersionUID = 1L; 12 | 13 | /** The image that is shown in the background. */ 14 | protected Image image; 15 | 16 | /** 17 | * Creates a new ImagePanel. 18 | * 19 | * @param image The Image to be shown in the background. 20 | */ 21 | public ImagePanel(Image image) 22 | { 23 | this.image = image; 24 | } 25 | 26 | /** 27 | * Changes the background image. 28 | * 29 | * @param image Changes the image to this one. 30 | */ 31 | public void setImage(Image image) 32 | { 33 | this.image = image; 34 | } 35 | 36 | /** 37 | * Paints this Component, should be called automatically. 38 | * 39 | * @param g This components graphical content. 40 | */ 41 | @Override 42 | public void paintComponent(Graphics g) 43 | { 44 | if (super.isOpaque()) { 45 | g.setColor(Color.WHITE); 46 | g.fillRect(0, 0, getWidth(), getHeight()); 47 | } 48 | g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 49 | } 50 | } 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/RetakeButton.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | /** 3 | * @author Ludovic Hofer 4 | * 5 | * This class allows to represents the button that restarts GameInterruptions 6 | */ 7 | public class RetakeButton extends Button { 8 | public RetakeButton(String caption){ 9 | super(caption); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/controller/ui/ui/customized/ToggleButton.java: -------------------------------------------------------------------------------- 1 | package controller.ui.ui.customized; 2 | 3 | import controller.ui.gameplay.GUI; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.ActionListener; 8 | 9 | /** 10 | * Created by rkessler on 2017-03-27. 11 | */ 12 | public class ToggleButton extends JToggleButton { 13 | 14 | protected static final long serialVersionUID = -7733709666734108610L; 15 | 16 | public ToggleButton() 17 | { 18 | setMargin(GUI.insets); 19 | } 20 | 21 | public ToggleButton(String text) 22 | { 23 | setMargin(GUI.insets); 24 | setText(text); 25 | addActionListener(new ActionListener() { 26 | @Override 27 | public void actionPerformed(ActionEvent actionEvent) { 28 | ((JToggleButton) actionEvent.getSource()).setSelected(false); 29 | } 30 | }); 31 | } 32 | 33 | public void setText(String text) 34 | { 35 | super.setText(String.format(GUI.BUTTON_MASK, text)); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/data/Helper.java: -------------------------------------------------------------------------------- 1 | package data; 2 | 3 | import data.hl.HL; 4 | import data.hl.HLAdult; 5 | import data.hl.HLTeen; 6 | 7 | import java.awt.*; 8 | 9 | /** 10 | * Created by rkessler on 2017-02-11. 11 | */ 12 | public class Helper { 13 | 14 | public static boolean isValidRule(Rules rules){ 15 | boolean result = rules instanceof HL; 16 | result |= rules instanceof HLTeen; 17 | result |= rules instanceof HLAdult; 18 | return result; 19 | } 20 | 21 | public static String capitalize(final String line) { 22 | return Character.toUpperCase(line.charAt(0)) + line.substring(1); 23 | } 24 | 25 | 26 | public static Color getColorByString(Rules activeRules, String colorName){ 27 | assert activeRules.teamColor.length == activeRules.teamColorName.length; 28 | for (int idx=0; idx < activeRules.teamColorName.length; idx++){ 29 | 30 | if (activeRules.teamColorName[idx].equals(capitalize(colorName))){ 31 | return activeRules.teamColor[idx]; 32 | } 33 | } 34 | return null; 35 | } 36 | 37 | public static String formatTime(int seconds) { 38 | int displaySeconds = Math.abs(seconds) % 60; 39 | int displayMinutes = Math.abs(seconds) / 60; 40 | return (seconds < 0 ? "-" : "") + String.format("%02d:%02d", displayMinutes, displaySeconds); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/data/hl/HLAdult.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLAdult extends HL 9 | { 10 | public HLAdult() 11 | { 12 | /** The league´s name this rules are for. */ 13 | leagueName = "HL Adult"; 14 | /** The league´s directory name with it´s teams and icons. */ 15 | leagueDirectory = "hl_adult"; 16 | /** How many robots are in a team. */ 17 | teamSize = 4; 18 | /** How many robots of each team may play at one time. */ 19 | robotsPlaying = 2; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/data/hl/HLDropIn.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLDropIn extends HL 9 | { 10 | public HLDropIn() 11 | { 12 | /** The league´s directory name with it´s teams and icons. */ 13 | leagueDirectory = "hl_dropin"; 14 | /** If true, the drop-in player competition is active */ 15 | dropInPlayerMode = true; 16 | /** Drop in */ 17 | leagueName = "HL Drop-in"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/data/hl/HLDropIn2.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLDropIn2 extends HLDropIn 9 | { 10 | public HLDropIn2() 11 | { 12 | leagueName = "HL Drop In (2)"; 13 | robotsPlaying = 2; 14 | teamSize = 2; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/data/hl/HLDropIn3.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLDropIn3 extends HLDropIn 9 | { 10 | public HLDropIn3() 11 | { 12 | leagueName = "HL Drop In (3)"; 13 | robotsPlaying = 3; 14 | teamSize = 3; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/data/hl/HLDropIn4.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLDropIn4 extends HLDropIn 9 | { 10 | public HLDropIn4() 11 | { 12 | leagueName = "HL Drop In (4)"; 13 | robotsPlaying = 4; 14 | teamSize = 4; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/data/hl/HLDropIn5.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLDropIn5 extends HLDropIn 9 | { 10 | public HLDropIn5() 11 | { 12 | leagueName = "HL Drop In (5)"; 13 | robotsPlaying = 5; 14 | teamSize = 5; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/data/hl/HLSimulationAdult.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLSimulationAdult extends HLSim 9 | { 10 | public HLSimulationAdult() 11 | { 12 | /** The league´s name this rules are for. */ 13 | leagueName = "HL Simulation AdultSize"; 14 | /** The league´s directory name with it´s teams and icons. */ 15 | leagueDirectory = "hl_sim_adult"; 16 | /** How many robots are in a team. */ 17 | teamSize = 2; 18 | /** How many robots of each team may play at one time. */ 19 | robotsPlaying = 2; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/data/hl/HLSimulationKid.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLSimulationKid extends HLSim 9 | { 10 | public HLSimulationKid() 11 | { 12 | /** The league´s name this rules are for. */ 13 | leagueName = "HL Simulation KidSize"; 14 | /** The league´s directory name with it´s teams and icons. */ 15 | leagueDirectory = "hl_sim_kid"; 16 | /** How many robots are in a team. */ 17 | teamSize = 4; 18 | /** How many robots of each team may play at one time. */ 19 | robotsPlaying = 4; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/data/hl/HLTeen.java: -------------------------------------------------------------------------------- 1 | package data.hl; 2 | 3 | /** 4 | * This class sets attributes given by the humanoid-league rules. 5 | * 6 | * @author Michel-Zen 7 | */ 8 | public class HLTeen extends HL 9 | { 10 | public HLTeen() 11 | { 12 | /** The league´s name this rules are for. */ 13 | leagueName = "HL Teen"; 14 | /** The league´s directory name with it´s teams and icons. */ 15 | leagueDirectory = "hl_teen"; 16 | /** How many robots are in a team. */ 17 | teamSize = 5; 18 | /** How many robots of each team may play at one time. */ 19 | robotsPlaying = 3; 20 | } 21 | } -------------------------------------------------------------------------------- /src/data/states/ExtraClock.java: -------------------------------------------------------------------------------- 1 | package data.states; 2 | 3 | import controller.SystemClock; 4 | 5 | import java.io.Serializable; 6 | 7 | public class ExtraClock implements Serializable { 8 | 9 | private long start_time; 10 | private int life_time; 11 | private String label; 12 | 13 | public ExtraClock(String label, int lifetime) { 14 | this.start_time = SystemClock.getInstance().getCurrentTimeMillis(); 15 | this.life_time = lifetime; 16 | this.label = label; 17 | } 18 | 19 | public ExtraClock(int lifetime) { 20 | this.start_time = SystemClock.getInstance().getCurrentTimeMillis(); 21 | this.life_time = lifetime; 22 | this.label = "Secondary Clock"; 23 | } 24 | 25 | public int getRemainingSeconds() { 26 | return life_time - getSecondsSince(start_time); 27 | } 28 | 29 | public boolean isLowerThan(Integer value) { 30 | return getRemainingSeconds() <= value; 31 | } 32 | 33 | public int getSecondsSince(long millis) { 34 | return millis == 0 ? 100000 : (int) (getTime() - millis) / 1000; 35 | } 36 | 37 | public long getTime() { 38 | return SystemClock.getInstance().getCurrentTimeMillis(); 39 | } 40 | 41 | public String getLabel(){ 42 | return this.label; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/data/states/GameClock.java: -------------------------------------------------------------------------------- 1 | package data.states; 2 | 3 | import java.io.Serializable; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | /** 8 | * Created by rkessler on 2017-03-23. 9 | */ 10 | public class GameClock implements Serializable { 11 | 12 | List _extraClocks = new ArrayList<>(); 13 | 14 | private ExtraClock secondaryClock; 15 | 16 | public void addExtraClock(String label, int lifetime){ 17 | _extraClocks.add(new ExtraClock(label, lifetime)); 18 | } 19 | 20 | public List getExtraClocks(){ 21 | for (ExtraClock e: _extraClocks){ 22 | if (e.isLowerThan(0)){ 23 | _extraClocks.remove(e); 24 | } 25 | } 26 | return _extraClocks; 27 | } 28 | 29 | public Integer getSecondaryTime() { 30 | if (secondaryClock == null){ 31 | return null; 32 | } else { 33 | return secondaryClock.getRemainingSeconds(); 34 | } 35 | } 36 | 37 | public void setSecondaryClock(int time_in_seconds){ 38 | secondaryClock = new ExtraClock(time_in_seconds); 39 | } 40 | 41 | public void clearSecondaryClock(){ 42 | secondaryClock = null; 43 | } 44 | 45 | 46 | public boolean isSecondaryClockLowerThan(Integer value) { 47 | return secondaryClock != null && secondaryClock.isLowerThan(value); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/data/states/SecondaryStateInfo.java: -------------------------------------------------------------------------------- 1 | package data.states; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by rkessler on 2017-03-24. 7 | */ 8 | public class SecondaryStateInfo implements Serializable { 9 | 10 | private byte[] secondaryStateInfo; 11 | 12 | public SecondaryStateInfo(){ 13 | secondaryStateInfo = new byte[]{0, 0, 0, 0}; 14 | } 15 | 16 | public byte[] toByteArray() { 17 | return secondaryStateInfo; 18 | } 19 | 20 | public void fromByteArray(byte[] byte_array) { 21 | assert byte_array.length == 4: "Could not convert secondary state from byte array - not 4 bytes"; 22 | secondaryStateInfo = byte_array; 23 | } 24 | 25 | /** 26 | * Updates the additional info in the secondary game state regarding free kicks 27 | * @param teamPerforming - The team that is performing the free kick 28 | * @param subMode - The mode we are in: 29 | * 0 = Robots should stay still, referee places the ball on the ground 30 | * 1 = Robots can place themselves toward the ball 31 | * 2 = Robots should stay still and referees ask to remove illegally positioned robots 32 | */ 33 | public void setFreeKickData(byte teamPerforming, byte subMode){ 34 | secondaryStateInfo[0] = teamPerforming; 35 | secondaryStateInfo[1] = subMode; 36 | } 37 | 38 | public void reset() { 39 | secondaryStateInfo = new byte[]{0, 0, 0, 0}; 40 | } 41 | 42 | /** Switches the mode to penalty kick and records the team performing it **/ 43 | public void switchToPenaltyKick(byte teamPerforming, byte submode) { 44 | secondaryStateInfo[0] = teamPerforming; 45 | secondaryStateInfo[1] = submode; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/data/teams/TeamLoadInfo.java: -------------------------------------------------------------------------------- 1 | package data.teams; 2 | 3 | import java.awt.image.BufferedImage; 4 | 5 | /** 6 | * Created by rkessler on 2017-02-11. 7 | */ 8 | public class TeamLoadInfo { 9 | 10 | /** The identifier of the team. */ 11 | public int identifier; 12 | /** The name of the team. */ 13 | public String name; 14 | /** The icon of the team. */ 15 | public BufferedImage icon; 16 | /** The first and secondary jersey colors of the team. */ 17 | public String[] colors; 18 | 19 | /** 20 | * Create a new team information. 21 | * @param name The name of the team. 22 | * @param colors The names of the jersey colors used by the team. 23 | * Can be null if no colors were specified. 24 | */ 25 | public TeamLoadInfo(int identifier, String name, String[] colors) 26 | { 27 | this.identifier = identifier; 28 | this.name = name; 29 | this.colors = colors; 30 | } 31 | 32 | public TeamLoadInfo(int identifier, String name) 33 | { 34 | this.identifier = identifier; 35 | this.name = name; 36 | this.colors = new String[]{}; 37 | } 38 | 39 | public TeamLoadInfo clone(){ 40 | return new TeamLoadInfo(this.identifier, this.name, this.colors); 41 | } 42 | 43 | public String toString() { 44 | return String.format("%1s (%2s)", this.name, this.identifier); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/data/values/DocumentingMarkdown.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * The interface to automatically document the Enums that reflect the byte values for the 5 | * protocols such that this info can be used in the documentation wiki. 6 | */ 7 | public interface DocumentingMarkdown { 8 | 9 | default String header(){ 10 | StringBuilder sb = new StringBuilder(); 11 | sb.append("| Identifier | Byte Value |\n"); 12 | sb.append("| ---------- | ---------- |\n"); 13 | return sb.toString(); 14 | } 15 | 16 | String name(); 17 | 18 | byte value(); 19 | 20 | default String row(){ 21 | StringBuilder sb = new StringBuilder(); 22 | sb.append(String.format("| %s | %s |\n", name(), value())); 23 | return sb.toString(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/data/values/GameStates.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-25. 5 | */ 6 | public enum GameStates implements DocumentingMarkdown { 7 | 8 | IMPOSSIBLE(-1, "Impossible"), 9 | INITIAL(0, "Initial"), 10 | READY(1, "Ready"), 11 | SET(2, "Set"), 12 | PLAYING(3, "Playing"), 13 | FINISHED(4, "Finished"); 14 | 15 | private byte byte_value; 16 | private String humanReadable; 17 | 18 | GameStates(int byte_value, String humanReadable) { 19 | 20 | this.byte_value = (byte) byte_value; 21 | this.humanReadable = humanReadable; 22 | } 23 | 24 | public byte value() { 25 | return byte_value; 26 | } 27 | 28 | public static GameStates fromValue(byte b) { 29 | for(GameStates gameState : GameStates.values()){ 30 | if (gameState.value() == b){ 31 | return gameState; 32 | } 33 | } 34 | System.out.println("Warning: Could not resolve GameState byte."); 35 | return IMPOSSIBLE; 36 | } 37 | 38 | public String toString(){ 39 | return this.humanReadable; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/data/values/GameTypes.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-25. 5 | */ 6 | public enum GameTypes implements DocumentingMarkdown { 7 | 8 | UNKNOWN(-1, "unknown"), 9 | ROUNDROBIN(0, "round robin"), 10 | PLAYOFF(1, "playoff"), 11 | DROPIN(2, "drop-in"); 12 | 13 | private byte byte_value; 14 | private String humanReadable; 15 | 16 | GameTypes(int byte_value, String humanReadable) { 17 | 18 | this.byte_value = (byte) byte_value; 19 | this.humanReadable = humanReadable; 20 | } 21 | 22 | public byte value() { 23 | return byte_value; 24 | } 25 | 26 | public static GameTypes fromValue(byte b) { 27 | for(GameTypes gameType : GameTypes.values()){ 28 | if (gameType.value() == b){ 29 | return gameType; 30 | } 31 | } 32 | System.out.println("Warning: Could not resolve GameType byte."); 33 | return UNKNOWN; 34 | } 35 | 36 | public String toString(){ 37 | return this.humanReadable; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/data/values/Penalties.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-25. 5 | */ 6 | public enum Penalties implements DocumentingMarkdown { 7 | 8 | UNKNOWN(255, "Unknown", -1), 9 | 10 | NONE(0, "None", -1), 11 | 12 | SUBSTITUTE(14, "substitute", -1), // TODO check if different for SPL than HL and what value is 13 | MANUAL(15, "manual", -1), // TODO check if different for SPL than HL and what value is 14 | 15 | HL_BALL_MANIPULATION(30, "ball_manipulation", 30), 16 | HL_PHYSICAL_CONTACT(31, "pushing", 30), 17 | HL_PICKUP_OR_INCAPABLE(34, "pickup/incapable", 30), 18 | HL_SERVICE(35, "service", 60); 19 | 20 | private byte byte_value; 21 | private String humanReadable; 22 | private int penaltyTime; 23 | 24 | Penalties(int byte_value, String humanReadable, int penalty_time) { 25 | this.byte_value = (byte) byte_value; 26 | this.humanReadable = humanReadable; 27 | this.penaltyTime = penalty_time; 28 | } 29 | 30 | public byte value() { 31 | return byte_value; 32 | } 33 | 34 | public int penaltyTime(){ 35 | return this.penaltyTime; 36 | } 37 | public static Penalties fromValue(byte b) { 38 | for(Penalties penalty : Penalties.values()){ 39 | if (penalty.value() == b){ 40 | return penalty; 41 | } 42 | } 43 | System.out.println("Warning: Could not resolve Penalty byte."); 44 | return UNKNOWN; 45 | } 46 | 47 | public String toString(){ 48 | return this.humanReadable; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/data/values/PlayerResponses.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-25. 5 | */ 6 | public enum PlayerResponses implements DocumentingMarkdown { 7 | 8 | /** What a player may say. */ 9 | MAN_PENALISE(0, "Manual Penalized"), 10 | MAN_UNPENALISE(1, "Manual Unpenalized"), 11 | ALIVE(2, "Alive"), 12 | GOALKEEPER(3, "Goalkeeper"), 13 | GAME_INTERRUPTION_READY(4, "Ready to execute game interruption"), 14 | 15 | UNKNOWN(255, "Unknown"); 16 | 17 | private byte byte_value; 18 | private String humanReadable; 19 | 20 | PlayerResponses(int byte_value, String humanReadable) { 21 | this.byte_value = (byte) byte_value; 22 | this.humanReadable = humanReadable; 23 | } 24 | 25 | public byte value() { 26 | return byte_value; 27 | } 28 | 29 | public static PlayerResponses fromValue(byte b) { 30 | for(PlayerResponses playerResponse : PlayerResponses.values()){ 31 | if (playerResponse.value() == b){ 32 | return playerResponse; 33 | } 34 | } 35 | System.out.println("Warning: Could not resolve PlayerResponse byte."); 36 | return UNKNOWN; 37 | } 38 | 39 | public String toString(){ 40 | return this.humanReadable; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/data/values/ProtocolHelper.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | import java.io.FileWriter; 4 | import java.io.IOException; 5 | import java.lang.reflect.InvocationTargetException; 6 | import java.lang.reflect.Method; 7 | import java.util.ArrayList; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * This class helps to generate the file that can be added to the Wiki such that a team doesn't need to look 13 | * into the Java code to see the allowed values for specific data types defined in Enums 14 | */ 15 | public class ProtocolHelper { 16 | 17 | public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { 18 | new ProtocolHelper(); 19 | } 20 | 21 | ProtocolHelper() throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { 22 | FileWriter fw = new FileWriter("protocol_appendix.html"); 23 | 24 | List enumList = new ArrayList(); 25 | enumList.add(GameStates.class); 26 | enumList.add(GameTypes.class); 27 | enumList.add(Penalties.class); 28 | enumList.add(PlayerResponses.class); 29 | enumList.add(SecondaryGameStates.class); 30 | enumList.add(TeamColors.class); 31 | 32 | for(Class c: enumList){ 33 | Method row = c.getMethod("row"); 34 | Method header = c.getMethod("header"); 35 | StringBuilder sb = new StringBuilder(); 36 | sb.append("###"); 37 | sb.append(c.getSimpleName()); 38 | sb.append("\n"); 39 | sb.append(header.invoke(c.getEnumConstants()[0])); 40 | for(Object o : c.getEnumConstants()){ 41 | sb.append(row.invoke(o)); 42 | } 43 | sb.append("\n\n"); 44 | fw.append(sb.toString()); 45 | } 46 | 47 | fw.close(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/data/values/SecondaryGameStates.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * Created by rkessler on 2017-03-25. 5 | */ 6 | public enum SecondaryGameStates implements DocumentingMarkdown { 7 | 8 | UNKNOWN(255, "Unknown"), 9 | 10 | NORMAL(0, "Normal"), 11 | PENALTYSHOOT(1, "Penalty Shoot"), 12 | OVERTIME(2, "Overtime"), 13 | TIMEOUT(3, "Timeout"), 14 | DIRECT_FREEKICK(4, "Direct Free Kick"), 15 | INDIRECT_FREEKICK(5, "Indirect Free Kick"), 16 | 17 | PENALTYKICK(6, "Penalty Kick"), 18 | CORNER_KICK(7, "Corner Kick"), 19 | GOAL_KICK(8, "Goal Kick"), 20 | THROW_IN(9, "Throw-In"),; 21 | 22 | private byte byte_value; 23 | private String humanReadable; 24 | 25 | SecondaryGameStates(int byte_value, String humanReadable) { 26 | 27 | this.byte_value = (byte) byte_value; 28 | this.humanReadable = humanReadable; 29 | } 30 | 31 | public byte value() { 32 | return byte_value; 33 | } 34 | 35 | public static SecondaryGameStates fromValue(byte b) { 36 | for(SecondaryGameStates secGameState : SecondaryGameStates.values()){ 37 | if (secGameState.value() == b){ 38 | return secGameState; 39 | } 40 | } 41 | System.out.println("Warning: Could not resolve SecondaryGameState byte."); 42 | return UNKNOWN; 43 | } 44 | 45 | /** 46 | * @see controller.action.ui.GameInterruption 47 | * @return true if secondary game state is on of the 6 game interruptions 48 | */ 49 | public boolean isGameInterruption(){ 50 | switch (this) { 51 | case PENALTYKICK: 52 | case DIRECT_FREEKICK: 53 | case INDIRECT_FREEKICK: 54 | case CORNER_KICK: 55 | case GOAL_KICK: 56 | case THROW_IN: 57 | return true; 58 | } 59 | return false; 60 | } 61 | 62 | public String toString(){ 63 | return this.humanReadable; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/data/values/Side.java: -------------------------------------------------------------------------------- 1 | package data.values; 2 | 3 | /** 4 | * The sides indices for both teams as convenient typed Enum 5 | */ 6 | public enum Side { 7 | 8 | LEFT(0), 9 | RIGHT(1); 10 | 11 | private int side; 12 | 13 | Side(int side){ 14 | this.side = side; 15 | } 16 | 17 | public int value(){ 18 | return this.side; 19 | } 20 | 21 | public Side getOther(){ 22 | if (this == LEFT){ 23 | return RIGHT; 24 | } else { 25 | return LEFT; 26 | } 27 | } 28 | 29 | public static Side getFromInt(int side){ 30 | if (side == 0){ 31 | return LEFT; 32 | } else { 33 | return RIGHT; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/libgamectrl/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8) 2 | project(libgamectrl) 3 | 4 | find_package(qibuild) 5 | 6 | include_directories(../../include) 7 | 8 | set(_srcs 9 | GameCtrl.cpp 10 | UdpComm.h 11 | UdpComm.cpp) 12 | 13 | qi_create_lib(libgamectrl SHARED ${_srcs} SUBFOLDER naoqi) 14 | 15 | qi_use_lib(libgamectrl ALCOMMON BOOST) -------------------------------------------------------------------------------- /src/libgamectrl/README.txt: -------------------------------------------------------------------------------- 1 | To build the library from source, you can use the aldebaran's qibuild 2 | build framework: 3 | 4 | Create a toolchain with the cross compiler for your robot, e.g. cross-atom 5 | 6 | Configure the project with 7 | qibuild configure libgamectrl -c yourtoolchain 8 | 9 | Build the project with 10 | qibuild make libgamecrtl -c yourtoolchain --release 11 | 12 | Copy the library on the nao and add it to your autoload.ini file. -------------------------------------------------------------------------------- /src/libgamectrl/UdpComm.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @file UdpComm.h 3 | * Declares a wrapper for a UDP socket. 4 | * @author Armin Burchardt 5 | */ 6 | 7 | #pragma once 8 | 9 | struct sockaddr; 10 | struct sockaddr_in; 11 | 12 | /** 13 | * @class UdpComm 14 | */ 15 | class UdpComm 16 | { 17 | public: 18 | /** 19 | * Constructor. 20 | */ 21 | UdpComm(); 22 | 23 | /** 24 | * Destructor. 25 | */ 26 | ~UdpComm(); 27 | 28 | /** 29 | * Set default target address. 30 | * @param ip The ip address of the host system. 31 | * @param port The port used for the connection. 32 | * \return Does a connection exist? 33 | */ 34 | bool setTarget(const char* ip, int port); 35 | 36 | /** 37 | * Set broadcast mode. 38 | */ 39 | bool setBroadcast(bool enable); 40 | 41 | /** 42 | * Sets blocking mode. 43 | */ 44 | bool setBlocking(bool block); 45 | 46 | /** 47 | * Set Loopback (receive own multicast packets). Default: enabled. 48 | */ 49 | bool setLoopback(bool); 50 | 51 | /** 52 | * bind to IN_ADDR_ANY to receive packets 53 | */ 54 | bool bind(const char* addr, int port); 55 | 56 | /** 57 | * The function tries to read a package from a socket. 58 | * @return Number of bytes received or -1 in case of an error. 59 | */ 60 | int read(char* data, int len); 61 | 62 | /** 63 | * The function tries to read a package from a socket and report the address of the sender. 64 | * @return Number of bytes received or -1 in case of an error. 65 | */ 66 | int read(char* data, int len, sockaddr_in& from); 67 | 68 | /** 69 | * The function writes a package to a socket. 70 | * @return True if the package was written. 71 | */ 72 | bool write(const char* data, const int len); 73 | 74 | /** 75 | * Determines the address that will broadcast to the wifi adapter. 76 | * @return The wifi broadcast address. 77 | */ 78 | static const char* getWifiBroadcastAddress(); 79 | 80 | private: 81 | struct sockaddr* target; 82 | int sock; 83 | bool resolve(const char*, int, struct sockaddr_in*); 84 | }; 85 | -------------------------------------------------------------------------------- /src/libgamectrl/qiproject.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/teamcomm/data/AdvancedMessage.java: -------------------------------------------------------------------------------- 1 | package teamcomm.data; 2 | 3 | import data.spl.SPLStandardMessage; 4 | 5 | /** 6 | * Abstract base class for plugin-based extensions to the SPLStandardMessage. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public abstract class AdvancedMessage extends SPLStandardMessage { 11 | 12 | private static final long serialVersionUID = 5893551586737053344L; 13 | 14 | /** 15 | * Returns an array of strings containing info from the message which should 16 | * be displayed in the detail window of the sending robots. Each string is 17 | * displayed in a single line. 18 | * 19 | * @return array 20 | */ 21 | public abstract String[] display(); 22 | 23 | /** 24 | * Initializes the message. This method is called once after receiving the 25 | * message and can be used to parse the contents of the custom data array 26 | * into fields. 27 | */ 28 | public abstract void init(); 29 | } 30 | -------------------------------------------------------------------------------- /src/teamcomm/data/event/RobotStateEvent.java: -------------------------------------------------------------------------------- 1 | package teamcomm.data.event; 2 | 3 | import java.util.EventObject; 4 | 5 | /** 6 | * Class for events being sent when the state of a robot changes. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public class RobotStateEvent extends EventObject { 11 | 12 | private static final long serialVersionUID = 5732929692893474554L; 13 | 14 | /** 15 | * Constructor. 16 | * 17 | * @param source the source of this event 18 | */ 19 | public RobotStateEvent(Object source) { 20 | super(source); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/teamcomm/data/event/RobotStateEventListener.java: -------------------------------------------------------------------------------- 1 | package teamcomm.data.event; 2 | 3 | import java.util.EventListener; 4 | 5 | /** 6 | * Interface for listeners for events being sent when the state of a robot 7 | * changes. 8 | * 9 | * @author Felix Thielke 10 | */ 11 | public interface RobotStateEventListener extends EventListener { 12 | 13 | /** 14 | * Called when the state of the robot which sent this event changes. 15 | * 16 | * @param e event 17 | */ 18 | public void robotStateChanged(RobotStateEvent e); 19 | 20 | /** 21 | * Called when the state of the robot which sent this event changes. 22 | * 23 | * @param e event 24 | */ 25 | public void connectionStatusChanged(RobotStateEvent e); 26 | } 27 | -------------------------------------------------------------------------------- /src/teamcomm/data/event/TeamEvent.java: -------------------------------------------------------------------------------- 1 | package teamcomm.data.event; 2 | 3 | import java.util.Collection; 4 | import java.util.EventObject; 5 | import teamcomm.data.GameState; 6 | import teamcomm.data.RobotState; 7 | 8 | /** 9 | * Class for events being sent when the state of a team changes. 10 | * 11 | * @author Felix Thielke 12 | */ 13 | public class TeamEvent extends EventObject { 14 | 15 | private static final long serialVersionUID = 6644539300556793797L; 16 | 17 | /** 18 | * Side the team is playing on. 19 | * 20 | * @see GameState#TEAM_LEFT 21 | * @see GameState#TEAM_RIGHT 22 | */ 23 | public final int side; 24 | 25 | /** 26 | * Number of the team. 27 | */ 28 | public final int teamNumber; 29 | 30 | /** 31 | * Robots belonging to the team in the order of their player numbers. 32 | */ 33 | public final Collection players; 34 | 35 | /** 36 | * Constructor. 37 | * 38 | * @param source source of this event 39 | * @param side side the team is playing on 40 | * @param teamNumber number of the team 41 | * @param players robots belonging to the team in the order of their player 42 | * numbers 43 | */ 44 | public TeamEvent(final Object source, final int side, final int teamNumber, final Collection players) { 45 | super(source); 46 | 47 | this.side = side; 48 | this.teamNumber = teamNumber; 49 | this.players = players; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/teamcomm/data/event/TeamEventListener.java: -------------------------------------------------------------------------------- 1 | package teamcomm.data.event; 2 | 3 | import java.util.EventListener; 4 | 5 | /** 6 | * Interface for listeners for events being sent when the state of a team 7 | * changes. 8 | * 9 | * @author Felix Thielke 10 | */ 11 | public interface TeamEventListener extends EventListener { 12 | 13 | /** 14 | * Called when the state of a team changes. 15 | * 16 | * @param e event 17 | */ 18 | public void teamChanged(TeamEvent e); 19 | } 20 | -------------------------------------------------------------------------------- /src/teamcomm/gui/drawings/PerPlayer.java: -------------------------------------------------------------------------------- 1 | package teamcomm.gui.drawings; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import teamcomm.data.RobotState; 5 | import teamcomm.gui.Camera; 6 | 7 | /** 8 | * Abstract base class for drawings that are drawn for each robot individually. 9 | * 10 | * @author Felix Thielke 11 | */ 12 | public abstract class PerPlayer extends Drawing { 13 | 14 | /** 15 | * Draws this drawing. 16 | * 17 | * @param gl OpenGL context 18 | * @param player robot state of the robot for which this drawing is drawn 19 | * @param camera the camera of the scene 20 | */ 21 | public abstract void draw(final GL2 gl, final RobotState player, final Camera camera); 22 | } 23 | -------------------------------------------------------------------------------- /src/teamcomm/gui/drawings/Static.java: -------------------------------------------------------------------------------- 1 | package teamcomm.gui.drawings; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import teamcomm.gui.Camera; 5 | 6 | /** 7 | * Abstract base class for drawings that are drawn once. 8 | * 9 | * @author Felix Thielke 10 | */ 11 | public abstract class Static extends Drawing { 12 | 13 | /** 14 | * Draws this drawing. 15 | * 16 | * @param gl OpenGL context 17 | * @param camera the camera of the scene 18 | */ 19 | public abstract void draw(final GL2 gl, final Camera camera); 20 | } 21 | -------------------------------------------------------------------------------- /src/teamcomm/gui/drawings/common/Field.java: -------------------------------------------------------------------------------- 1 | package teamcomm.gui.drawings.common; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import teamcomm.gui.Camera; 5 | import teamcomm.gui.drawings.RoSi2Loader; 6 | import teamcomm.gui.drawings.Static; 7 | 8 | /** 9 | * Drawing for the field. 10 | * 11 | * @author Felix Thielke 12 | */ 13 | public class Field extends Static { 14 | 15 | @Override 16 | protected void init(GL2 gl) { 17 | RoSi2Loader.getInstance().cacheModels(gl, new String[]{"field"}); 18 | } 19 | 20 | @Override 21 | public void draw(final GL2 gl, final Camera camera) { 22 | gl.glDepthFunc(GL2.GL_LESS); 23 | gl.glCallList(RoSi2Loader.getInstance().loadModel(gl, "field")); 24 | gl.glDepthFunc(GL2.GL_LEQUAL); 25 | } 26 | 27 | @Override 28 | public boolean hasAlpha() { 29 | return true; 30 | } 31 | 32 | @Override 33 | public int getPriority() { 34 | return 1000; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/teamcomm/gui/drawings/common/FieldSmall.java: -------------------------------------------------------------------------------- 1 | package teamcomm.gui.drawings.common; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import teamcomm.gui.Camera; 5 | import teamcomm.gui.drawings.RoSi2Loader; 6 | import teamcomm.gui.drawings.Static; 7 | 8 | /** 9 | * Drawing for the field. 10 | * 11 | * @author Felix Thielke 12 | */ 13 | public class FieldSmall extends Static { 14 | 15 | @Override 16 | protected void init(GL2 gl) { 17 | RoSi2Loader.getInstance().cacheModels(gl, new String[]{"fieldSmall"}); 18 | setActive(false); 19 | } 20 | 21 | @Override 22 | public void draw(final GL2 gl, final Camera camera) { 23 | gl.glDepthFunc(GL2.GL_LESS); 24 | gl.glCallList(RoSi2Loader.getInstance().loadModel(gl, "fieldSmall")); 25 | gl.glDepthFunc(GL2.GL_LEQUAL); 26 | } 27 | 28 | @Override 29 | public boolean hasAlpha() { 30 | return true; 31 | } 32 | 33 | @Override 34 | public int getPriority() { 35 | return 1000; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/teamcomm/gui/drawings/common/PlayerNumber.java: -------------------------------------------------------------------------------- 1 | package teamcomm.gui.drawings.common; 2 | 3 | import com.jogamp.opengl.GL2; 4 | import data.spl.SPLStandardMessage; 5 | import data.values.Penalties; 6 | import teamcomm.data.RobotState; 7 | import teamcomm.gui.Camera; 8 | import teamcomm.gui.drawings.PerPlayer; 9 | import teamcomm.gui.drawings.Text; 10 | 11 | /** 12 | * Drawing for the player number of a robot. 13 | * 14 | * @author Felix Thielke 15 | */ 16 | public class PlayerNumber extends PerPlayer { 17 | 18 | @Override 19 | public void draw(final GL2 gl, final RobotState player, final Camera camera) { 20 | final SPLStandardMessage msg = player.getLastMessage(); 21 | if (msg != null && msg.playerNumValid && msg.poseValid) { 22 | gl.glPushMatrix(); 23 | 24 | if (player.getPenalty() != Penalties.NONE) { 25 | gl.glTranslatef(-msg.playerNum, -3.5f, 0.7f); 26 | } else { 27 | gl.glTranslatef(msg.pose[0] / 1000.f, msg.pose[1] / 1000.f, 0.7f); 28 | } 29 | 30 | camera.turnTowardsCamera(gl); 31 | Text.drawText("" + msg.playerNum, 0, 0, 0.25f); 32 | 33 | gl.glPopMatrix(); 34 | } 35 | } 36 | 37 | @Override 38 | public boolean hasAlpha() { 39 | return true; 40 | } 41 | 42 | @Override 43 | public int getPriority() { 44 | return 10; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/teamcomm/net/SPLStandardMessagePackage.java: -------------------------------------------------------------------------------- 1 | package teamcomm.net; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Class for a message. Instances of this class are stored in the log files. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public class SPLStandardMessagePackage implements Serializable { 11 | 12 | private static final long serialVersionUID = 758311663011901849L; 13 | 14 | /** 15 | * Host address from which this message was received. 16 | */ 17 | public final String host; 18 | 19 | /** 20 | * Number of the team to which the port belongs on which this message was 21 | * received. 22 | */ 23 | public final int team; 24 | 25 | /** 26 | * Raw message data. 27 | */ 28 | public final byte[] message; 29 | 30 | /** 31 | * Constructor. 32 | * 33 | * @param host host address from which this message was received 34 | * @param team number of the team to which the port belongs on which this 35 | * message was received 36 | * @param message raw message data 37 | */ 38 | public SPLStandardMessagePackage(final String host, final int team, final byte[] message) { 39 | this.host = host; 40 | this.team = team; 41 | this.message = message; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/teamcomm/net/logging/LogReplayEvent.java: -------------------------------------------------------------------------------- 1 | package teamcomm.net.logging; 2 | 3 | import java.util.EventObject; 4 | 5 | /** 6 | * Class for events being sent when the LogReplayTask has updated its state. 7 | * 8 | * @author Felix Thielke 9 | */ 10 | public class LogReplayEvent extends EventObject { 11 | 12 | private static final long serialVersionUID = 8348108129211449571L; 13 | 14 | /** 15 | * Position of the replaying in milliseconds. 16 | */ 17 | public final long timePosition; 18 | 19 | /** 20 | * Whether the replayer is at the beginning of the log file. 21 | */ 22 | public final boolean atBeginning; 23 | 24 | /** 25 | * Whether the replayer is at the end of the log file. 26 | */ 27 | public final boolean atEnd; 28 | 29 | /** 30 | * The current speed of the replayer. 0 means that it is paused. 31 | */ 32 | public final float playbackSpeed; 33 | 34 | /** 35 | * Constructor. 36 | * 37 | * @param source source of this event 38 | * @param timePosition position of the replaying in milliseconds. 39 | * @param atBeginning whether the replayer is at the beginning of the log 40 | * file 41 | * @param atEnd whether the replayer is at the end of the log file 42 | * @param playbackSpeed the current speed of the replayer; 0 means that it 43 | * is paused 44 | */ 45 | public LogReplayEvent(final Object source, final long timePosition, final boolean atBeginning, final boolean atEnd, final float playbackSpeed) { 46 | super(source); 47 | this.timePosition = timePosition; 48 | this.atBeginning = atBeginning; 49 | this.atEnd = atEnd; 50 | this.playbackSpeed = playbackSpeed; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/teamcomm/net/logging/LogReplayEventListener.java: -------------------------------------------------------------------------------- 1 | package teamcomm.net.logging; 2 | 3 | import java.util.EventListener; 4 | 5 | /** 6 | * Interface for listeners for events being sent when the status of replaying a 7 | * log file changes. 8 | * 9 | * @author Felix Thielke 10 | */ 11 | public interface LogReplayEventListener extends EventListener { 12 | 13 | /** 14 | * Called when the status of replaying a log file changes. 15 | * 16 | * @param e event 17 | */ 18 | public void logReplayStatus(LogReplayEvent e); 19 | 20 | /** 21 | * Called when a log file was opened. 22 | */ 23 | public void logReplayStarted(); 24 | 25 | /** 26 | * Called when a log file was closed. 27 | */ 28 | public void logReplayEnded(); 29 | } 30 | -------------------------------------------------------------------------------- /test/TestGameControlData.java: -------------------------------------------------------------------------------- 1 | import data.states.AdvancedData; 2 | import data.values.SecondaryGameStates; 3 | import data.values.TeamColors; 4 | import org.junit.BeforeClass; 5 | import org.junit.Test; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | import static junit.framework.TestCase.assertEquals; 10 | import static junit.framework.TestCase.assertTrue; 11 | 12 | /** 13 | * Created by rkessler on 2017-03-24. 14 | */ 15 | public class TestGameControlData { 16 | 17 | @BeforeClass 18 | public static void setUp(){ 19 | System.setProperty("CONFIG_ROOT", "test_resources/"); 20 | } 21 | 22 | @Test 23 | public void test_secondary_game_state_send_correctly() { 24 | AdvancedData data = new AdvancedData(); 25 | 26 | data.secGameState = SecondaryGameStates.DIRECT_FREEKICK; 27 | data.dropInTeam = TeamColors.BLACK.value(); 28 | 29 | ByteBuffer byteBuffer = data.toByteArray(); 30 | byteBuffer.position(0); 31 | 32 | AdvancedData new_data = new AdvancedData(); 33 | 34 | boolean done = new_data.fromByteArray(byteBuffer); 35 | 36 | assertTrue("could not parse stuff", done); 37 | assertEquals(data.secGameState, new_data.secGameState); 38 | assertEquals(data.dropInTeam, new_data.dropInTeam); 39 | } 40 | 41 | 42 | } 43 | -------------------------------------------------------------------------------- /test/TestPrepTeam.java: -------------------------------------------------------------------------------- 1 | import data.communication.GameControlData; 2 | import data.states.GamePreparationData; 3 | import data.states.PrepTeam; 4 | import data.teams.TeamLoadInfo; 5 | import org.junit.BeforeClass; 6 | import org.junit.Test; 7 | 8 | import java.util.ArrayList; 9 | 10 | import static junit.framework.TestCase.assertEquals; 11 | 12 | /** 13 | * Created by rkessler on 2017-02-11. 14 | */ 15 | public class TestPrepTeam { 16 | 17 | @BeforeClass 18 | public static void setUp(){ 19 | System.setProperty("CONFIG_ROOT", "test_resources/"); 20 | } 21 | 22 | @Test 23 | public void test_prep_team_cycle() { 24 | GamePreparationData gpd = new GamePreparationData(); 25 | 26 | TeamLoadInfo tli = gpd.getAvailableTeams().get(1); 27 | PrepTeam prepteam = new PrepTeam(tli); 28 | 29 | assertEquals(tli.colors[0], "white"); 30 | assertEquals(tli.colors[1], "orange"); 31 | assertEquals(prepteam.getTeamColor(), "white"); 32 | 33 | prepteam.cycleColours(); 34 | assertEquals(prepteam.getTeamColor(), "orange"); 35 | 36 | prepteam.cycleColours(); 37 | assertEquals(prepteam.getTeamColor(), "red"); 38 | 39 | 40 | prepteam.cycleColours(); 41 | assertEquals(prepteam.getTeamColor(), "white"); 42 | } 43 | } -------------------------------------------------------------------------------- /test/TestRules.java: -------------------------------------------------------------------------------- 1 | import data.Rules; 2 | import data.hl.HL; 3 | import org.junit.BeforeClass; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.assertTrue; 7 | 8 | public class TestRules { 9 | 10 | @BeforeClass 11 | public static void setUp(){ 12 | System.setProperty("CONFIG_ROOT", "test_resources/"); 13 | } 14 | 15 | @Test 16 | public void test_rules_are_equal_with_casting() { 17 | Rules spl_rules1 = new HL(); 18 | Rules spl_rules2 = new HL(); 19 | 20 | assertTrue(spl_rules1.equals(spl_rules2)); 21 | assertTrue(spl_rules2.equals(spl_rules1)); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /test/TestSecondaryState.java: -------------------------------------------------------------------------------- 1 | import data.states.SecondaryStateInfo; 2 | import org.junit.BeforeClass; 3 | import org.junit.Test; 4 | 5 | 6 | import static junit.framework.TestCase.assertEquals; 7 | 8 | /** 9 | * Created by rkessler on 2017-03-24. 10 | */ 11 | public class TestSecondaryState { 12 | @BeforeClass 13 | public static void setUp(){ 14 | System.setProperty("CONFIG_ROOT", "test_resources/"); 15 | } 16 | 17 | @Test 18 | public void test_secondary_state_buffer_works() { 19 | SecondaryStateInfo secState = new SecondaryStateInfo(); 20 | secState.setFreeKickData((byte) 14, (byte) 1); 21 | 22 | byte[] result = secState.toByteArray(); 23 | assertEquals(14, result[0]); 24 | assertEquals(1, result[1]); 25 | assertEquals(0, result[2]); 26 | assertEquals(0, result[3]); 27 | 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /test/TestTeamLoader.java: -------------------------------------------------------------------------------- 1 | import data.hl.HL; 2 | import data.hl.HLTeen; 3 | import data.teams.TeamLoadInfo; 4 | import data.teams.TeamsLoader; 5 | import org.junit.BeforeClass; 6 | import org.junit.Test; 7 | 8 | import java.util.ArrayList; 9 | 10 | import static org.junit.Assert.assertEquals; 11 | import static org.junit.Assert.assertTrue; 12 | 13 | /** 14 | * Created by rkessler on 2017-02-11. 15 | */ 16 | public class TestTeamLoader { 17 | 18 | public TestTeamLoader(){} 19 | 20 | @BeforeClass 21 | public static void setUp(){ 22 | System.setProperty("CONFIG_ROOT", "test_resources/"); 23 | } 24 | 25 | 26 | @Test 27 | public void test_hl_kid_loads_correct_size() { 28 | TeamsLoader tl = TeamsLoader.getInstance(); 29 | 30 | HL hl_rules = new HL(); 31 | 32 | ArrayList names = tl.getNames(hl_rules.leagueName, true); 33 | 34 | assertEquals(9, names.size()); 35 | } 36 | 37 | @Test 38 | public void test_hl_teen_image_is_loaded() { 39 | TeamsLoader tl = TeamsLoader.getInstance(); 40 | 41 | HLTeen hl_rules = new HLTeen(); 42 | 43 | ArrayList names = tl.getNames(hl_rules.leagueName, true); 44 | assertEquals(1, names.size()); 45 | 46 | ArrayList tli_array = tl.getTeamLoadInfoList(hl_rules.leagueName); 47 | 48 | TeamLoadInfo tli = tli_array.get(0); 49 | 50 | assertEquals(tli.name, "NimbRo TeenSize"); 51 | assertEquals(tli.identifier, 33); 52 | assertEquals(tli.colors.length, 0); 53 | assertTrue(tli.icon != null); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /test/ui/components/TestTeamComponent.java: -------------------------------------------------------------------------------- 1 | package ui.components; 2 | 3 | import controller.action.ActionBoard; 4 | import controller.ui.ui.components.TeamComponent; 5 | import data.values.Side; 6 | import org.junit.BeforeClass; 7 | import org.junit.Test; 8 | 9 | import javax.swing.*; 10 | 11 | /** 12 | * Created by rkessler on 2017-04-25. 13 | */ 14 | public class TestTeamComponent { 15 | 16 | @BeforeClass 17 | public static void setUp(){ 18 | System.setProperty("CONFIG_ROOT", "test_resources/"); 19 | } 20 | 21 | @Test 22 | public void testTeamComponent(){ 23 | ActionBoard.init(); // TODO - get rid of this stupid static thing 24 | 25 | TeamComponent tc = new TeamComponent(Side.LEFT, new ButtonGroup()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /test_resources/config/hl_adult/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_adult/background.jpg -------------------------------------------------------------------------------- /test_resources/config/hl_adult/teams.cfg: -------------------------------------------------------------------------------- 1 | 14=A new team -------------------------------------------------------------------------------- /test_resources/config/hl_dropin/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_dropin/100.png -------------------------------------------------------------------------------- /test_resources/config/hl_dropin/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_dropin/101.png -------------------------------------------------------------------------------- /test_resources/config/hl_dropin/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_dropin/background.jpg -------------------------------------------------------------------------------- /test_resources/config/hl_dropin/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 100=Dropin Firestorm 3 | 101=Dropin Thunderstorm 4 | -------------------------------------------------------------------------------- /test_resources/config/hl_kid/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_kid/background.jpg -------------------------------------------------------------------------------- /test_resources/config/hl_kid/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 1=AUTMan 3 | 3=Bold Hearts 4 | 4=CIT Brains 5 | 8=Hamburg Bit-Bots 6 | 9=Hanuman-KMUTT 7 | 11=I-KID 8 | 13=MRL-HSL 9 | 15=Plymouth Humanoid 10 | -------------------------------------------------------------------------------- /test_resources/config/hl_teen/33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_teen/33.jpg -------------------------------------------------------------------------------- /test_resources/config/hl_teen/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/hl_teen/background.jpg -------------------------------------------------------------------------------- /test_resources/config/hl_teen/teams.cfg: -------------------------------------------------------------------------------- 1 | 33=NimbRo TeenSize 2 | -------------------------------------------------------------------------------- /test_resources/config/icons/field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/field.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_adult/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_adult/robot_left_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_adult/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_adult/robot_left_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_adult/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_adult/robot_right_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_adult/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_adult/robot_right_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_kid/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_kid/robot_left_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_kid/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_kid/robot_left_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_kid/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_kid/robot_right_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_kid/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_kid/robot_right_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_teen/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_teen/robot_left_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_teen/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_teen/robot_left_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_teen/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_teen/robot_right_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/hl_teen/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/hl_teen/robot_right_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/pause.png -------------------------------------------------------------------------------- /test_resources/config/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/play.png -------------------------------------------------------------------------------- /test_resources/config/icons/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/plus.png -------------------------------------------------------------------------------- /test_resources/config/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/reset.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_black.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_brown.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_gray.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_green.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_orange.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_purple.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_white.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_left_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_left_yellow.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_black.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_brown.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_gray.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_green.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_orange.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_purple.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_white.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl/robot_right_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl/robot_right_yellow.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl_dropin/robot_left_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl_dropin/robot_left_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl_dropin/robot_left_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl_dropin/robot_left_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl_dropin/robot_right_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl_dropin/robot_right_blue.png -------------------------------------------------------------------------------- /test_resources/config/icons/spl_dropin/robot_right_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/spl_dropin/robot_right_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/time_ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/time_ground.png -------------------------------------------------------------------------------- /test_resources/config/icons/time_ground_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/time_ground_small.png -------------------------------------------------------------------------------- /test_resources/config/icons/timeline_ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/timeline_ground.png -------------------------------------------------------------------------------- /test_resources/config/icons/wlan_status_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/wlan_status_green.png -------------------------------------------------------------------------------- /test_resources/config/icons/wlan_status_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/wlan_status_grey.png -------------------------------------------------------------------------------- /test_resources/config/icons/wlan_status_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/wlan_status_red.png -------------------------------------------------------------------------------- /test_resources/config/icons/wlan_status_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/icons/wlan_status_yellow.png -------------------------------------------------------------------------------- /test_resources/config/spl/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl/1.png -------------------------------------------------------------------------------- /test_resources/config/spl/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl/2.gif -------------------------------------------------------------------------------- /test_resources/config/spl/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl/3.gif -------------------------------------------------------------------------------- /test_resources/config/spl/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl/4.gif -------------------------------------------------------------------------------- /test_resources/config/spl/backgroundr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl/backgroundr.png -------------------------------------------------------------------------------- /test_resources/config/spl/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 1=UT Austin Villa,white,orange,red 3 | 2=Austrian Kangaroos 4 | 3=Bembelbots 5 | 4=Berlin United -------------------------------------------------------------------------------- /test_resources/config/spl_dropin/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl_dropin/98.png -------------------------------------------------------------------------------- /test_resources/config/spl_dropin/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl_dropin/99.png -------------------------------------------------------------------------------- /test_resources/config/spl_dropin/backgroundr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboCup-Humanoid-TC/GameController/084e630350603199f0e3995284911a7ed665e3e5/test_resources/config/spl_dropin/backgroundr.jpg -------------------------------------------------------------------------------- /test_resources/config/spl_dropin/teams.cfg: -------------------------------------------------------------------------------- 1 | 0=Invisibles 2 | 98=Team Blue,blue 3 | 99=Team Red,red --------------------------------------------------------------------------------