diff --git a/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd --- /dev/null +++ b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml @@ -0,0 +1,11 @@ +<component name="libraryTable"> + <library name="Gradle: org.javatuples:javatuples:1.2"> + <CLASSES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" /> + </SOURCES> + </library> +</component> \ No newline at end of file diff --git a/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png b/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png deleted file mode 100644 index 1ca27217d50e555b3321669e4b4c4683531a2169..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png b/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png deleted file mode 100644 index 9565b7e1d24fe7ed4666877ce00a633dcb0a9a5d..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png b/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png deleted file mode 100644 index e346f36f1a5e5b8f0183202fcdd3ce07fdc366a1..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png b/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png deleted file mode 100644 index e7e771da1d050111122f518823011d5427a059f0..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png b/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png deleted file mode 100644 index f075d043a70c30385b633408cdb5f3777517ed13..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png b/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png deleted file mode 100644 index 8e37fffc61560ecb1302a5fbccf0ec0e82511a24..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png b/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png deleted file mode 100644 index d2167f7b345a5c5493fc9a44c3e4571d6656a9d4..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png b/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png deleted file mode 100644 index 986a7ddd76c32d0c875e8c5d1ec1ff3d5ab8b280..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/Ball.png b/CheckersClient/android/assets/Game/1x/Ball.png deleted file mode 100644 index 6980c6dceb5ff3feae4d25eb0eb0717e35d2fcbc..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/Ball.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/BlackHole/1x/BlackHole@1x.png b/CheckersClient/android/assets/Game/1x/BlackHole@1x.png similarity index 100% rename from CheckersClient/android/assets/Game/BlackHole/1x/BlackHole@1x.png rename to CheckersClient/android/assets/Game/1x/BlackHole@1x.png diff --git a/CheckersClient/android/assets/Game/1x/Border.png b/CheckersClient/android/assets/Game/1x/Border.png deleted file mode 100644 index f66fa26dfc631967b05a5aaf7ce0919e4da235b1..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/Border.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/Computer.png b/CheckersClient/android/assets/Game/1x/Computer.png deleted file mode 100644 index 49270c90a1fea6cbfcf0022cf0b7e6ca05a93de7..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/Computer.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/ExerciseText.png b/CheckersClient/android/assets/Game/1x/ExerciseText.png deleted file mode 100644 index ccb042cbe5fa9801a269b864e901798f938c177a..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/ExerciseText.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/GameBoard/1x/GameBoard@1x.png b/CheckersClient/android/assets/Game/1x/GameBoard@1x.png similarity index 100% rename from CheckersClient/android/assets/Game/GameBoard/1x/GameBoard@1x.png rename to CheckersClient/android/assets/Game/1x/GameBoard@1x.png diff --git a/CheckersClient/android/assets/Game/1x/PlayBackground.png b/CheckersClient/android/assets/Game/1x/PlayBackground.png deleted file mode 100644 index 986a7ddd76c32d0c875e8c5d1ec1ff3d5ab8b280..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/PlayBackground.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/Player.png b/CheckersClient/android/assets/Game/1x/Player.png deleted file mode 100644 index 82540f810272d4968d2eba146f10ec190e59f640..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/Player.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/ScoreComputer.png b/CheckersClient/android/assets/Game/1x/ScoreComputer.png deleted file mode 100644 index e6a196aeeca41626c8e7aeb7117ef1a31c9f9da0..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/ScoreComputer.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/1x/ScorePlayer.png b/CheckersClient/android/assets/Game/1x/ScorePlayer.png deleted file mode 100644 index 4601de2f50f359061bee3aaafe127bdf53ab6b00..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/1x/ScorePlayer.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/1x/StarPiece@1x.png b/CheckersClient/android/assets/Game/1x/StarPiece@1x.png similarity index 100% rename from CheckersClient/android/assets/Game/StarPiece/1x/StarPiece@1x.png rename to CheckersClient/android/assets/Game/1x/StarPiece@1x.png diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Base.png b/CheckersClient/android/assets/Game/1x/StarPiece_Base.png new file mode 100644 index 0000000000000000000000000000000000000000..040b12a9790d15be21adb537132c06f63a3a4b65 Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Base.png differ diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png new file mode 100644 index 0000000000000000000000000000000000000000..84d222841be9143734b0bdb9d77516bbbc213da1 Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png differ diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Head.png b/CheckersClient/android/assets/Game/1x/StarPiece_Head.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb6a8f8a6d3c467ec20bec63dd9ca355f9ed0ba Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Head.png differ diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png new file mode 100644 index 0000000000000000000000000000000000000000..d81726096c497cf7bedb126741a1b88e0e9034f3 Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png differ diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png b/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png new file mode 100644 index 0000000000000000000000000000000000000000..635019413438ffd84ea32e45ce1f2b73c3905356 Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png differ diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png new file mode 100644 index 0000000000000000000000000000000000000000..c35cef5814583fb3fceafb456fda001da13f9bf6 Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png differ diff --git a/CheckersClient/android/assets/Game/Audio/GameLoop.mp3 b/CheckersClient/android/assets/Game/Audio/GameLoop.mp3 deleted file mode 100644 index a212222cad7cfe2de6d5ef21cfaa4083839788f5..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/GameLoop.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/H1.mp3 b/CheckersClient/android/assets/Game/Audio/H1.mp3 deleted file mode 100644 index 77a4041c07d67fdace4225c570b472376ccaa224..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/H1.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/H2.mp3 b/CheckersClient/android/assets/Game/Audio/H2.mp3 deleted file mode 100644 index c38034eb34651569fc420ac68521c45f67c39d3f..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/H2.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/N1.mp3 b/CheckersClient/android/assets/Game/Audio/N1.mp3 deleted file mode 100644 index 8427315e93d6dbed6031cd54cb1c3c4c349de1cb..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/N1.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/N2.mp3 b/CheckersClient/android/assets/Game/Audio/N2.mp3 deleted file mode 100644 index 28052dda8a09f65d338cb5f26046a27c46b6957e..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/N2.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3 b/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3 deleted file mode 100644 index 9827b25e62f9ef322c54ace86fbfe5cdf1ec778b..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/V1.mp3 b/CheckersClient/android/assets/Game/Audio/V1.mp3 deleted file mode 100644 index 564fe09ae78d3402f1ce129fbdfc645a17800e17..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/V1.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/Audio/V2.mp3 b/CheckersClient/android/assets/Game/Audio/V2.mp3 deleted file mode 100644 index ae11f6368fccccafbae713be777dc367739c51cc..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/Audio/V2.mp3 and /dev/null differ diff --git a/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png b/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png deleted file mode 100644 index 7cd6e4ab015107b072e4438ca92fff62c921e5ea..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png b/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png deleted file mode 100644 index 53eef5505b55ff44a67fa6f5e71f69cef01986a3..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg b/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg deleted file mode 100644 index bd1633bc59a83077c2f303955abfafc280cfab02..0000000000000000000000000000000000000000 --- a/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 41 45"><defs><style>.cls-1,.cls-3{fill:none;}.cls-1,.cls-2{stroke:#000;}.cls-1,.cls-2,.cls-3{stroke-miterlimit:10;}.cls-2,.cls-3{stroke-width:5px;}.cls-3{stroke:#662d91;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><ellipse class="cls-1" cx="20.79" cy="28.55" rx="19.71" ry="15.95"/><ellipse class="cls-2" cx="20.03" cy="23.05" rx="12.66" ry="10.55"/><ellipse class="cls-3" cx="20.5" cy="26.5" rx="18" ry="15"/><ellipse class="cls-3" cx="20.5" cy="22.5" rx="18" ry="15"/><ellipse class="cls-3" cx="20.5" cy="17.5" rx="18" ry="15"/></g></g></svg> \ No newline at end of file diff --git a/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png b/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png deleted file mode 100644 index 9fbd01556abab0aa79d11825672bcdc923ad9cae..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png b/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png deleted file mode 100644 index c5a5a0045491c4deeab09794c64af970d2793756..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png deleted file mode 100644 index d4841d8448831e9730ed89c032902bfdf089fafc..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png deleted file mode 100644 index b8c57693f2d422ca01ea0865bd5c7063aef35fb3..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png deleted file mode 100644 index 7afdc3391f41dc9b828a16d65ffe477f612468df..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png deleted file mode 100644 index bd4b7bd12727b40503a99906547c689c8d2b2593..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png deleted file mode 100644 index df92d2c3259e233255aaaf8d17998b79e8a11d67..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png deleted file mode 100644 index 04e65a962cefe0d8c84a2a5238be3addb098c112..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png deleted file mode 100644 index 9628f30bf8ed2309c9b5658e7b125c191e46fbbe..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png deleted file mode 100644 index 1a62f7926d201117432622b83d563cc94c4413da..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png deleted file mode 100644 index 17f10f27e289260890dcf077601ba2b8436adb1f..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png deleted file mode 100644 index 8312d9b428f5cd583916db4c8dd7c33bd298c730..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png deleted file mode 100644 index 8d08f0d2dcc8b6e86b843554e1f2a84b586a3ae1..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png deleted file mode 100644 index afd75800fa06af0a42ad1abb829fbf0ba92ae0c8..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png deleted file mode 100644 index f5f8042fed1ecbdc5f191b3b3f769016c5cf50e7..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png deleted file mode 100644 index 6aea68228d83ce5729705bc41134e1862403177e..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png and /dev/null differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarBackground.png b/CheckersClient/android/assets/Loading/LoadingBarBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..5128e41cf63ae4f7d2432993ccb11f4dd96e34c6 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBackground.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarBorder.png b/CheckersClient/android/assets/Loading/LoadingBarBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..7da6d2851e8b4b11e3026df1417c1cedcf1c1fa2 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBorder.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarFill.png b/CheckersClient/android/assets/Loading/LoadingBarFill.png new file mode 100644 index 0000000000000000000000000000000000000000..a62a4be48ca8fdf71b70ea42ce2452a942628dfb Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarFill.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingDot.png b/CheckersClient/android/assets/Loading/LoadingDot.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0eb9fe132cdef62f6acd96ae08b1fd619b249 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingDot.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingText.png b/CheckersClient/android/assets/Loading/LoadingText.png new file mode 100644 index 0000000000000000000000000000000000000000..3327f9ee7a66412f3e2e14badba2284ec74fa6c9 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingText.png differ diff --git a/CheckersClient/android/assets/Menu/1x/ConnectionBar.png b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png new file mode 100644 index 0000000000000000000000000000000000000000..99923e288792146810e0f085778c452d813bd8af Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png differ diff --git a/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..d87d4975b87432cc4b8c6ecea587ab8f0d231755 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png differ diff --git a/CheckersClient/android/assets/Menu/1x/Lobby.png b/CheckersClient/android/assets/Menu/1x/Lobby.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b932205022ad0d0d5bb1003f3ddded80637d0c Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/Lobby.png differ diff --git a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png index e32bb0211c00fcdb8162545271b661e85ea02467..801e3b7e3db2427537eb4beab9860b2a712bb35c 100644 Binary files a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png index 7087a58412cbdd8363f7793659ac6be421ca5b40..49e98d44d7b293830464bf523b6cab7646435b44 100644 Binary files a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png index 795f9abecd1f2d70eb99328dc3436b8fc89c54aa..fa2fd0625e2059a7110678fbd4975f68f2c3d20b 100644 Binary files a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png and b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MrServer.png b/CheckersClient/android/assets/Menu/1x/MrServer.png new file mode 100644 index 0000000000000000000000000000000000000000..57a4adbfc58c73e2f9c79879a15cb558d363ffda Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServer.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png new file mode 100644 index 0000000000000000000000000000000000000000..2c701128ef243ac63f3c2a5121536abbd6af5e02 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..98b8772403f067b3902e460ac5406a16de5bad15 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png differ diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReady.png b/CheckersClient/android/assets/Menu/1x/PlayerReady.png new file mode 100644 index 0000000000000000000000000000000000000000..4cba8dc27d25bb4393a58b1f401141977f44b434 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReady.png differ diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png new file mode 100644 index 0000000000000000000000000000000000000000..7b34127c2981fd699b19bfc0c757400edbf0904f Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png differ diff --git a/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..ee77e4b35c5408d48caf1e5bbe9b763adc1f5785 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png differ diff --git a/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png b/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e9d27e2379eeedbcfd0e27531e7c4aeefc9514 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png differ diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3ed55d3f843c6c381317e59784ec31c7dd7371 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png differ diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..1459cd41e87948848498cd6e7bfbb8e327b50de5 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png differ diff --git a/CheckersClient/android/assets/Menu/1x/flipButton.png b/CheckersClient/android/assets/Menu/1x/flipButton.png new file mode 100644 index 0000000000000000000000000000000000000000..11d2f62806263409f481bd6474f278d85c2f42a0 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/flipButton.png differ diff --git a/CheckersClient/android/assets/Menu/Click11.wav.asd b/CheckersClient/android/assets/Menu/Click11.wav.asd new file mode 100644 index 0000000000000000000000000000000000000000..bf1f98b27e67a96ebba6a054e49ec6db5ba82a58 Binary files /dev/null and b/CheckersClient/android/assets/Menu/Click11.wav.asd differ diff --git a/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3 b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..704fec6dd367e3de9ed0785ec5a11f598201fd78 Binary files /dev/null and b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3 differ diff --git a/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd new file mode 100644 index 0000000000000000000000000000000000000000..107da36ee1ecf8194cf68d1a17ad7a71144ddc3e Binary files /dev/null and b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd differ diff --git a/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd new file mode 100644 index 0000000000000000000000000000000000000000..affd8edeb9392f173dcaa97bb57f733610c90e8f Binary files /dev/null and b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd differ diff --git a/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3 b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5b4c91bef411aeb95b82c4c4fa88898865a246f3 Binary files /dev/null and b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3 differ diff --git a/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd new file mode 100644 index 0000000000000000000000000000000000000000..5c7a5744db7e1e8c4f983a87d5c338072e558506 Binary files /dev/null and b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd differ diff --git a/CheckersClient/android/assets/Pause/PauseBackground.png b/CheckersClient/android/assets/Pause/PauseBackground.png deleted file mode 100644 index 197fa67442edb07b049d2b334b6c977541036aa0..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Pause/PauseBackground.png and /dev/null differ diff --git a/CheckersClient/android/assets/Pause/PauseButton.png b/CheckersClient/android/assets/Pause/PauseButton.png deleted file mode 100644 index 42c154ceb5125b00599c90e44e1b228d7e50cae5..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Pause/PauseButton.png and /dev/null differ diff --git a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json index 2eaad5f5e125bf3f1261282a500a514a3676e4c4..91c0c1d90fc85877454aedeae03b6ae812bc7830 100644 --- a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json +++ b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json @@ -111,7 +111,7 @@ com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: { background: list } plain: { - font: font + font: font-big fontColorSelected: white fontColorUnselected: dark-cyan selection: pale-blue @@ -183,7 +183,7 @@ com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: { } com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { default: { - font: font + font: font-big fontColor: black background: textfield cursor: black @@ -210,4 +210,4 @@ com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: { titleFontColor: black } } -} \ No newline at end of file +} diff --git a/CheckersClient/android/assets/characters/AsianGirl1.png b/CheckersClient/android/assets/characters/AsianGirl1.png new file mode 100644 index 0000000000000000000000000000000000000000..9207f25f0067db0cd8b0d9f7546a585682eeabfa Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl1.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirl2.png b/CheckersClient/android/assets/characters/AsianGirl2.png new file mode 100644 index 0000000000000000000000000000000000000000..f946f74ff365a73570e41a3686b2013cb84b9491 Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl2.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirl3.png b/CheckersClient/android/assets/characters/AsianGirl3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4d6415be2bbb29a9c896ef4f748703526f6ff3 Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl3.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirlPortrait.png b/CheckersClient/android/assets/characters/AsianGirlPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..f138ad58031933fb192c74abee8c81cf6acaf53d Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirlPortrait.png differ diff --git a/CheckersClient/android/assets/characters/Grandma1.png b/CheckersClient/android/assets/characters/Grandma1.png new file mode 100644 index 0000000000000000000000000000000000000000..8184f9e78b481da0907fba6e2262b65e6846add9 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma1.png differ diff --git a/CheckersClient/android/assets/characters/Grandma2.png b/CheckersClient/android/assets/characters/Grandma2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae0e623fe877a26cc74a1d02815eaae524cb61c9 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma2.png differ diff --git a/CheckersClient/android/assets/characters/Grandma3.png b/CheckersClient/android/assets/characters/Grandma3.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf9759a7045d1b5802cb6bb51902ed47e1cc8c6 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma3.png differ diff --git a/CheckersClient/android/assets/characters/GrandmaPortrait.png b/CheckersClient/android/assets/characters/GrandmaPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..eb923bf8eeb718e32bb962687e3ec5fbc0e88d39 Binary files /dev/null and b/CheckersClient/android/assets/characters/GrandmaPortrait.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy1.png b/CheckersClient/android/assets/characters/HighSchoolGuy1.png new file mode 100644 index 0000000000000000000000000000000000000000..f80b3dbbc2daa0dc8d5aac09e6e4c6fc976b524d Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy1.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy2.png b/CheckersClient/android/assets/characters/HighSchoolGuy2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad6e0646cf20dd067e1516caa6198dbebbac895 Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy2.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy3.png b/CheckersClient/android/assets/characters/HighSchoolGuy3.png new file mode 100644 index 0000000000000000000000000000000000000000..ead8ebdbc6a508b7489064390a122a3d7cc127f5 Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy3.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..a07477ed3ce86273e5ab690fddd337619a3ce5dc Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl1.png b/CheckersClient/android/assets/characters/HipsterGirl1.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd2a9579d3302499abe202e5e7b23aa0792db59 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl1.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl2.png b/CheckersClient/android/assets/characters/HipsterGirl2.png new file mode 100644 index 0000000000000000000000000000000000000000..888706fd549bc08ae191ddd112526381abc26b48 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl2.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl3.png b/CheckersClient/android/assets/characters/HipsterGirl3.png new file mode 100644 index 0000000000000000000000000000000000000000..14441d5e98ac5588a0576a9307a6b41b2f080ce1 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl3.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirlPortrait.png b/CheckersClient/android/assets/characters/HipsterGirlPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6062657c9589c5ccfdf0051d2f72993a368d30 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirlPortrait.png differ diff --git a/CheckersClient/android/assets/characters/MrServer1.png b/CheckersClient/android/assets/characters/MrServer1.png new file mode 100644 index 0000000000000000000000000000000000000000..bec3a1bdbf675a96e871066dac923858efd1873b Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer1.png differ diff --git a/CheckersClient/android/assets/characters/MrServer2.png b/CheckersClient/android/assets/characters/MrServer2.png new file mode 100644 index 0000000000000000000000000000000000000000..5aae4331a0e9f49bd27ea96a8d8ef00e817b8fc2 Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer2.png differ diff --git a/CheckersClient/android/assets/characters/MrServer3.png b/CheckersClient/android/assets/characters/MrServer3.png new file mode 100644 index 0000000000000000000000000000000000000000..ad404fa898550132e12db36a0b007e87deef00b1 Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer3.png differ diff --git a/CheckersClient/android/assets/characters/MrServerName.png b/CheckersClient/android/assets/characters/MrServerName.png new file mode 100644 index 0000000000000000000000000000000000000000..b0bb41a160668f668395ab603d57256779161db5 Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerName.png differ diff --git a/CheckersClient/android/assets/characters/MrServerPortrait.png b/CheckersClient/android/assets/characters/MrServerPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..c7dce48b35822d09931f827c601b143977109ae8 Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerPortrait.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy1.png b/CheckersClient/android/assets/characters/RegularGuy1.png new file mode 100644 index 0000000000000000000000000000000000000000..b736ba2e352862d74c4fed640a0444c1369e69e3 Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy1.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy2.png b/CheckersClient/android/assets/characters/RegularGuy2.png new file mode 100644 index 0000000000000000000000000000000000000000..f87dea69fd985da55a60493e5d24808520960bf4 Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy2.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy3.png b/CheckersClient/android/assets/characters/RegularGuy3.png new file mode 100644 index 0000000000000000000000000000000000000000..1f00a24030b5f9e6226e9b0e5f064e89bc89f27d Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy3.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuyPortrait.png b/CheckersClient/android/assets/characters/RegularGuyPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..81566ea5eb9977cd5b74c2ff69521e496e9cb0aa Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuyPortrait.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy1x.png b/CheckersClient/android/assets/characters/RocketGuy1x.png new file mode 100644 index 0000000000000000000000000000000000000000..53d5f2cb7c8ca10f1998ae568367b128b0e9ff00 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy1x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy2x.png b/CheckersClient/android/assets/characters/RocketGuy2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbd38171337784452613a1aafe8d5a64d67071b Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy2x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy3x.png b/CheckersClient/android/assets/characters/RocketGuy3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4606ea58abb7f0c5349e3b295b5cfaf9531ca056 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy3x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuyPortrait.png b/CheckersClient/android/assets/characters/RocketGuyPortrait.png new file mode 100644 index 0000000000000000000000000000000000000000..8ede5685a057250e49ba5708eab0d71d67f87424 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuyPortrait.png differ diff --git a/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas b/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas new file mode 100644 index 0000000000000000000000000000000000000000..debabc38439c4510fd41d931d5b955a72abdeb7e --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas @@ -0,0 +1,27 @@ + +AsianGirl.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +AsianGirl1 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +AsianGirl2 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +AsianGirl3 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/AsianGirl.png b/CheckersClient/android/assets/characters/atlases/AsianGirl.png new file mode 100644 index 0000000000000000000000000000000000000000..834312feba24f0fe6f6142fb1c7ecb2b2cdbd443 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/AsianGirl.png differ diff --git a/CheckersClient/android/assets/characters/atlases/Grandma.atlas b/CheckersClient/android/assets/characters/atlases/Grandma.atlas new file mode 100644 index 0000000000000000000000000000000000000000..1a084ad67529e47762553fd9e92ac58a66e5c004 --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/Grandma.atlas @@ -0,0 +1,27 @@ + +Grandma.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +Grandma1 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +Grandma2 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +Grandma3 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/Grandma.png b/CheckersClient/android/assets/characters/atlases/Grandma.png new file mode 100644 index 0000000000000000000000000000000000000000..342d2659e65061e3c0d9cf29f0b53b75da3c93f1 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/Grandma.png differ diff --git a/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas new file mode 100644 index 0000000000000000000000000000000000000000..cdc11ae7fde2968e0048587db8eec439405fdc27 --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas @@ -0,0 +1,27 @@ + +HighSchoolGuy.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +HighSchoolGuy1 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HighSchoolGuy2 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HighSchoolGuy3 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d83af4b5c71213da483f1f1bd6879c0e0d4bfa Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png differ diff --git a/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas b/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas new file mode 100644 index 0000000000000000000000000000000000000000..812d4b63b58a03ff0863bb88c67fffec14928fdc --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas @@ -0,0 +1,27 @@ + +HipsterGirl.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +HipsterGirl1 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HipsterGirl2 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HipsterGirl3 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/HipsterGirl.png b/CheckersClient/android/assets/characters/atlases/HipsterGirl.png new file mode 100644 index 0000000000000000000000000000000000000000..7e327a3d37d15eb057cabc3132022614a31090e4 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/HipsterGirl.png differ diff --git a/CheckersClient/android/assets/characters/atlases/MrServer.atlas b/CheckersClient/android/assets/characters/atlases/MrServer.atlas new file mode 100644 index 0000000000000000000000000000000000000000..22634838e5edd5776d625c3951e4cea3c0b6ac11 --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/MrServer.atlas @@ -0,0 +1,27 @@ + +MrServer.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +MrServer1 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +MrServer2 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +MrServer3 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/MrServer.png b/CheckersClient/android/assets/characters/atlases/MrServer.png new file mode 100644 index 0000000000000000000000000000000000000000..01b9caa2dd9000a6de9da33afe8c6333e7d7fdfc Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/MrServer.png differ diff --git a/CheckersClient/android/assets/characters/atlases/Portraits.atlas b/CheckersClient/android/assets/characters/atlases/Portraits.atlas new file mode 100644 index 0000000000000000000000000000000000000000..4fdafb10149606cb41a0547680022e1098e29e33 --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/Portraits.atlas @@ -0,0 +1,55 @@ + +Portraits.png +size: 4096, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +AsianGirlPortrait + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +GrandmaPortrait + rotate: false + xy: 1004, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HighSchoolGuyPortrait + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +HipsterGirlPortrait + rotate: false + xy: 3008, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +MrServerPortrait + rotate: false + xy: 2006, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RegularGuyPortrait + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RocketGuyPortrait + rotate: false + xy: 2006, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/Portraits.png b/CheckersClient/android/assets/characters/atlases/Portraits.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5cee4297be4a591288ec538df02d0bbf7d4236 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/Portraits.png differ diff --git a/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas b/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas new file mode 100644 index 0000000000000000000000000000000000000000..8f20f19e2bf494bd46187ba0626ed6dad60452ff --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas @@ -0,0 +1,27 @@ + +RegularGuy.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +RegularGuy1 + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RegularGuy2 + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RegularGuy3 + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/RegularGuy.png b/CheckersClient/android/assets/characters/atlases/RegularGuy.png new file mode 100644 index 0000000000000000000000000000000000000000..51663f9086c9cd73424b588861394414de9169a6 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/RegularGuy.png differ diff --git a/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas b/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas new file mode 100644 index 0000000000000000000000000000000000000000..5346f98324ad83171824f8a71b431a2db46526e2 --- /dev/null +++ b/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas @@ -0,0 +1,27 @@ + +RocketGuy.png +size: 2048, 2048 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +RocketGuy1x + rotate: false + xy: 2, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RocketGuy2x + rotate: false + xy: 2, 2 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 +RocketGuy3x + rotate: false + xy: 1004, 1004 + size: 1000, 1000 + orig: 1000, 1000 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/characters/atlases/RocketGuy.png b/CheckersClient/android/assets/characters/atlases/RocketGuy.png new file mode 100644 index 0000000000000000000000000000000000000000..180b8a67cd98d7307de04b23dc614302a0bc00c4 Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/RocketGuy.png differ diff --git a/CheckersClient/android/assets/cinematic/CinematicMusic.mp3 b/CheckersClient/android/assets/cinematic/CinematicMusic.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..704fec6dd367e3de9ed0785ec5a11f598201fd78 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/CinematicMusic.mp3 differ diff --git a/CheckersClient/android/assets/cinematic/Cloud1.png b/CheckersClient/android/assets/cinematic/Cloud1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb442086e41ac13f3d197451b242476abc628603 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud1.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud2.png b/CheckersClient/android/assets/cinematic/Cloud2.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d8f87a79786cf74944a9c239b4e3df44ad61fd Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud2.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud3.png b/CheckersClient/android/assets/cinematic/Cloud3.png new file mode 100644 index 0000000000000000000000000000000000000000..725e50e800545898e797867124e41a582aa74d66 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud3.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud4.png b/CheckersClient/android/assets/cinematic/Cloud4.png new file mode 100644 index 0000000000000000000000000000000000000000..44fa2cb62ce53ba0cbacd0880c2b8ff089f16c91 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud4.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud5.png b/CheckersClient/android/assets/cinematic/Cloud5.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df1e05b20bd497d3764050a53190f8838dcb02 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud5.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud6.png b/CheckersClient/android/assets/cinematic/Cloud6.png new file mode 100644 index 0000000000000000000000000000000000000000..cc424ea24795d11cd34f19e489e1232a19100aa6 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud6.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud7.png b/CheckersClient/android/assets/cinematic/Cloud7.png new file mode 100644 index 0000000000000000000000000000000000000000..e3db6a487c35fbf3887f431cc01c901d1ce08cc2 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud7.png differ diff --git a/CheckersClient/android/assets/cinematic/Cloud8.png b/CheckersClient/android/assets/cinematic/Cloud8.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d6563a67fa7a8b8188212fa1c9d07160340c7a Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud8.png differ diff --git a/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas b/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas new file mode 100644 index 0000000000000000000000000000000000000000..6e046584814de1c6217ef17b82aa8532b549d379 --- /dev/null +++ b/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas @@ -0,0 +1,62 @@ + +Cloud.png +size: 1024, 512 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +Cloud1 + rotate: false + xy: 2, 205 + size: 299, 280 + orig: 299, 280 + offset: 0, 0 + index: -1 +Cloud2 + rotate: false + xy: 303, 238 + size: 280, 247 + orig: 280, 247 + offset: 0, 0 + index: -1 +Cloud3 + rotate: false + xy: 2, 11 + size: 210, 192 + orig: 210, 192 + offset: 0, 0 + index: -1 +Cloud4 + rotate: false + xy: 727, 316 + size: 117, 169 + orig: 117, 169 + offset: 0, 0 + index: -1 +Cloud5 + rotate: false + xy: 585, 315 + size: 140, 170 + orig: 140, 170 + offset: 0, 0 + index: -1 +Cloud6 + rotate: false + xy: 846, 373 + size: 111, 112 + orig: 111, 112 + offset: 0, 0 + index: -1 +Cloud7 + rotate: false + xy: 214, 94 + size: 109, 109 + orig: 109, 109 + offset: 0, 0 + index: -1 +Cloud8 + rotate: false + xy: 214, 2 + size: 80, 90 + orig: 80, 90 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/cinematic/atlas/Cloud.png b/CheckersClient/android/assets/cinematic/atlas/Cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c1478599adc99e6c2d635dac8b4038deba2282e2 Binary files /dev/null and b/CheckersClient/android/assets/cinematic/atlas/Cloud.png differ diff --git a/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas b/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas new file mode 100644 index 0000000000000000000000000000000000000000..6648bd910a9a2617c548643a3d97c6f08ea4e1cd --- /dev/null +++ b/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas @@ -0,0 +1,27 @@ + +CountDown.png +size: 2048, 512 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none +CountDown1 + rotate: false + xy: 354, 2 + size: 350, 350 + orig: 350, 350 + offset: 0, 0 + index: -1 +CountDown2 + rotate: false + xy: 2, 2 + size: 350, 350 + orig: 350, 350 + offset: 0, 0 + index: -1 +CountDown3 + rotate: false + xy: 706, 2 + size: 350, 350 + orig: 350, 350 + offset: 0, 0 + index: -1 diff --git a/CheckersClient/android/assets/cinematic/atlas/CountDown.png b/CheckersClient/android/assets/cinematic/atlas/CountDown.png new file mode 100644 index 0000000000000000000000000000000000000000..fc91e7a03b368fda24e51f83dc032efa54c4147e Binary files /dev/null and b/CheckersClient/android/assets/cinematic/atlas/CountDown.png differ diff --git a/CheckersClient/build.gradle b/CheckersClient/build.gradle index 9d029760e9c300472e88cde54c412a341f3f91e4..dfc747b21022807316a09656376034b42935c0f6 100644 --- a/CheckersClient/build.gradle +++ b/CheckersClient/build.gradle @@ -13,8 +13,6 @@ buildscript { classpath 'com.android.tools.build:gradle:3.5.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" - - } } @@ -53,6 +51,7 @@ project(":desktop") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } @@ -79,6 +78,7 @@ project(":android") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } @@ -92,5 +92,6 @@ project(":core") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java index 147d4749d671d6bf641e5624b22e552c28acd5c8..872de7e1eaaa7e9133c1ce0baf95a41ae359a990 100644 --- a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java +++ b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java @@ -3,24 +3,36 @@ package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; +import com.mygdx.game.controllers.GameController; import com.mygdx.game.controllers.NetworkController; import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.DefaultBoard; import com.mygdx.game.model.Game; +import com.mygdx.game.model.GameMode; import com.mygdx.game.model.GameState; +import com.mygdx.game.model.gamemodes.rules.DefaultRules; +import com.mygdx.game.views.CinematicView; import com.mygdx.game.views.GameViewManager; -import com.mygdx.game.views.MenuLoadingView; +import com.mygdx.game.views.LoadingView; +import com.mygdx.game.views.PlayView; +import com.mygdx.game.views.enums.CharacterAssets; +import com.mygdx.game.views.enums.CinematicAssets; +import com.mygdx.game.views.enums.LobbyAssets; +import com.mygdx.game.views.enums.MenuAssets; import java.util.ArrayList; public class UniCheckersClient extends ApplicationAdapter { PlayerController playerController; + GameController gameController; private GameViewManager gvm; private SpriteBatch sb; @@ -35,17 +47,15 @@ public class UniCheckersClient extends ApplicationAdapter { @Override public void create () { - Gdx.gl.glClearColor(1, 1, 1, 1); - - + Gdx.gl.glClearColor(0, 0, 1, 1); viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); stage = new Stage(viewport); Gdx.input.setInputProcessor(stage); // Initialize Models.. - Game model = new Game(new GameState()); - System.out.println("Det gikk bra"); + // Temporary model with default board and rules + Game model = new Game(new GameState(new GameMode(new DefaultRules(), new DefaultBoard()))); // Initialize controllers.. NetworkController networkController = new NetworkController(); @@ -53,12 +63,16 @@ public class UniCheckersClient extends ApplicationAdapter { // Initialize Views.. sb = new SpriteBatch(); - assetManager = new AssetManager(); + assetManager = new AssetManager(new InternalFileHandleResolver()); skin = new Skin(Gdx.files.internal("UISkins/glassy/skin/glassy-ui.json")); gvm = new GameViewManager(); - gvm.push(new MenuLoadingView(gvm, playerController, assetManager, stage, skin)); + //gvm.push(new LoadingView(gvm, playerController, assetManager, stage, skin)); + //gvm.push(new CinematicView(gvm, playerController, assetManager, stage, skin)); + PlayView playView = new PlayView(gvm, playerController, assetManager, stage, skin, null); + gameController = new GameController(model, playView); + gvm.push(playView); } @Override @@ -66,8 +80,12 @@ public class UniCheckersClient extends ApplicationAdapter { Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); float dt = Gdx.graphics.getDeltaTime(); - gvm.update(dt); //updates view + gvm.handleInput(dt); + gvm.update(dt); gvm.render(dt); + + if(gvm.getStartFadeIn() && !gvm.getStartFadeOut()) gvm.fadeIn(dt); + else if(gvm.getStartFadeOut() && !gvm.getStartFadeIn()) gvm.fadeOut(dt); } } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java b/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java new file mode 100644 index 0000000000000000000000000000000000000000..5756b5486e508d333cbc3e5af5b469a45b65ef1c --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java @@ -0,0 +1,35 @@ +package com.mygdx.game.controllers; + +import com.badlogic.gdx.math.Vector3; +import com.mygdx.game.model.Game; +import com.mygdx.game.views.PlayView; + +import java.util.ArrayList; +import java.util.List; + +public class GameController { + + private Game model; + private PlayView view; + + public GameController(Game model, PlayView view) { + this.model = model; + this.view = view; + + List<List<Vector3>> startFieldCoordinates = this.model.getStartFieldCoordinates(); + + List<List<Float[]>> startFieldCoordinatesPixel = new ArrayList<>(); + + for (List<Vector3> coordinateSet : startFieldCoordinates) { + List<Float[]> coordinateSetPixel = new ArrayList<>(); + + for (Vector3 coordinate : coordinateSet) { + coordinateSetPixel.add(UtilsKt.cubeToPixel(coordinate, 100F)); + } + + startFieldCoordinatesPixel.add(coordinateSetPixel); + } + + this.view.initializePieces(startFieldCoordinatesPixel); + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java index 88e367a27f80bc6a8732bebadb448982cb198d42..1392a4fde07c7bf38672b49ab1896fef6c21e123 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java @@ -1,10 +1,7 @@ package com.mygdx.game.controllers; -import com.badlogic.gdx.utils.Queue; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryonet.Client; -import com.esotericsoftware.kryonet.Server; -import com.mygdx.game.UniCheckersClient; import com.mygdx.game.controllers.commands.Command; import com.mygdx.game.controllers.commands.*; import com.mygdx.game.model.Lobby; @@ -17,9 +14,8 @@ public class NetworkController { private Client client; private Kryo kryo; - private Queue<Command> commandQueue; - private boolean devMode = true; + private boolean devMode = false; public NetworkController(){ this.client = new Client(); @@ -32,18 +28,12 @@ public class NetworkController { } kryo = client.getKryo(); registerClasses(); - commandQueue = new Queue<>(); } public void sendToServer(Command command){ - //commandQueue.addFirst(command); client.sendTCP(command); } - public void clearCommands(){ - commandQueue.clear(); - } - public void registerClasses(){ kryo.register(ArrayList.class, 100); kryo.register(Lobby.class, 5); @@ -56,6 +46,10 @@ public class NetworkController { kryo.register(cLobbyLeave.class, 22); kryo.register(cLobbyDelete.class, 23); kryo.register(cLobbyGetList.class, 24); + kryo.register(cSetIndexAvatar.class, 25); + kryo.register(cSetPlayerReady.class, 26); + kryo.register(cSetPlayerName.class, 27); + kryo.register(cStartGame.class, 28); } public Client getClient() { return client; } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java index b583aee91f43ac58278a1522a2f08ffc9da9cc9a..14b1461a79cbb67cc6d2b741d293cd0f02132497 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java @@ -1,25 +1,32 @@ package com.mygdx.game.controllers; +import com.badlogic.gdx.utils.Null; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener; import com.mygdx.game.controllers.commands.*; import com.mygdx.game.model.Lobby; import com.mygdx.game.model.Player; +import org.javatuples.Pair; + import java.util.ArrayList; +import java.util.LinkedList; + public class PlayerController { private NetworkController net; + private LinkedList<Command> receivedCommands; private Player player; //This is the current player private Lobby lobby; //Current lobby private ArrayList<Lobby> lobbies; //List of all lobbies - - private String playerName; // NB..! THIS IS TEMPORARY.. SHOULD BE IN MODEL.. - public PlayerController(NetworkController networkController){ net = networkController; + player = new Player(-1); + lobby = new Lobby(-1); + lobbies = new ArrayList<Lobby>(); + receivedCommands = new LinkedList<Command>(); net.getClient().addListener(new Listener() { public void received (Connection connection, Object object) { @@ -27,39 +34,40 @@ public class PlayerController { Command command = (Command) object; System.out.println("Received: "+ command.toString()); command.execute(getPlayerController(), connection); + receivedCommands.removeFirst(); + receivedCommands.addFirst(command); } } }); + connectPlayer(0); + } - net.sendToServer(new cPlayerJoin()); + private void sendCommand(Command command){ + receivedCommands.addFirst(null); + net.sendToServer(command); } + public void lobbyGetList(){ sendCommand(new cLobbyGetList()); } - public void issueACommand(String commandString) { - if (commandString.equals("W")){ - cPlayerPieceMove newCommand = new cPlayerPieceMove(); - net.sendToServer(newCommand); - } + public void setLobbyPlayerReady(boolean isPlayerReady){ + sendCommand(new cSetPlayerReady(isPlayerReady, lobby.getID(), player.getID())); } - // This could be a command invoked on the controller that changes PlayerState in the model. (Bit hard since model isn't written yet..) - public void setPlayerName(String playerName){ - this.playerName = playerName; - System.out.println("Updating playername.. Name is " + playerName); - // UpdatePlayerName code - } + public void connectPlayer(int avatarIndex){ sendCommand(new cPlayerJoin(avatarIndex));} - public String getPlayerName(){ - return this.playerName; - } + public void createLobby(String name, int MAX_PLAYERS){ sendCommand(new cLobbyCreate(name, MAX_PLAYERS)); } - public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); } + public void updateIndexAvatar(int indexAvatar){ sendCommand(new cSetIndexAvatar(indexAvatar)); } + + public void playerSetName(String name) { + sendCommand(new cSetPlayerName(name)); + } - public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); } + public void deleteLobby(int id){ sendCommand(new cLobbyDelete(id)); } - public void createLobby(int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(MAX_PLAYERS)); } + public void joinLobby(int id){ sendCommand(new cLobbyJoin(id)); } - public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); } + public void leaveLobby(int id) { sendCommand(new cLobbyLeave(id)); } public Lobby getLobby(){ return lobby; } @@ -73,7 +81,27 @@ public class PlayerController { public void setLobbies(ArrayList<Lobby> lobbies){ this.lobbies = lobbies; } + public boolean isOwningPlayerInLobby(){ + try{ + if(lobby==null){ + return false; + } + else if(lobby.getID() == -1){ + return false; + } + else{ + return true; + } + }catch (NullPointerException e){ + return false; + } + } + public PlayerController getPlayerController(){ return this; } public NetworkController getNetWorkController() { return net; } + + public Command getLastCommand(){ return receivedCommands.getFirst(); } + + } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java index 9da62d69f3aee8d931616c2394e8aa811240e02c..b8bb4a064a608a853094fc3f0db75d0ea0d88286 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java @@ -19,6 +19,7 @@ public class Command{ this.data = "None"; } + public void execute(PlayerController playerController, Connection connection){} public String getText(){ return text; } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java index de48edb5cfae4fc4fb5e2f5443ee8ba8d28d5e8a..45856d504f3926f95185e1915a5b1fc28830a384 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java @@ -4,11 +4,19 @@ import com.esotericsoftware.kryonet.Connection; import com.mygdx.game.controllers.PlayerController; import com.mygdx.game.model.Lobby; +import java.util.ArrayList; + public class cLobbyCreate extends Command { public cLobbyCreate() { super("cLobbyCreate"); } - public cLobbyCreate(int MAX_PLAYERS) { super("cLobbyCreate", (Integer) MAX_PLAYERS); } + public cLobbyCreate(String name, int MAX_PLAYERS) { + super("cLobbyCreate"); + ArrayList<Object> data = new ArrayList<Object>(); + data.add(name); + data.add(MAX_PLAYERS); + this.data = data; + } @Override public void execute(PlayerController playerController, Connection connection){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java index 59ae87197d3f28afaf2f4f472ed289be75421b6c..77d5b4e4f1eb2d301beeb96eeab8d3c33bd87ca7 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java @@ -9,7 +9,9 @@ public class cLobbyJoin extends Command{ public cLobbyJoin() { super("cLobbyJoin"); } - public cLobbyJoin(int id) { super("cLobbyJoin", (Integer) id); } + public cLobbyJoin(int id) { + super("cLobbyJoin", (Integer) id); + } @Override public void execute(PlayerController playerController, Connection connection){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java index 90b4200c309965ce6d68fe7d81967ee6506d292c..21c47b8be275a93e9b65009cd363ddf7685ebb24 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java @@ -12,12 +12,22 @@ public class cLobbyLeave extends Command{ @Override public void execute(PlayerController playerController, Connection connection){ - if(data instanceof Integer){ - int result = (int) data; - if (result == -1) System.out.println("Failed to leave lobby"); - else { - playerController.setLobby(new Lobby(-1)); - System.out.println("Request to leave lobby successful"); + if(data instanceof Lobby){ + Lobby lobby = (Lobby) data; + if(lobby.getID() != -1){ + if (lobby.getPlayersID().contains((Integer) connection.getID())) { + //Somebody else left + System.out.println("Somebody left the lobby"); + playerController.setLobby(lobby); + } + else{ + //The current player left + playerController.setLobby(new Lobby(-1)); + System.out.println("Request to leave lobby successful"); + } + } + else{ + System.out.println("Received leaveLobby command with an error"); } } } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java index 77c20a07fa49c6ed732ccc96aa3e11037de26bab..bae2c3eea518a58867241addae49b42a7450f198 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java @@ -11,6 +11,10 @@ public class cPlayerJoin extends Command { super("cPlayerJoin"); } + public cPlayerJoin(int indexAvatar) { + super("cPlayerJoin", (Integer) indexAvatar); + } + @Override public void execute(PlayerController playerController, Connection connection){ if(data instanceof Player){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java new file mode 100644 index 0000000000000000000000000000000000000000..fb713e07bfc07644cce55e5c140248a29bdd0427 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java @@ -0,0 +1,26 @@ +package com.mygdx.game.controllers.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controllers.NetworkController; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.Lobby; + +public class cSetIndexAvatar extends Command { + + public cSetIndexAvatar() { super("cSetIndexAvatar"); } + + public cSetIndexAvatar(int indexAvatar) { + super("cSetIndexAvatar", indexAvatar); + } + + @Override + public void execute(PlayerController playerController, Connection connection){ + if(data instanceof Integer){ + int indexAvatar = (int) data; + if (indexAvatar == -1) System.out.println("Failed to set indexAvatar."); + else { + playerController.getPlayer().setIndexAvatar(indexAvatar); + } + } + } +} \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java new file mode 100644 index 0000000000000000000000000000000000000000..b89a72c7761aae6c0c02746b267fc03ed28de372 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java @@ -0,0 +1,27 @@ +package com.mygdx.game.controllers.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.Lobby; +import com.mygdx.game.model.Player; + +import org.javatuples.Pair; + + +public class cSetPlayerName extends Command{ + + public cSetPlayerName() { super("cSetPlayerName"); } + + public cSetPlayerName(String name) { + super("cSetPlayerName", name); + } + + @Override + public void execute(PlayerController playerController, Connection connection){ + if(data instanceof String){ + String name = (String) data; + playerController.getPlayer().setPlayerName(name); + System.out.printf("Player name is updated on server. %s \n", name); + } + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java new file mode 100644 index 0000000000000000000000000000000000000000..af752e948d1799a52c28ba486a32bd24084d5787 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java @@ -0,0 +1,35 @@ +package com.mygdx.game.controllers.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controllers.PlayerController; + +public class cSetPlayerReady extends Command{ + + public cSetPlayerReady() { super("cSetPlayerReady"); } + + private int lobbyID; + private int playerID; + + public cSetPlayerReady(boolean isPlayerReady, int lobbyID) { + super("cSetPlayerReady", isPlayerReady); + this.lobbyID = lobbyID; + this.playerID = playerID; + } + + public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) { + super("cSetPlayerReady", isPlayerReady); + this.lobbyID = lobbyID; + this.playerID = playerID; + } + + @Override + public void execute(PlayerController playerController, Connection connection){ + if(data instanceof Boolean){ + boolean isPlayerReady = (Boolean) data; + if(playerID == playerController.getPlayer().getID()) playerController.getPlayer().setIsPlayerReady(isPlayerReady); + playerController.getLobby().getPlayerByID(playerID).setIsPlayerReady(isPlayerReady); + //System.out.println("value of playerID" + playerID); + System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady); + } + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java new file mode 100644 index 0000000000000000000000000000000000000000..65911658b63156212ab1b12872670dc2ebab5db2 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java @@ -0,0 +1,19 @@ +package com.mygdx.game.controllers.commands; + + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controllers.PlayerController; + +public class cStartGame extends Command{ + + public cStartGame() { super("cStartGame"); } + + public cStartGame(int id) { super("cStartGame", (Integer) id); } + + @Override + public void execute(PlayerController playerController, Connection connection){ + playerController.getLobby().setLobbyGameStarted(true); + System.out.println("GAME HAS STARTED"); + + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/model/Game.kt b/CheckersClient/core/src/com/mygdx/game/model/Game.kt index 1aaed5dde9c864667c4016b8844b114fc1c08cb6..cfce692310a7fa6aa0d9590b8cb343238adb492f 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/Game.kt +++ b/CheckersClient/core/src/com/mygdx/game/model/Game.kt @@ -1,5 +1,7 @@ package com.mygdx.game.model +import com.badlogic.gdx.math.Vector3 + //Logic of the game, holds a GameState, operations //(((Controller???))) Model can change its own data, but has to be told by controller @@ -10,4 +12,8 @@ class Game(gameState: GameState) { init { this.gameState = gameState } + + fun getStartFieldCoordinates(): List<List<Vector3>>? { + return this.gameState.getRules()?.generateStartFields() + } } \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java index d198b3d091395e403dbca069f5988b14323bbf5c..9dfe3ba94a9b4feb979a8b3812d3125ef1c301fd 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java +++ b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java @@ -1,12 +1,15 @@ package com.mygdx.game.model; import java.util.ArrayList; +import java.util.HashSet; public class Lobby { private int ID; + private String name; private int MAX_PLAYERS; private ArrayList<Player> players; + private boolean lobbyGameStarted = false; public Lobby() {} @@ -15,14 +18,57 @@ public class Lobby { players = new ArrayList<Player>(); } - public Lobby(int ID, int MAX_PLAYERS){ + public Lobby(int ID, String name, int MAX_PLAYERS){ this.ID = ID; + this.name = name; this.MAX_PLAYERS = MAX_PLAYERS; players = new ArrayList<Player>(); } public int getID(){ return ID; } + public boolean getLobbyGameStarted(){ + return lobbyGameStarted; + } + public void setLobbyGameStarted(boolean lobbyGameStarted){ + this.lobbyGameStarted = lobbyGameStarted; + } + + public void setName(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public Player getPlayerByID(int playerID){ + + Player returnPlayer = null; + + for (Player player : players){ + if (player.getID() == playerID) returnPlayer = player; + } + + return returnPlayer; + } + + public int getMaxPlayers(){ + return MAX_PLAYERS; + } + + public ArrayList<Player> getPlayers(){ + return players; + } + + public HashSet<Integer> getPlayersID(){ + HashSet set = new HashSet(); + for(Player player : players){ + set.add((Integer) player.getID()); + } + return set; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -35,9 +81,9 @@ public class Lobby { public String toString() { return "Lobby{" + "ID=" + ID + + ", name='" + name + '\'' + ", MAX_PLAYERS=" + MAX_PLAYERS + ", players=" + players + '}'; } - } diff --git a/CheckersClient/core/src/com/mygdx/game/model/Player.java b/CheckersClient/core/src/com/mygdx/game/model/Player.java index 168218638ce097035d6195ac675d782d2e72e10f..1a3a7c9799d7ae0c34ea13715a652ca6d86a787b 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/Player.java +++ b/CheckersClient/core/src/com/mygdx/game/model/Player.java @@ -3,11 +3,17 @@ package com.mygdx.game.model; public class Player { private int ID; + private int indexAvatar; + private String playerName; + private boolean isPlayerReady; public Player(){} - public Player(int ID){ + public Player(int ID){ this.ID = ID; } + + public Player(int ID, int indexAvatar){ this.ID = ID; + this.indexAvatar = indexAvatar; } public int getID(){ return ID; } @@ -26,4 +32,28 @@ public class Player { "ID=" + ID + '}'; } + + public void setIndexAvatar(int indexAvatar){ + this.indexAvatar = indexAvatar; + } + + public int getIndexAvatar(){ + return this.indexAvatar; + } + + public void setPlayerName(String playerName) { + this.playerName = playerName; + } + + public String getPlayerName(){ + return this.playerName; + } + + public void setIsPlayerReady(boolean isPlayerReady) { + this.isPlayerReady = isPlayerReady; + } + + public boolean getIsPlayerReady(){ + return this.isPlayerReady; + } } diff --git a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt index 0459f5911ed156ad01d652f2d56314a779f8e0ac..7ef5f737eca93795b1a7c113b2d4c15330999f24 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt +++ b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt @@ -10,4 +10,5 @@ abstract class AbstractRules { abstract fun getPlayerStartfields(playerId: Int) : List<Vector3> // Returns a list of startfields for a given player abstract fun getPlayerTargetFields(playerId: Int) : List<Vector3> // Returns a list of targetfields for a given player + abstract fun generateStartFields(): List<List<Vector3>> // Returns a list with lists of startfields } \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt index 025b07e9b23a9b46e9a5402d38046f5b3f80fe80..2f32088d1f2c1fe5361b40566a16587d83c378aa 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt +++ b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt @@ -27,7 +27,7 @@ class DefaultRules: AbstractRules() { return startFields[index] } - private fun generateStartFields(): List<List<Vector3>> { + override fun generateStartFields(): List<List<Vector3>> { return(listOf( listOf( Vector3(1F,4F,-5F), Vector3(2F,3F,-5F), Vector3(3F,2F,-5F), Vector3(4F,1F,-5F), Vector3(2F,4F,-6F), Vector3(3F,3F,-6F), Vector3(4F,2F,-6F), Vector3(3F,4F,-7F), diff --git a/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java b/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java new file mode 100644 index 0000000000000000000000000000000000000000..139aa54ba420c5b53f88bf02a61c23744044bbba --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java @@ -0,0 +1,280 @@ +package com.mygdx.game.views; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.CharacterAssets; +import com.mygdx.game.views.enums.CinematicAssets; +import com.mygdx.game.views.enums.LobbyAssets; +import com.mygdx.game.views.enums.MenuAssets; +import com.mygdx.game.views.tokens.AnimatedSprite; + +import java.util.ArrayList; + + +public class CinematicView extends View{ + + private final Image lobbyImage; + private final Image backgroundImage; + private final Image rocketImage; + private final Image exhaustImage; + private final AnimatedSprite countDownAnimationSprite; + + private ArrayList<AnimatedSprite> lobbyAvatars; + private final float keyframe1; + private final float keyframe2; + private final float keyframe3; + private final float keyframe4; + private final Music cinematicSound; + private float fadeInVolume; + private TextureAtlas cloudAtlas; + private TextureAtlas countDownAtlas; + private AnimatedSprite cloudSprite; + private float updateSpritesTimer; + private float updateAvatarFrequency = 0.120f; + private float timer = 0; + private final Camera cam; + + boolean onlyOnce1 = true; + boolean onlyOnce2 = true; + boolean onlyOnce3 = true; + + public CinematicView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<AnimatedSprite> lobbyAvatars) { + super(gvm, playerController, assetManager, stage, skin); + + rocketImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_SMALL.path, LobbyAssets.ROCKET_SMALL.classType)); + rocketImage.setPosition(1556, 360); + + countDownAtlas = (TextureAtlas)assetManager.get(CinematicAssets.COUNT_DOWN_ATLAS.path, CinematicAssets.COUNT_DOWN_ATLAS.classType); + cam = stage.getCamera(); + cam.position.set(rocketImage.getX()+rocketImage.getWidth()/2, cam.viewportHeight/2, 0); + + this.lobbyAvatars = lobbyAvatars; + fadeInLength = 0.5f; + fadeOutLength= 0.25f; + + backgroundImage = new Image((Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType)); + + countDownAnimationSprite = new AnimatedSprite( + countDownAtlas, new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, + MenuAssets.RED_CIRCLE_SMALL.classType)), + "CountDown", + 3); + countDownAnimationSprite.setPosition(cam.position.x-countDownAnimationSprite.getWidth()/2, rocketImage.getY()+rocketImage.getHeight()/2+countDownAnimationSprite.getHeight()/2); + countDownAnimationSprite.setAlpha(0); + + exhaustImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType)); + exhaustImage.setSize(rocketImage.getHeight()/3, rocketImage.getHeight()/2); + exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight()); + exhaustImage.setColor(1, 1, 1, 0); + + lobbyImage = new Image((Texture) assetManager.get(LobbyAssets.LOBBY.path, LobbyAssets.LOBBY.classType)); + lobbyImage.setPosition(774, 192); + + cinematicSound = (Music) assetManager.get(CinematicAssets.CINEMATIC_AUDIO.path, CinematicAssets.CINEMATIC_AUDIO.classType); + + cloudAtlas = (TextureAtlas) assetManager.get(CinematicAssets.CLOUD_ATLAS.path, CinematicAssets.CLOUD_ATLAS.classType); + TextureRegion texReg = cloudAtlas.findRegion("Cloud1"); + cloudSprite = new AnimatedSprite(cloudAtlas, texReg, "Cloud", 8); + cloudSprite.setPosition(774+lobbyImage.getWidth()/2, 140); + cloudSprite.setAlpha(0); + cloudSprite.setOrigin(0, 0); + countDownAnimationSprite.updateTexture(); + countDownAnimationSprite.updateTexture(); + + setFadeColor(Color.BLACK); + stage.addActor(backgroundImage); + stage.addActor(lobbyImage); + stage.addActor(exhaustImage); + stage.addActor(rocketImage); + + keyframe1 = 1.05f*1.92f; + keyframe2 = 2.1f*1.92f; + keyframe3 = 3.15f*1.92f; + keyframe4 = 3.3f*1.92f; + + + } + + public CinematicView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){ + this(gvm, playerController, assetManager, stage, skin, new ArrayList<AnimatedSprite>()); + + AnimatedSprite asianGirl = new AnimatedSprite( + (TextureAtlas) assetManager.get(CharacterAssets.AsianGirlAtlas.path, CharacterAssets.AsianGirlAtlas.classType), + new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, MenuAssets.RED_CIRCLE_SMALL.classType)), + "AsianGirl", + 3); + + AnimatedSprite regularGuy = new AnimatedSprite( + (TextureAtlas) assetManager.get(CharacterAssets.RegularGuyAtlas.path, CharacterAssets.RegularGuyAtlas.classType), + new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, MenuAssets.RED_CIRCLE_SMALL.classType)), + "RegularGuy", + 3); + + int xPad = 10; + int remX = 0; + int remY = 0; + + asianGirl.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f)); + asianGirl.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY); + asianGirl.setOrigin(0, 0); + + remX = 1; + remY = 0; + + regularGuy.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f)); + regularGuy.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY); + regularGuy.setOrigin(0, 0); + + lobbyAvatars.add(asianGirl); + lobbyAvatars.add(regularGuy); + stage.addActor(backgroundImage); + stage.addActor(lobbyImage); + stage.addActor(exhaustImage); + stage.addActor(rocketImage); + + } + + + @Override + public void handleInput(float dt) { + + } + float cloudSpriteAlpha = 1; + + @Override + public void update(float dt) { + + if(startFadeIn){ + + } + else{ + updateSpritesTimer+= dt; + if(0<= timer && timer <= keyframe1){ + System.out.println("KEYFRAME 1!!"); + for(AnimatedSprite lobbyAvatar : lobbyAvatars){ + if(updateSpritesTimer >= updateAvatarFrequency) { + lobbyAvatar.updateTexture(); + } + lobbyAvatar.translateX(1); + } + } + if(keyframe1 <= timer && timer <= keyframe2){ + System.out.println("KEYFRAME 2!!"); + if(onlyOnce1){ + cloudSprite.setAlpha(1); + countDownAnimationSprite.updateTexture(); + onlyOnce1 = false; + } + for(AnimatedSprite lobbyAvatar : lobbyAvatars){ + lobbyAvatar.translateX(50); + if(lobbyAvatar.getX() >= cloudSprite.getX()+cloudSprite.getWidth()/2){ + lobbyAvatar.setAlpha( 0); + } + } + } + if(keyframe2 <= timer && timer <= keyframe3){ + if(onlyOnce2) { + countDownAnimationSprite.updateTexture(); + exhaustImage.setColor(1, 1, 1, 1); + onlyOnce2 = false; + } + rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+3); + exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+3); + cam.position.set(rocketImage.getX(), rocketImage.getY(), 0); + System.out.println("KEYFRAME 3!!"); + } + if(keyframe3 <= timer && timer <= keyframe4){ + if(onlyOnce3) { + countDownAnimationSprite.setAlpha(0); + onlyOnce3 = false; + } + rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+50); + exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+50); + System.out.println("KEYFRAME 4!!"); + cloudSpriteAlpha -= dt*2; + cloudSprite.setAlpha(cloudSpriteAlpha); + } + if(timer>keyframe4){ + startFadeout=true; + cloudSpriteAlpha -= dt*2; + cloudSprite.setAlpha(cloudSpriteAlpha); + } + + if(updateSpritesTimer >= updateAvatarFrequency) { + cloudSprite.updateTexture(); + updateSpritesTimer = 0; + } + //rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+3); + //exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+3); + timer += dt; + } + } + + + @Override + public void render(float dt) { + stage.draw(); + stage.getBatch().begin(); + + for(AnimatedSprite animatedSprite : lobbyAvatars){ + animatedSprite.draw(stage.getBatch()); + } + + countDownAnimationSprite.draw(stage.getBatch()); + cloudSprite.draw(stage.getBatch()); + + + stage.getBatch().end(); + } + + @Override + public void fadeIn(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeInAlpha -= dt/fadeInLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + + if(fadeInAlpha <= 0){ + countDownAnimationSprite.setAlpha(1); + cinematicSound.play(); + startFadeIn = false; + } + fadeInVolume += dt/fadeOutLength; + } + + @Override + public void fadeOut(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeOutAlpha += dt/fadeOutLength; + stage.getBatch().draw(fadeOverlayTexture, cam.position.x-cam.viewportWidth/2, cam.position.y-cam.viewportHeight/2, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + + if(fadeOutAlpha >= 1){ + stage.clear(); + startFadeout = false; + gvm.set(new PlayView(gvm, playerController, assetManager, stage, skin, lobbyAvatars)); + } + } + + @Override + public void dispose() { + stage.dispose(); + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java index f24c0d27f8ed6dd91872f34f0ea5ef2f1f7c9fe9..154bbc33b5977f585b3de67d398512e8e13f08db 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java +++ b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java @@ -1,9 +1,6 @@ package com.mygdx.game.views; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.scenes.scene2d.Stage; - import java.util.Stack; public class GameViewManager { @@ -27,6 +24,10 @@ public class GameViewManager { views.push(view); } + public void handleInput(float dt){ + views.peek().handleInput(dt); + } + public void update(float dt){ views.peek().update(dt); } @@ -35,4 +36,20 @@ public class GameViewManager { views.peek().render(dt); } + public void fadeIn(float dt){ + views.peek().fadeIn(dt); + } + + public void fadeOut(float dt){ + views.peek().fadeOut(dt); + } + + public boolean getStartFadeIn(){ + return views.peek().getStartFadeIn(); + } + + public boolean getStartFadeOut(){ + return views.peek().getStartFadeOut(); + } + } diff --git a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java new file mode 100644 index 0000000000000000000000000000000000000000..ffdadf1d75bd490ed8475a8f40941bdf80d37b19 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java @@ -0,0 +1,100 @@ +package com.mygdx.game.views; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.CharacterAssets; +import com.mygdx.game.views.enums.LobbyAssets; +import com.mygdx.game.views.enums.MenuAssets; + +public class LoadingView extends View { + + private Image loadingTextImage = new Image(new Texture("Loading/LoadingText.png")); + private Image loadingDotImage = new Image(new Texture("Loading/LoadingDot.png")); + private Image loadingBarFillImage = new Image(new Texture("Loading/LoadingBarFill.png")); + private Image loadingBarBorderImage = new Image(new Texture("Loading/LoadingBarBorder.png")); + private Image loadingBarBackgroundImage = new Image(new Texture("Loading/LoadingBarBackground.png")); + + public LoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) { + super(gvm, playerController, assetManager, stage, skin); + + this.loadingBarBackgroundImage.setPosition((float)(this.col_width * 6) - this.loadingBarBackgroundImage.getWidth() / 2.0F, (float)(this.row_height * 1)); + this.loadingBarBorderImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY()); + this.loadingTextImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY() + this.loadingTextImage.getHeight() * 1.25F); + this.loadingDotImage.setPosition(this.loadingTextImage.getX() + this.loadingDotImage.getWidth() * 2.0F, this.loadingTextImage.getY()); + this.loadingBarFillImage.setBounds(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY(), this.loadingBarBackgroundImage.getWidth() * 0.05F, this.loadingBarBackgroundImage.getHeight()); + stage.addActor(this.loadingTextImage); + stage.addActor(this.loadingDotImage); + stage.addActor(this.loadingBarBackgroundImage); + stage.addActor(this.loadingBarFillImage); + stage.addActor(this.loadingBarBorderImage); + + for(MenuAssets asset : MenuAssets.values()) { + assetManager.load(asset.path, asset.classType); + } + + for(CharacterAssets asset : CharacterAssets.values()) { + assetManager.load(asset.path, asset.classType); + } + } + + @Override + public void handleInput(float dt) { + + } + + @Override + public void update(float dt) { + if(assetManager.update()){ + startFadeout = true; + } + else{ + loadingBarFillImage.setWidth(assetManager.getProgress()*loadingBarBackgroundImage.getWidth()); + } + } + + @Override + public void render(float dt) { + stage.draw(); + } + + @Override + public void fadeIn(float dt) { + stage.getBatch().begin(); + Color c = Color.WHITE; + stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha); + fadeInAlpha -= dt/fadeInLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().end(); + + if(fadeInAlpha <= 0){ + startFadeIn = false; + } + } + + @Override + public void fadeOut(float dt) { + stage.getBatch().begin(); + Color c = Color.WHITE; + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeOutAlpha += dt/fadeOutLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + if(fadeOutAlpha >= 1){ + stage.clear(); + startFadeout = false; + gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin)); + } + } + + @Override + public void dispose() { + stage.dispose(); + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java index ce115e2e806e394bba7101c51610ae6b5b01f0cf..1fae377e59ff69f1ac755ae8ffb528aa3ceec3fe 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java @@ -2,99 +2,150 @@ package com.mygdx.game.views; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.FrameBuffer; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; -import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.List; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.utils.Align; + import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.Lobby; +import com.mygdx.game.model.Player; +import com.mygdx.game.views.enums.CharacterAssets; +import com.mygdx.game.views.enums.CinematicAssets; import com.mygdx.game.views.enums.LobbyAssets; import com.mygdx.game.views.enums.MenuAssets; +import com.mygdx.game.views.tokens.AnimatedSprite; +import java.util.ArrayList; import java.util.Arrays; -import java.util.List; +import java.util.HashMap; public class LobbyView extends View{ - private Texture background; - private Image lobbyListBubbleImage; - private Image rocketImage; - private Image exhaustImage; - private Texture rocketTexture; - private Texture exhaustTexture; - private Sound sound; - private Button setUserNameButton; - private Image backgroundImage; + private final ArrayList<Actor> playerUIWidgets = new ArrayList<>(); + private final Music currentSong; + private final TextureAtlas portraitAtlas; + private Button createLobbyButton; + private Button findLobbyButton; + private Button joinLobbyButton; + private Button lobbyBackButton; + private Button lobbyListRefreshButton; + private Button lobbyRefreshButton; + private Button lobbyListBackButton; + private Button startLobbyButton; + private float updateAvatarTimer = 0; + private float updateAvatarFrequency = 0.120f; //update every 250ms + private float refreshLobbyTimer = 1; + private float touchSensitivity = 0.1f; + private float fadeOutVolume = 0; + + private Image backgroundImage; + private AnimatedSprite mrServer; + private Image mrServerNameImage; + private Image exhaustImage; + private Image lobbyListBubbleImage; + private Image lobbyListBubblePointerImage; + private Image rocketImage; - private FrameBuffer previousScreenFrameBuffer; - private float fadeTransitionLength = 0.75f; - private float fadeTransitionTimer = 1; - private Image fadeImage; - private TextureRegion fadeTextureRegion; - private boolean transitionFinished = false; - private boolean fadeIn = true; - private boolean fadeOut = true; private Label mrServerBubbleLabel; + private Label outputLabel; private Sound buttonClickAudio; private TextField lobbyCreateTextField; - private Button joinLobbyButton; - private Button createLobbyButton; - private Button lobbyRefreshButton; - private Button lobbyBackButton; - private Dialog lobbyCreateDialogue; + + private Camera camera; + + private ImageButton playerReadyCheckButton; + private SelectBox<Integer> lobbyCreateSizeSelectBox; + private ScrollPane scrollPane; + private List<String> lobbyListStrings; + private HashMap<String, Integer> getLobbyByStringHashMap; + private Image lobbyImage; - int Help_Guides = 12; - int row_height = Gdx.graphics.getHeight() / Help_Guides; - int col_width = Gdx.graphics.getWidth() / Help_Guides; - private Label outputLabel; + private ArrayList<AnimatedSprite> lobbyAvatars = new ArrayList<>(); + + private ArrayList<Image> playerReadyImages = new ArrayList<>(); + private ArrayList<Label> lobbyLabels= new ArrayList<>(); + private final HashMap<Integer, String> availableAvatarsHashMap; - public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, FrameBuffer previousScreenFrameBuffer) { + public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin, HashMap<Integer,String> availableAvatarsHashMap, Music currentSong) { super(gvm, playerController, assetManager, stage, skin); - this.previousScreenFrameBuffer = previousScreenFrameBuffer; - background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType); - rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType); - exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKETEXHAUST.path, LobbyAssets.ROCKETEXHAUST.classType); + this.portraitAtlas = (TextureAtlas) assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType); + + this.currentSong = currentSong; + fadeOutVolume = currentSong.getVolume(); + buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType); - Texture lobbyListTexture = (Texture) assetManager.get(LobbyAssets.LOBBYLIST.path, LobbyAssets.LOBBYLIST.classType); + this.camera = stage.getCamera(); + + this.availableAvatarsHashMap = availableAvatarsHashMap; + + for(CinematicAssets asset : CinematicAssets.values()) { + assetManager.load(asset.path, asset.classType); + } - rocketImage = new Image(rocketTexture); - exhaustImage = new Image(exhaustTexture); - rocketImage.setPosition(col_width*8.5f, row_height*4f); - rocketImage.setSize(col_width*1, row_height*2.5f); - exhaustImage.setSize(col_width*0.6f, row_height*2f); + Image playerReadyCheck = new Image((Texture) assetManager.get(LobbyAssets.PLAYER_READY_CHECK.path, Texture.class)); + playerReadyCheckButton = new ImageButton(playerReadyCheck.getDrawable()); + playerReadyCheckButton.setPosition(col_width*6, row_height*2); + + backgroundImage = new Image((Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType)); + stage.getViewport().setWorldSize(backgroundImage.getWidth(), backgroundImage.getHeight()); + + rocketImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_SMALL.path, LobbyAssets.ROCKET_SMALL.classType)); + rocketImage.setPosition(1556, 360); + + + exhaustImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType)); + exhaustImage.setSize(rocketImage.getHeight()/6, rocketImage.getHeight()/2); exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight()); + exhaustImage.setColor(1, 1, 1, 0); + + + TextureAtlas portraitAtlas = (TextureAtlas)assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType); + mrServer = new AnimatedSprite( (TextureAtlas) assetManager.get(LobbyAssets.MR_SERVER_ATLAS.path, LobbyAssets.MR_SERVER_ATLAS.classType), + portraitAtlas.findRegion("MrServerPortrait"), + "MrServer", + 3); + mrServer.scale(-0.63f); + mrServer.setOrigin(0,0 ); + mrServer.setOriginBasedPosition(190, 1); + + mrServerNameImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_NAME.path, LobbyAssets.MR_SERVER_NAME.classType)); + mrServerNameImage.setPosition(180+mrServerNameImage.getWidth()/2, 360); + + lobbyImage = new Image((Texture) assetManager.get(LobbyAssets.LOBBY.path, LobbyAssets.LOBBY.classType)); + lobbyImage.setPosition(774, 192); - fadeTextureRegion = new TextureRegion(previousScreenFrameBuffer.getColorBufferTexture()); - fadeTextureRegion.flip(false, true); - fadeImage = new Image(fadeTextureRegion); - fadeImage.setColor(1, 1, 1, 1f); + lobbyListBubbleImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_SQUARE.path, LobbyAssets.MR_SERVER_BUBBLE_SQUARE.classType)); + lobbyListBubbleImage.setPosition(29.535f, 4328-3930); - lobbyListBubbleImage = new Image(lobbyListTexture); - lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f); - backgroundImage = new Image(background); + lobbyListBubblePointerImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_POINTER.path, LobbyAssets.MR_SERVER_BUBBLE_POINTER.classType)); + lobbyListBubblePointerImage.setPosition(lobbyListBubbleImage.getX()+lobbyListBubblePointerImage.getWidth()*1.25f, lobbyListBubbleImage.getY()-lobbyListBubblePointerImage.getHeight()+2); outputLabel = new Label("Press a Button",skin,"black"); outputLabel.setSize(Gdx.graphics.getWidth(),row_height); @@ -102,53 +153,75 @@ public class LobbyView extends View{ outputLabel.setAlignment(Align.topLeft); outputLabel.setFontScale(2); + createLobbyButton = new TextButton("Create Lobby",skin,"small"); + createLobbyButton.setSize(col_width*1f,(float)(row_height*0.75)); + createLobbyButton.setPosition(lobbyListBubbleImage.getX()+xpad,lobbyListBubbleImage.getY()+ypad); + + findLobbyButton = new TextButton("Find Lobby",skin,"small"); + findLobbyButton.setSize(col_width*1f,(float)(row_height*0.75)); + findLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()-findLobbyButton.getWidth()-xpad,lobbyListBubbleImage.getY()+ypad); + mrServerBubbleLabel = new Label("Hi, I am mr. Server. I allow creation and joining of lobby rooms.", skin,"black"); - mrServerBubbleLabel.setSize(col_width*2.5f, row_height*3f); - mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f); + mrServerBubbleLabel.setSize(lobbyListBubbleImage.getWidth()-xpad*2, lobbyListBubbleImage.getHeight()-createLobbyButton.getY()-createLobbyButton.getHeight()-ypad*2); + mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+xpad, createLobbyButton.getY()+lobbyListBubbleImage.getHeight()-ypad*3); + + mrServerBubbleLabel.setOrigin(0,0); mrServerBubbleLabel.setWrap(true); mrServerBubbleLabel.setFontScale(2); - createLobbyButton = new TextButton("Create Lobby",skin,"small"); - createLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); - createLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); - - joinLobbyButton = new TextButton("Join Lobby",skin,"small"); - joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); - joinLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + lobbyListRefreshButton = new TextButton("Refresh",skin,"small"); + lobbyListRefreshButton.setSize(col_width*1f,(float)(row_height*0.65)); + lobbyListRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY()); lobbyRefreshButton = new TextButton("Refresh",skin,"small"); lobbyRefreshButton.setSize(col_width*1f,(float)(row_height*0.65)); - lobbyRefreshButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + lobbyRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY()); lobbyBackButton = new TextButton("Back",skin,"small"); lobbyBackButton.setSize(col_width*1f,(float)(row_height*0.65)); - lobbyBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + lobbyBackButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY()); + + lobbyListBackButton = new TextButton("Back",skin,"small"); + lobbyListBackButton.setSize(col_width*1f,(float)(row_height*0.65)); + lobbyListBackButton.setPosition(findLobbyButton.getX(),findLobbyButton.getY()); - setUserNameButton = new TextButton("Text Button",skin,"small"); - setUserNameButton.setSize(col_width*2,(float)(row_height*0.5)); - setUserNameButton.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*4); + joinLobbyButton = new TextButton("Join Lobby",skin,"small"); + joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); + joinLobbyButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY()+ypad+findLobbyButton.getHeight()/3); + + startLobbyButton = new TextButton("Start",skin,"small"); + startLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); + startLobbyButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY()); lobbyCreateTextField = new TextField("", skin); - lobbyCreateTextField.setMessageText("Name of your lobby."); - lobbyCreateTextField.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*3); - lobbyCreateTextField.setSize(col_width*2,(float)(row_height*0.75)); - lobbyCreateTextField.scaleBy(1000); + lobbyCreateTextField.setMessageText("Enter lobby name."); + lobbyCreateTextField.setSize(col_width*1f,row_height*1f); + lobbyCreateTextField.setPosition(lobbyListRefreshButton.getX(), lobbyListRefreshButton.getY()+row_height*1.25f); lobbyCreateSizeSelectBox =new SelectBox<>(skin); lobbyCreateSizeSelectBox.setItems(2, 4, 6, 8); - lobbyCreateTextField = new TextField("", skin); - lobbyCreateTextField.setMessageText("Enter lobby name."); - lobbyCreateTextField.setSize(col_width*1.5f,row_height*0.8f); - lobbyCreateTextField.setPosition(lobbyRefreshButton.getX(), lobbyRefreshButton.getY()+row_height*1.25f); - lobbyCreateSizeSelectBox.setPosition(lobbyBackButton.getX(), lobbyCreateTextField.getY()); - lobbyCreateSizeSelectBox.setSize(lobbyBackButton.getWidth(), lobbyBackButton.getHeight()); + lobbyCreateSizeSelectBox.setPosition(lobbyListBackButton.getX(), lobbyCreateTextField.getY()); + lobbyCreateSizeSelectBox.setSize(lobbyListBackButton.getWidth(), lobbyListBackButton.getHeight()); backgroundImage.setZIndex(1); - lobbyListBubbleImage.setZIndex(2); - fadeImage.setZIndex(3); - outputLabel.setZIndex(3); - stage.addActor(fadeImage); + backgroundImage.setOrigin(0,0); + + stage.addActor(backgroundImage); stage.addActor(outputLabel); + stage.addActor(rocketImage); + stage.addActor(exhaustImage); + stage.addActor(lobbyImage); + stage.addActor(lobbyListBubbleImage); + stage.addActor(lobbyListBubblePointerImage); + stage.addActor(mrServerNameImage); + + playerUIWidgets.add(createLobbyButton); + playerUIWidgets.add(findLobbyButton); + playerUIWidgets.add(mrServerBubbleLabel); + for (Actor widget: playerUIWidgets){ + stage.addActor(widget); + } + stage.addActor(outputLabel); // OutputLabel for debugging purposes createLobbyButton.addListener(new InputListener(){ @Override @@ -160,10 +233,45 @@ public class LobbyView extends View{ buttonClickAudio.play(0.8f); outputLabel.setText("Create Lobby"); showCreateLobbyWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("createLobbyButton"); + } + }); + playerReadyCheckButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + outputLabel.setText("Player Ready"); + playerController.setLobbyPlayerReady(true); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("playerReadyCheckButton"); + } + }); + findLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + showLobbyListWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("findLobbyButton"); } }); - joinLobbyButton.addListener(new InputListener(){ + lobbyListBackButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { return true; @@ -171,10 +279,44 @@ public class LobbyView extends View{ @Override public void touchUp (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); - outputLabel.setText("Touch up a Button"); - showJoinLobbyWindow(); + Gdx.input.setOnscreenKeyboardVisible(false); + stage.unfocusAll(); + Lobby lobby = playerController.getLobby(); + try{ + if(lobby.getPlayers().size() == 1){ + playerController.deleteLobby(lobby.getID()); + } + else{ + playerController.leaveLobby(lobby.getID()); + } + + }catch(NullPointerException e){ + + } + showMainLobbyWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyListBackButton"); + } + }); + lobbyListRefreshButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + outputLabel.setText("Lobby refreshed!"); + lobbyListRefresh(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyListRefreshButton"); } }); + lobbyBackButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -183,10 +325,74 @@ public class LobbyView extends View{ @Override public void touchUp (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); - outputLabel.setText("Back button"); + Gdx.input.setOnscreenKeyboardVisible(false); + stage.unfocusAll(); + + Lobby lobby = playerController.getLobby(); + + if(lobby.getID() == -1){System.out.println("Currently not in a lobby.");} + + if(lobby.getPlayers().size() == 1){ + System.out.println("Deleting lobby " + lobby.getName()); + playerController.deleteLobby(lobby.getID()); + } + else{ + System.out.println("Leaving lobby " + lobby.getName()); + playerController.leaveLobby(lobby.getID()); + } + + + for (Label label :lobbyLabels) label.remove(); + for(Image image: playerReadyImages) image.remove(); + lobbyAvatars.clear(); showMainLobbyWindow(); + + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("LobbybackButton"); } }); + + joinLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + //if(lobby != null) playerController.leaveLobby(lobby.getID()); + + if(getLobbyByStringHashMap.containsKey(lobbyListStrings.getSelected())){ + Thread thread = new Thread(){ + public void run(){ + for(Lobby lobby : playerController.getLobbyList()){ + System.out.println("LobbyId available: " +lobby.getID()); + } + playerController.joinLobby(getLobbyByStringHashMap.get(lobbyListStrings.getSelected())); + System.out.println("joining lobby with lobbyID: " + lobbyListStrings.getSelectedIndex()); + while (playerController.getLastCommand() == null) { + System.out.println("Waiting for lobby"); + } + Lobby lobby = playerController.getLobby(); + System.out.println("Lobby loaded " + lobby); + Gdx.input.setOnscreenKeyboardVisible(false); + showLobbyWindow(); + lobbyRefresh(); + } + }; + thread.start(); + } + else{ + outputLabel.setText("LobbyListHash did not contain the selected key."); + } + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("joinLobbyButton"); + } + }); + lobbyRefreshButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -198,7 +404,12 @@ public class LobbyView extends View{ outputLabel.setText("Lobby refreshed!"); lobbyRefresh(); } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyRefreshButton"); + } }); + lobbyCreateTextField.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -217,172 +428,338 @@ public class LobbyView extends View{ } } }); + startLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.80f); + if(!lobbyCreateTextField.getText().isEmpty()){ + Thread thread = new Thread(){ + public void run(){ + playerController.createLobby(lobbyCreateTextField.getText(), lobbyCreateSizeSelectBox.getSelected()); + System.out.println("Creating lobby '" + lobbyCreateTextField.getText() + "' with maxSize " + lobbyCreateSizeSelectBox.getSelected()); + while (playerController.getLastCommand() == null) { + System.out.println("Waiting for lobby object from server.."); + } + while(playerController.getLobby().getID() == -1){ + System.out.println("Waiting for lobby object from server. Current id is -1.."); + } + + Lobby lobby = playerController.getLobby(); + System.out.println("Lobby loaded successfully. '" + playerController.getLobby().getName() + "', maxPlayers: " + lobby.getMaxPlayers() + ", NumOfPlayersInLobby: " + lobby.getPlayers().size()); + + playerController.joinLobby(playerController.getLobby().getID()); + while(playerController.getLastCommand() == null){System.out.println("NOT JOINED LOBBY YET");} + Gdx.input.setOnscreenKeyboardVisible(false); + showLobbyWindow(); + lobbyRefresh(); + } + }; + thread.start(); + } + else{ + outputLabel.setText("Lobby has no name, hehe"); + } + return true; + } + }); } - private void showCreateLobbyWindow(){ - mrServerBubbleLabel.remove(); - joinLobbyButton.remove(); - createLobbyButton.remove(); - - stage.addActor(lobbyBackButton); - stage.addActor(lobbyCreateTextField); - stage.addActor(lobbyCreateSizeSelectBox); + private void clearUIWidgets(){ + for (Actor widget: playerUIWidgets){ + widget.remove(); + } + playerUIWidgets.clear(); } - private Table lobbyRoomTable; - private void showJoinLobbyWindow(){ - lobbyRoomTable = new Table(); - mrServerBubbleLabel.remove(); - joinLobbyButton.remove(); - createLobbyButton.remove(); - stage.addActor(lobbyRoomTable); - stage.addActor(lobbyBackButton); - stage.addActor(lobbyRefreshButton); - lobbyRefresh(); + public void lobbyListRefresh(){ + Thread thread = new Thread(){ + public void run(){ + playerController.setLobbies(null); + playerController.lobbyGetList(); + while (playerController.getLastCommand() == null) { + System.out.println("Waiting for lobby list .. "); + } + ArrayList<Lobby> lobbyList = playerController.getLobbyList(); + System.out.println("Lobby loaded " + lobbyList + " Number of available lobbies are " + lobbyList.size()); + System.out.println("LobbyCount AFTER" + lobbyList.size()); + //System.out.println("LobbyCount AFTER NUM OF PLAYERS" + lobbyList.get(0).getPlayers().size()); + + lobbyListStrings = new List(skin, "plain"); + lobbyListStrings.setColor(Color.BLACK); + ArrayList<Lobby> currentLobbyList = playerController.getLobbyList(); + String[] strings; + + if(getLobbyByStringHashMap == null) getLobbyByStringHashMap = new HashMap<>(); + else getLobbyByStringHashMap.clear(); + + if(currentLobbyList.size() > 0){ + strings = new String[currentLobbyList.size()]; + for (int i = 0; i < currentLobbyList.size(); i++) { + strings[i] = currentLobbyList.get(i).getName() + "\t" + currentLobbyList.get(i).getPlayers().size()+ "/" + currentLobbyList.get(i).getMaxPlayers(); + getLobbyByStringHashMap.put(strings[i], currentLobbyList.get(i).getID()); + } + } + else{ + strings = new String[1]; + strings[0] = "No lobbies currently available."; + } + + if(scrollPane != null) scrollPane.remove(); + lobbyListStrings.setItems(strings); + scrollPane = new ScrollPane(lobbyListStrings); + scrollPane.setBounds(0, 0, col_width*4f, row_height*4); + scrollPane.setPosition(col_width*0.25f, row_height*6); + scrollPane.setSmoothScrolling(false); + scrollPane.setTransform(true); + + playerUIWidgets.add(scrollPane); + for (Actor actor: playerUIWidgets){ + stage.addActor(actor); + } + } + }; + thread.start(); + } + private void showCreateLobbyWindow(){ + clearUIWidgets(); + playerUIWidgets.add(lobbyListBackButton); + playerUIWidgets.add(lobbyCreateTextField); + playerUIWidgets.add(lobbyCreateSizeSelectBox); + playerUIWidgets.add(startLobbyButton); + lobbyListBackButton.setY(startLobbyButton.getY()); + for (Actor actor: playerUIWidgets){ + stage.addActor(actor); + } + } + private void showLobbyListWindow(){ + clearUIWidgets(); + playerUIWidgets.add(lobbyListBackButton); + playerUIWidgets.add(lobbyListRefreshButton); + playerUIWidgets.add(joinLobbyButton); + + for (Actor actor: playerUIWidgets){ + stage.addActor(actor); + } + lobbyListRefresh(); } - List<String> lobbyNames = Arrays.asList("Hello", "World!", "How", "Are", "You", "Lobby1", "Norway", "Oh yes", "No girls", "Only boys", "NTNU"); - List<String> lobbySize = Arrays.asList("2", "4", "6"); + float[] player1Pos = {col_width*3.75f, row_height*2}; + float[] player2Pos = {col_width*3.5f, row_height*1.5f}; + + float[] player3Pos = {col_width*4.3f, row_height*2}; + float[] player4Pos = {col_width*4.1f, row_height*1.5f}; + + float[] player5Pos = {col_width*5, row_height*2}; + float[] player6Pos = {col_width*4.8f, row_height*1.5f}; + + float[] player7Pos = {col_width*5.7f, row_height*2}; + float[] player8Pos = {col_width*5.5f, row_height*1.5f}; + + ArrayList<float[]> playerPositions= new ArrayList<>(Arrays.asList(player1Pos, player2Pos, player3Pos, player4Pos, player5Pos, player6Pos, player7Pos, player8Pos));; + private void lobbyRefresh(){ - if(lobbyRoomTable != null){ - lobbyRoomTable.clear(); - // models.get(availableLobbies); - lobbyRoomTable.setSize(col_width*2.5f, row_height*3f); - lobbyRoomTable.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f); - Label availableLobbyLabel = new Label("Available Lobbies", skin); - lobbyRoomTable.addActor(availableLobbyLabel); - for (int i=0; i<4; i++) { - Label lobbyEntry = new Label("LobbyName: "+ lobbyNames.get((int) MathUtils.random(lobbyNames.size()-1)) + ", LobbySize = " + lobbySize.get((int) MathUtils.random(lobbySize.size()-1)), skin); - lobbyEntry.setWrap(true); - lobbyRoomTable.addActor(lobbyEntry); + if(playerController.getLobby().getID() == -1) { + System.out.println("Player currently not in lobby."); + } + else{ + lobbyAvatars.clear(); + Lobby lobby = playerController.getLobby(); + + if(lobby.getID() == -1 || playerController.getPlayer().getIsPlayerReady()) playerReadyCheckButton.remove(); + else stage.addActor(playerReadyCheckButton); + + for (Label label : lobbyLabels) label.remove(); + for (Image image : playerReadyImages) image.remove(); + + for(int i = 0; i<lobby.getPlayers().size(); i++){ + Player player = lobby.getPlayers().get(i); + + System.out.println("Finding avatar with index: " + player.getIndexAvatar()); + System.out.println("Name is: " + availableAvatarsHashMap.get(player.getIndexAvatar())); + + String path = Enum.valueOf(CharacterAssets.class, availableAvatarsHashMap.get(player.getIndexAvatar())+"Atlas").path; + Class classType = Enum.valueOf(CharacterAssets.class, availableAvatarsHashMap.get(player.getIndexAvatar())+"Atlas").classType; + + AnimatedSprite animatedSprite = new AnimatedSprite( + (TextureAtlas) assetManager.get(path, classType), + portraitAtlas.findRegion(availableAvatarsHashMap.get(player.getIndexAvatar())+"Portrait"), + availableAvatarsHashMap.get(player.getIndexAvatar()), + 3); + + + animatedSprite.setOrigin(0, 0); + int remX = i%4; + int remY = mod(2, i+2); + int xPad = 10; + System.out.printf("remX: %d\tremY: %d\n", remX, remY); + animatedSprite.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f)); + animatedSprite.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY); + lobbyAvatars.add(animatedSprite); + + Label label = new Label("Player"+i+":\t%d" + player.getPlayerName() + "\t", skin, "black"); + label.setColor(Color.BLACK); + label.scaleBy(2f); + label.setPosition(lobbyListBubbleImage.getX()+xpad, lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*(0.9f-label.getHeight()*i-i*0.05f)); + + lobbyLabels.add(label); + + if(player.getIsPlayerReady()) { + Image image = new Image(assetManager.get(LobbyAssets.PLAYER_READY.path, Texture.class)); + image.setPosition(label.getX()+image.getWidth()+col_width*1f, label.getY()-image.getHeight()/2+label.getHeight()/2); + playerReadyImages.add(image); + } + else{ + System.out.println("Player is not ready.."); + } + stage.addActor(lobbyLabels.get(i)); + } + for (Image image : playerReadyImages){ + stage.addActor(image); } } } - private void showMainLobbyWindow(){ - if(lobbyRoomTable != null){ - lobbyRoomTable.remove(); + private int mod(int a, int b) + { + int c = (a % b + b) % b; + if(c == a){ + return 0; } - stage.addActor(createLobbyButton); - stage.addActor(joinLobbyButton); - stage.addActor(mrServerBubbleLabel); - try { - lobbyBackButton.remove(); - lobbyRefreshButton.remove(); - lobbyCreateTextField.remove(); - lobbyCreateSizeSelectBox.remove(); - - } finally { - // Do nothing here + else{ + return c; } } + private void showLobbyWindow(){ + clearUIWidgets(); + playerUIWidgets.add(lobbyBackButton); + playerUIWidgets.add(lobbyRefreshButton); - @Override - public void handleInput() { - if(Gdx.input.isTouched()) { - int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - }/* - if(Gdx.input.isButtonJustPressed(1)){ - sound.stop(); - gvm.set(new PlayView(gvm, playerController, assetManager)); - dispose(); + for (Actor actor: playerUIWidgets){ + stage.addActor(actor); } - */ } - @Override - public void update(float dt) { - stage.act(dt); - handleInput(); + private void showMainLobbyWindow(){ + clearUIWidgets(); + playerUIWidgets.add(createLobbyButton); + playerUIWidgets.add(findLobbyButton); + playerUIWidgets.add(mrServerBubbleLabel); + for (Actor actor: playerUIWidgets){ + stage.addActor(actor); + } + } + + @Override + public void dispose() { + stage.dispose(); } @Override public void render(float dt) { - if(!transitionFinished){ - fadeToWhiteTransition(dt); - } - else{ - stage.draw(); + Gdx.gl.glClearColor(1, 1, 1, 1); + + stage.draw(); + stage.getBatch().begin(); + + for(AnimatedSprite animatedSprite : lobbyAvatars){ + animatedSprite.draw(stage.getBatch()); } + + mrServer.draw(stage.getBatch()); + stage.getBatch().end(); + drawGrid(); } - private void addActorsAfterTransition(){ - stage.addActor(backgroundImage); - stage.addActor(outputLabel); - stage.addActor(rocketImage); - stage.addActor(exhaustImage); - stage.addActor(lobbyListBubbleImage); - stage.addActor(createLobbyButton); - stage.addActor(joinLobbyButton); - stage.addActor(mrServerBubbleLabel); + @Override + public void fadeIn(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha); + fadeInAlpha -= dt/fadeInLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + + if(fadeInAlpha <= 0){ + startFadeIn = false; + } } - private float alphaFade1 = 1; - private float alphaFade2 = 1; - - /* - Helper class. - Creates the logic for transitioning between two states. - Fades from a texture region to white, then from white to the current stage. - */ - private void fadeToWhiteTransition(float dt){ - if (fadeIn) { - if (alphaFade1 <= 0) { - fadeIn = false; - stage.clear(); - addActorsAfterTransition(); - outputLabel.setText("Fade to white is complete."); - } - else{ - fadeImage.setColor(1, 1, 1, alphaFade1); - alphaFade1 -= dt/fadeTransitionLength; - outputLabel.setText("Fading to white."); - stage.draw(); - } - } - else { - if(alphaFade2 <= 0){ - outputLabel.setText("Fade to normal state is complete."); - transitionFinished = true; - stage.draw(); - } - else{ - outputLabel.setText("Fade from white to background image."); - backgroundImage.setColor(1, 1, 1, 1-alphaFade2); - alphaFade2 -= dt/fadeTransitionLength; - stage.draw(); - } + @Override + public void fadeOut(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeOutAlpha += dt/fadeOutLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + if(fadeOutAlpha >= 1){ + currentSong.stop(); + stage.clear(); + startFadeout = false; + setFadeColor(Color.BLACK); + gvm.set(new CinematicView(gvm, playerController, assetManager, stage, skin, lobbyAvatars)); } + fadeOutVolume -= dt/fadeOutLength; + currentSong.setVolume(fadeOutVolume); } @Override - public void dispose() { - /* - background.dispose(); - menuForm.dispose(); - sound.dispose(); - */ + public void handleInput(float dt) { + if(Gdx.input.justTouched()){ + lastTouch[0] = Gdx.input.getX(); + lastTouch[1] = stage.getViewport().getScreenHeight()-Gdx.input.getY(); + System.out.println("Only once"); + } + if(Gdx.input.isTouched()){ + float camXPos = camera.position.x + (lastTouch[0]-Gdx.input.getX())* touchSensitivity; //camera.position.x + (Gdx.input.getX()-lastTouch[0])*sensitivity; + float camYPos = camera.position.y + (-stage.getViewport().getScreenHeight()+Gdx.input.getY()+lastTouch[1])* touchSensitivity; + + float a = MathUtils.clamp(camXPos, camera.viewportWidth/2, backgroundImage.getWidth()-camera.viewportWidth/2); + float b = MathUtils.clamp(camYPos, camera.viewportHeight/2, backgroundImage.getImageHeight()-camera.viewportHeight/2); + + camera.position.set(a, b, 0); + System.out.println("Multiple times"); + } } - private ShapeRenderer shapeRenderer; - // For debugging purposes only.. - private void drawGrid(){ - if(shapeRenderer == null){ - shapeRenderer = new ShapeRenderer(); // Used for draw debugging + + + @Override + public void update(float dt) { + stage.getCamera().update(); + + assetManager.update(); + + updateAvatarTimer+= dt; + refreshLobbyTimer += dt; + + if(updateAvatarTimer-1/Gdx.graphics.getFramesPerSecond()/2>= updateAvatarFrequency){ + for(AnimatedSprite animatedSprite : lobbyAvatars){ + animatedSprite.updateTexture(); + } + mrServer.updateTexture(); + updateAvatarTimer=0; } - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line - for (int i = 0; i < 12; i++) { - shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight()); - shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1); + + if(refreshLobbyTimer >= 1) { + lobbyRefresh(); + refreshLobbyTimer=0; + } + + stage.act(dt); + + if(playerController.getLobby().getLobbyGameStarted()){ + startFadeout = true; } - shapeRenderer.end(); } + + } diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java deleted file mode 100644 index 86567c1e037742b47b148188e9f22a152d47c888..0000000000000000000000000000000000000000 --- a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.mygdx.game.views; - -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.scenes.scene2d.Stage; -import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.mygdx.game.controllers.PlayerController; -import com.mygdx.game.views.enums.MenuAssets; - -public class MenuLoadingView extends View { - - private Texture background; - private Texture playBtn; - - public MenuLoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) { - super(gvm, playerController, assetManager, stage, skin); - - // Loading Menu Assets in the background. - for(MenuAssets asset : MenuAssets.values()) { - assetManager.load(asset.path, asset.classType); - } - - background = new Texture ("Pause/PauseBackground.png"); - playBtn = new Texture ("Pause/PauseButton.png"); - - } - - @Override - protected void handleInput() { - - } - - @Override - public void update(float dt) { - assetManager.update(); - if(assetManager.isFinished()){ - gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin)); - } - else{ - System.out.print("LOADING... "); - System.out.print( (int) MathUtils.floor(assetManager.getProgress()*100)); - System.out.print("%"); - System.out.println(""); - } - } - - @Override - public void render(float dt) { - - stage.draw(); - } - - @Override - public void dispose() { - // background.dispose(); - //playBtn.dispose(); - } -} diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java index b9e5014899aa2fcd3501c692ab478489250aa1be..0c5c69b944c6607a93816f87fda6f2d510e920c8 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java @@ -4,10 +4,10 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; -import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g3d.utils.MeshBuilder; -import com.badlogic.gdx.graphics.glutils.FrameBuffer; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; @@ -15,37 +15,60 @@ import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; -import com.badlogic.gdx.utils.Align; +import com.badlogic.gdx.scenes.scene2d.utils.Drawable; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.CharacterAssets; import com.mygdx.game.views.enums.LobbyAssets; import com.mygdx.game.views.enums.MenuAssets; +import com.mygdx.game.views.tokens.AnimatedSprite; + +import java.util.ArrayList; +import java.util.HashMap; public class MenuView extends View{ - private Texture background; + private boolean startFadeFromWhiteToBlank; + private boolean startFadeFromBlankToWhite; + + private Button formButton; + private Image backgroundImage; + private Image logoImage; private Image formImage; - private Texture form; - private Texture formButtonTex; - private Sound loopAudio; - private Button formButton; - private TextField usernameTextField; - private Texture readyBtn; + private Image connectionBarImage; + private Image connectionBarGreenCircle; + private Image connectionBarRedCircle; + private Music music; + private Sound buttonClickAudio; private Sound transitionAudio; - private ShapeRenderer shapeRenderer; - int Help_Guides = 12; - int row_height = Gdx.graphics.getHeight() / Help_Guides; - int col_width = Gdx.graphics.getWidth() / Help_Guides; + + private Texture formButtonTex; + + private TextField usernameTextField; + private Label outputLabel; - private Texture bufferTexture; - public MenuView(final GameViewManager gvm, final PlayerController playerController, final AssetManager assetManager, final Stage stage, final Skin skin) { + + private ImageButton nextAvatarButton; + private ImageButton previousAvatarButton; + private Image avatarPortraitImage; + private TextureAtlas portraitAtlas; + + + private ArrayList<AnimatedSprite> availableAvatars; + int currentIndexAvatar = 0; + + private HashMap<Integer, String> availableAvatarsHashMap; + + public MenuView(final GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin) { super(gvm, playerController, assetManager, stage, skin); for(LobbyAssets asset : LobbyAssets.values()) { @@ -53,27 +76,31 @@ public class MenuView extends View{ } shapeRenderer = new ShapeRenderer(); // Used for draw debugging - background = (Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType); - this.backgroundImage = new Image (background); + availableAvatarsHashMap = new HashMap<>(); + availableAvatarsHashMap.put(0, "RegularGuy"); + availableAvatarsHashMap.put(1, "HipsterGirl"); + availableAvatarsHashMap.put(2, "HighSchoolGuy"); + availableAvatarsHashMap.put(3, "RocketGuy"); + availableAvatarsHashMap.put(4, "AsianGirl"); + availableAvatarsHashMap.put(5, "Grandma"); - backgroundImage.setPosition(col_width*6-backgroundImage.getWidth()/2, row_height*6-backgroundImage.getHeight()/2); + this.backgroundImage = new Image ((Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType)); + backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0); + backgroundImage.setOrigin(0,0); - form = (Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType); - - music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path)); - music.setVolume(1); - music.setLooping(true); - music.play(); - - this.formImage = new Image(form); - formImage.setPosition(col_width*5, row_height*5); - formImage.setAlign((Align.center)); + formImage = new Image((Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType)); + formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*0.15f); + formImage.setOrigin(0, 0); formButtonTex = (Texture) assetManager.get(MenuAssets.FORM_BUTTON.path, MenuAssets.FORM_BUTTON.classType); - this.loopAudio = (Sound) assetManager.get(MenuAssets.LOOP_AUDIO.path, MenuAssets.LOOP_AUDIO.classType); + music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path)); buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType); transitionAudio = (Sound) assetManager.get(MenuAssets.TRANSITION_AUDIO.path, MenuAssets.TRANSITION_AUDIO.classType); + logoImage = new Image((Texture) assetManager.get(MenuAssets.LOGO.path, MenuAssets.LOGO.classType)); + logoImage.setPosition(col_width*6-logoImage.getWidth()/2, row_height*11.75f-logoImage.getHeight()); + logoImage.setOrigin(0,0); + outputLabel = new Label("Press a Button",skin,"black"); outputLabel.setSize(Gdx.graphics.getWidth(),row_height); outputLabel.setPosition(col_width*0.5f,row_height*10); @@ -81,42 +108,91 @@ public class MenuView extends View{ usernameTextField = new TextField("", skin); usernameTextField.setMessageText("Your name .."); - usernameTextField.setSize(col_width*2, row_height*1); - usernameTextField.setPosition(col_width*5-usernameTextField.getMaxWidth(),row_height*6.5f-usernameTextField.getMaxHeight()/2); + usernameTextField.setSize(formImage.getWidth()*0.75f, row_height*1); + usernameTextField.setPosition(formImage.getX()+formImage.getWidth()/2-usernameTextField.getWidth()/2,formImage.getHeight()*0.75f); + usernameTextField.setOrigin(0,0); + + formButton = new TextButton("Enter",skin,"default"); + formButton.setPosition(formImage.getX()+formImage.getWidth()/2 -formButton.getWidth()/2,formImage.getHeight()*0.08f); + + startFadeFromBlankToWhite = false; + startFadeFromWhiteToBlank = true; + + music.setVolume(1); + music.setLooping(true); + music.play(); + + Drawable drawable = new TextureRegionDrawable(new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class))); + nextAvatarButton = new ImageButton(drawable); + + TextureRegion previousAvatarButton = new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class)); + previousAvatarButton.flip(true,false); + Drawable flippedDrawable = new TextureRegionDrawable(previousAvatarButton); + this.previousAvatarButton = new ImageButton(flippedDrawable); + this.portraitAtlas = (TextureAtlas) assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType); + + TextureRegion texReggy = (TextureRegion) portraitAtlas.findRegion(availableAvatarsHashMap.get(currentIndexAvatar)+"Portrait"); + System.out.println("Finding avatar with index: " + currentIndexAvatar); + System.out.println("Name is: " + availableAvatarsHashMap.get(currentIndexAvatar)); + avatarPortraitImage = new Image(texReggy); + avatarPortraitImage.setBounds(0,0,265,265); + avatarPortraitImage.setPosition(formImage.getX()+formImage.getWidth()/2-avatarPortraitImage.getScaleX()*avatarPortraitImage.getWidth()/2, formButton.getY()+formButton.getHeight()+40); + + nextAvatarButton.setPosition(avatarPortraitImage.getX()+ avatarPortraitImage.getWidth()+col_width*0.8f-nextAvatarButton.getWidth(), avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2-nextAvatarButton.getHeight()/2); + this.previousAvatarButton.setPosition(avatarPortraitImage.getX()-col_width*0.8f, avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2- this.previousAvatarButton.getHeight()/2); + + connectionBarImage = new Image(assetManager.get(MenuAssets.CONNECTION_BAR.path, Texture.class)); + connectionBarGreenCircle = new Image(assetManager.get(MenuAssets.GREEN_CIRCLE_SMALL.path, Texture.class)); + connectionBarRedCircle = new Image(assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, Texture.class)); - formButton = new TextButton("Enter",skin,"small"); - formButton.setSize(col_width*2,(float)(row_height*0.5)); - formButton.setPosition(col_width*6-formButton.getWidth()/2,row_height*5-formButton.getHeight()/2); + connectionBarImage.setPosition(Gdx.graphics.getWidth()-connectionBarImage.getWidth(), Gdx.graphics.getHeight()-connectionBarImage.getHeight()); + connectionBarRedCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarRedCircle.getHeight()/2); + connectionBarGreenCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarGreenCircle.getHeight()/2); - formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*6-formImage.getHeight()/2); + this.previousAvatarButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + if(currentIndexAvatar >0){ + currentIndexAvatar -= 1; + updateAvatarPortrait(); + } + return true; + } + }); + + nextAvatarButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + if(availableAvatarsHashMap.size()-1 > currentIndexAvatar){ + currentIndexAvatar += 1; + updateAvatarPortrait(); + } + return true; + } + }); // Adding listeners formButton.addListener(new InputListener(){ - @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { - if(!usernameTextField.equals("Your name ..")){ + if(!usernameTextField.getText().isEmpty() && usernameTextField.getText().length() >=3 && usernameTextField.getText().length() <= 10){ buttonClickAudio.play(0.70f); transitionAudio.play(0.50f); - FrameBuffer fbo; - fbo = new FrameBuffer(Pixmap.Format.RGB888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); - fbo.begin(); - /* - stage.getBatch().begin(); - stage.getBatch().draw(background, 0, 0); - stage.getBatch().draw(form, Gdx.graphics.getWidth()/2-form.getWidth()/2, Gdx.graphics.getHeight()/2-form.getHeight()/2); - stage.getBatch().end(); - */ - stage.draw(); - fbo.end(); - gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, fbo)); + playerController.playerSetName(usernameTextField.getText()); + playerController.updateIndexAvatar(currentIndexAvatar); + startFadeout = true; + } + else{ + outputLabel.setText("Please enter a valid name. Has to be between 3 and 10 characters."); } return true; } }); - usernameTextField.addListener(new InputListener(){ + usernameTextField.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); @@ -128,83 +204,90 @@ public class MenuView extends View{ public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { buttonClickAudio.play(0.8f); if(usernameTextField.getText().isEmpty()){ - playerController.setPlayerName(usernameTextField.getText()); - outputLabel.setText(""); + outputLabel.setText(usernameTextField.getText()); } } }); - - //Stratas - /* - backgroundImage.setZIndex(1); - formImage.setZIndex(2); - usernameTextField.setZIndex(3); - formButton.setZIndex(3); - outputLabel.setZIndex(3); - - */ - //loopAudio.loop(0.9f); - // Adding the initial actors in the scene stage.addActor(backgroundImage); + stage.addActor(connectionBarImage); + stage.addActor(connectionBarRedCircle); stage.addActor(outputLabel); stage.addActor(formImage); stage.addActor(usernameTextField); stage.addActor(formButton); - + stage.addActor(nextAvatarButton); + stage.addActor(this.previousAvatarButton); + stage.addActor(avatarPortraitImage); + stage.addActor(logoImage); } - @Override - public void handleInput() { - if(Gdx.input.isTouched()) { - int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - }/* - if(Gdx.input.isButtonJustPressed(1)){ -<<<<<<< HEAD - sound.stop(); - gvm.set(new PlayView(gvm, playerController, assetManager)); -======= - music.stop(); - gvm.set(new PlayView(gvm, super.playerController)); ->>>>>>> master - dispose(); - } - */ + public void handleInput(float dt) { + + } + + private void updateAvatarPortrait(){ + System.out.println("Finding avatar with index: " + currentIndexAvatar); + System.out.println("Name is: " + availableAvatarsHashMap.get(currentIndexAvatar) + "Portrait"); + avatarPortraitImage.setDrawable(new TextureRegionDrawable( + (TextureRegion) portraitAtlas.findRegion(availableAvatarsHashMap.get(currentIndexAvatar)+"Portrait") + )); } + @Override public void update(float dt) { assetManager.update(); stage.act(dt); - handleInput(); - } @Override public void render(float dt) { + Gdx.gl.glClearColor(1, 1, 1, 1); + + if(playerController.getPlayer().getID() != -1){ + stage.addActor(connectionBarGreenCircle); + connectionBarRedCircle.remove(); + } + stage.draw(); drawGrid(); } @Override - public void dispose() { - /* - background.dispose(); -<<<<<<< HEAD - menuForm.dispose(); - sound.dispose(); - */ + public void fadeIn(float dt) { + stage.getBatch().begin(); + Color c = Color.WHITE; + stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha); + fadeInAlpha -= dt/fadeInLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + + if(fadeInAlpha <= 0){ + startFadeIn = false; + } } - // For debugging purposes only.. - private void drawGrid(){ - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(1, 0, 0, 1); // Red line - for (int i = 0; i < 12; i++) { - shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight()); - shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1); + @Override + public void fadeOut(float dt) { + stage.getBatch().begin(); + Color c = Color.WHITE; + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeOutAlpha += dt/fadeOutLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + if(fadeOutAlpha >= 1){ + stage.clear(); + startFadeout = false; + gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, availableAvatarsHashMap, music)); } - shapeRenderer.end(); + } + + + @Override + public void dispose() { + stage.dispose(); } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java index 700bdf6aab9d9363df366ef517f93f14c34d218f..9c0712a7b7193edec88ee75cdb76d026839ff9de 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java @@ -22,7 +22,7 @@ public class PauseView extends View{ } @Override - protected void handleInput() { + public void handleInput(float dt) { } @@ -39,11 +39,19 @@ public class PauseView extends View{ } @Override - public void dispose() { - background.dispose(); - playBtn.dispose(); + public void fadeIn(float dt) { } + @Override + public void fadeOut(float dt) { + + } + @Override + public void dispose() { + background.dispose(); + playBtn.dispose(); + stage.dispose(); + } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java index 09338d97a92575df7749d5369ddad4eae0ab640f..c0564ca41438fdd6d5902c8d663c935027874bed 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java @@ -1,56 +1,71 @@ package com.mygdx.game.views; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.utils.Scaling; import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.PlayAssets; +import com.mygdx.game.views.tokens.AnimatedSprite; +import com.mygdx.game.views.tokens.StarPiece; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; public class PlayView extends View{ private Texture background; private Image backgroundImage; - private Sound gameLoop; - private Sound transitionFX; + int Help_Guides = 12; int row_height = Gdx.graphics.getHeight() / Help_Guides; int col_width = Gdx.graphics.getWidth() / Help_Guides; - BitmapFont font; - protected PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) { + Texture starPieceBase; + Texture starPieceBaseBorder; + Texture starPieceMast; + Texture starPieceMastBorder; + Texture starPieceHead; + Texture starPieceHeadBorder; + + HashMap<Float[], StarPiece> pieces; + + public PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<AnimatedSprite> lobbyAvatars) { super(gvm, playerController, assetManager, stage, skin); - background = new Texture ("Game/GameBoard/0.25x/GameBoard@0.25x.png"); + background = new Texture("Game/1x/GameBoard@1x.png"); this.backgroundImage = new Image(background); - backgroundImage.setPosition(col_width*6-backgroundImage.getWidth()/2, row_height*6-backgroundImage.getHeight()/2); - stage.addActor(backgroundImage); - font = new BitmapFont(); + backgroundImage.setScaleX(0.25F); + backgroundImage.setScaleY(0.25F); + backgroundImage.setScaling(Scaling.fill); - gameLoop = Gdx.audio.newSound(Gdx.files.internal("Game/Audio/GameLoop.mp3")); - transitionFX= Gdx.audio.newSound(Gdx.files.internal("Game/Audio/TransitionFX.mp3")); - transitionFX.play(); - gameLoop.loop(0.6f); + backgroundImage.setPosition(Gdx.graphics.getWidth() / 2F - backgroundImage.getWidth() * backgroundImage.getScaleX() / 2F, Gdx.graphics.getHeight() / 2F - backgroundImage.getHeight() * backgroundImage.getScaleY() / 2F); + stage.addActor(backgroundImage); - } + for (PlayAssets asset : PlayAssets.values()) { + assetManager.load(asset.path, asset.classType); + } + assetManager.finishLoading(); - @Override - protected void handleInput() { - if(Gdx.input.isTouched()) { - int x = Gdx.input.getX() - (Gdx.graphics.getWidth() / 2); - int y = Gdx.input.getY() - (Gdx.graphics.getHeight() / 2); + setFadeColor(Color.BLACK); - System.out.println(x + ", " + y); - } - if(Gdx.input.isKeyPressed(Input.Keys.ESCAPE)){ + starPieceBase = (Texture) assetManager.get(PlayAssets.STAR_PIECE_BASE.path, PlayAssets.STAR_PIECE_BASE.classType); + starPieceBaseBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_BASE_BORDER.path, PlayAssets.STAR_PIECE_BASE_BORDER.classType); + starPieceMast = (Texture) assetManager.get(PlayAssets.STAR_PIECE_MAST.path, PlayAssets.STAR_PIECE_MAST.classType); + starPieceMastBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_MAST_BORDER.path, PlayAssets.STAR_PIECE_MAST_BORDER.classType); + starPieceHead = (Texture) assetManager.get(PlayAssets.STAR_PIECE_HEAD.path, PlayAssets.STAR_PIECE_HEAD.classType); + starPieceHeadBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_HEAD_BORDER.path, PlayAssets.STAR_PIECE_HEAD_BORDER.classType); - } + this.pieces = new HashMap<>(); } private void isGameOver(){ @@ -60,31 +75,85 @@ public class PlayView extends View{ } } + @Override + public void handleInput(float dt) { + if(Gdx.input.isTouched()) { + int x = Gdx.input.getX() - (Gdx.graphics.getWidth() / 2); + int y = Gdx.input.getY() - (Gdx.graphics.getHeight() / 2); + + System.out.println("Midtstilt: " + x + ", " + y); + System.out.println("Vanlig: " + Gdx.input.getX()); + } + } + @Override public void update(float dt) { stage.act(dt); isGameOver(); - handleInput(); } - @Override public void render(float dt) { + + stage.getBatch().begin(); + //stage.getBatch().draw(background, 0, 0); + stage.getBatch().end(); + stage.draw(); + + for (StarPiece piece : pieces.values()) { + piece.draw(stage.getBatch()); + } } - private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){ - font.draw(sb, text, xPos, yPos); + public void initializePieces(List<List<Float[]>> coordinates) { + for (List<Float[]> coordinateSet : coordinates) { + for (Float[] coordinate : coordinateSet) { + StarPiece piece = new StarPiece(coordinate[0], coordinate[1], Color.RED, starPieceBase, starPieceBaseBorder, starPieceMast, starPieceMastBorder, starPieceHead, starPieceHeadBorder); + //piece.setRotateHead(true); + pieces.put(coordinate, piece); + } + } } @Override - public void dispose() { - /* DISPOSE OBJECTS - for (Object ob: objects){ - ob.dispose(); + public void fadeIn(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeInAlpha -= dt/fadeInLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + + if(fadeInAlpha <= 0){ + startFadeIn = false; + } + } + @Override + public void fadeOut(float dt) { + stage.getBatch().begin(); + Color c = stage.getBatch().getColor(); + stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha); + fadeOutAlpha += dt/fadeOutLength; + stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides); + stage.getBatch().setColor(c); + stage.getBatch().end(); + if(fadeOutAlpha >= 1){ + stage.clear(); + startFadeout = false; + + //gvm.set(new CinematicView(gvm, playerController, assetManager, stage, skin, lobbyAvatars)); } - */ + } + + private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){ + + } + + @Override + public void dispose() { } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/View.java b/CheckersClient/core/src/com/mygdx/game/views/View.java index a702c0dcf6db495332d8e3cc5e376636560a53e0..5cc6e3558b09a2ea158f805c8ab421c1bf84cd98 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/View.java +++ b/CheckersClient/core/src/com/mygdx/game/views/View.java @@ -1,50 +1,103 @@ package com.mygdx.game.views; import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.mygdx.game.controllers.PlayerController; + public abstract class View extends ApplicationAdapter { protected OrthographicCamera cam; - protected Vector3 mouse; + protected float[] lastTouch = new float[2];; protected final GameViewManager gvm; - protected PlayerController playerController; - protected AssetManager assetManager; - protected Stage stage; + protected final PlayerController playerController; + protected final AssetManager assetManager; + protected final Stage stage; protected Skin skin; + + protected final int Help_Guides = 12; + protected final int row_height = Gdx.graphics.getHeight() / Help_Guides; + protected final int col_width = Gdx.graphics.getWidth() / Help_Guides; + protected final float xpad = col_width/2; + protected final float ypad = row_height/2; + + protected ShapeRenderer shapeRenderer; + protected float fadeInAlpha; + protected float fadeOutAlpha; + protected float fadeInLength; + protected float fadeOutLength; + + protected boolean startFadeout; + protected boolean startFadeIn; + protected Texture fadeOverlayTexture; + protected View(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){ this.gvm = gvm; this.stage = stage; this.assetManager = assetManager; this.skin = skin; cam = new OrthographicCamera(); - mouse = new Vector3(); this.playerController = playerController; + this.shapeRenderer = new ShapeRenderer(); + + fadeInAlpha = 1; + fadeOutAlpha= 0; + startFadeIn = true; + startFadeout = false; + fadeInLength = 1; + fadeOutLength = 1; + + Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + tablePixmap.setColor(Color.WHITE); + tablePixmap.fill(); + fadeOverlayTexture = new Texture(tablePixmap); } - protected abstract void handleInput(); + public abstract void handleInput(float dt); public abstract void update(float dt); public abstract void render(float dt); + public abstract void fadeIn(float dt); + public abstract void fadeOut(float dt); public abstract void dispose(); - public Skin getSkin(){ - return skin; - } - public Stage getStage(){ - return stage; + public boolean getStartFadeIn(){ + return startFadeIn; } - public AssetManager getAssetManager(){ - return assetManager; + + public boolean getStartFadeOut(){ + return startFadeout; } - public GameViewManager getGameViewManager(){ - return gvm; + protected void setFadeColor(Color c){ + Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + tablePixmap.setColor(c); + tablePixmap.fill(); + fadeOverlayTexture = new Texture(tablePixmap); } + protected void drawGrid(){ + if(shapeRenderer == null){ + shapeRenderer = new ShapeRenderer(); + } + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line + for (int i = 0; i < 12; i++) { + shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight()); + shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1); + } + shapeRenderer.end(); + } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java new file mode 100644 index 0000000000000000000000000000000000000000..c77661dbc6838fc15a8573c98c30685841f0ccbd --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java @@ -0,0 +1,23 @@ +package com.mygdx.game.views.enums; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +public enum CharacterAssets { + + AsianGirlAtlas("characters/atlases/AsianGirl.atlas", TextureAtlas.class), + GrandmaAtlas("characters/atlases/Grandma.atlas", TextureAtlas.class), + HighSchoolGuyAtlas("characters/atlases/HighSchoolGuy.atlas", TextureAtlas.class), + HipsterGirlAtlas("characters/atlases/HipsterGirl.atlas", TextureAtlas.class), + RegularGuyAtlas("characters/atlases/RegularGuy.atlas", TextureAtlas.class), + RocketGuyAtlas("characters/atlases/RocketGuy.atlas", TextureAtlas.class), + PortraitsAtlas("characters/atlases/Portraits.atlas", TextureAtlas.class); + + public final String path; + public final Class classType; + + private CharacterAssets(String menuAssetPath, Class classType) { + this.path = menuAssetPath; + this.classType = classType; + } +} \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java new file mode 100644 index 0000000000000000000000000000000000000000..77ac1e41ed59c63fdf6c8965841916b2b9dd653e --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java @@ -0,0 +1,19 @@ +package com.mygdx.game.views.enums; + +import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +public enum CinematicAssets { + + CINEMATIC_AUDIO("cinematic/CinematicMusic.mp3", Music.class), + COUNT_DOWN_ATLAS("cinematic/atlas/CountDown.atlas", TextureAtlas.class), + CLOUD_ATLAS("cinematic/atlas/Cloud.atlas", TextureAtlas.class); + + public final String path; + public final Class classType; + + CinematicAssets(String assetPath, Class classType) { + this.path = assetPath; + this.classType = classType; + } +} \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java index b57ecc40aaef0f875cee6bee3121418c80356f26..4b27859d170fa984718572be93a6004e1ed7bf45 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java @@ -1,13 +1,25 @@ package com.mygdx.game.views.enums; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.TextureArray; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; public enum LobbyAssets { - LOBBYLIST("Menu/1x/LobbyList.png", Texture.class), + LOBBY_LIST("Menu/1x/LobbyList.png", Texture.class), BACKGROUND("Menu/1x/LobbyMenu@1x.png", Texture.class), - ROCKET("Menu/1x/Rocket_Main@1x.png", Texture.class), - ROCKETEXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class); + LOBBY("Menu/1x/Lobby.png", Texture.class), + MR_SERVER_ATLAS("characters/atlases/MrServer.atlas", TextureAtlas.class), + MR_SERVER_NAME("characters/MrServerName.png", Texture.class), + MR_SERVER_BUBBLE_SQUARE("Menu/1x/MrServerBubbleSquare.png", Texture.class), + MR_SERVER_BUBBLE_POINTER("Menu/1x/MrServerBubblePointer.png", Texture.class), + + ROCKET_BIG("Menu/1x/Rocket_Main@1x.png", Texture.class), + ROCKET_SMALL("Menu/1x/Rocket_Small@1x.png", Texture.class), + ROCKET_EXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class), + PLAYER_READY_CHECK("Menu/1x/PlayerReadyCheck.png", Texture.class), + PLAYER_READY("Menu/1x/PlayerReady.png", Texture.class); + public final String path; public final Class classType; diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java index b4489177112b3c9816ceeab337af0c3fb244280f..b461218431ef6f34418a71894fb57be9fd464dae 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java @@ -1,17 +1,22 @@ package com.mygdx.game.views.enums; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.BitmapFont; public enum MenuAssets { FORM_BUTTON("Menu/1x/FormButton.png", Texture.class), BACKGROUND("Menu/1x/MainMenu@1x.png", Texture.class), + LOGO("Menu/1x/SpaceCheckersLogoWithBackground.png", Texture.class), FORM("Menu/1x/MainMenuForm.png", Texture.class), LOOP_AUDIO("Menu/MenuLoop.mp3",Sound .class), BUTTON_CLICK_AUDIO("Menu/ButtonClick1.mp3",Sound .class), - TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class); + TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class), + + NEXT_AVATAR_BUTTON("Menu/1x/flipButton.png",Texture.class), + CONNECTION_BAR("Menu/1x/ConnectionBar.png",Texture.class), + GREEN_CIRCLE_SMALL("Menu/1x/GreenCircleSmall.png",Texture.class), + RED_CIRCLE_SMALL("Menu/1x/RedCircleSmall.png",Texture.class); + public final String path; public final Class classType; diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java new file mode 100644 index 0000000000000000000000000000000000000000..735057d8b89bdd4dce271fd7e1e3e5901263bd0e --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java @@ -0,0 +1,23 @@ +package com.mygdx.game.views.enums; + +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Texture; + + +public enum PlayAssets { + + STAR_PIECE_BASE("Game/1x/StarPiece_Base.png", Texture.class), + STAR_PIECE_BASE_BORDER("Game/1x/StarPiece_BaseBrd.png", Texture.class), + STAR_PIECE_HEAD("Game/1x/StarPiece_Head.png", Texture.class), + STAR_PIECE_HEAD_BORDER("Game/1x/StarPiece_HeadBrd.png", Texture.class), + STAR_PIECE_MAST("Game/1x/StarPiece_Mast.png", Texture.class), + STAR_PIECE_MAST_BORDER("Game/1x/StarPiece_MastBrd.png", Texture.class); + + public final String path; + public final Class classType; + + PlayAssets(String menuAssetPath, Class classType) { + this.path = menuAssetPath; + this.classType = classType; + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java b/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java new file mode 100644 index 0000000000000000000000000000000000000000..f3ff1823cb2a1ebabe45457a9c3340325f37574d --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java @@ -0,0 +1,54 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.mygdx.game.views.tokens; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureRegion; + +public class AnimatedSprite extends Sprite { + + private final TextureRegion portrait; + private final String name; + private final TextureAtlas textureAtlas; + private int currentFrame = 1; + private final int maxFrame; + private boolean reversed = false; + + + public AnimatedSprite(TextureAtlas textureAtlas, TextureRegion portrait, String name, int maxFrame) { + super(textureAtlas.findRegion(name+1)); + this.portrait = portrait; + this.name = name; + this.maxFrame = maxFrame; + this.textureAtlas = textureAtlas; + } + + public void updateTexture() { + if (reversed) { + --currentFrame; + if (currentFrame == 1) { + reversed = false; + } + } else { + ++currentFrame; + if (currentFrame == maxFrame) { + reversed = true; + } + } + setRegion(textureAtlas.findRegion(name+currentFrame)); + } + + + public TextureRegion getPortrait() { + return this.portrait; + } + + public String getName() { + return this.name; + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java b/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java new file mode 100644 index 0000000000000000000000000000000000000000..dd197e8183e6b186dec51da2cc8c5e9f2979fc7d --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java @@ -0,0 +1,133 @@ +package com.mygdx.game.views.tokens; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.Sprite; + +public class StarPiece { + + private final Color color; + private Texture base; + private Texture baseBorder; + private float xPos; + private float yPos; + + private Texture mast; + private Texture mastBorder; + + private Texture head; + private Texture headBorder; + private boolean rotateHead; + private float headRotation = 1; + + public StarPiece (float xPos, float yPos, Color color, Texture base, Texture baseBorder, Texture mast, Texture mastBorder, Texture head, Texture headBorder){ + + this.xPos = xPos; + this.yPos = yPos; + this.color = color; + + this.base = base; + this.baseBorder = baseBorder; + this.mast = mast; + this.mastBorder = mastBorder; + this.head = head; + this.headBorder = headBorder; + this.rotateHead=false; + } + + + public void draw(Batch sb){ + Color sbColor = sb.getColor(); + sb.begin(); + sb.setColor(color); + sb.draw(base, xPos, yPos); + sb.setColor(Color.BLACK); + sb.draw(baseBorder, xPos, yPos); + + sb.setColor(color); + sb.draw(mast, xPos+base.getWidth()/2-mast.getWidth()/2, yPos+base.getHeight()*0.35f); + sb.setColor(Color.BLACK); + sb.draw(mastBorder, xPos+base.getWidth()/2-mast.getWidth()/2, yPos+base.getHeight()*0.35f); + + if(rotateHead){ + sb.setColor(color); + + sb.draw(head, + xPos+base.getWidth()/2-head.getWidth()/2, + yPos+base.getHeight()-head.getWidth()/2, + head.getWidth()/2, + head.getHeight()/2, + head.getWidth(), + head.getHeight(), + 1f, + 1f, + headRotation++, + 0, + 0, + head.getWidth(), + head.getHeight(), + false, + false); + + sb.setColor(Color.BLACK); + sb.draw(headBorder, + xPos+base.getWidth()/2-head.getWidth()/2, + yPos+base.getHeight()-head.getWidth()/2, + head.getWidth()/2, + head.getHeight()/2, + head.getWidth(), + head.getHeight(), + 1f, + 1f, + headRotation++, + 0, + 0, + head.getWidth(), + head.getHeight(), + false, + false); + } + else{ + sb.setColor(color); + sb.draw(head, xPos+base.getWidth()/2-head.getWidth()/2, yPos+base.getHeight()-head.getWidth()/2); + sb.setColor(Color.BLACK); + sb.draw(headBorder, xPos+base.getWidth()/2-head.getWidth()/2, yPos+base.getHeight()-head.getWidth()/2); + } + + sb.setColor(sbColor); + sb.end(); + } + + public void setRotateHead(boolean rotateHead){ + this.rotateHead = rotateHead; + } + + + public void setX(float xPos){ + this.xPos = xPos; + } + + public void setY(float yPos){ + this.yPos = yPos; + } + + public float getX(){ + return xPos; + } + + public float getY(){ + return yPos; + } + + public void setPosition(float xPos, float yPos){ + this.xPos = xPos; + this.yPos = yPos; + } + + + + + + +} diff --git a/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..50fec341c8000eb96f59c19192ccb94fd1f8912d --- /dev/null +++ b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml @@ -0,0 +1,9 @@ +<component name="libraryTable"> + <library name="Gradle: CheckersServer.core.core-1.0"> + <CLASSES> + <root url="jar://$PROJECT_DIR$/core/build/libs/core-1.0.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> +</component> \ No newline at end of file diff --git a/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd --- /dev/null +++ b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml @@ -0,0 +1,11 @@ +<component name="libraryTable"> + <library name="Gradle: org.javatuples:javatuples:1.2"> + <CLASSES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" /> + </SOURCES> + </library> +</component> \ No newline at end of file diff --git a/CheckersServer/build.gradle b/CheckersServer/build.gradle index c5f57c6b5dcd11f5867a795bf1dcec2c4fe27208..d8825f555768b1081e122ce6ce88fda6c4bd8591 100644 --- a/CheckersServer/build.gradle +++ b/CheckersServer/build.gradle @@ -10,11 +10,8 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:4.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" - - - } } @@ -53,6 +50,7 @@ project(":desktop") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } @@ -79,6 +77,7 @@ project(":android") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } @@ -92,5 +91,6 @@ project(":core") { api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1" + implementation group: "org.javatuples", name: 'javatuples', version: "1.2" } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt b/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt deleted file mode 100644 index 132c9615d9d596862f77abe67fd9035d73672b7a..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.controller - -class CameraController { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java index 18c9ad7015af7207b2eeee3a46afa3d8edbbf8ff..fc3b72f22cdb075d7788ae99ebf6552bf4be237d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java @@ -10,11 +10,12 @@ import com.mygdx.game.model.Player; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; public class NetworkController { - private final int MAX_PLAYERS = 2; - private final int MAX_LOBBIES = 2; + private final int MAX_PLAYERS = 8; + private final int MAX_LOBBIES = 40; private ArrayList<Player> players; private ArrayList<Lobby> lobbies; @@ -52,9 +53,9 @@ public class NetworkController { }); } - public Player playerJoin(int newID){ + public Player playerJoin(int newID, int indexAvatar){ if(players.size() < MAX_PLAYERS){ - Player player = new Player(newID); + Player player = new Player(newID, indexAvatar); players.add(player); return player; } @@ -63,13 +64,27 @@ public class NetworkController { public void playerKick(int id){ int index = players.indexOf(new Player(id)); - if (index!= -1) players.remove(index); + if (index!= -1) { + if (lobbies.size() > 0) { + for(Lobby lobby : lobbies){ + if(lobby.getPlayersID().contains(id)){ + ArrayList<Connection> connections = getConnections(lobby); + cLobbyLeave command = new cLobbyLeave(leaveLobby(id, lobby.getID())); + for(Connection c : connections){ + c.sendTCP(command); + } + break; + } + } + } + players.remove(index); + } } - public Lobby createLobby(int MAX_PLAYERS){ + public Lobby createLobby(String name, int MAX_PLAYERS){ if(lobbies.size() < MAX_LOBBIES){ lobby_id++; - Lobby lobby = new Lobby(lobby_id, MAX_PLAYERS); + Lobby lobby = new Lobby(lobby_id, name, MAX_PLAYERS); lobbies.add(lobby); return lobby; } @@ -83,36 +98,50 @@ public class NetworkController { } public Lobby joinLobby(int playerID, int lobbyID){ - int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); - int player_idx = players.indexOf(new Player(playerID)); - if (lobby_idx != -1 && player_idx != -1) { - Lobby lobby = lobbies.get(lobby_idx); - Player player = players.get(player_idx); + Lobby lobby = getLobby(lobbyID); + Player player = getPlayer(playerID); + if (lobby.getID() != -1 && player.getID() != -1) { if(lobby.playerJoin(player) != -1){ - lobbies.set(lobby_idx, lobby); + lobbies.set(lobbies.indexOf(lobby), lobby); return lobby; } } return new Lobby(-1); } - public int leaveLobby(int playerID, int lobbyID){ - int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); - int player_idx = players.indexOf(new Player(playerID)); - if (lobby_idx != -1 && player_idx != -1) { - Lobby lobby = lobbies.get(lobby_idx); - Player player = players.get(player_idx); + public Lobby leaveLobby(int playerID, int lobbyID){ + Lobby lobby = getLobby(lobbyID); + Player player = getPlayer(playerID); + if (lobby.getID() != -1 && player.getID() != -1) { if(lobby.playerKick(player) != -1){ - if(lobby.getPlayersCount() == 0) deleteLobby(lobby_idx); - else lobbies.set(lobby_idx, lobby); - return 0; + if(lobby.getPlayersCount() == 0) deleteLobby(lobbyID); + else lobbies.set(lobbies.indexOf(lobby), lobby); + return lobby; } } - return -1; + return new Lobby(-1); + } + + public Lobby getLobby(int lobbyID){ + int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); + if (lobby_idx != -1){ + return lobbies.get(lobby_idx); + } + return new Lobby(-1); + } + + public Player getPlayer(int playerID){ + int player_idx = players.indexOf(new Player(playerID)); + if (player_idx != -1){ + return players.get(player_idx); + } + return new Player(-1); } public ArrayList<Lobby> getLobbies(){ return lobbies; } + public ArrayList<Player> getPlayers(){ return players; } + public void registerClasses(){ kryo.register(ArrayList.class, 100); kryo.register(Lobby.class, 5); @@ -125,10 +154,21 @@ public class NetworkController { kryo.register(cLobbyLeave.class, 22); kryo.register(cLobbyDelete.class, 23); kryo.register(cLobbyGetList.class, 24); + kryo.register(cSetIndexAvatar.class, 25); + kryo.register(cSetPlayerReady.class, 26); + kryo.register(cSetPlayerName.class, 27); + kryo.register(cStartGame.class, 28); } public NetworkController getNetworkController() { return this; } - public Connection[] getConnections(){ return server.getConnections(); } + public ArrayList<Connection> getConnections(Lobby lobby){ + HashSet<Integer> players_id = lobby.getPlayersID(); + ArrayList<Connection> connections = new ArrayList<Connection>(); + for (Connection c : server.getConnections()) { + if (players_id.contains((Integer) c.getID())) connections.add(c); + } + return connections; + } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java index e0a85104aacf5e6967b3de07f8ae197eb8a16f60..06c2633c9e2718e9766088afad23cf65728902cc 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java @@ -6,6 +6,8 @@ import com.mygdx.game.controller.commands.Command; import com.mygdx.game.model.Lobby; import com.mygdx.game.model.Player; +import java.util.ArrayList; + public class cLobbyCreate extends Command { public cLobbyCreate() { super("cLobbyCreate"); } @@ -14,9 +16,10 @@ public class cLobbyCreate extends Command { @Override public void execute(NetworkController net, Connection connection){ - if(data instanceof Integer){ - int MAX_PLAYERS = (int) data; - data = net.createLobby(MAX_PLAYERS); + if(data instanceof ArrayList){ + String name = (String) ((ArrayList) data).get(0); + int MAX_PLAYERS = (int) ((ArrayList) data).get(1); + data = net.createLobby(name, MAX_PLAYERS); System.out.printf("Request to create lobby received. Returning Lobby w. ID: %d \n", ((Lobby)data).getID()); connection.sendTCP(this); } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java index 09736981208b8473d4c22158ceb726f9be2c91fb..029006dfdf6409a238319fef327e5c869f907c43 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java @@ -14,23 +14,14 @@ public class cLobbyDelete extends Command{ public void execute(NetworkController net, Connection connection){ if(data instanceof Integer) { int lobby_id = (int) data; - int lobby_idx = net.getLobbies().indexOf(new Lobby(lobby_id)); - if (lobby_idx != -1) { - //Notify all players in the lobby - Lobby lobby = net.getLobbies().get(lobby_idx); - HashSet<Integer> players_id = lobby.getPlayersID(); - data = (Integer) net.deleteLobby(lobby_id); - for (Connection c : net.getConnections()) { - if (players_id.contains((Integer) c.getID())) c.sendTCP(this); - } - } - else { - //Notify the sender only - data = (Integer) net.deleteLobby(lobby_id); - connection.sendTCP(this); - } + Lobby lobby = net.getLobby(lobby_id); + //Notify all players in the lobby + data = (Integer) net.deleteLobby(lobby_id); System.out.printf("Request from Player w. ID: %d to delete Lobby w. ID: %d. Returning code: %d \n", connection.getID(), lobby_id, ((Integer) data)); + for (Connection c : net.getConnections(lobby)) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java index b49e1547e05e03677e92cb7d6e57731a9dec7fd6..6ccd56a74c4d2f52823b12bc1e2627b77048e14d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java @@ -16,5 +16,6 @@ public class cLobbyGetList extends Command{ data = net.getLobbies(); System.out.printf("Request to get list of lobbies from Client. Returning: %s \n", data.toString()); connection.sendTCP(this); + System.out.println("Number of available lobbies" + net.getLobbies().size()); } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java index 6cb5990df1c0873976f41488d239ec621bed8d71..e27c87eb04923377c80eea1d421a2d05ec27327f 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java @@ -17,7 +17,9 @@ public class cLobbyJoin extends Command{ data = net.joinLobby(connection.getID(), lobby_id); System.out.printf("Request from Player w. ID: %d to join Lobby w. ID: %d. Returning Lobby w. ID: %d \n", connection.getID(), lobby_id, ((Lobby)data).getID()); - connection.sendTCP(this); + for (Connection c : net.getConnections(net.getLobby(lobby_id))) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java index 12ff2fa5f909ba25b1c94f7ec6b61c8cf9da0ffa..d21ef48818cd6ce678666110eb275672ab18b77e 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java @@ -4,20 +4,28 @@ import com.esotericsoftware.kryonet.Connection; import com.mygdx.game.controller.NetworkController; import com.mygdx.game.model.Lobby; +import java.util.ArrayList; import java.util.HashSet; public class cLobbyLeave extends Command{ public cLobbyLeave() { super("cLobbyLeave"); } + public cLobbyLeave(Lobby lobby) { super("cLobbyLeave", lobby); } + @Override public void execute(NetworkController net, Connection connection){ if(data instanceof Integer) { int lobby_id = (int) data; - data = (Integer) net.leaveLobby(connection.getID(),lobby_id); - System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning code: %d \n", - connection.getID(), lobby_id, ((Integer)data)); - connection.sendTCP(this); + Lobby lobby = net.getLobby(lobby_id); + ArrayList<Connection> connections = net.getConnections(lobby); + data = net.leaveLobby(connection.getID(),lobby_id); + net.getPlayer(connection.getID()).setIsPlayerReady(false); + System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning Lobby w. ID: %d \n", + connection.getID(), lobby_id, ((Lobby)data).getID()); + for (Connection c : connections) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java index 5bca00f6ca8b356c64af42ec2c8fe08f67097dc3..c99cadce1f7c244f7dd26c2586647b8326fb577d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java @@ -14,9 +14,12 @@ public class cPlayerJoin extends Command { @Override public void execute(NetworkController net, Connection connection){ - data = net.playerJoin(connection.getID()); - System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID()); - connection.sendTCP(this); - if(((Player)data).getID() == -1) connection.close(); + if (data instanceof Integer){ + int indexAvatar = (int) data; + data = net.playerJoin(connection.getID(), indexAvatar); + System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID()); + connection.sendTCP(this); + if(((Player)data).getID() == -1) connection.close(); + } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java new file mode 100644 index 0000000000000000000000000000000000000000..a3dc1e88d5891fc0ee138c48e3186c142c6b39b3 --- /dev/null +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java @@ -0,0 +1,35 @@ +package com.mygdx.game.controller.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controller.NetworkController; +import com.mygdx.game.model.Player; + +import java.util.HashSet; + +public class cSetIndexAvatar extends Command { + + public cSetIndexAvatar() { super("cLobbyJoin"); } + + public cSetIndexAvatar(int indexAvatar) { + super("cSetIndexAvatar", indexAvatar); + } + + @Override + public void execute(NetworkController net, Connection connection){ + if(data instanceof Integer){ + int indexAvatar = (int) data; + if (indexAvatar == -1) System.out.println("Failed to set index avatar."); + else { + for (Player p : net.getPlayers()) { + if(p.getID() == connection.getID()){ + p.setIndexAvatar(indexAvatar); + connection.sendTCP(this); + } + else{ + connection.sendTCP(new cSetIndexAvatar(-1)); + } + } + } + } + } +} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java new file mode 100644 index 0000000000000000000000000000000000000000..323be48847559289ea56bd005f016e208f8dbd27 --- /dev/null +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java @@ -0,0 +1,27 @@ +package com.mygdx.game.controller.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controller.NetworkController; +import com.mygdx.game.model.Lobby; +import com.mygdx.game.model.Player; + +import org.javatuples.Pair; + +public class cSetPlayerName extends Command{ + + public cSetPlayerName() { super("cLobbyJoin"); } + + public cSetPlayerName(String name) { + super("cLobbyJoin", name); + } + + @Override + public void execute(NetworkController net, Connection connection){ + if(data instanceof String){ + String name = (String) data; + net.getPlayer(connection.getID()).setPlayerName(name); + connection.sendTCP(this); + System.out.printf("Player name is updated. %s \n", name); + } + } +} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java new file mode 100644 index 0000000000000000000000000000000000000000..eb793ad0742c6e7f9473a98834db1876a8c5c7a7 --- /dev/null +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java @@ -0,0 +1,46 @@ +package com.mygdx.game.controller.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controller.NetworkController; +import com.mygdx.game.model.Lobby; + +public class cSetPlayerReady extends Command{ + + public cSetPlayerReady() { super("cSetPlayerReady"); } + + private int lobbyID; + private int playerID; + + public cSetPlayerReady(boolean isPlayerReady, int lobbyID) { + super("cSetPlayerReady", isPlayerReady); + this.lobbyID = lobbyID; + this.playerID = playerID; + } + + public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) { + super("cSetPlayerReady", isPlayerReady); + this.lobbyID = lobbyID; + this.playerID = playerID; + } + + @Override + public void execute(NetworkController net, Connection connection){ + if(data instanceof Boolean){ + boolean isPlayerReady = (Boolean) data; + net.getPlayer(connection.getID()).setIsPlayerReady(isPlayerReady); + Lobby lobby = net.getLobby(lobbyID); + + for (Connection c : net.getConnections(lobby)) { + c.sendTCP(new cSetPlayerReady(isPlayerReady, lobbyID, connection.getID())); + } + + if(lobby.isFullAndReady()){ + for (Connection c : net.getConnections(lobby)) { + c.sendTCP(new cStartGame()); + } + System.out.printf("Lobby %b is about to start. \n", lobbyID); + } + System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady); + } + } +} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java new file mode 100644 index 0000000000000000000000000000000000000000..0b907c8dfca301ccf82f729926856a99d7f9ddb4 --- /dev/null +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java @@ -0,0 +1,17 @@ +package com.mygdx.game.controller.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controller.NetworkController; +import com.mygdx.game.model.Lobby; + +public class cStartGame extends Command{ + + public cStartGame() { super("cStartGame"); } + + public cStartGame(int id) { super("cStartGame", (Integer) id); } + + @Override + public void execute(NetworkController net, Connection connection){ + + } +} diff --git a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt b/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt deleted file mode 100644 index 1313b07b8081f83d858636c649b39a408cf1ed81..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.managers - -class ViewManager { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java index d558e7b2bb432894d846e8986a90bc1bb192f317..46496c47e23935f2a684e44961b033296ccf0ed7 100644 --- a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java +++ b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java @@ -6,6 +6,7 @@ import java.util.HashSet; public class Lobby { private int ID; + private String name; private int MAX_PLAYERS; private ArrayList<Player> players; @@ -16,14 +17,15 @@ public class Lobby { players = new ArrayList<Player>(); } - public Lobby(int ID, int MAX_PLAYERS){ + public Lobby(int ID, String name, int MAX_PLAYERS){ this.ID = ID; + this.name = name; this.MAX_PLAYERS = MAX_PLAYERS; players = new ArrayList<Player>(); } public int playerJoin(Player player){ - if(players.size() < MAX_PLAYERS){ + if(players.size() < MAX_PLAYERS && !getPlayersID().contains(player.getID())){ players.add(player); return 0; } @@ -48,8 +50,40 @@ public class Lobby { return set; } + public Player getPlayerByID(int playerID){ + + Player returnPlayer = null; + + for (Player player : players){ + if (player.getID() == playerID) returnPlayer = player; + } + + return returnPlayer; + } + + public ArrayList<Player> getPlayers(){ + return players; + } + public int getPlayersCount(){ return players.size(); } + public boolean isFullAndReady(){ + if(MAX_PLAYERS == getPlayersCount()){ + for(Player player : players){ + if(!player.getIsPlayerReady()) { + System.out.println("This should run only once."); + return false; + } + } + System.out.println("This should run a few times."); + return true; + } + else{ + System.out.println("This should many times."); + return false; + } + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -62,6 +96,7 @@ public class Lobby { public String toString() { return "Lobby{" + "ID=" + ID + + ", name='" + name + '\'' + ", MAX_PLAYERS=" + MAX_PLAYERS + ", players=" + players + '}'; diff --git a/CheckersServer/core/src/com/mygdx/game/model/Player.java b/CheckersServer/core/src/com/mygdx/game/model/Player.java index dcdbf53880bf6148551ec35aeb51bf52d017b6e2..4d983c30a153da076fdf5657e701a2152c556863 100644 --- a/CheckersServer/core/src/com/mygdx/game/model/Player.java +++ b/CheckersServer/core/src/com/mygdx/game/model/Player.java @@ -3,11 +3,17 @@ package com.mygdx.game.model; public class Player { private int ID; + private int indexAvatar; + private String playerName; + private boolean isPlayerReady; public Player(){} - public Player(int ID){ + public Player(int ID){ this.ID = ID; } + + public Player(int ID, int indexAvatar){ this.ID = ID; + this.indexAvatar = indexAvatar; } public int getID(){ return ID; } @@ -27,4 +33,27 @@ public class Player { '}'; } + public void setIndexAvatar(int indexAvatar){ + this.indexAvatar = indexAvatar; + } + + public int getPlayerAvatar(int indexAvatar){ + return this.indexAvatar; + } + + public void setPlayerName(String playerName) { + this.playerName = playerName; + } + + public String getPlayerName(){ + return this.playerName; + } + + public void setIsPlayerReady(boolean isPlayerReady) { + this.isPlayerReady = isPlayerReady; + } + + public boolean getIsPlayerReady(){ + return this.isPlayerReady; + } } diff --git a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt b/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt deleted file mode 100644 index 18c8c08a3333370e4e003f0b0019270a5f8fe7c7..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.singletons - -class AssetLoader { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt b/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt deleted file mode 100644 index a6cdbeb1eb6158a79c848759219690491cb88d41..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.mygdx.game.views - -abstract class AbstractView { - -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt b/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt deleted file mode 100644 index 2564b4066b150acea47b864812f917a1d1c0f90a..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class JoinView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt deleted file mode 100644 index 817f848849cfb382d9c19f2b617598acb4bb8bce..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LoadingView : WaitingView() { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt b/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt deleted file mode 100644 index 0db2ca11a2a33c8425cc298d64d333bca1d07b48..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LobbyView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt deleted file mode 100644 index c7557ddd383976a73e3af964301a27618e395cbe..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LoginView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt b/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt deleted file mode 100644 index 38edc85c3f81329ca929b58ba92e46a6e4c9f1bf..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -open class WaitingView{ -} \ No newline at end of file