From 2545ff017dd746cde3f1fc9e3ffdb31b790e1cd9 Mon Sep 17 00:00:00 2001 From: kuviman Date: Fri, 17 Jan 2020 00:53:39 +0400 Subject: [PATCH] App sources --- app-src/.gitignore | 4 + app-src/Cargo.toml | 19 + app-src/README.md | 19 + app-src/src/bin/client_gen/cpp/CMakeLists.txt | 14 + app-src/src/bin/client_gen/cpp/Debug.cpp | 11 + app-src/src/bin/client_gen/cpp/Debug.hpp | 17 + app-src/src/bin/client_gen/cpp/Dockerfile | 6 + app-src/src/bin/client_gen/cpp/MyStrategy.cpp | 65 ++ app-src/src/bin/client_gen/cpp/MyStrategy.hpp | 16 + app-src/src/bin/client_gen/cpp/TcpStream.cpp | 131 +++ app-src/src/bin/client_gen/cpp/TcpStream.hpp | 35 + app-src/src/bin/client_gen/cpp/compile.sh | 14 + app-src/src/bin/client_gen/cpp/main.cpp | 52 ++ app-src/src/bin/client_gen/cpp/run.sh | 4 + app-src/src/bin/client_gen/csharp/Debug.cs | 18 + app-src/src/bin/client_gen/csharp/Dockerfile | 20 + .../src/bin/client_gen/csharp/MyStrategy.cs | 71 ++ app-src/src/bin/client_gen/csharp/Runner.cs | 57 ++ .../bin/client_gen/csharp/aicup2019.csproj | 8 + app-src/src/bin/client_gen/csharp/compile.sh | 12 + app-src/src/bin/client_gen/csharp/run.sh | 4 + app-src/src/bin/client_gen/dlang/Dockerfile | 6 + app-src/src/bin/client_gen/dlang/app.d | 75 ++ app-src/src/bin/client_gen/dlang/compile.sh | 13 + app-src/src/bin/client_gen/dlang/debugger.d | 14 + app-src/src/bin/client_gen/dlang/dub.json | 3 + .../src/bin/client_gen/dlang/my_strategy.d | 64 ++ app-src/src/bin/client_gen/dlang/run.sh | 4 + app-src/src/bin/client_gen/fsharp/Debug.fs | 7 + app-src/src/bin/client_gen/fsharp/Dockerfile | 20 + .../src/bin/client_gen/fsharp/MyStrategy.fs | 47 ++ app-src/src/bin/client_gen/fsharp/Runner.fs | 55 ++ .../bin/client_gen/fsharp/aicup2019.fsproj | 42 + app-src/src/bin/client_gen/fsharp/compile.sh | 12 + app-src/src/bin/client_gen/fsharp/run.sh | 4 + app-src/src/bin/client_gen/go/Dockerfile | 6 + app-src/src/bin/client_gen/go/compile.sh | 13 + app-src/src/bin/client_gen/go/debug.go | 18 + app-src/src/bin/client_gen/go/go.mod | 3 + app-src/src/bin/client_gen/go/main.go | 91 +++ app-src/src/bin/client_gen/go/my_strategy.go | 73 ++ app-src/src/bin/client_gen/go/run.sh | 4 + app-src/src/bin/client_gen/java/Debug.java | 19 + app-src/src/bin/client_gen/java/Dockerfile | 6 + .../src/bin/client_gen/java/MyStrategy.java | 59 ++ app-src/src/bin/client_gen/java/Runner.java | 51 ++ app-src/src/bin/client_gen/java/compile.sh | 13 + app-src/src/bin/client_gen/java/pom.xml | 55 ++ app-src/src/bin/client_gen/java/run.sh | 4 + .../src/bin/client_gen/javascript/Dockerfile | 4 + .../src/bin/client_gen/javascript/compile.sh | 12 + .../src/bin/client_gen/javascript/debug.js | 13 + .../src/bin/client_gen/javascript/index.js | 74 ++ .../bin/client_gen/javascript/my-strategy.js | 79 ++ app-src/src/bin/client_gen/javascript/run.sh | 4 + app-src/src/bin/client_gen/kotlin/Debug.kt | 14 + app-src/src/bin/client_gen/kotlin/Dockerfile | 6 + .../src/bin/client_gen/kotlin/MyStrategy.kt | 60 ++ app-src/src/bin/client_gen/kotlin/Runner.kt | 53 ++ app-src/src/bin/client_gen/kotlin/compile.sh | 13 + app-src/src/bin/client_gen/kotlin/pom.xml | 73 ++ app-src/src/bin/client_gen/kotlin/run.sh | 4 + app-src/src/bin/client_gen/main.rs | 749 ++++++++++++++++++ app-src/src/bin/client_gen/python/Dockerfile | 6 + app-src/src/bin/client_gen/python/compile.sh | 14 + app-src/src/bin/client_gen/python/debug.py | 10 + app-src/src/bin/client_gen/python/main.py | 44 + .../src/bin/client_gen/python/my_strategy.py | 45 ++ app-src/src/bin/client_gen/python/run.sh | 4 + app-src/src/bin/client_gen/ruby/Dockerfile | 4 + app-src/src/bin/client_gen/ruby/compile.sh | 13 + app-src/src/bin/client_gen/ruby/debug.rb | 12 + app-src/src/bin/client_gen/ruby/main.rb | 67 ++ .../src/bin/client_gen/ruby/my_strategy.rb | 54 ++ app-src/src/bin/client_gen/ruby/run.sh | 4 + .../bin/client_gen/rust/Cargo.toml.template | 8 + app-src/src/bin/client_gen/rust/Dockerfile | 6 + app-src/src/bin/client_gen/rust/compile.sh | 13 + app-src/src/bin/client_gen/rust/run.sh | 4 + app-src/src/bin/client_gen/rust/src/main.rs | 88 ++ .../bin/client_gen/rust/src/my_strategy.rs | 84 ++ app-src/src/bin/client_gen/scala/Debug.scala | 8 + app-src/src/bin/client_gen/scala/Dockerfile | 6 + .../src/bin/client_gen/scala/MyStrategy.scala | 50 ++ app-src/src/bin/client_gen/scala/Runner.scala | 43 + app-src/src/bin/client_gen/scala/compile.sh | 13 + app-src/src/bin/client_gen/scala/pom.xml | 81 ++ .../bin/client_gen/scala/project/plugins.sbt | 1 + app-src/src/bin/client_gen/scala/run.sh | 4 + app-src/src/keyboard_player.rs | 199 +++++ app-src/src/level_editor.rs | 200 +++++ app-src/src/lib.rs | 369 +++++++++ app-src/src/main.rs | 3 + app-src/src/model/action.rs | 55 ++ app-src/src/model/bullet.rs | 22 + app-src/src/model/custom_data.rs | 43 + app-src/src/model/game.rs | 556 +++++++++++++ app-src/src/model/level/complex.rs | 152 ++++ app-src/src/model/level/mod.rs | 319 ++++++++ app-src/src/model/loot.rs | 31 + app-src/src/model/mine.rs | 40 + app-src/src/model/mod.rs | 323 ++++++++ app-src/src/model/options.rs | 143 ++++ app-src/src/model/properties.rs | 109 +++ app-src/src/model/unit.rs | 64 ++ app-src/src/model/weapon.rs | 137 ++++ app-src/src/quickstart_player.rs | 145 ++++ app-src/src/random_player.rs | 138 ++++ app-src/src/renderer/background.rs | 63 ++ app-src/src/renderer/bullet.rs | 24 + app-src/src/renderer/camera.rs | 47 ++ app-src/src/renderer/custom/mod.rs | 152 ++++ app-src/src/renderer/custom/program.glsl | 20 + app-src/src/renderer/fancy_bullet.rs | 44 + app-src/src/renderer/fancy_explosion.rs | 61 ++ app-src/src/renderer/fancy_level/mod.rs | 387 +++++++++ app-src/src/renderer/fancy_level/program.glsl | 27 + app-src/src/renderer/fancy_loot.rs | 70 ++ app-src/src/renderer/fancy_mine.rs | 62 ++ app-src/src/renderer/fancy_unit.rs | 251 ++++++ app-src/src/renderer/fancy_weapon.rs | 41 + app-src/src/renderer/level.rs | 112 +++ app-src/src/renderer/loot.rs | 38 + app-src/src/renderer/mine.rs | 37 + app-src/src/renderer/mod.rs | 475 +++++++++++ app-src/src/renderer/simple/mod.rs | 158 ++++ app-src/src/renderer/simple/program.glsl | 27 + app-src/src/renderer/sprite/mod.rs | 80 ++ app-src/src/renderer/sprite/program.glsl | 34 + app-src/src/renderer/unit.rs | 97 +++ app-src/src/renderer/weapon.rs | 32 + app-src/src/translations.txt | 41 + app-src/static/aicup2019-preferences.json | 7 + app-src/static/assets/city.png | Bin 0 -> 308612 bytes app-src/static/assets/cloud.png | Bin 0 -> 56570 bytes app-src/static/assets/explosion.png | Bin 0 -> 5063 bytes app-src/static/assets/explosion.wav | Bin 0 -> 62670 bytes .../assets/guns/assault_rifle/bullet.png | Bin 0 -> 3743 bytes .../static/assets/guns/assault_rifle/gun.png | Bin 0 -> 4045 bytes .../guns/assault_rifle/muzzle_flash_1.png | Bin 0 -> 3950 bytes .../guns/assault_rifle/muzzle_flash_2.png | Bin 0 -> 3906 bytes .../assets/guns/assault_rifle/shoot.wav | Bin 0 -> 11638 bytes app-src/static/assets/guns/pistol/bullet.png | Bin 0 -> 3676 bytes app-src/static/assets/guns/pistol/gun.png | Bin 0 -> 3916 bytes .../assets/guns/pistol/muzzle_flash.png | Bin 0 -> 3906 bytes app-src/static/assets/guns/pistol/shoot.wav | Bin 0 -> 17318 bytes .../assets/guns/rocket_launcher/bullet.png | Bin 0 -> 3784 bytes .../assets/guns/rocket_launcher/gun.png | Bin 0 -> 4258 bytes .../guns/rocket_launcher/muzzle_flash.png | Bin 0 -> 3851 bytes .../assets/guns/rocket_launcher/shoot.wav | Bin 0 -> 155768 bytes app-src/static/assets/heal.wav | Bin 0 -> 50692 bytes app-src/static/assets/hit.wav | Bin 0 -> 10904 bytes app-src/static/assets/level/door.png | Bin 0 -> 2158 bytes app-src/static/assets/level/floor_1.png | Bin 0 -> 3951 bytes app-src/static/assets/level/floor_2.png | Bin 0 -> 3809 bytes app-src/static/assets/level/jumper_1.png | Bin 0 -> 1898 bytes app-src/static/assets/level/jumper_2.png | Bin 0 -> 1986 bytes app-src/static/assets/level/jumper_3.png | Bin 0 -> 3890 bytes app-src/static/assets/level/platform_C.png | Bin 0 -> 3816 bytes app-src/static/assets/level/platform_L.png | Bin 0 -> 4004 bytes app-src/static/assets/level/platform_R.png | Bin 0 -> 4035 bytes .../static/assets/level/platform_small_C.png | Bin 0 -> 3690 bytes .../static/assets/level/platform_small_L.png | Bin 0 -> 3807 bytes .../static/assets/level/platform_small_R.png | Bin 0 -> 3809 bytes .../assets/level/platform_small_solo.png | Bin 0 -> 3874 bytes app-src/static/assets/level/platform_solo.png | Bin 0 -> 4039 bytes app-src/static/assets/level/railing_C.png | Bin 0 -> 3946 bytes app-src/static/assets/level/railing_L.png | Bin 0 -> 3983 bytes app-src/static/assets/level/railing_R.png | Bin 0 -> 3995 bytes app-src/static/assets/level/stairs.png | Bin 0 -> 3822 bytes app-src/static/assets/level/wall_C.png | Bin 0 -> 3705 bytes app-src/static/assets/level/wall_L.png | Bin 0 -> 3763 bytes app-src/static/assets/level/wall_R.png | Bin 0 -> 3764 bytes app-src/static/assets/level/wall_down_C.png | Bin 0 -> 3913 bytes app-src/static/assets/level/wall_down_L.png | Bin 0 -> 3980 bytes app-src/static/assets/level/wall_down_R.png | Bin 0 -> 3976 bytes .../static/assets/level/wall_down_solo.png | Bin 0 -> 3929 bytes app-src/static/assets/level/wall_solo.png | Bin 0 -> 3777 bytes app-src/static/assets/level/window_C.png | Bin 0 -> 3966 bytes app-src/static/assets/level/window_L.png | Bin 0 -> 4005 bytes app-src/static/assets/level/window_R.png | Bin 0 -> 4010 bytes app-src/static/assets/level/window_solo.png | Bin 0 -> 3971 bytes app-src/static/assets/loot/assault_rifle.png | Bin 0 -> 4183 bytes app-src/static/assets/loot/health_pack.png | Bin 0 -> 3729 bytes app-src/static/assets/loot/mine.png | Bin 0 -> 4128 bytes app-src/static/assets/loot/pistol.png | Bin 0 -> 4027 bytes .../static/assets/loot/rocket_launcher.png | Bin 0 -> 4388 bytes app-src/static/assets/mine/idle.png | Bin 0 -> 3757 bytes app-src/static/assets/mine/preparing.png | Bin 0 -> 3754 bytes app-src/static/assets/mine/triggered.png | Bin 0 -> 3757 bytes app-src/static/assets/pickup.wav | Bin 0 -> 14414 bytes app-src/static/assets/unit/1/hand.png | Bin 0 -> 4000 bytes app-src/static/assets/unit/1/head.png | Bin 0 -> 4104 bytes app-src/static/assets/unit/1/jump/1.png | Bin 0 -> 4428 bytes app-src/static/assets/unit/1/jump/2.png | Bin 0 -> 4424 bytes app-src/static/assets/unit/1/jump/3.png | Bin 0 -> 4345 bytes app-src/static/assets/unit/1/rise/1.png | Bin 0 -> 4269 bytes app-src/static/assets/unit/1/rise/2.png | Bin 0 -> 4281 bytes app-src/static/assets/unit/1/rise/3.png | Bin 0 -> 4178 bytes app-src/static/assets/unit/1/rise/4.png | Bin 0 -> 4181 bytes app-src/static/assets/unit/1/rise/5.png | Bin 0 -> 4262 bytes app-src/static/assets/unit/1/rise/6.png | Bin 0 -> 4182 bytes app-src/static/assets/unit/1/stay.png | Bin 0 -> 4376 bytes app-src/static/assets/unit/1/walk/1.png | Bin 0 -> 4436 bytes app-src/static/assets/unit/1/walk/2.png | Bin 0 -> 4295 bytes app-src/static/assets/unit/1/walk/3.png | Bin 0 -> 4496 bytes app-src/static/assets/unit/1/walk/4.png | Bin 0 -> 4556 bytes app-src/static/assets/unit/1/walk/5.png | Bin 0 -> 4503 bytes app-src/static/assets/unit/1/walk/6.png | Bin 0 -> 4300 bytes app-src/static/assets/unit/2/hand.png | Bin 0 -> 3930 bytes app-src/static/assets/unit/2/head.png | Bin 0 -> 3809 bytes app-src/static/assets/unit/2/jump/1.png | Bin 0 -> 4305 bytes app-src/static/assets/unit/2/jump/2.png | Bin 0 -> 4298 bytes app-src/static/assets/unit/2/jump/3.png | Bin 0 -> 4237 bytes app-src/static/assets/unit/2/rise/1.png | Bin 0 -> 4129 bytes app-src/static/assets/unit/2/rise/2.png | Bin 0 -> 4183 bytes app-src/static/assets/unit/2/rise/3.png | Bin 0 -> 4130 bytes app-src/static/assets/unit/2/rise/4.png | Bin 0 -> 4125 bytes app-src/static/assets/unit/2/rise/5.png | Bin 0 -> 4195 bytes app-src/static/assets/unit/2/rise/6.png | Bin 0 -> 4202 bytes app-src/static/assets/unit/2/stay.png | Bin 0 -> 4286 bytes app-src/static/assets/unit/2/walk/1.png | Bin 0 -> 4150 bytes app-src/static/assets/unit/2/walk/2.png | Bin 0 -> 4282 bytes app-src/static/assets/unit/2/walk/3.png | Bin 0 -> 4360 bytes app-src/static/assets/unit/2/walk/4.png | Bin 0 -> 4277 bytes app-src/static/assets/unit/2/walk/5.png | Bin 0 -> 4149 bytes app-src/static/assets/unit/2/walk/6.png | Bin 0 -> 4288 bytes app-src/static/assets/unit/3/hand.png | Bin 0 -> 3940 bytes app-src/static/assets/unit/3/head.png | Bin 0 -> 3911 bytes app-src/static/assets/unit/3/jump/1.png | Bin 0 -> 4274 bytes app-src/static/assets/unit/3/jump/2.png | Bin 0 -> 4254 bytes app-src/static/assets/unit/3/jump/3.png | Bin 0 -> 4206 bytes app-src/static/assets/unit/3/rise/1.png | Bin 0 -> 4181 bytes app-src/static/assets/unit/3/rise/2.png | Bin 0 -> 4188 bytes app-src/static/assets/unit/3/rise/3.png | Bin 0 -> 4114 bytes app-src/static/assets/unit/3/rise/4.png | Bin 0 -> 4120 bytes app-src/static/assets/unit/3/rise/5.png | Bin 0 -> 4185 bytes app-src/static/assets/unit/3/rise/6.png | Bin 0 -> 4120 bytes app-src/static/assets/unit/3/stay.png | Bin 0 -> 4251 bytes app-src/static/assets/unit/3/walk/1.png | Bin 0 -> 4146 bytes app-src/static/assets/unit/3/walk/2.png | Bin 0 -> 4276 bytes app-src/static/assets/unit/3/walk/3.png | Bin 0 -> 4341 bytes app-src/static/assets/unit/3/walk/4.png | Bin 0 -> 4258 bytes app-src/static/assets/unit/3/walk/5.png | Bin 0 -> 4146 bytes app-src/static/assets/unit/3/walk/6.png | Bin 0 -> 4266 bytes app-src/static/index.html | 62 ++ app-src/static/levels/level.txt | 30 + 247 files changed, 8749 insertions(+) create mode 100644 app-src/.gitignore create mode 100644 app-src/Cargo.toml create mode 100644 app-src/README.md create mode 100644 app-src/src/bin/client_gen/cpp/CMakeLists.txt create mode 100644 app-src/src/bin/client_gen/cpp/Debug.cpp create mode 100644 app-src/src/bin/client_gen/cpp/Debug.hpp create mode 100644 app-src/src/bin/client_gen/cpp/Dockerfile create mode 100644 app-src/src/bin/client_gen/cpp/MyStrategy.cpp create mode 100644 app-src/src/bin/client_gen/cpp/MyStrategy.hpp create mode 100644 app-src/src/bin/client_gen/cpp/TcpStream.cpp create mode 100644 app-src/src/bin/client_gen/cpp/TcpStream.hpp create mode 100644 app-src/src/bin/client_gen/cpp/compile.sh create mode 100644 app-src/src/bin/client_gen/cpp/main.cpp create mode 100644 app-src/src/bin/client_gen/cpp/run.sh create mode 100644 app-src/src/bin/client_gen/csharp/Debug.cs create mode 100644 app-src/src/bin/client_gen/csharp/Dockerfile create mode 100644 app-src/src/bin/client_gen/csharp/MyStrategy.cs create mode 100644 app-src/src/bin/client_gen/csharp/Runner.cs create mode 100644 app-src/src/bin/client_gen/csharp/aicup2019.csproj create mode 100644 app-src/src/bin/client_gen/csharp/compile.sh create mode 100644 app-src/src/bin/client_gen/csharp/run.sh create mode 100644 app-src/src/bin/client_gen/dlang/Dockerfile create mode 100644 app-src/src/bin/client_gen/dlang/app.d create mode 100644 app-src/src/bin/client_gen/dlang/compile.sh create mode 100644 app-src/src/bin/client_gen/dlang/debugger.d create mode 100644 app-src/src/bin/client_gen/dlang/dub.json create mode 100644 app-src/src/bin/client_gen/dlang/my_strategy.d create mode 100644 app-src/src/bin/client_gen/dlang/run.sh create mode 100644 app-src/src/bin/client_gen/fsharp/Debug.fs create mode 100644 app-src/src/bin/client_gen/fsharp/Dockerfile create mode 100644 app-src/src/bin/client_gen/fsharp/MyStrategy.fs create mode 100644 app-src/src/bin/client_gen/fsharp/Runner.fs create mode 100644 app-src/src/bin/client_gen/fsharp/aicup2019.fsproj create mode 100644 app-src/src/bin/client_gen/fsharp/compile.sh create mode 100644 app-src/src/bin/client_gen/fsharp/run.sh create mode 100644 app-src/src/bin/client_gen/go/Dockerfile create mode 100644 app-src/src/bin/client_gen/go/compile.sh create mode 100644 app-src/src/bin/client_gen/go/debug.go create mode 100644 app-src/src/bin/client_gen/go/go.mod create mode 100644 app-src/src/bin/client_gen/go/main.go create mode 100644 app-src/src/bin/client_gen/go/my_strategy.go create mode 100644 app-src/src/bin/client_gen/go/run.sh create mode 100644 app-src/src/bin/client_gen/java/Debug.java create mode 100644 app-src/src/bin/client_gen/java/Dockerfile create mode 100644 app-src/src/bin/client_gen/java/MyStrategy.java create mode 100644 app-src/src/bin/client_gen/java/Runner.java create mode 100644 app-src/src/bin/client_gen/java/compile.sh create mode 100644 app-src/src/bin/client_gen/java/pom.xml create mode 100644 app-src/src/bin/client_gen/java/run.sh create mode 100644 app-src/src/bin/client_gen/javascript/Dockerfile create mode 100644 app-src/src/bin/client_gen/javascript/compile.sh create mode 100644 app-src/src/bin/client_gen/javascript/debug.js create mode 100644 app-src/src/bin/client_gen/javascript/index.js create mode 100644 app-src/src/bin/client_gen/javascript/my-strategy.js create mode 100644 app-src/src/bin/client_gen/javascript/run.sh create mode 100644 app-src/src/bin/client_gen/kotlin/Debug.kt create mode 100644 app-src/src/bin/client_gen/kotlin/Dockerfile create mode 100644 app-src/src/bin/client_gen/kotlin/MyStrategy.kt create mode 100644 app-src/src/bin/client_gen/kotlin/Runner.kt create mode 100644 app-src/src/bin/client_gen/kotlin/compile.sh create mode 100644 app-src/src/bin/client_gen/kotlin/pom.xml create mode 100644 app-src/src/bin/client_gen/kotlin/run.sh create mode 100644 app-src/src/bin/client_gen/main.rs create mode 100644 app-src/src/bin/client_gen/python/Dockerfile create mode 100644 app-src/src/bin/client_gen/python/compile.sh create mode 100644 app-src/src/bin/client_gen/python/debug.py create mode 100644 app-src/src/bin/client_gen/python/main.py create mode 100644 app-src/src/bin/client_gen/python/my_strategy.py create mode 100644 app-src/src/bin/client_gen/python/run.sh create mode 100644 app-src/src/bin/client_gen/ruby/Dockerfile create mode 100644 app-src/src/bin/client_gen/ruby/compile.sh create mode 100644 app-src/src/bin/client_gen/ruby/debug.rb create mode 100644 app-src/src/bin/client_gen/ruby/main.rb create mode 100644 app-src/src/bin/client_gen/ruby/my_strategy.rb create mode 100644 app-src/src/bin/client_gen/ruby/run.sh create mode 100644 app-src/src/bin/client_gen/rust/Cargo.toml.template create mode 100644 app-src/src/bin/client_gen/rust/Dockerfile create mode 100644 app-src/src/bin/client_gen/rust/compile.sh create mode 100644 app-src/src/bin/client_gen/rust/run.sh create mode 100644 app-src/src/bin/client_gen/rust/src/main.rs create mode 100644 app-src/src/bin/client_gen/rust/src/my_strategy.rs create mode 100644 app-src/src/bin/client_gen/scala/Debug.scala create mode 100644 app-src/src/bin/client_gen/scala/Dockerfile create mode 100644 app-src/src/bin/client_gen/scala/MyStrategy.scala create mode 100644 app-src/src/bin/client_gen/scala/Runner.scala create mode 100644 app-src/src/bin/client_gen/scala/compile.sh create mode 100644 app-src/src/bin/client_gen/scala/pom.xml create mode 100644 app-src/src/bin/client_gen/scala/project/plugins.sbt create mode 100644 app-src/src/bin/client_gen/scala/run.sh create mode 100644 app-src/src/keyboard_player.rs create mode 100644 app-src/src/level_editor.rs create mode 100644 app-src/src/lib.rs create mode 100644 app-src/src/main.rs create mode 100644 app-src/src/model/action.rs create mode 100644 app-src/src/model/bullet.rs create mode 100644 app-src/src/model/custom_data.rs create mode 100644 app-src/src/model/game.rs create mode 100644 app-src/src/model/level/complex.rs create mode 100644 app-src/src/model/level/mod.rs create mode 100644 app-src/src/model/loot.rs create mode 100644 app-src/src/model/mine.rs create mode 100644 app-src/src/model/mod.rs create mode 100644 app-src/src/model/options.rs create mode 100644 app-src/src/model/properties.rs create mode 100644 app-src/src/model/unit.rs create mode 100644 app-src/src/model/weapon.rs create mode 100644 app-src/src/quickstart_player.rs create mode 100644 app-src/src/random_player.rs create mode 100644 app-src/src/renderer/background.rs create mode 100644 app-src/src/renderer/bullet.rs create mode 100644 app-src/src/renderer/camera.rs create mode 100644 app-src/src/renderer/custom/mod.rs create mode 100644 app-src/src/renderer/custom/program.glsl create mode 100644 app-src/src/renderer/fancy_bullet.rs create mode 100644 app-src/src/renderer/fancy_explosion.rs create mode 100644 app-src/src/renderer/fancy_level/mod.rs create mode 100644 app-src/src/renderer/fancy_level/program.glsl create mode 100644 app-src/src/renderer/fancy_loot.rs create mode 100644 app-src/src/renderer/fancy_mine.rs create mode 100644 app-src/src/renderer/fancy_unit.rs create mode 100644 app-src/src/renderer/fancy_weapon.rs create mode 100644 app-src/src/renderer/level.rs create mode 100644 app-src/src/renderer/loot.rs create mode 100644 app-src/src/renderer/mine.rs create mode 100644 app-src/src/renderer/mod.rs create mode 100644 app-src/src/renderer/simple/mod.rs create mode 100644 app-src/src/renderer/simple/program.glsl create mode 100644 app-src/src/renderer/sprite/mod.rs create mode 100644 app-src/src/renderer/sprite/program.glsl create mode 100644 app-src/src/renderer/unit.rs create mode 100644 app-src/src/renderer/weapon.rs create mode 100644 app-src/src/translations.txt create mode 100644 app-src/static/aicup2019-preferences.json create mode 100644 app-src/static/assets/city.png create mode 100644 app-src/static/assets/cloud.png create mode 100644 app-src/static/assets/explosion.png create mode 100644 app-src/static/assets/explosion.wav create mode 100644 app-src/static/assets/guns/assault_rifle/bullet.png create mode 100644 app-src/static/assets/guns/assault_rifle/gun.png create mode 100644 app-src/static/assets/guns/assault_rifle/muzzle_flash_1.png create mode 100644 app-src/static/assets/guns/assault_rifle/muzzle_flash_2.png create mode 100644 app-src/static/assets/guns/assault_rifle/shoot.wav create mode 100644 app-src/static/assets/guns/pistol/bullet.png create mode 100644 app-src/static/assets/guns/pistol/gun.png create mode 100644 app-src/static/assets/guns/pistol/muzzle_flash.png create mode 100644 app-src/static/assets/guns/pistol/shoot.wav create mode 100644 app-src/static/assets/guns/rocket_launcher/bullet.png create mode 100644 app-src/static/assets/guns/rocket_launcher/gun.png create mode 100644 app-src/static/assets/guns/rocket_launcher/muzzle_flash.png create mode 100644 app-src/static/assets/guns/rocket_launcher/shoot.wav create mode 100644 app-src/static/assets/heal.wav create mode 100644 app-src/static/assets/hit.wav create mode 100644 app-src/static/assets/level/door.png create mode 100644 app-src/static/assets/level/floor_1.png create mode 100644 app-src/static/assets/level/floor_2.png create mode 100644 app-src/static/assets/level/jumper_1.png create mode 100644 app-src/static/assets/level/jumper_2.png create mode 100644 app-src/static/assets/level/jumper_3.png create mode 100644 app-src/static/assets/level/platform_C.png create mode 100644 app-src/static/assets/level/platform_L.png create mode 100644 app-src/static/assets/level/platform_R.png create mode 100644 app-src/static/assets/level/platform_small_C.png create mode 100644 app-src/static/assets/level/platform_small_L.png create mode 100644 app-src/static/assets/level/platform_small_R.png create mode 100644 app-src/static/assets/level/platform_small_solo.png create mode 100644 app-src/static/assets/level/platform_solo.png create mode 100644 app-src/static/assets/level/railing_C.png create mode 100644 app-src/static/assets/level/railing_L.png create mode 100644 app-src/static/assets/level/railing_R.png create mode 100644 app-src/static/assets/level/stairs.png create mode 100644 app-src/static/assets/level/wall_C.png create mode 100644 app-src/static/assets/level/wall_L.png create mode 100644 app-src/static/assets/level/wall_R.png create mode 100644 app-src/static/assets/level/wall_down_C.png create mode 100644 app-src/static/assets/level/wall_down_L.png create mode 100644 app-src/static/assets/level/wall_down_R.png create mode 100644 app-src/static/assets/level/wall_down_solo.png create mode 100644 app-src/static/assets/level/wall_solo.png create mode 100644 app-src/static/assets/level/window_C.png create mode 100644 app-src/static/assets/level/window_L.png create mode 100644 app-src/static/assets/level/window_R.png create mode 100644 app-src/static/assets/level/window_solo.png create mode 100644 app-src/static/assets/loot/assault_rifle.png create mode 100644 app-src/static/assets/loot/health_pack.png create mode 100644 app-src/static/assets/loot/mine.png create mode 100644 app-src/static/assets/loot/pistol.png create mode 100644 app-src/static/assets/loot/rocket_launcher.png create mode 100644 app-src/static/assets/mine/idle.png create mode 100644 app-src/static/assets/mine/preparing.png create mode 100644 app-src/static/assets/mine/triggered.png create mode 100644 app-src/static/assets/pickup.wav create mode 100644 app-src/static/assets/unit/1/hand.png create mode 100644 app-src/static/assets/unit/1/head.png create mode 100644 app-src/static/assets/unit/1/jump/1.png create mode 100644 app-src/static/assets/unit/1/jump/2.png create mode 100644 app-src/static/assets/unit/1/jump/3.png create mode 100644 app-src/static/assets/unit/1/rise/1.png create mode 100644 app-src/static/assets/unit/1/rise/2.png create mode 100644 app-src/static/assets/unit/1/rise/3.png create mode 100644 app-src/static/assets/unit/1/rise/4.png create mode 100644 app-src/static/assets/unit/1/rise/5.png create mode 100644 app-src/static/assets/unit/1/rise/6.png create mode 100644 app-src/static/assets/unit/1/stay.png create mode 100644 app-src/static/assets/unit/1/walk/1.png create mode 100644 app-src/static/assets/unit/1/walk/2.png create mode 100644 app-src/static/assets/unit/1/walk/3.png create mode 100644 app-src/static/assets/unit/1/walk/4.png create mode 100644 app-src/static/assets/unit/1/walk/5.png create mode 100644 app-src/static/assets/unit/1/walk/6.png create mode 100644 app-src/static/assets/unit/2/hand.png create mode 100644 app-src/static/assets/unit/2/head.png create mode 100644 app-src/static/assets/unit/2/jump/1.png create mode 100644 app-src/static/assets/unit/2/jump/2.png create mode 100644 app-src/static/assets/unit/2/jump/3.png create mode 100644 app-src/static/assets/unit/2/rise/1.png create mode 100644 app-src/static/assets/unit/2/rise/2.png create mode 100644 app-src/static/assets/unit/2/rise/3.png create mode 100644 app-src/static/assets/unit/2/rise/4.png create mode 100644 app-src/static/assets/unit/2/rise/5.png create mode 100644 app-src/static/assets/unit/2/rise/6.png create mode 100644 app-src/static/assets/unit/2/stay.png create mode 100644 app-src/static/assets/unit/2/walk/1.png create mode 100644 app-src/static/assets/unit/2/walk/2.png create mode 100644 app-src/static/assets/unit/2/walk/3.png create mode 100644 app-src/static/assets/unit/2/walk/4.png create mode 100644 app-src/static/assets/unit/2/walk/5.png create mode 100644 app-src/static/assets/unit/2/walk/6.png create mode 100644 app-src/static/assets/unit/3/hand.png create mode 100644 app-src/static/assets/unit/3/head.png create mode 100644 app-src/static/assets/unit/3/jump/1.png create mode 100644 app-src/static/assets/unit/3/jump/2.png create mode 100644 app-src/static/assets/unit/3/jump/3.png create mode 100644 app-src/static/assets/unit/3/rise/1.png create mode 100644 app-src/static/assets/unit/3/rise/2.png create mode 100644 app-src/static/assets/unit/3/rise/3.png create mode 100644 app-src/static/assets/unit/3/rise/4.png create mode 100644 app-src/static/assets/unit/3/rise/5.png create mode 100644 app-src/static/assets/unit/3/rise/6.png create mode 100644 app-src/static/assets/unit/3/stay.png create mode 100644 app-src/static/assets/unit/3/walk/1.png create mode 100644 app-src/static/assets/unit/3/walk/2.png create mode 100644 app-src/static/assets/unit/3/walk/3.png create mode 100644 app-src/static/assets/unit/3/walk/4.png create mode 100644 app-src/static/assets/unit/3/walk/5.png create mode 100644 app-src/static/assets/unit/3/walk/6.png create mode 100644 app-src/static/index.html create mode 100644 app-src/static/levels/level.txt diff --git a/app-src/.gitignore b/app-src/.gitignore new file mode 100644 index 0000000..8c4e233 --- /dev/null +++ b/app-src/.gitignore @@ -0,0 +1,4 @@ +Cargo.lock +target/ +.idea/ +*.iml \ No newline at end of file diff --git a/app-src/Cargo.toml b/app-src/Cargo.toml new file mode 100644 index 0000000..3c1bfd8 --- /dev/null +++ b/app-src/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "aicup2019" +version = "1.3.0" +authors = ["kuviman "] +edition = "2018" +default-run = "aicup2019" + +[features] +default = ["rendering"] +rendering = ["codegame/rendering"] + +[dependencies] +codegame = { git = "https://github.com/codeforces/codegame", default-features = false } +serde = "1" +trans-gen = { git = "https://github.com/kuviman/trans-gen" } +structopt = "0.3" + +[dev-dependencies] +tempfile = "3" \ No newline at end of file diff --git a/app-src/README.md b/app-src/README.md new file mode 100644 index 0000000..c04ed77 --- /dev/null +++ b/app-src/README.md @@ -0,0 +1,19 @@ +To build, you'll need to install [Rust](https://rustup.rs/). + +To run native build: + +```shell +cargo run --release +``` + +To build web version, first install [`cargo-web`](https://github.com/koute/cargo-web): + +```shell +cargo install cargo-web +``` + +Then build, start local server and open browser: + +```shell +cargo web start --release --open +``` \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/CMakeLists.txt b/app-src/src/bin/client_gen/cpp/CMakeLists.txt new file mode 100644 index 0000000..e2a609b --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.5) +project(aicup2019) + +# OS and compiler checks. +if(WIN32) + add_definitions(-DWIN32) + SET(PROJECT_LIBS Ws2_32.lib) +endif() + +file(GLOB HEADERS "*.hpp" "model/*.hpp" "csimplesocket/*.h") +SET_SOURCE_FILES_PROPERTIES(${HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE) +file(GLOB SRC "*.cpp" "model/*.cpp" "csimplesocket/*.cpp") +add_executable(aicup2019 ${HEADERS} ${SRC}) +TARGET_LINK_LIBRARIES(aicup2019 ${PROJECT_LIBS}) \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/Debug.cpp b/app-src/src/bin/client_gen/cpp/Debug.cpp new file mode 100644 index 0000000..a00f0e5 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/Debug.cpp @@ -0,0 +1,11 @@ +#include "Debug.hpp" +#include "model/PlayerMessageGame.hpp" + +Debug::Debug(const std::shared_ptr &outputStream) + : outputStream(outputStream) {} + +void Debug::draw(const CustomData &customData) { + outputStream->write(PlayerMessageGame::CustomDataMessage::TAG); + customData.writeTo(*outputStream); + outputStream->flush(); +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/Debug.hpp b/app-src/src/bin/client_gen/cpp/Debug.hpp new file mode 100644 index 0000000..c5ef180 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/Debug.hpp @@ -0,0 +1,17 @@ +#ifndef _DEBUG_HPP_ +#define _DEBUG_HPP_ + +#include "Stream.hpp" +#include "model/CustomData.hpp" +#include + +class Debug { +public: + Debug(const std::shared_ptr &outputStream); + void draw(const CustomData &customData); + +private: + std::shared_ptr outputStream; +}; + +#endif \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/Dockerfile b/app-src/src/bin/client_gen/cpp/Dockerfile new file mode 100644 index 0000000..88fe725 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/Dockerfile @@ -0,0 +1,6 @@ +FROM gcc + +RUN apt-get update && apt-get install -y cmake + +COPY . /project +WORKDIR /project \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/MyStrategy.cpp b/app-src/src/bin/client_gen/cpp/MyStrategy.cpp new file mode 100644 index 0000000..205e98f --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/MyStrategy.cpp @@ -0,0 +1,65 @@ +#include "MyStrategy.hpp" + +MyStrategy::MyStrategy() {} + +double distanceSqr(Vec2Double a, Vec2Double b) { + return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y); +} + +UnitAction MyStrategy::getAction(const Unit &unit, const Game &game, + Debug &debug) { + const Unit *nearestEnemy = nullptr; + for (const Unit &other : game.units) { + if (other.playerId != unit.playerId) { + if (nearestEnemy == nullptr || + distanceSqr(unit.position, other.position) < + distanceSqr(unit.position, nearestEnemy->position)) { + nearestEnemy = &other; + } + } + } + const LootBox *nearestWeapon = nullptr; + for (const LootBox &lootBox : game.lootBoxes) { + if (std::dynamic_pointer_cast(lootBox.item)) { + if (nearestWeapon == nullptr || + distanceSqr(unit.position, lootBox.position) < + distanceSqr(unit.position, nearestWeapon->position)) { + nearestWeapon = &lootBox; + } + } + } + Vec2Double targetPos = unit.position; + if (unit.weapon == nullptr && nearestWeapon != nullptr) { + targetPos = nearestWeapon->position; + } else if (nearestEnemy != nullptr) { + targetPos = nearestEnemy->position; + } + debug.draw(CustomData::Log( + std::string("Target pos: ") + targetPos.toString())); + Vec2Double aim = Vec2Double(0, 0); + if (nearestEnemy != nullptr) { + aim = Vec2Double(nearestEnemy->position.x - unit.position.x, + nearestEnemy->position.y - unit.position.y); + } + bool jump = targetPos.y > unit.position.y; + if (targetPos.x > unit.position.x && + game.level.tiles[size_t(unit.position.x + 1)][size_t(unit.position.y)] == + Tile::WALL) { + jump = true; + } + if (targetPos.x < unit.position.x && + game.level.tiles[size_t(unit.position.x - 1)][size_t(unit.position.y)] == + Tile::WALL) { + jump = true; + } + UnitAction action; + action.velocity = targetPos.x - unit.position.x; + action.jump = jump; + action.jumpDown = !action.jump; + action.aim = aim; + action.shoot = true; + action.reload = false; + action.swapWeapon = false; + action.plantMine = false; + return action; +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/MyStrategy.hpp b/app-src/src/bin/client_gen/cpp/MyStrategy.hpp new file mode 100644 index 0000000..05085ab --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/MyStrategy.hpp @@ -0,0 +1,16 @@ +#ifndef _MY_STRATEGY_HPP_ +#define _MY_STRATEGY_HPP_ + +#include "Debug.hpp" +#include "model/CustomData.hpp" +#include "model/Game.hpp" +#include "model/Unit.hpp" +#include "model/UnitAction.hpp" + +class MyStrategy { +public: + MyStrategy(); + UnitAction getAction(const Unit &unit, const Game &game, Debug &debug); +}; + +#endif \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/TcpStream.cpp b/app-src/src/bin/client_gen/cpp/TcpStream.cpp new file mode 100644 index 0000000..4d5288a --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/TcpStream.cpp @@ -0,0 +1,131 @@ +#include "TcpStream.hpp" +#include +#include +#include +#include + +#ifdef _WIN32 +typedef int RECV_SEND_T; +#else +typedef ssize_t RECV_SEND_T; +#endif + +TcpStream::TcpStream(const std::string &host, int port) { +#ifdef _WIN32 + WSADATA wsa_data; + if (WSAStartup(MAKEWORD(1, 1), &wsa_data) != 0) { + throw std::runtime_error("Failed to initialize sockets"); + } +#endif + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock == -1) { + throw std::runtime_error("Failed to create socket"); + } + int yes = 1; + if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&yes, sizeof(int)) < + 0) { + throw std::runtime_error("Failed to set TCP_NODELAY"); + } + addrinfo hints, *servinfo; + std::memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + if (getaddrinfo(host.c_str(), std::to_string(port).c_str(), &hints, + &servinfo) != 0) { + throw std::runtime_error("Failed to get addr info"); + } + if (connect(sock, servinfo->ai_addr, servinfo->ai_addrlen) == -1) { + throw std::runtime_error("Failed to connect"); + } + freeaddrinfo(servinfo); +} + +class TcpInputStream : public InputStream { +public: + TcpInputStream(std::shared_ptr tcpStream) + : tcpStream(tcpStream), bufferPos(0), bufferSize(0) {} + void readBytes(char *buffer, size_t byteCount) { + while (byteCount > 0) { + if (bufferSize > 0) { + if (bufferSize >= byteCount) { + memcpy(buffer, this->buffer + bufferPos, byteCount); + bufferPos += byteCount; + bufferSize -= byteCount; + return; + } + memcpy(buffer, this->buffer + bufferPos, bufferSize); + buffer += bufferSize; + byteCount -= bufferSize; + bufferPos += bufferSize; + bufferSize = 0; + } + if (bufferPos == BUFFER_CAPACITY) { + bufferPos = 0; + } + RECV_SEND_T received = + recv(tcpStream->sock, this->buffer + bufferPos + bufferSize, + BUFFER_CAPACITY - bufferPos - bufferSize, 0); + if (received < 0) { + throw std::runtime_error("Failed to read from socket"); + } + bufferSize += received; + } + } + +private: + static const size_t BUFFER_CAPACITY = 8 * 1024; + char buffer[BUFFER_CAPACITY]; + size_t bufferPos; + size_t bufferSize; + std::shared_ptr tcpStream; +}; + +class TcpOutputStream : public OutputStream { +public: + TcpOutputStream(std::shared_ptr tcpStream) + : tcpStream(tcpStream), bufferPos(0), bufferSize(0) {} + void writeBytes(const char *buffer, size_t byteCount) { + while (byteCount > 0) { + size_t capacity = BUFFER_CAPACITY - bufferPos - bufferSize; + if (capacity >= byteCount) { + memcpy(this->buffer + bufferPos + bufferSize, buffer, byteCount); + bufferSize += byteCount; + return; + } + memcpy(this->buffer + bufferPos + bufferSize, buffer, capacity); + bufferSize += capacity; + byteCount -= capacity; + buffer += capacity; + flush(); + } + } + void flush() { + while (bufferSize > 0) { + RECV_SEND_T sent = + send(tcpStream->sock, buffer + bufferPos, bufferSize, 0); + if (sent < 0) { + throw std::runtime_error("Failed to write to socket"); + } + bufferPos += sent; + bufferSize -= sent; + } + bufferPos = 0; + } + +private: + static const size_t BUFFER_CAPACITY = 8 * 1024; + char buffer[BUFFER_CAPACITY]; + size_t bufferPos; + size_t bufferSize; + std::shared_ptr tcpStream; +}; + +std::shared_ptr +getInputStream(std::shared_ptr tcpStream) { + return std::shared_ptr(new TcpInputStream(tcpStream)); +} + +std::shared_ptr +getOutputStream(std::shared_ptr tcpStream) { + return std::shared_ptr(new TcpOutputStream(tcpStream)); +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/TcpStream.hpp b/app-src/src/bin/client_gen/cpp/TcpStream.hpp new file mode 100644 index 0000000..eb51719 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/TcpStream.hpp @@ -0,0 +1,35 @@ +#ifndef _TCP_STREAM_HPP_ +#define _TCP_STREAM_HPP_ + +#ifdef _WIN32 +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif +#include +#include +#else +#include +#include +#include +#include +#include +typedef int SOCKET; +#endif + +#include "Stream.hpp" +#include +#include + +class TcpStream { +public: + TcpStream(const std::string &host, int port); + SOCKET sock; +}; + +std::shared_ptr +getInputStream(std::shared_ptr tcpStream); + +std::shared_ptr +getOutputStream(std::shared_ptr tcpStream); + +#endif \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/compile.sh b/app-src/src/bin/client_gen/cpp/compile.sh new file mode 100644 index 0000000..9428988 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/compile.sh @@ -0,0 +1,14 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.cpp MyStrategy.cpp + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +cmake -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_VERBOSE_MAKEFILE=ON . +cmake --build . --config Release +cp aicup2019 /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/main.cpp b/app-src/src/bin/client_gen/cpp/main.cpp new file mode 100644 index 0000000..a067297 --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/main.cpp @@ -0,0 +1,52 @@ +#include "Debug.hpp" +#include "MyStrategy.hpp" +#include "TcpStream.hpp" +#include "model/PlayerMessageGame.hpp" +#include "model/ServerMessageGame.hpp" +#include +#include +#include + +class Runner { +public: + Runner(const std::string &host, int port, const std::string &token) { + std::shared_ptr tcpStream(new TcpStream(host, port)); + inputStream = getInputStream(tcpStream); + outputStream = getOutputStream(tcpStream); + outputStream->write(token); + outputStream->flush(); + } + void run() { + MyStrategy myStrategy; + Debug debug(outputStream); + while (true) { + auto message = ServerMessageGame::readFrom(*inputStream); + const auto& playerView = message.playerView; + if (!playerView) { + break; + } + std::unordered_map actions; + for (const Unit &unit : playerView->game.units) { + if (unit.playerId == playerView->myId) { + actions.emplace(std::make_pair( + unit.id, + myStrategy.getAction(unit, playerView->game, debug))); + } + } + PlayerMessageGame::ActionMessage(Versioned(actions)).writeTo(*outputStream); + outputStream->flush(); + } + } + +private: + std::shared_ptr inputStream; + std::shared_ptr outputStream; +}; + +int main(int argc, char *argv[]) { + std::string host = argc < 2 ? "127.0.0.1" : argv[1]; + int port = argc < 3 ? 31001 : atoi(argv[2]); + std::string token = argc < 4 ? "0000000000000000" : argv[3]; + Runner(host, port, token).run(); + return 0; +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/cpp/run.sh b/app-src/src/bin/client_gen/cpp/run.sh new file mode 100644 index 0000000..e94c24a --- /dev/null +++ b/app-src/src/bin/client_gen/cpp/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +./aicup2019 "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/Debug.cs b/app-src/src/bin/client_gen/csharp/Debug.cs new file mode 100644 index 0000000..56549c7 --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/Debug.cs @@ -0,0 +1,18 @@ +using System.IO; + +namespace AiCup2019 +{ + public class Debug + { + private BinaryWriter writer; + public Debug(BinaryWriter writer) + { + this.writer = writer; + } + public void Draw(Model.CustomData customData) + { + new Model.PlayerMessageGame.CustomDataMessage(customData).WriteTo(writer); + writer.Flush(); + } + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/Dockerfile b/app-src/src/bin/client_gen/csharp/Dockerfile new file mode 100644 index 0000000..125a71b --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/Dockerfile @@ -0,0 +1,20 @@ +FROM debian + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + curl \ + libunwind8 \ + wget \ + gpg \ + apt-transport-https \ + ca-certificates \ + zlib1g libicu63 libcurl4 +RUN wget https://dot.net/v1/dotnet-install.sh && chmod +x dotnet-install.sh +RUN ./dotnet-install.sh -Channel 2.1 && ./dotnet-install.sh -Channel 3.0 && ./dotnet-install.sh -Channel 3.1 + +ENV PATH="/root/.dotnet:$PATH" + +COPY . /project +WORKDIR /project + +RUN dotnet build -c Release \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/MyStrategy.cs b/app-src/src/bin/client_gen/csharp/MyStrategy.cs new file mode 100644 index 0000000..22c865a --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/MyStrategy.cs @@ -0,0 +1,71 @@ +using AiCup2019.Model; + +namespace AiCup2019 +{ + public class MyStrategy + { + static double DistanceSqr(Vec2Double a, Vec2Double b) + { + return (a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y); + } + public UnitAction GetAction(Unit unit, Game game, Debug debug) + { + Unit? nearestEnemy = null; + foreach (var other in game.Units) + { + if (other.PlayerId != unit.PlayerId) + { + if (!nearestEnemy.HasValue || DistanceSqr(unit.Position, other.Position) < DistanceSqr(unit.Position, nearestEnemy.Value.Position)) + { + nearestEnemy = other; + } + } + } + LootBox? nearestWeapon = null; + foreach (var lootBox in game.LootBoxes) + { + if (lootBox.Item is Item.Weapon) + { + if (!nearestWeapon.HasValue || DistanceSqr(unit.Position, lootBox.Position) < DistanceSqr(unit.Position, nearestWeapon.Value.Position)) + { + nearestWeapon = lootBox; + } + } + } + Vec2Double targetPos = unit.Position; + if (!unit.Weapon.HasValue && nearestWeapon.HasValue) + { + targetPos = nearestWeapon.Value.Position; + } + else if (nearestEnemy.HasValue) + { + targetPos = nearestEnemy.Value.Position; + } + debug.Draw(new CustomData.Log("Target pos: " + targetPos)); + Vec2Double aim = new Vec2Double(0, 0); + if (nearestEnemy.HasValue) + { + aim = new Vec2Double(nearestEnemy.Value.Position.X - unit.Position.X, nearestEnemy.Value.Position.Y - unit.Position.Y); + } + bool jump = targetPos.Y > unit.Position.Y; + if (targetPos.X > unit.Position.X && game.Level.Tiles[(int)(unit.Position.X + 1)][(int)(unit.Position.Y)] == Tile.Wall) + { + jump = true; + } + if (targetPos.X < unit.Position.X && game.Level.Tiles[(int)(unit.Position.X - 1)][(int)(unit.Position.Y)] == Tile.Wall) + { + jump = true; + } + UnitAction action = new UnitAction(); + action.Velocity = targetPos.X - unit.Position.X; + action.Jump = jump; + action.JumpDown = !jump; + action.Aim = aim; + action.Shoot = true; + action.Reload = false; + action.SwapWeapon = false; + action.PlantMine = false; + return action; + } + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/Runner.cs b/app-src/src/bin/client_gen/csharp/Runner.cs new file mode 100644 index 0000000..3e8d4bb --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/Runner.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Net.Sockets; +using System.Text; + +namespace AiCup2019 +{ + public class Runner + { + private BinaryReader reader; + private BinaryWriter writer; + public Runner(string host, int port, string token) + { + var client = new TcpClient(host, port) { NoDelay = true }; + var stream = new BufferedStream(client.GetStream()); + reader = new BinaryReader(stream); + writer = new BinaryWriter(stream); + var tokenData = System.Text.Encoding.UTF8.GetBytes(token); + writer.Write(tokenData.Length); + writer.Write(tokenData); + writer.Flush(); + } + public void Run() + { + var myStrategy = new MyStrategy(); + var debug = new Debug(writer); + while (true) + { + Model.ServerMessageGame message = Model.ServerMessageGame.ReadFrom(reader); + if (!message.PlayerView.HasValue) + { + break; + } + Model.PlayerView playerView = message.PlayerView.Value; + var actions = new Dictionary(); + foreach (var unit in playerView.Game.Units) + { + if (unit.PlayerId == playerView.MyId) + { + actions.Add(unit.Id, myStrategy.GetAction(unit, playerView.Game, debug)); + } + } + new Model.PlayerMessageGame.ActionMessage(new Model.Versioned(actions)).WriteTo(writer); + writer.Flush(); + } + } + public static void Main(string[] args) + { + string host = args.Length < 1 ? "127.0.0.1" : args[0]; + int port = args.Length < 2 ? 31001 : int.Parse(args[1]); + string token = args.Length < 3 ? "0000000000000000" : args[2]; + new Runner(host, port, token).Run(); + } + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/aicup2019.csproj b/app-src/src/bin/client_gen/csharp/aicup2019.csproj new file mode 100644 index 0000000..04bd451 --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/aicup2019.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/compile.sh b/app-src/src/bin/client_gen/csharp/compile.sh new file mode 100644 index 0000000..5636631 --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/compile.sh @@ -0,0 +1,12 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.cs MyStrategy.cs + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +dotnet publish -c Release -o /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/csharp/run.sh b/app-src/src/bin/client_gen/csharp/run.sh new file mode 100644 index 0000000..5a0174e --- /dev/null +++ b/app-src/src/bin/client_gen/csharp/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +dotnet ./aicup2019.dll "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/Dockerfile b/app-src/src/bin/client_gen/dlang/Dockerfile new file mode 100644 index 0000000..bc56eca --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/Dockerfile @@ -0,0 +1,6 @@ +FROM dlanguage/dmd + +COPY . /project +WORKDIR /project + +RUN dub build -b release \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/app.d b/app-src/src/bin/client_gen/dlang/app.d new file mode 100644 index 0000000..831cb77 --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/app.d @@ -0,0 +1,75 @@ +import model; +import my_strategy; +import stream; +import debugger; +import std.socket; +import std.conv; +import std.exception; + +class SocketStream : Stream { + this(Socket socket) { + this.socket = socket; + } + override ubyte[] readBytes(size_t byteCount) { + ubyte[] data = new ubyte[byteCount]; + size_t offset = 0; + while (offset < byteCount) { + auto received = socket.receive(data[offset..data.length]); + enforce(received > 0); + offset += received; + } + return data; + } + override void writeBytes(const ubyte[] data) { + size_t offset = 0; + while (offset < data.length) { + auto sent = socket.send(data[offset..data.length]); + enforce(sent > 0); + offset += sent; + } + } + override void flush() { } +private: + Socket socket; +} + +class Runner { + this(string host, ushort port, string token) { + auto addr = getAddress(host, port)[0]; + auto socket = new Socket(addr.addressFamily, SocketType.STREAM); + socket.setOption(SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, true); + socket.connect(addr); + stream = new SocketStream(socket); + stream.write(token); + stream.flush(); + } + void run() { + auto myStrategy = new MyStrategy(); + auto debugger = new Debugger(stream); + while (true) { + ServerMessageGame message = ServerMessageGame.readFrom(stream); + if (message.playerView.isNull()) { + break; + } + PlayerView playerView = message.playerView.get; + UnitAction[int] actions; + foreach (unit; playerView.game.units) { + if (unit.playerId == playerView.myId) { + actions[unit.id] = myStrategy.getAction(unit, playerView.game, debugger); + } + } + new PlayerMessageGame.ActionMessage(Versioned(actions)).writeTo(stream); + stream.flush(); + } + } +private: + Stream stream; +} + +void main(string[] args) { + string host = args.length < 2 ? "127.0.0.1" : args[1]; + ushort port = args.length < 3 ? 31001 : to!ushort(args[2]); + string token = args.length < 4 ? "0000000000000000" : args[3]; + + new Runner(host, port, token).run(); +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/compile.sh b/app-src/src/bin/client_gen/dlang/compile.sh new file mode 100644 index 0000000..edd2741 --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my_strategy.d source/my_strategy.d + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +dub build -b release +cp aicup2019 /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/debugger.d b/app-src/src/bin/client_gen/dlang/debugger.d new file mode 100644 index 0000000..1c670c1 --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/debugger.d @@ -0,0 +1,14 @@ +import model; +import stream; + +class Debugger { + this(Stream stream) { + this.stream = stream; + } + void draw(const CustomData data) { + stream.write(PlayerMessageGame.CustomDataMessage.TAG); + data.writeTo(stream); + } +private: + Stream stream; +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/dub.json b/app-src/src/bin/client_gen/dlang/dub.json new file mode 100644 index 0000000..17dec29 --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/dub.json @@ -0,0 +1,3 @@ +{ + "name": "aicup2019" +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/my_strategy.d b/app-src/src/bin/client_gen/dlang/my_strategy.d new file mode 100644 index 0000000..e36f122 --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/my_strategy.d @@ -0,0 +1,64 @@ +import model; +import debugger; +import std.typecons; +import std.conv; + +class MyStrategy { + UnitAction getAction(Unit unit, Game game, Debugger debugger) { + double distanceSqr(Vec2Double a, Vec2Double b) { + return (a.x - b.x) * (a.x - b.x) + + (a.y - b.y) * (a.y - b.y); + } + Nullable!Unit nearestEnemy; + foreach (other; game.units) { + if (other.playerId != unit.playerId) { + if (nearestEnemy.isNull() || + distanceSqr(unit.position, other.position) < + distanceSqr(unit.position, nearestEnemy.get.position)) { + nearestEnemy = other; + } + } + } + Nullable!LootBox nearestWeapon; + foreach (lootBox; game.lootBoxes) { + if (cast(Item.Weapon)(lootBox.item)) { + if (nearestWeapon.isNull() || + distanceSqr(unit.position, lootBox.position) < + distanceSqr(unit.position, nearestWeapon.get.position)) { + nearestWeapon = lootBox; + } + } + } + Vec2Double targetPos = unit.position; + if (unit.weapon.isNull() && !nearestWeapon.isNull()) { + targetPos = nearestWeapon.get.position; + } else if (!nearestEnemy.isNull()) { + targetPos = nearestEnemy.get.position; + } + debugger.draw(new CustomData.Log( + "Target pos: " ~ to!string(targetPos))); + Vec2Double aim = Vec2Double(0, 0); + if (!nearestEnemy.isNull()) { + aim = Vec2Double( + nearestEnemy.get.position.x - unit.position.x, + nearestEnemy.get.position.y - unit.position.y); + } + bool jump = targetPos.y > unit.position.y; + if (targetPos.x > unit.position.x && game.level.tiles[(unit.position.x + 1).to!size_t][(unit.position.y).to!size_t] == Tile.Wall) { + jump = true; + } + if (targetPos.x < unit.position.x && game.level.tiles[(unit.position.x - 1).to!size_t][(unit.position.y).to!size_t] == Tile.Wall) { + jump = true; + } + UnitAction action; + action.velocity = targetPos.x - unit.position.x; + action.jump = jump; + action.jumpDown = !jump; + action.aim = aim; + action.shoot = true; + action.reload = false; + action.swapWeapon = false; + action.plantMine = false; + return action; + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/dlang/run.sh b/app-src/src/bin/client_gen/dlang/run.sh new file mode 100644 index 0000000..e94c24a --- /dev/null +++ b/app-src/src/bin/client_gen/dlang/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +./aicup2019 "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/fsharp/Debug.fs b/app-src/src/bin/client_gen/fsharp/Debug.fs new file mode 100644 index 0000000..102b7fc --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/Debug.fs @@ -0,0 +1,7 @@ +namespace AiCup2019 + +type Debug(writer) = + member this.draw(customData) = + let message : Model.PlayerMessageGameCustomDataMessage = {Data = customData} + message.writeTo writer + writer.Flush() diff --git a/app-src/src/bin/client_gen/fsharp/Dockerfile b/app-src/src/bin/client_gen/fsharp/Dockerfile new file mode 100644 index 0000000..125a71b --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/Dockerfile @@ -0,0 +1,20 @@ +FROM debian + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + curl \ + libunwind8 \ + wget \ + gpg \ + apt-transport-https \ + ca-certificates \ + zlib1g libicu63 libcurl4 +RUN wget https://dot.net/v1/dotnet-install.sh && chmod +x dotnet-install.sh +RUN ./dotnet-install.sh -Channel 2.1 && ./dotnet-install.sh -Channel 3.0 && ./dotnet-install.sh -Channel 3.1 + +ENV PATH="/root/.dotnet:$PATH" + +COPY . /project +WORKDIR /project + +RUN dotnet build -c Release \ No newline at end of file diff --git a/app-src/src/bin/client_gen/fsharp/MyStrategy.fs b/app-src/src/bin/client_gen/fsharp/MyStrategy.fs new file mode 100644 index 0000000..6e12fc8 --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/MyStrategy.fs @@ -0,0 +1,47 @@ +namespace AiCup2019 + +open AiCup2019.Model + +type MyStrategy() = + static member DistanceSqr (a: Vec2Double, b: Vec2Double) = + (a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y) + + member this.getAction(unit: Unit, game: Game, debug: Debug) = + let nearestEnemy = game.Units |> Array.filter(fun u -> u.PlayerId <> unit.PlayerId) + |> Array.sortBy(fun u -> MyStrategy.DistanceSqr(u.Position, unit.Position)) + |> Seq.tryFind(fun _ -> true) + + let nearestWeapon = game.LootBoxes |> Array.choose(fun b -> match b.Item with + | Item.Weapon _ -> Some b.Position + | _ -> None) + |> Array.sortBy(fun p -> MyStrategy.DistanceSqr(p, unit.Position)) + |> Seq.tryFind(fun _ -> true) + + let mutable targetPos = unit.Position + + if not unit.Weapon.IsSome && nearestWeapon.IsSome then + targetPos <- nearestWeapon.Value + else if nearestEnemy.IsSome then + targetPos <- nearestEnemy.Value.Position + + debug.draw(CustomData.Log {Text = sprintf "Target pos: %A" targetPos }) + + let aim: Vec2Double = match nearestEnemy with + | Some x -> { X = x.Position.X - unit.Position.X; Y = x.Position.Y - unit.Position.Y} + | None -> { X = 0.0; Y = 0.0 } + + let mutable jump = targetPos.Y > unit.Position.Y + + if targetPos.X > unit.Position.X && game.Level.Tiles.[(int unit.Position.X + 1)].[(int unit.Position.Y)] = Tile.Wall then jump <- true + if targetPos.X < unit.Position.X && game.Level.Tiles.[(int unit.Position.X - 1)].[(int unit.Position.Y)] = Tile.Wall then jump <- true + + { + Velocity = targetPos.X - unit.Position.X + Jump = jump + JumpDown = not jump + Aim = aim + Shoot = true + Reload = false + SwapWeapon = false + PlantMine = false + } diff --git a/app-src/src/bin/client_gen/fsharp/Runner.fs b/app-src/src/bin/client_gen/fsharp/Runner.fs new file mode 100644 index 0000000..47e1d7b --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/Runner.fs @@ -0,0 +1,55 @@ +namespace AiCup2019 + +open System +open System.IO; +open System.Net.Sockets; + +module Runner = + type T(host, port, token: string) = + let client = new TcpClient(host, port) + let stream = new BufferedStream(client.GetStream()) + let reader = new BinaryReader(stream) + let writer = new BinaryWriter(stream) + let tokenData = System.Text.Encoding.UTF8.GetBytes token + do + client.NoDelay <- true + writer.Write tokenData.Length + writer.Write tokenData + writer.Flush() + + member this.run = + let myStrategy = new MyStrategy() + let debug = new Debug(writer) + + let rec loop() = + let message = Model.ServerMessageGame.readFrom reader + + match message.PlayerView with + | Some playerView -> + let actions = playerView.Game.Units + |> Array.filter(fun x -> x.PlayerId = playerView.MyId) + |> Array.map(fun x -> + (x.Id, myStrategy.getAction(x, playerView.Game, debug))) + |> Map.ofArray + (Model.PlayerMessageGame.ActionMessage {Action = {Inner = actions}}).writeTo writer + writer.Flush() + loop() + | None -> () + + loop() + + [] + let main argv = + let host = match argv with + | x when x.Length >=1 -> x.[0] + | _-> "127.0.0.1" + let port = match argv with + | x when x.Length >=2 -> x.[1] |> Int32.Parse + | _ -> 31001 + let token = match argv with + | x when x.Length >=3 -> x.[2] + | _ -> "0000000000000000" + + (new T(host, port, token)).run + + 0 // return an integer exit code diff --git a/app-src/src/bin/client_gen/fsharp/aicup2019.fsproj b/app-src/src/bin/client_gen/fsharp/aicup2019.fsproj new file mode 100644 index 0000000..72dec00 --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/aicup2019.fsproj @@ -0,0 +1,42 @@ + + + + Exe + netcoreapp2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app-src/src/bin/client_gen/fsharp/compile.sh b/app-src/src/bin/client_gen/fsharp/compile.sh new file mode 100644 index 0000000..d218661 --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/compile.sh @@ -0,0 +1,12 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.fs MyStrategy.fs + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +dotnet publish -c Release -o /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/fsharp/run.sh b/app-src/src/bin/client_gen/fsharp/run.sh new file mode 100644 index 0000000..5a0174e --- /dev/null +++ b/app-src/src/bin/client_gen/fsharp/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +dotnet ./aicup2019.dll "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/go/Dockerfile b/app-src/src/bin/client_gen/go/Dockerfile new file mode 100644 index 0000000..4546e9b --- /dev/null +++ b/app-src/src/bin/client_gen/go/Dockerfile @@ -0,0 +1,6 @@ +FROM golang + +COPY . /project +WORKDIR /project + +RUN go build -o aicup2019 && rm aicup2019 \ No newline at end of file diff --git a/app-src/src/bin/client_gen/go/compile.sh b/app-src/src/bin/client_gen/go/compile.sh new file mode 100644 index 0000000..b88da7b --- /dev/null +++ b/app-src/src/bin/client_gen/go/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my_strategy.go my_strategy.go + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +go build -o aicup2019 +cp aicup2019 /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/go/debug.go b/app-src/src/bin/client_gen/go/debug.go new file mode 100644 index 0000000..d1d3f35 --- /dev/null +++ b/app-src/src/bin/client_gen/go/debug.go @@ -0,0 +1,18 @@ +package main + +import . "aicup2019/model" +import "bufio" + +type Debug struct { + Writer *bufio.Writer +} + +func (debug Debug) Draw(data CustomData) { + PlayerMessageGameCustomDataMessage { + Data: data, + }.Write(debug.Writer) + err := debug.Writer.Flush() + if err != nil { + panic(err) + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/go/go.mod b/app-src/src/bin/client_gen/go/go.mod new file mode 100644 index 0000000..334f778 --- /dev/null +++ b/app-src/src/bin/client_gen/go/go.mod @@ -0,0 +1,3 @@ +module aicup2019 + +go 1.13 diff --git a/app-src/src/bin/client_gen/go/main.go b/app-src/src/bin/client_gen/go/main.go new file mode 100644 index 0000000..799d303 --- /dev/null +++ b/app-src/src/bin/client_gen/go/main.go @@ -0,0 +1,91 @@ +package main + +import ( + . "aicup2019/model" + . "aicup2019/stream" + "os" + "strconv" + "net" + "bufio" +) + +type Runner struct { + conn net.Conn + reader *bufio.Reader + writer *bufio.Writer +} + +func NewRunner(host string, port uint16, token string) Runner { + conn, err := net.Dial("tcp", host + ":" + strconv.Itoa(int(port))) + if err != nil { + panic(err) + } + writer := bufio.NewWriter(conn) + WriteString(writer, token) + err = writer.Flush() + if err != nil { + panic(err) + } + return Runner { + conn: conn, + reader: bufio.NewReader(conn), + writer: writer, + } +} + +func (runner Runner) Run() { + myStrategy := NewMyStrategy() + debug := Debug { + Writer: runner.writer, + } + for { + message := ReadServerMessageGame(runner.reader) + if message.PlayerView == nil { + break + } + playerView := *message.PlayerView + actions := make(map[int32]UnitAction) + for _, unit := range playerView.Game.Units { + if (unit.PlayerId == playerView.MyId) { + actions[unit.Id] = myStrategy.getAction(unit, playerView.Game, debug) + } + } + PlayerMessageGameActionMessage { + Action: Versioned { + Inner: actions, + }, + }.Write(runner.writer) + err := runner.writer.Flush() + if err != nil { + panic(err) + } + } +} + +func main() { + var host string + if len(os.Args) < 2 { + host = "localhost" + } else { + host = os.Args[1] + } + var port uint16 + if len(os.Args) < 3 { + port = 31001 + } else { + portInt, err := strconv.Atoi(os.Args[2]) + port = uint16(portInt) + if err != nil { + panic(err) + } + } + var token string + if len(os.Args) < 4 { + token = "0000000000000000" + } else { + token = os.Args[3] + } + + runner := NewRunner(host, port, token) + runner.Run() +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/go/my_strategy.go b/app-src/src/bin/client_gen/go/my_strategy.go new file mode 100644 index 0000000..eebc450 --- /dev/null +++ b/app-src/src/bin/client_gen/go/my_strategy.go @@ -0,0 +1,73 @@ +package main + +import ( + "fmt" + + . "aicup2019/model" +) + +type MyStrategy struct{} + +func NewMyStrategy() MyStrategy { + return MyStrategy{} +} + +func distanceSqr(a Vec2Float64, b Vec2Float64) float64 { + return (a.X-b.X)*(a.X-b.X) + (a.Y-b.Y)*(a.Y-b.Y) +} + +func (strategy MyStrategy) getAction(unit Unit, game Game, debug Debug) UnitAction { + var nearestEnemy *Unit + for i, other := range game.Units { + if other.PlayerId != unit.PlayerId { + if nearestEnemy == nil || distanceSqr(unit.Position, other.Position) < distanceSqr(unit.Position, nearestEnemy.Position) { + nearestEnemy = &game.Units[i] + } + } + } + var nearestWeapon *LootBox + for i, lootBox := range game.LootBoxes { + switch lootBox.Item.(type) { + case ItemWeapon: + if nearestWeapon == nil || distanceSqr(unit.Position, lootBox.Position) < distanceSqr(unit.Position, nearestWeapon.Position) { + nearestWeapon = &game.LootBoxes[i] + } + } + } + targetPos := unit.Position + if unit.Weapon == nil && nearestWeapon != nil { + targetPos = nearestWeapon.Position + } else if nearestEnemy != nil { + targetPos = nearestEnemy.Position + } + debug.Draw(CustomDataLog{ + Text: fmt.Sprintf("Target pos: %v", targetPos), + }) + aim := Vec2Float64{ + X: 0, + Y: 0, + } + if nearestEnemy != nil { + aim = Vec2Float64{ + X: nearestEnemy.Position.X - unit.Position.X, + Y: nearestEnemy.Position.Y - unit.Position.Y, + } + } + jump := targetPos.Y > unit.Position.Y + if targetPos.X > unit.Position.X && game.Level.Tiles[int(unit.Position.X+1)][int(unit.Position.Y)] == TileWall { + jump = true + } + if targetPos.X < unit.Position.X && game.Level.Tiles[int(unit.Position.X-1)][int(unit.Position.Y)] == TileWall { + jump = true + } + return UnitAction{ + Velocity: targetPos.X - unit.Position.X, + Jump: jump, + JumpDown: !jump, + Aim: aim, + SwapWeapon: false, + PlantMine: false, + Shoot: true, + Reload: false, + } +} diff --git a/app-src/src/bin/client_gen/go/run.sh b/app-src/src/bin/client_gen/go/run.sh new file mode 100644 index 0000000..e94c24a --- /dev/null +++ b/app-src/src/bin/client_gen/go/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +./aicup2019 "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/Debug.java b/app-src/src/bin/client_gen/java/Debug.java new file mode 100644 index 0000000..0efef8f --- /dev/null +++ b/app-src/src/bin/client_gen/java/Debug.java @@ -0,0 +1,19 @@ +import java.io.IOException; +import java.io.OutputStream; + +public class Debug { + private OutputStream stream; + + public Debug(OutputStream stream) { + this.stream = stream; + } + + public void draw(model.CustomData customData) { + try { + new model.PlayerMessageGame.CustomDataMessage(customData).writeTo(stream); + stream.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/Dockerfile b/app-src/src/bin/client_gen/java/Dockerfile new file mode 100644 index 0000000..f62366a --- /dev/null +++ b/app-src/src/bin/client_gen/java/Dockerfile @@ -0,0 +1,6 @@ +FROM maven:3-jdk-8 + +COPY . /project +WORKDIR /project + +RUN mvn package --batch-mode \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/MyStrategy.java b/app-src/src/bin/client_gen/java/MyStrategy.java new file mode 100644 index 0000000..d034187 --- /dev/null +++ b/app-src/src/bin/client_gen/java/MyStrategy.java @@ -0,0 +1,59 @@ +import model.*; + +public class MyStrategy { + static double distanceSqr(Vec2Double a, Vec2Double b) { + return (a.getX() - b.getX()) * (a.getX() - b.getX()) + (a.getY() - b.getY()) * (a.getY() - b.getY()); + } + + public UnitAction getAction(Unit unit, Game game, Debug debug) { + Unit nearestEnemy = null; + for (Unit other : game.getUnits()) { + if (other.getPlayerId() != unit.getPlayerId()) { + if (nearestEnemy == null || distanceSqr(unit.getPosition(), + other.getPosition()) < distanceSqr(unit.getPosition(), nearestEnemy.getPosition())) { + nearestEnemy = other; + } + } + } + LootBox nearestWeapon = null; + for (LootBox lootBox : game.getLootBoxes()) { + if (lootBox.getItem() instanceof Item.Weapon) { + if (nearestWeapon == null || distanceSqr(unit.getPosition(), + lootBox.getPosition()) < distanceSqr(unit.getPosition(), nearestWeapon.getPosition())) { + nearestWeapon = lootBox; + } + } + } + Vec2Double targetPos = unit.getPosition(); + if (unit.getWeapon() == null && nearestWeapon != null) { + targetPos = nearestWeapon.getPosition(); + } else if (nearestEnemy != null) { + targetPos = nearestEnemy.getPosition(); + } + debug.draw(new CustomData.Log("Target pos: " + targetPos)); + Vec2Double aim = new Vec2Double(0, 0); + if (nearestEnemy != null) { + aim = new Vec2Double(nearestEnemy.getPosition().getX() - unit.getPosition().getX(), + nearestEnemy.getPosition().getY() - unit.getPosition().getY()); + } + boolean jump = targetPos.getY() > unit.getPosition().getY(); + if (targetPos.getX() > unit.getPosition().getX() && game.getLevel() + .getTiles()[(int) (unit.getPosition().getX() + 1)][(int) (unit.getPosition().getY())] == Tile.WALL) { + jump = true; + } + if (targetPos.getX() < unit.getPosition().getX() && game.getLevel() + .getTiles()[(int) (unit.getPosition().getX() - 1)][(int) (unit.getPosition().getY())] == Tile.WALL) { + jump = true; + } + UnitAction action = new UnitAction(); + action.setVelocity(targetPos.getX() - unit.getPosition().getX()); + action.setJump(jump); + action.setJumpDown(!jump); + action.setAim(aim); + action.setShoot(true); + action.setReload(false); + action.setSwapWeapon(false); + action.setPlantMine(false); + return action; + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/Runner.java b/app-src/src/bin/client_gen/java/Runner.java new file mode 100644 index 0000000..cfd11e7 --- /dev/null +++ b/app-src/src/bin/client_gen/java/Runner.java @@ -0,0 +1,51 @@ +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.Socket; +import java.io.InputStream; +import java.util.Map; +import java.util.HashMap; +import java.io.BufferedOutputStream; + +import util.StreamUtil; + +public class Runner { + private final InputStream inputStream; + private final OutputStream outputStream; + + Runner(String host, int port, String token) throws IOException { + Socket socket = new Socket(host, port); + socket.setTcpNoDelay(true); + inputStream = new BufferedInputStream(socket.getInputStream()); + outputStream = new BufferedOutputStream(socket.getOutputStream()); + StreamUtil.writeString(outputStream, token); + outputStream.flush(); + } + + void run() throws IOException { + MyStrategy myStrategy = new MyStrategy(); + Debug debug = new Debug(outputStream); + while (true) { + model.ServerMessageGame message = model.ServerMessageGame.readFrom(inputStream); + model.PlayerView playerView = message.getPlayerView(); + if (playerView == null) { + break; + } + Map actions = new HashMap<>(); + for (model.Unit unit : playerView.getGame().getUnits()) { + if (unit.getPlayerId() == playerView.getMyId()) { + actions.put(unit.getId(), myStrategy.getAction(unit, playerView.getGame(), debug)); + } + } + new model.PlayerMessageGame.ActionMessage(new model.Versioned(actions)).writeTo(outputStream); + outputStream.flush(); + } + } + + public static void main(String[] args) throws IOException { + String host = args.length < 1 ? "127.0.0.1" : args[0]; + int port = args.length < 2 ? 31001 : Integer.parseInt(args[1]); + String token = args.length < 3 ? "0000000000000000" : args[2]; + new Runner(host, port, token).run(); + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/compile.sh b/app-src/src/bin/client_gen/java/compile.sh new file mode 100644 index 0000000..88cd179 --- /dev/null +++ b/app-src/src/bin/client_gen/java/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.java src/main/java/MyStrategy.java + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +mvn package --batch-mode +cp target/aicup2019-jar-with-dependencies.jar /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/pom.xml b/app-src/src/bin/client_gen/java/pom.xml new file mode 100644 index 0000000..fc06f2f --- /dev/null +++ b/app-src/src/bin/client_gen/java/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + com.codegame.codeside2019.devkit + aicup2019 + jar + 1.0-SNAPSHOT + + aicup2019 + + + UTF-8 + + + + aicup2019 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + 1.8 + 1.8 + UTF-8 + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + jar-with-dependencies + + + + Runner + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/app-src/src/bin/client_gen/java/run.sh b/app-src/src/bin/client_gen/java/run.sh new file mode 100644 index 0000000..0abe2cc --- /dev/null +++ b/app-src/src/bin/client_gen/java/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +java -Xmx250m -jar ./aicup2019-jar-with-dependencies.jar "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/javascript/Dockerfile b/app-src/src/bin/client_gen/javascript/Dockerfile new file mode 100644 index 0000000..450600a --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/Dockerfile @@ -0,0 +1,4 @@ +FROM node + +COPY . /project +WORKDIR /project \ No newline at end of file diff --git a/app-src/src/bin/client_gen/javascript/compile.sh b/app-src/src/bin/client_gen/javascript/compile.sh new file mode 100644 index 0000000..6c67e41 --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/compile.sh @@ -0,0 +1,12 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my-strategy.js my-strategy.js + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +cp -r * /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/javascript/debug.js b/app-src/src/bin/client_gen/javascript/debug.js new file mode 100644 index 0000000..279ff0a --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/debug.js @@ -0,0 +1,13 @@ +const PlayerMessageGame = require('./model/player-message-game').PlayerMessageGame; + +class Debug { + constructor (streamWrapper) { + this.streamWrapper = streamWrapper; + } + + async draw (data) { + await (new PlayerMessageGame.CustomDataMessage(data)).writeTo(this.streamWrapper); + } +} + +module.exports.Debug = Debug; diff --git a/app-src/src/bin/client_gen/javascript/index.js b/app-src/src/bin/client_gen/javascript/index.js new file mode 100644 index 0000000..6f25838 --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/index.js @@ -0,0 +1,74 @@ +'use strict'; + +const StreamWrapper = require('./stream-wrapper').StreamWrapper; +const Socket = require('net').Socket; + +const ServerMessageGame = require('./model/server-message-game').ServerMessageGame; +const PlayerMessageGame = require('./model/player-message-game').PlayerMessageGame; +const Versioned = require('./model/versioned').Versioned; +const MyStrategy = require('./my-strategy').MyStrategy; +const Debug = require('./debug').Debug; + +class Runner { + constructor (host, port, token) { + this.socket = new Socket({readable: true, writable: true}); + this.socket + .setNoDelay(true) + .on('error', (error) => { + console.error('Socket error: ' + error.message); + process.exit(1); + }); + this.streamWrapper = new StreamWrapper(this.socket); + this.host = host; + this.port = port; + this.token = token; + } + + async connect () { + const _this = this; + await new Promise(function(resolve, reject) { + _this.socket.connect({ + host: _this.host, + port: _this.port + }, function() { + resolve(); + }); + }); + await this.streamWrapper.writeString(this.token); + } + + async run () { + try { + await this.connect(); + let message, playerView, actions; + const strategy = new MyStrategy(); + const debug = new Debug(this.streamWrapper); + while (true) { + message = await ServerMessageGame.readFrom(this.streamWrapper); + if (message.playerView === null) { + break; + } + playerView = message.playerView; + actions = new Map(); + for (let i = 0, unitsSize = playerView.game.units.length; i < unitsSize; i++) { + let unit = playerView.game.units[i]; + if (unit.playerId === playerView.myId) { + actions.set(unit.id, await strategy.getAction(unit, playerView.game, debug)); + } + } + await (new PlayerMessageGame.ActionMessage(new Versioned(actions)).writeTo(this.streamWrapper)); + } + } catch (e) { + console.error(e); + process.exit(1); + } + } +} + + +const argv = process.argv; +const argc = argv.length; +const host = argc < 3 ? '127.0.0.1' : argv[2]; +const port = argc < 4 ? 31001 : parseInt(argv[3]); +const token = argc < 5 ? '0000000000000000' : argv[4]; +(new Runner(host, port, token)).run(); diff --git a/app-src/src/bin/client_gen/javascript/my-strategy.js b/app-src/src/bin/client_gen/javascript/my-strategy.js new file mode 100644 index 0000000..6faefd7 --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/my-strategy.js @@ -0,0 +1,79 @@ +const UnitAction = require('./model/unit-action').UnitAction; +const Vec2Double = require('./model/vec2-double').Vec2Double; +const Item = require('./model/item').Item; +const Tile = require('./model/tile'); +const CustomData = require('./model/custom-data').CustomData; + +class MyStrategy { + async getAction (unit, game, debug) { + const distanceSqr = function (a, b) { + return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2); + }; + + let minDistance = Number.POSITIVE_INFINITY; + const nearestEnemy = game.units + .filter((u) => { + return u.playerId !== unit.playerId; + }) + .reduce(function (prev, u) { + let currentDistance = distanceSqr(u.position, unit.position); + if (currentDistance < minDistance) { + minDistance = currentDistance; + return u; + } + return prev; + }); + + minDistance = Number.POSITIVE_INFINITY; + const nearestWeapon = game.lootBoxes + .filter ((box) => { + return box.item instanceof Item.Weapon; + }) + .reduce(function (prev, box) { + let currentDistance = distanceSqr(box.position, unit.position); + if (currentDistance < minDistance) { + minDistance = currentDistance; + return box; + } + return prev; + }); + + let targetPos = unit.position; + if (unit.weapon === null && nearestWeapon) { + targetPos = nearestWeapon.position; + } else { + targetPos = nearestEnemy.position; + } + await debug.draw(new CustomData.Log(`Target pos: ${targetPos.toString()}`)); + + let aim = new Vec2Double(0, 0); + if (nearestEnemy) { + aim = new Vec2Double( + nearestEnemy.position.x - unit.position.x, + nearestEnemy.position.y - unit.position.y + ); + } + + let jump = targetPos.y > unit.position.y; + if (targetPos.x > unit.position.x && game.level.tiles[parseInt(unit.position.x + 1)][parseInt(unit.position.y)] === Tile.Wall) { + jump = true; + } + + if (targetPos.x < unit.position.x && game.level.tiles[parseInt(unit.position.x - 1)][parseInt(unit.position.y)] === Tile.Wall) { + jump = true; + } + + return new UnitAction( + targetPos.x - unit.position.x, + jump, + !jump, + aim, + true, + false, + false, + false + ); + } +} + +module.exports.MyStrategy = MyStrategy; diff --git a/app-src/src/bin/client_gen/javascript/run.sh b/app-src/src/bin/client_gen/javascript/run.sh new file mode 100644 index 0000000..584943d --- /dev/null +++ b/app-src/src/bin/client_gen/javascript/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +node ./index.js "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/kotlin/Debug.kt b/app-src/src/bin/client_gen/kotlin/Debug.kt new file mode 100644 index 0000000..e98dcae --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/Debug.kt @@ -0,0 +1,14 @@ +import java.io.IOException +import java.io.OutputStream + +class Debug(private val stream: OutputStream) { + + fun draw(customData: model.CustomData) { + try { + model.PlayerMessageGame.CustomDataMessage(customData).writeTo(stream) + stream.flush() + } catch (e: IOException) { + throw RuntimeException(e) + } + } +} diff --git a/app-src/src/bin/client_gen/kotlin/Dockerfile b/app-src/src/bin/client_gen/kotlin/Dockerfile new file mode 100644 index 0000000..f62366a --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/Dockerfile @@ -0,0 +1,6 @@ +FROM maven:3-jdk-8 + +COPY . /project +WORKDIR /project + +RUN mvn package --batch-mode \ No newline at end of file diff --git a/app-src/src/bin/client_gen/kotlin/MyStrategy.kt b/app-src/src/bin/client_gen/kotlin/MyStrategy.kt new file mode 100644 index 0000000..8354932 --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/MyStrategy.kt @@ -0,0 +1,60 @@ +import model.* + +class MyStrategy { + + fun getAction(unit: model.Unit, game: Game, debug: Debug): UnitAction { + var nearestEnemy: model.Unit? = null + for (other in game.units) { + if (other.playerId != unit.playerId) { + if (nearestEnemy == null || distanceSqr(unit.position, + other.position) < distanceSqr(unit.position, nearestEnemy.position)) { + nearestEnemy = other + } + } + } + var nearestWeapon: LootBox? = null + for (lootBox in game.lootBoxes) { + if (lootBox.item is Item.Weapon) { + if (nearestWeapon == null || distanceSqr(unit.position, + lootBox.position) < distanceSqr(unit.position, nearestWeapon.position)) { + nearestWeapon = lootBox + } + } + } + var targetPos: Vec2Double = unit.position + if (unit.weapon == null && nearestWeapon != null) { + targetPos = nearestWeapon.position + } else if (nearestEnemy != null) { + targetPos = nearestEnemy.position + } + debug.draw(CustomData.Log("Target pos: $targetPos")) + var aim = Vec2Double(0.0, 0.0) + if (nearestEnemy != null) { + aim = Vec2Double(nearestEnemy.position.x - unit.position.x, + nearestEnemy.position.y - unit.position.y) + } + var jump = targetPos.y > unit.position.y; + if (targetPos.x > unit.position.x && game.level.tiles[(unit.position.x + 1).toInt()][(unit.position.y).toInt()] == Tile.WALL) { + jump = true + } + if (targetPos.x < unit.position.x && game.level.tiles[(unit.position.x - 1).toInt()][(unit.position.y).toInt()] == Tile.WALL) { + jump = true + } + val action = UnitAction() + action.velocity = targetPos.x - unit.position.x + action.jump = jump + action.jumpDown = !jump + action.aim = aim + action.shoot = true + action.reload = false + action.swapWeapon = false + action.plantMine = false + return action + } + + companion object { + internal fun distanceSqr(a: Vec2Double, b: Vec2Double): Double { + return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + } + } +} diff --git a/app-src/src/bin/client_gen/kotlin/Runner.kt b/app-src/src/bin/client_gen/kotlin/Runner.kt new file mode 100644 index 0000000..7bb1c23 --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/Runner.kt @@ -0,0 +1,53 @@ +import java.io.BufferedInputStream +import java.io.BufferedOutputStream +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream +import java.net.Socket +import java.util.HashMap +import util.StreamUtil + +class Runner @Throws(IOException::class) +internal constructor(host: String, port: Int, token: String) { + private val inputStream: InputStream + private val outputStream: OutputStream + + init { + val socket = Socket(host, port) + socket.tcpNoDelay = true + inputStream = BufferedInputStream(socket.getInputStream()) + outputStream = BufferedOutputStream(socket.getOutputStream()) + StreamUtil.writeString(outputStream, token) + outputStream.flush() + } + + @Throws(IOException::class) + internal fun run() { + val myStrategy = MyStrategy() + val debug = Debug(outputStream) + while (true) { + val message = model.ServerMessageGame.readFrom(inputStream) + val playerView = message.playerView ?: break + val actions = HashMap() + for (unit in playerView.game.units) { + if (unit.playerId == playerView.myId) { + actions[unit.id] = myStrategy.getAction(unit, playerView.game, debug) + } + } + model.PlayerMessageGame.ActionMessage(model.Versioned(actions)).writeTo(outputStream) + outputStream.flush() + } + } + + companion object { + + @Throws(IOException::class) + @JvmStatic + fun main(args: Array) { + val host = if (args.size < 1) "127.0.0.1" else args[0] + val port = if (args.size < 2) 31001 else Integer.parseInt(args[1]) + val token = if (args.size < 3) "0000000000000000" else args[2] + Runner(host, port, token).run() + } + } +} diff --git a/app-src/src/bin/client_gen/kotlin/compile.sh b/app-src/src/bin/client_gen/kotlin/compile.sh new file mode 100644 index 0000000..f9bef2e --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.kt src/main/kotlin/MyStrategy.kt + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +mvn package --batch-mode +cp target/aicup2019-jar-with-dependencies.jar /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/kotlin/pom.xml b/app-src/src/bin/client_gen/kotlin/pom.xml new file mode 100644 index 0000000..4afa367 --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + com.codegame.codeside2019.devkit + aicup2019 + jar + 1.0-SNAPSHOT + + aicup2019 + + + 1.3.11 + Runner + UTF-8 + + + + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + + + aicup2019 + ${project.basedir}/src/main/kotlin + + + + kotlin-maven-plugin + org.jetbrains.kotlin + ${kotlin.version} + + + + + compile + compile + + compile + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + jar-with-dependencies + + + + Runner + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/app-src/src/bin/client_gen/kotlin/run.sh b/app-src/src/bin/client_gen/kotlin/run.sh new file mode 100644 index 0000000..0abe2cc --- /dev/null +++ b/app-src/src/bin/client_gen/kotlin/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +java -Xmx250m -jar ./aicup2019-jar-with-dependencies.jar "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/main.rs b/app-src/src/bin/client_gen/main.rs new file mode 100644 index 0000000..8c17841 --- /dev/null +++ b/app-src/src/bin/client_gen/main.rs @@ -0,0 +1,749 @@ +use aicup2019::*; +use std::fs::File; +use std::path::{Path, PathBuf}; + +const VERSION: &str = "0.1.0"; + +#[derive(StructOpt)] +struct Opt { + path: PathBuf, +} + +fn write_file>(path: P, content: &str) -> std::io::Result<()> { + if let Some(dir) = path.as_ref().parent() { + std::fs::create_dir_all(dir)?; + } + File::create(path)?.write_all(content.as_bytes())?; + Ok(()) +} + +fn gen_python(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("python"); + let mut gen = trans_gen::Python::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("python/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("python/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("python/run.sh"))?; + write_file(path.join("main.py"), include_str!("python/main.py"))?; + write_file(path.join("debug.py"), include_str!("python/debug.py"))?; + write_file( + path.join("my_strategy.py"), + include_str!("python/my_strategy.py"), + )?; + Ok(()) +} + +fn gen_javascript(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("javascript"); + let mut gen = trans_gen::JavaScript::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file( + path.join("Dockerfile"), + include_str!("javascript/Dockerfile"), + )?; + write_file( + path.join("compile.sh"), + include_str!("javascript/compile.sh"), + )?; + write_file(path.join("run.sh"), include_str!("javascript/run.sh"))?; + write_file(path.join("index.js"), include_str!("javascript/index.js"))?; + write_file(path.join("debug.js"), include_str!("javascript/debug.js"))?; + write_file( + path.join("my-strategy.js"), + include_str!("javascript/my-strategy.js"), + )?; + Ok(()) +} + +fn gen_ruby(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("ruby"); + let mut gen = trans_gen::Ruby::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("ruby/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("ruby/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("ruby/run.sh"))?; + write_file(path.join("main.rb"), include_str!("ruby/main.rb"))?; + write_file(path.join("debug.rb"), include_str!("ruby/debug.rb"))?; + write_file( + path.join("my_strategy.rb"), + include_str!("ruby/my_strategy.rb"), + )?; + Ok(()) +} + +fn gen_rust(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("rust"); + let mut gen = trans_gen::Rust::new("aicup2019-model", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(path.join("model"))?; + write_file(path.join("Dockerfile"), include_str!("rust/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("rust/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("rust/run.sh"))?; + write_file( + path.join("Cargo.toml"), + &include_str!("rust/Cargo.toml.template").replace("$version", VERSION), + )?; + write_file(path.join("src/main.rs"), include_str!("rust/src/main.rs"))?; + write_file( + path.join("src/my_strategy.rs"), + include_str!("rust/src/my_strategy.rs"), + )?; + Ok(()) +} + +fn gen_java(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("java"); + let src_path = path.join("src").join("main").join("java"); + let mut gen = trans_gen::Java::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&src_path)?; + write_file(path.join("Dockerfile"), include_str!("java/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("java/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("java/run.sh"))?; + write_file( + src_path.join("MyStrategy.java"), + &include_str!("java/MyStrategy.java"), + )?; + write_file( + src_path.join("Debug.java"), + &include_str!("java/Debug.java"), + )?; + write_file( + src_path.join("Runner.java"), + &include_str!("java/Runner.java"), + )?; + write_file(path.join("pom.xml"), include_str!("java/pom.xml"))?; + Ok(()) +} + +fn gen_scala(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("scala"); + let src_path = path.join("src").join("main").join("scala"); + let mut gen = trans_gen::Scala::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&src_path)?; + write_file(path.join("Dockerfile"), include_str!("scala/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("scala/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("scala/run.sh"))?; + write_file( + src_path.join("MyStrategy.scala"), + &include_str!("scala/MyStrategy.scala"), + )?; + write_file( + src_path.join("Debug.scala"), + &include_str!("scala/Debug.scala"), + )?; + write_file( + src_path.join("Runner.scala"), + &include_str!("scala/Runner.scala"), + )?; + write_file(path.join("pom.xml"), include_str!("scala/pom.xml"))?; + Ok(()) +} + +fn gen_kotlin(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("kotlin"); + let src_path = path.join("src").join("main").join("kotlin"); + let mut gen = trans_gen::Kotlin::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&src_path)?; + write_file(path.join("Dockerfile"), include_str!("kotlin/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("kotlin/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("kotlin/run.sh"))?; + write_file( + src_path.join("MyStrategy.kt"), + &include_str!("kotlin/MyStrategy.kt"), + )?; + write_file(src_path.join("Debug.kt"), &include_str!("kotlin/Debug.kt"))?; + write_file( + src_path.join("Runner.kt"), + &include_str!("kotlin/Runner.kt"), + )?; + write_file(path.join("pom.xml"), include_str!("kotlin/pom.xml"))?; + Ok(()) +} + +fn gen_csharp(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("csharp"); + let mut gen = trans_gen::CSharp::new("AiCup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("csharp/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("csharp/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("csharp/run.sh"))?; + write_file(path.join("Runner.cs"), &include_str!("csharp/Runner.cs"))?; + write_file( + path.join("MyStrategy.cs"), + &include_str!("csharp/MyStrategy.cs"), + )?; + write_file(path.join("Debug.cs"), &include_str!("csharp/Debug.cs"))?; + write_file( + path.join("aicup2019.csproj"), + &include_str!("csharp/aicup2019.csproj"), + )?; + Ok(()) +} + +fn gen_fsharp(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("fsharp"); + let mut gen = trans_gen::FSharp::new("AiCup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("fsharp/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("fsharp/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("fsharp/run.sh"))?; + write_file(path.join("Runner.fs"), &include_str!("fsharp/Runner.fs"))?; + write_file( + path.join("MyStrategy.fs"), + &include_str!("fsharp/MyStrategy.fs"), + )?; + write_file(path.join("Debug.fs"), &include_str!("fsharp/Debug.fs"))?; + write_file( + path.join("aicup2019.fsproj"), + &include_str!("fsharp/aicup2019.fsproj"), + )?; + Ok(()) +} + +fn gen_dlang(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("dlang"); + let mut gen = trans_gen::Dlang::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(path.join("source"))?; + write_file(path.join("Dockerfile"), include_str!("dlang/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("dlang/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("dlang/run.sh"))?; + write_file(path.join("dub.json"), &include_str!("dlang/dub.json"))?; + write_file( + path.join("source").join("app.d"), + &include_str!("dlang/app.d"), + )?; + write_file( + path.join("source").join("debugger.d"), + &include_str!("dlang/debugger.d"), + )?; + write_file( + path.join("source").join("my_strategy.d"), + &include_str!("dlang/my_strategy.d"), + )?; + Ok(()) +} + +fn gen_go(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("go"); + let mut gen = trans_gen::Go::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("go/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("go/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("go/run.sh"))?; + write_file(path.join("go.mod"), &include_str!("go/go.mod"))?; + write_file(path.join("main.go"), &include_str!("go/main.go"))?; + write_file(path.join("debug.go"), &include_str!("go/debug.go"))?; + write_file( + path.join("my_strategy.go"), + &include_str!("go/my_strategy.go"), + )?; + Ok(()) +} + +fn gen_cpp(opt: &Opt) -> std::io::Result<()> { + let path = opt.path.join("cpp"); + let mut gen = trans_gen::Cpp::new("aicup2019", VERSION); + gen.add(&trans_schema::schema::>()); + gen.add(&trans_schema::schema::>()); + gen.write_to(&path)?; + write_file(path.join("Dockerfile"), include_str!("cpp/Dockerfile"))?; + write_file(path.join("compile.sh"), include_str!("cpp/compile.sh"))?; + write_file(path.join("run.sh"), include_str!("cpp/run.sh"))?; + write_file( + path.join("CMakeLists.txt"), + &include_str!("cpp/CMakeLists.txt"), + )?; + write_file( + path.join("TcpStream.hpp"), + &include_str!("cpp/TcpStream.hpp"), + )?; + write_file( + path.join("TcpStream.cpp"), + &include_str!("cpp/TcpStream.cpp"), + )?; + write_file( + path.join("MyStrategy.hpp"), + &include_str!("cpp/MyStrategy.hpp"), + )?; + write_file( + path.join("MyStrategy.cpp"), + &include_str!("cpp/MyStrategy.cpp"), + )?; + write_file(path.join("Debug.hpp"), &include_str!("cpp/Debug.hpp"))?; + write_file(path.join("Debug.cpp"), &include_str!("cpp/Debug.cpp"))?; + write_file(path.join("main.cpp"), &include_str!("cpp/main.cpp"))?; + Ok(()) +} + +fn run(opt: Opt) -> std::io::Result<()> { + std::fs::remove_dir_all(&opt.path)?; + gen_python(&opt)?; + gen_javascript(&opt)?; + gen_ruby(&opt)?; + gen_rust(&opt)?; + gen_java(&opt)?; + gen_kotlin(&opt)?; + gen_scala(&opt)?; + gen_csharp(&opt)?; + gen_fsharp(&opt)?; + gen_dlang(&opt)?; + gen_cpp(&opt)?; + gen_go(&opt)?; + Ok(()) +} + +fn main() -> std::io::Result<()> { + let opt = Opt::from_args(); + run(opt) +} + +#[cfg(test)] +mod tests { + use crate::*; + #[test] + fn test_client_gen() -> std::io::Result<()> { + let dir = tempfile::tempdir()?; + run(crate::Opt { + path: dir.path().to_owned(), + }) + } + + fn command(cmd: &str) -> std::process::Command { + let mut parts = cmd.split_whitespace(); + let mut command = if cfg!(windows) { + let mut command = std::process::Command::new("cmd"); + command.arg("/C").arg(parts.next().unwrap()); + command + } else { + std::process::Command::new(parts.next().unwrap()) + }; + for part in parts { + command.arg(part); + } + command + } + + trait CommandExt { + fn run(&mut self) -> std::io::Result<()>; + } + + impl CommandExt for std::process::Command { + fn run(&mut self) -> std::io::Result<()> { + let status = self.status()?; + if status.success() { + Ok(()) + } else { + Err(std::io::Error::new( + std::io::ErrorKind::Other, + status.to_string(), + )) + } + } + } + + fn test_client( + build_command: impl FnOnce(&std::path::Path) -> std::io::Result<()>, + command: impl FnOnce(&std::path::Path, u16) -> std::io::Result<()>, + ) -> std::io::Result<()> { + let _ = logger::init(); + let dir = tempfile::tempdir()?; + run(crate::Opt { + path: dir.path().to_owned(), + })?; + build_command(dir.path())?; + if let Ok(dir) = std::env::var("CARGO_MANIFEST_DIR") { + std::env::set_current_dir(dir)?; + } + struct AppHandle { + handle: Option>, + } + impl Drop for AppHandle { + fn drop(&mut self) { + if let Some(handle) = self.handle.take() { + let _ = handle.join(); + } + } + } + static NEXT_PORT: once_cell::sync::Lazy = + once_cell::sync::Lazy::new(|| std::sync::atomic::AtomicU16::new(31001)); + let port = NEXT_PORT.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + let mut app_handle = AppHandle { + handle: Some(std::thread::spawn(move || { + aicup2019::run_with(aicup2019::Opt { + actual_config: Some(codegame::FullOptions { + seed: None, + options_preset: OptionsPreset::Custom(model::Options { + properties: Some(model::Properties { + max_tick_count: 1000, + ..default() + }), + ..default() + }), + players: vec![ + PlayerOptions::Quickstart, + PlayerOptions::Tcp(codegame::TcpPlayerOptions { + host: None, + port, + accept_timeout: Some(5.0), + timeout: Some(1.0), + token: Some("token".to_owned()), + }), + ], + }), + batch_mode: true, + ..default() + }) + })), + }; + std::thread::sleep(std::time::Duration::from_secs(1)); + info!("Starting client"); + let start = std::time::Instant::now(); + command(dir.path(), port)?; + if let Err(_) = app_handle.handle.take().unwrap().join() { + return Err(std::io::Error::new(std::io::ErrorKind::Other, "App failed")); + } + let passed = std::time::Instant::now().duration_since(start).as_millis(); + info!("Finished in {}.{:03} secs", passed / 1000, passed % 1000); + Ok(()) + } + + #[test] + #[ignore] + fn test_client_python() -> std::io::Result<()> { + test_client( + |_| Ok(()), + |dir, port| { + command(if cfg!(windows) { "py -3" } else { "python3" }) + .arg(dir.join("python").join("main.py")) + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_javascript() -> std::io::Result<()> { + test_client( + |_| Ok(()), + |dir, port| { + command("node") + .arg("index.js") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("javascript")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_ruby() -> std::io::Result<()> { + test_client( + |_| Ok(()), + |dir, port| { + command("ruby") + .arg(dir.join("ruby").join("main.rb")) + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_rust() -> std::io::Result<()> { + test_client( + |dir| { + command("cargo") + .arg("build") + .arg("--release") + .current_dir(dir.join("rust")) + .run() + }, + |dir, port| { + command("cargo") + .arg("run") + .arg("--release") + .arg("--") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("rust")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_java() -> std::io::Result<()> { + test_client( + |dir| { + command("mvn") + .arg("package") + .arg("--batch-mode") + .current_dir(dir.join("java")) + .run() + }, + |dir, port| { + command("java") + .arg("-jar") + .arg("target/aicup2019-jar-with-dependencies.jar") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("java")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_kotlin() -> std::io::Result<()> { + test_client( + |dir| { + command("mvn") + .arg("--batch-mode") + .arg("package") + .current_dir(dir.join("kotlin")) + .run() + }, + |dir, port| { + command("java") + .arg("-jar") + .arg("target/aicup2019-jar-with-dependencies.jar") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("kotlin")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_scala() -> std::io::Result<()> { + test_client( + |dir| { + command("mvn") + .arg("--batch-mode") + .arg("package") + .current_dir(dir.join("scala")) + .run() + }, + |dir, port| { + command("java") + .arg("-jar") + .arg("target/aicup2019-jar-with-dependencies.jar") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("scala")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_csharp() -> std::io::Result<()> { + test_client( + |dir| { + command("dotnet") + .arg("build") + .arg("-c") + .arg("Release") + .current_dir(dir.join("csharp")) + .run() + }, + |dir, port| { + command("dotnet") + .arg("run") + .arg("-c") + .arg("Release") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("csharp")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_fsharp() -> std::io::Result<()> { + test_client( + |dir| { + command("dotnet") + .arg("build") + .arg("-c") + .arg("Release") + .current_dir(dir.join("fsharp")) + .run() + }, + |dir, port| { + command("dotnet") + .arg("run") + .arg("-c") + .arg("Release") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("fsharp")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_dlang() -> std::io::Result<()> { + test_client( + |dir| { + command("dub") + .arg("build") + .arg("-b") + .arg("release") + .current_dir(dir.join("dlang")) + .run() + }, + |dir, port| { + command("dub") + .arg("run") + .arg("-b") + .arg("release") + .arg("--") + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("dlang")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_go() -> std::io::Result<()> { + test_client( + |dir| { + command("go") + .arg("build") + .arg("-o") + .arg(if cfg!(windows) { + "aicup2019.exe" + } else { + "aicup2019" + }) + .current_dir(dir.join("go")) + .run() + }, + |dir, port| { + command( + std::path::PathBuf::from(".") + .join(if cfg!(windows) { + "aicup2019.exe" + } else { + "aicup2019" + }) + .to_str() + .unwrap(), + ) + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("go")) + .run() + }, + ) + } + + fn test_client_cpp_with_standard(standard: &str) -> std::io::Result<()> { + let _ = logger::init(); + info!("Testing with C++{}", standard); + test_client( + |dir| { + command("cmake") + .arg(format!("-DCMAKE_CXX_STANDARD={}", standard)) + .arg("-DCMAKE_BUILD_TYPE=RELEASE") + .arg("-DCMAKE_VERBOSE_MAKEFILE=ON") + .arg(".") + .current_dir(dir.join("cpp")) + .run()?; + command("cmake") + .arg("--build") + .arg(".") + .arg("--config") + .arg("Release") + .current_dir(dir.join("cpp")) + .run() + }, + |dir, port| { + command( + std::path::PathBuf::from(if cfg!(windows) { "Release" } else { "." }) + .join(if cfg!(windows) { + "aicup2019.exe" + } else { + "aicup2019" + }) + .to_str() + .unwrap(), + ) + .arg("127.0.0.1") + .arg(port.to_string()) + .arg("token") + .current_dir(dir.join("cpp")) + .run() + }, + ) + } + + #[test] + #[ignore] + fn test_client_cpp11() -> std::io::Result<()> { + test_client_cpp_with_standard("11") + } + + #[test] + #[ignore] + fn test_client_cpp14() -> std::io::Result<()> { + test_client_cpp_with_standard("14") + } + + #[test] + #[ignore] + fn test_client_cpp17() -> std::io::Result<()> { + test_client_cpp_with_standard("17") + } +} diff --git a/app-src/src/bin/client_gen/python/Dockerfile b/app-src/src/bin/client_gen/python/Dockerfile new file mode 100644 index 0000000..158fe56 --- /dev/null +++ b/app-src/src/bin/client_gen/python/Dockerfile @@ -0,0 +1,6 @@ +FROM python + +RUN pip install numpy cython sklearn lightgbm catboost + +COPY . /project +WORKDIR /project \ No newline at end of file diff --git a/app-src/src/bin/client_gen/python/compile.sh b/app-src/src/bin/client_gen/python/compile.sh new file mode 100644 index 0000000..34636eb --- /dev/null +++ b/app-src/src/bin/client_gen/python/compile.sh @@ -0,0 +1,14 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my_strategy.py my_strategy.py + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +find . -name '*.pyx' -exec cythonize -i {} \; +python -m py_compile main.py +cp -r * /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/python/debug.py b/app-src/src/bin/client_gen/python/debug.py new file mode 100644 index 0000000..ff951e1 --- /dev/null +++ b/app-src/src/bin/client_gen/python/debug.py @@ -0,0 +1,10 @@ +import model + + +class Debug: + def __init__(self, writer): + self.writer = writer + + def draw(self, data): + model.PlayerMessageGame.CustomDataMessage(data).write_to(self.writer) + self.writer.flush() diff --git a/app-src/src/bin/client_gen/python/main.py b/app-src/src/bin/client_gen/python/main.py new file mode 100644 index 0000000..0c423a4 --- /dev/null +++ b/app-src/src/bin/client_gen/python/main.py @@ -0,0 +1,44 @@ +import model +from stream_wrapper import StreamWrapper +from debug import Debug +from my_strategy import MyStrategy +import socket +import sys + + +class Runner: + def __init__(self, host, port, token): + self.socket = socket.socket() + self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True) + self.socket.connect((host, port)) + socket_stream = self.socket.makefile('rwb') + self.reader = StreamWrapper(socket_stream) + self.writer = StreamWrapper(socket_stream) + self.token = token + self.writer.write_string(self.token) + self.writer.flush() + + def run(self): + strategy = MyStrategy() + debug = Debug(self.writer) + + while True: + message = model.ServerMessageGame.read_from(self.reader) + if message.player_view is None: + break + player_view = message.player_view + actions = {} + for unit in player_view.game.units: + if unit.player_id == player_view.my_id: + actions[unit.id] = strategy.get_action( + unit, player_view.game, debug) + model.PlayerMessageGame.ActionMessage( + model.Versioned(actions)).write_to(self.writer) + self.writer.flush() + + +if __name__ == "__main__": + host = "127.0.0.1" if len(sys.argv) < 2 else sys.argv[1] + port = 31001 if len(sys.argv) < 3 else int(sys.argv[2]) + token = "0000000000000000" if len(sys.argv) < 4 else sys.argv[3] + Runner(host, port, token).run() diff --git a/app-src/src/bin/client_gen/python/my_strategy.py b/app-src/src/bin/client_gen/python/my_strategy.py new file mode 100644 index 0000000..be24e51 --- /dev/null +++ b/app-src/src/bin/client_gen/python/my_strategy.py @@ -0,0 +1,45 @@ +import model + + +class MyStrategy: + def __init__(self): + pass + + def get_action(self, unit, game, debug): + # Replace this code with your own + def distance_sqr(a, b): + return (a.x - b.x) ** 2 + (a.y - b.y) ** 2 + nearest_enemy = min( + filter(lambda u: u.player_id != unit.player_id, game.units), + key=lambda u: distance_sqr(u.position, unit.position), + default=None) + nearest_weapon = min( + filter(lambda box: isinstance( + box.item, model.Item.Weapon), game.loot_boxes), + key=lambda box: distance_sqr(box.position, unit.position), + default=None) + target_pos = unit.position + if unit.weapon is None and nearest_weapon is not None: + target_pos = nearest_weapon.position + elif nearest_enemy is not None: + target_pos = nearest_enemy.position + debug.draw(model.CustomData.Log("Target pos: {}".format(target_pos))) + aim = model.Vec2Double(0, 0) + if nearest_enemy is not None: + aim = model.Vec2Double( + nearest_enemy.position.x - unit.position.x, + nearest_enemy.position.y - unit.position.y) + jump = target_pos.y > unit.position.y + if target_pos.x > unit.position.x and game.level.tiles[int(unit.position.x + 1)][int(unit.position.y)] == model.Tile.WALL: + jump = True + if target_pos.x < unit.position.x and game.level.tiles[int(unit.position.x - 1)][int(unit.position.y)] == model.Tile.WALL: + jump = True + return model.UnitAction( + velocity=target_pos.x - unit.position.x, + jump=jump, + jump_down=not jump, + aim=aim, + shoot=True, + reload=False, + swap_weapon=False, + plant_mine=False) diff --git a/app-src/src/bin/client_gen/python/run.sh b/app-src/src/bin/client_gen/python/run.sh new file mode 100644 index 0000000..4ce474b --- /dev/null +++ b/app-src/src/bin/client_gen/python/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +python ./main.py "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/ruby/Dockerfile b/app-src/src/bin/client_gen/ruby/Dockerfile new file mode 100644 index 0000000..2a8f553 --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/Dockerfile @@ -0,0 +1,4 @@ +FROM ruby + +COPY . /project +WORKDIR /project \ No newline at end of file diff --git a/app-src/src/bin/client_gen/ruby/compile.sh b/app-src/src/bin/client_gen/ruby/compile.sh new file mode 100644 index 0000000..f5b7504 --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my_strategy.rb my_strategy.rb + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +ruby -c main.rb +cp -r * /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/ruby/debug.rb b/app-src/src/bin/client_gen/ruby/debug.rb new file mode 100644 index 0000000..8f2ae65 --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/debug.rb @@ -0,0 +1,12 @@ +require_relative 'model' + +class Debug + def initialize(writer) + @writer = writer + end + + def draw(data) + PlayerMessageGame::CustomDataMessage.new(data).write_to(@writer) + @writer.flush() + end +end diff --git a/app-src/src/bin/client_gen/ruby/main.rb b/app-src/src/bin/client_gen/ruby/main.rb new file mode 100644 index 0000000..ff60b9f --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/main.rb @@ -0,0 +1,67 @@ +require 'socket' +require_relative 'stream_wrapper' +require_relative 'model' +require_relative 'my_strategy' +require_relative 'debug' + +class SocketWrapper + def initialize(socket) + @socket = socket + end + def read_bytes(byte_count) + result = '' + while result.length < byte_count + chunk = @socket.recv(byte_count - result.length) + if chunk.length <= 0 + raise "Can't read from socket" + end + result << chunk + end + result + end + def write_bytes(data) + @socket.write(data) + end + def flush() + # TODO + end +end + +class Runner + def initialize(host, port, token) + socket = TCPSocket.open(host, port) + socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) + stream = SocketWrapper.new(socket) + @reader = StreamWrapper.new(stream) + @writer = StreamWrapper.new(stream) + @token = token + @writer.write_string(@token) + @writer.flush() + end + + def run() + strategy = MyStrategy.new() + debug = Debug.new(@writer) + + while true + message = ServerMessageGame.read_from(@reader) + player_view = message.player_view + if player_view == nil + break + end + actions = Hash.new + player_view.game.units.each do |unit| + if unit.player_id == player_view.my_id + actions[unit.id] = strategy.get_action(unit, player_view.game, debug) + end + end + PlayerMessageGame::ActionMessage.new(Versioned.new(actions)).write_to(@writer) + @writer.flush() + end + end +end + +host = ARGV.length < 1 ? "127.0.0.1" : ARGV[0] +port = ARGV.length < 2 ? 31001 : ARGV[1].to_i +token = ARGV.length < 3 ? "0000000000000000" : ARGV[2] +Runner.new(host, port, token).run() diff --git a/app-src/src/bin/client_gen/ruby/my_strategy.rb b/app-src/src/bin/client_gen/ruby/my_strategy.rb new file mode 100644 index 0000000..684f3e9 --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/my_strategy.rb @@ -0,0 +1,54 @@ +require_relative 'model' + + +class MyStrategy + def get_action(unit, game, debug) + def distance_sqr(a, b) + (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + end + nearest_enemy = nil + game.units.each do |other| + if other.player_id != unit.player_id + if nearest_enemy == nil || distance_sqr(unit.position, other.position) < distance_sqr(unit.position, nearest_enemy.position) + nearest_enemy = other + end + end + end + nearest_weapon = nil + game.loot_boxes.each do |loot_box| + if loot_box.item.instance_of? Item::Weapon + if nearest_weapon == nil || distance_sqr(unit.position, loot_box.position) < distance_sqr(unit.position, nearest_weapon.position) + nearest_weapon = loot_box + end + end + end + target_pos = unit.position + if unit.weapon == nil && nearest_weapon != nil + target_pos = nearest_weapon.position + elsif nearest_enemy != nil + target_pos = nearest_enemy.position + end + debug.draw(CustomData::Log.new("Target pos: #{target_pos}")) + aim = Vec2Double.new(0, 0) + if nearest_enemy != nil + aim = Vec2Double.new( + nearest_enemy.position.x - unit.position.x, + nearest_enemy.position.y - unit.position.y) + end + velocity = target_pos.x - unit.position.x + jump = target_pos.y > unit.position.y + if target_pos.x > unit.position.x and game.level.tiles[(unit.position.x + 1).to_i][(unit.position.y).to_i] == Tile::WALL + jump = true + end + if target_pos.x < unit.position.x and game.level.tiles[(unit.position.x - 1).to_i][(unit.position.y).to_i] == Tile::WALL + jump = true + end + jump_down = !jump + aim = aim + shoot = true + reload = false + swap_weapon = false + plant_mine = false + UnitAction.new(velocity, jump, jump_down, aim, shoot, reload, swap_weapon, plant_mine) + end +end \ No newline at end of file diff --git a/app-src/src/bin/client_gen/ruby/run.sh b/app-src/src/bin/client_gen/ruby/run.sh new file mode 100644 index 0000000..7b83032 --- /dev/null +++ b/app-src/src/bin/client_gen/ruby/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +ruby ./main.rb "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/rust/Cargo.toml.template b/app-src/src/bin/client_gen/rust/Cargo.toml.template new file mode 100644 index 0000000..3c49330 --- /dev/null +++ b/app-src/src/bin/client_gen/rust/Cargo.toml.template @@ -0,0 +1,8 @@ +[package] +name = "aicup2019" +version = "$version" +edition = "2018" + +[dependencies] +model = { path = "model", package = "aicup2019-model" } +trans = { path = "model/trans" } \ No newline at end of file diff --git a/app-src/src/bin/client_gen/rust/Dockerfile b/app-src/src/bin/client_gen/rust/Dockerfile new file mode 100644 index 0000000..30d26c9 --- /dev/null +++ b/app-src/src/bin/client_gen/rust/Dockerfile @@ -0,0 +1,6 @@ +FROM rust + +COPY . /project +WORKDIR /project + +RUN cargo build --release \ No newline at end of file diff --git a/app-src/src/bin/client_gen/rust/compile.sh b/app-src/src/bin/client_gen/rust/compile.sh new file mode 100644 index 0000000..2913ab2 --- /dev/null +++ b/app-src/src/bin/client_gen/rust/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/my_strategy.rs src/my_strategy.rs + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +cargo build --release --offline +cp target/release/aicup2019 /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/rust/run.sh b/app-src/src/bin/client_gen/rust/run.sh new file mode 100644 index 0000000..e94c24a --- /dev/null +++ b/app-src/src/bin/client_gen/rust/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +./aicup2019 "$@" \ No newline at end of file diff --git a/app-src/src/bin/client_gen/rust/src/main.rs b/app-src/src/bin/client_gen/rust/src/main.rs new file mode 100644 index 0000000..efbaf66 --- /dev/null +++ b/app-src/src/bin/client_gen/rust/src/main.rs @@ -0,0 +1,88 @@ +mod my_strategy; + +use my_strategy::MyStrategy; + +struct Args { + host: String, + port: u16, + token: String, +} + +impl Args { + fn parse() -> Self { + let mut args = std::env::args(); + args.next().unwrap(); + let host = args.next().unwrap_or("127.0.0.1".to_owned()); + let port = args + .next() + .map_or(31001, |s| s.parse().expect("Can't parse port")); + let token = args.next().unwrap_or("0000000000000000".to_string()); + Self { host, port, token } + } +} + +struct Runner { + reader: Box, + writer: Box, +} + +pub struct Debug<'a>(&'a mut dyn std::io::Write); + +impl Debug<'_> { + fn draw(&mut self, data: model::CustomData) { + use trans::Trans; + model::PlayerMessageGame::CustomDataMessage { data } + .write_to(&mut self.0) + .expect("Failed to write custom debug data"); + } +} + +impl Runner { + fn new(args: &Args) -> std::io::Result { + use std::io::Write; + use trans::Trans; + let stream = std::net::TcpStream::connect((args.host.as_str(), args.port))?; + stream.set_nodelay(true)?; + let stream_clone = stream.try_clone()?; + let reader = std::io::BufReader::new(stream); + let mut writer = std::io::BufWriter::new(stream_clone); + args.token.write_to(&mut writer)?; + writer.flush()?; + Ok(Self { + reader: Box::new(reader), + writer: Box::new(writer), + }) + } + fn run(mut self) -> std::io::Result<()> { + use trans::Trans; + let mut strategy = MyStrategy::new(); + loop { + let message = model::ServerMessageGame::read_from(&mut self.reader)?; + let player_view = match message.player_view { + Some(view) => view, + None => break, + }; + let mut actions = std::collections::HashMap::new(); + for unit in player_view + .game + .units + .iter() + .filter(|unit| unit.player_id == player_view.my_id) + { + let action = + strategy.get_action(unit, &player_view.game, &mut Debug(&mut self.writer)); + actions.insert(unit.id, action); + } + let message = model::PlayerMessageGame::ActionMessage { + action: model::Versioned { inner: actions }, + }; + message.write_to(&mut self.writer)?; + self.writer.flush()?; + } + Ok(()) + } +} + +fn main() -> std::io::Result<()> { + Runner::new(&Args::parse())?.run() +} diff --git a/app-src/src/bin/client_gen/rust/src/my_strategy.rs b/app-src/src/bin/client_gen/rust/src/my_strategy.rs new file mode 100644 index 0000000..7e42075 --- /dev/null +++ b/app-src/src/bin/client_gen/rust/src/my_strategy.rs @@ -0,0 +1,84 @@ +pub struct MyStrategy {} + +impl MyStrategy { + pub fn new() -> Self { + Self {} + } + pub fn get_action( + &mut self, + unit: &model::Unit, + game: &model::Game, + debug: &mut crate::Debug, + ) -> model::UnitAction { + fn distance_sqr(a: &model::Vec2F64, b: &model::Vec2F64) -> f64 { + (a.x - b.x).powi(2) + (a.y - b.y).powi(2) + } + let nearest_enemy = game + .units + .iter() + .filter(|other| other.player_id != unit.player_id) + .min_by(|a, b| { + std::cmp::PartialOrd::partial_cmp( + &distance_sqr(&a.position, &unit.position), + &distance_sqr(&b.position, &unit.position), + ) + .unwrap() + }); + let nearest_weapon = game + .loot_boxes + .iter() + .filter(|loot| { + if let model::Item::Weapon { .. } = loot.item { + true + } else { + false + } + }) + .min_by(|a, b| { + std::cmp::PartialOrd::partial_cmp( + &distance_sqr(&a.position, &unit.position), + &distance_sqr(&b.position, &unit.position), + ) + .unwrap() + }); + let mut target_pos = unit.position.clone(); + if let (&None, Some(weapon)) = (&unit.weapon, nearest_weapon) { + target_pos = weapon.position.clone(); + } else if let Some(enemy) = nearest_enemy { + target_pos = enemy.position.clone(); + } + debug.draw(model::CustomData::Log { + text: format!("Target pos: {:?}", target_pos), + }); + let mut aim = model::Vec2F64 { x: 0.0, y: 0.0 }; + if let Some(enemy) = nearest_enemy { + aim = model::Vec2F64 { + x: enemy.position.x - unit.position.x, + y: enemy.position.y - unit.position.y, + }; + } + let mut jump = target_pos.y > unit.position.y; + if target_pos.x > unit.position.x + && game.level.tiles[(unit.position.x + 1.0) as usize][(unit.position.y) as usize] + == model::Tile::Wall + { + jump = true + } + if target_pos.x < unit.position.x + && game.level.tiles[(unit.position.x - 1.0) as usize][(unit.position.y) as usize] + == model::Tile::Wall + { + jump = true + } + model::UnitAction { + velocity: target_pos.x - unit.position.x, + jump, + jump_down: target_pos.y < unit.position.y, + aim, + shoot: true, + reload: false, + swap_weapon: false, + plant_mine: false, + } + } +} diff --git a/app-src/src/bin/client_gen/scala/Debug.scala b/app-src/src/bin/client_gen/scala/Debug.scala new file mode 100644 index 0000000..afb69da --- /dev/null +++ b/app-src/src/bin/client_gen/scala/Debug.scala @@ -0,0 +1,8 @@ +import java.io.OutputStream + +class Debug(private val stream: OutputStream) { + def draw(customData: model.CustomData) { + model.PlayerMessageGame.CustomDataMessage(customData).writeTo(stream) + stream.flush() + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/Dockerfile b/app-src/src/bin/client_gen/scala/Dockerfile new file mode 100644 index 0000000..f62366a --- /dev/null +++ b/app-src/src/bin/client_gen/scala/Dockerfile @@ -0,0 +1,6 @@ +FROM maven:3-jdk-8 + +COPY . /project +WORKDIR /project + +RUN mvn package --batch-mode \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/MyStrategy.scala b/app-src/src/bin/client_gen/scala/MyStrategy.scala new file mode 100644 index 0000000..9497783 --- /dev/null +++ b/app-src/src/bin/client_gen/scala/MyStrategy.scala @@ -0,0 +1,50 @@ +import model.CustomData.Log +import model.{Tile, UnitAction, Vec2Double} + +class MyStrategy { + def getAction(unit: model.Unit, game: model.Game, debug: Debug): model.UnitAction = { + val nearestEnemy = game.units.filter(_.playerId != unit.playerId) + .sortBy(x => distanceSqr(unit.position, x.position)) + .headOption + + val nearestWeapon = game.lootBoxes + .sortBy(x => distanceSqr(unit.position, x.position)) + .headOption + + var targetPos: Vec2Double = unit.position + if (unit.weapon.isEmpty && nearestWeapon.isDefined) { + targetPos = nearestWeapon.get.position + } else if (nearestEnemy.isDefined) { + targetPos = nearestEnemy.get.position + } + + debug.draw(Log(s"Target pos: $targetPos")) + val aim = nearestEnemy match { + case Some(enemy) => + Vec2Double(enemy.position.x - unit.position.x, + enemy.position.y - unit.position.y) + case None => Vec2Double(0, 0) + } + + var jump = targetPos.y > unit.position.y + if (targetPos.x > unit.position.x && game.level.tiles((unit.position.x + 1).toInt)(unit.position.y.toInt) == Tile.WALL) { + jump = true + } + if (targetPos.x < unit.position.x && game.level.tiles((unit.position.x - 1).toInt)(unit.position.y.toInt) == Tile.WALL) { + jump = true + } + + UnitAction(velocity = targetPos.x - unit.position.x, + jump = jump, + jumpDown = !jump, + aim = aim, + shoot = true, + reload = false, + swapWeapon = false, + plantMine = false) + } + + private def distanceSqr(a: Vec2Double, b: Vec2Double): Double = { + (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + } +} \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/Runner.scala b/app-src/src/bin/client_gen/scala/Runner.scala new file mode 100644 index 0000000..c17e7cc --- /dev/null +++ b/app-src/src/bin/client_gen/scala/Runner.scala @@ -0,0 +1,43 @@ +import java.io.{BufferedInputStream, BufferedOutputStream} +import java.net.Socket + +import model.PlayerMessageGame.ActionMessage +import util.StreamUtil + +object Runner extends App { + + val host = if (args.length < 1) "127.0.0.1" else args(0) + val port = if (args.length < 2) 31001 else args(1).toInt + val token = if (args.length < 3) "0000000000000000" else args(2) + + run(host, port, token) + + def run(host: String, port: Int, token: String) { + val socket = new Socket(host, port) + socket.setTcpNoDelay(true) + val inputStream = new BufferedInputStream(socket.getInputStream) + val outputStream = new BufferedOutputStream(socket.getOutputStream) + + StreamUtil.writeString(outputStream, token) + outputStream.flush() + + + val myStrategy = new MyStrategy() + val debug = new Debug(outputStream) + while (true) { + val message = model.ServerMessageGame.readFrom(inputStream) + + message.playerView match { + case None => return + case Some(playerView) => + val actions = playerView.game.units + .filter(_.playerId == playerView.myId) + .map(x => (x.id, myStrategy.getAction(x, playerView.game, debug))) + .toMap + + ActionMessage(model.Versioned(actions)).writeTo(outputStream) + outputStream.flush() + } + } + } +} diff --git a/app-src/src/bin/client_gen/scala/compile.sh b/app-src/src/bin/client_gen/scala/compile.sh new file mode 100644 index 0000000..5a5183c --- /dev/null +++ b/app-src/src/bin/client_gen/scala/compile.sh @@ -0,0 +1,13 @@ +set -ex + +if [ "$1" != "base" ]; then + if [[ `ls -1 /src/ | wc -l` -eq 1 ]]; then + cp -f /src/MyStrategy.scala src/main/scala/MyStrategy.scala + else + rm -rf ./* + cp -rf /src/* ./ + fi +fi + +mvn package --batch-mode +cp target/aicup2019-jar-with-dependencies.jar /output/ \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/pom.xml b/app-src/src/bin/client_gen/scala/pom.xml new file mode 100644 index 0000000..8bcf85f --- /dev/null +++ b/app-src/src/bin/client_gen/scala/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + com.codegame.codeside2019.devkit + aicup2019 + jar + 1.0-SNAPSHOT + + aicup2019 + + + UTF-8 + Runner + 2.13.1 + + + + + org.scala-lang + scala-library + ${scala.version} + + + + + aicup2019 + ${project.basedir}/src/main/scala + + + + net.alchim31.maven + scala-maven-plugin + 3.4.4 + + ${scala.version} + + + + scala-compile-first + process-resources + + add-source + compile + + + + scala-test-compile + process-test-resources + + testCompile + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + jar-with-dependencies + + + + Runner + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/project/plugins.sbt b/app-src/src/bin/client_gen/scala/project/plugins.sbt new file mode 100644 index 0000000..09c90ca --- /dev/null +++ b/app-src/src/bin/client_gen/scala/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6") \ No newline at end of file diff --git a/app-src/src/bin/client_gen/scala/run.sh b/app-src/src/bin/client_gen/scala/run.sh new file mode 100644 index 0000000..0abe2cc --- /dev/null +++ b/app-src/src/bin/client_gen/scala/run.sh @@ -0,0 +1,4 @@ +set -ex + +cd /output +java -Xmx250m -jar ./aicup2019-jar-with-dependencies.jar "$@" \ No newline at end of file diff --git a/app-src/src/keyboard_player.rs b/app-src/src/keyboard_player.rs new file mode 100644 index 0000000..ac489a4 --- /dev/null +++ b/app-src/src/keyboard_player.rs @@ -0,0 +1,199 @@ +use crate::*; + +#[derive(Clone)] +pub struct Input { + pub pressed_keys: HashSet, + pub pressed_buttons: HashSet, + pub mouse_pos: Vec2, +} + +pub struct KeyboardPlayer { + pub input: Arc>, + pub left: geng::Key, + pub right: geng::Key, + pub jump: geng::Key, + pub jump_down: geng::Key, + pub shoot: geng::MouseButton, + pub reload: geng::Key, + pub swap_weapon: geng::Key, + pub last_swap_weapon: bool, + pub plant_mine: geng::Key, + pub last_plant_mine: bool, +} + +impl KeyboardPlayer { + pub fn new(input: &Arc>) -> Self { + Self { + input: input.clone(), + left: geng::Key::A, + right: geng::Key::D, + jump: geng::Key::W, + jump_down: geng::Key::S, + shoot: geng::MouseButton::Left, + reload: geng::Key::R, + swap_weapon: geng::Key::E, + last_swap_weapon: false, + plant_mine: geng::Key::Q, + last_plant_mine: false, + } + } +} + +#[derive(Clone)] +pub struct Config { + input: Arc>, + geng: Rc, + theme: Rc, +} + +impl codegame::PlayerConfig for Config { + fn name(&self) -> &str { + translate("keyboard") + } + fn ui<'a>(&'a mut self) -> Box { + use ui::*; + let ui = ui::text( + translate("Keyboard player"), + &self.theme.font, + 16.0, + Color::GRAY, + ) + .align(vec2(0.5, 1.0)); + Box::new(ui) + } + fn ready(&mut self) -> bool { + true + } + fn get(&mut self) -> Box> { + Box::new(KeyboardPlayer::new(&self.input)) + } + fn to_options(&self) -> PlayerOptions { + PlayerOptions::Keyboard + } +} + +impl Config { + pub fn new(geng: &Rc, theme: &Rc, input: &Arc>) -> Self { + Self { + geng: geng.clone(), + theme: theme.clone(), + input: input.clone(), + } + } + pub fn constructor( + geng: &Rc, + theme: &Rc, + input: &Arc>, + ) -> Box Box>> { + let geng = geng.clone(); + let theme = theme.clone(); + let input = input.clone(); + Box::new(move || Box::new(Self::new(&geng, &theme, &input))) + } +} + +impl codegame::Player for KeyboardPlayer { + fn get_action( + &mut self, + view: &model::PlayerView, + custom_data_handler: Option<&dyn Fn(model::CustomData)>, + ) -> Result { + Ok({ + let input = self.input.lock().unwrap().clone(); + if let Some(handler) = custom_data_handler { + if let Some(unit) = view + .game + .units + .iter() + .find(|unit| unit.player_id == view.my_id) + { + if let Some(weapon) = &unit.weapon { + let width = weapon.params.bullet.size; + let gap_size = width + r64(0.5) * weapon.spread / weapon.params.max_spread; + let radius = gap_size / r64(2.0) + r64(0.5); + let color = Color::rgba(0.0, 1.0, 0.0, 0.5); + handler(model::CustomData::Rect { + pos: (input.mouse_pos + vec2(-width / r64(2.0), gap_size / r64(2.0))) + .map(|x| x.raw() as f32), + size: vec2(width, radius).map(|x| x.raw() as f32), + color, + }); + handler(model::CustomData::Rect { + pos: (input.mouse_pos + vec2(-width / r64(2.0), -gap_size / r64(2.0))) + .map(|x| x.raw() as f32), + size: vec2(width, -radius).map(|x| x.raw() as f32), + color, + }); + handler(model::CustomData::Rect { + pos: (input.mouse_pos + vec2(gap_size / r64(2.0), -width / r64(2.0))) + .map(|x| x.raw() as f32), + size: vec2(radius, width).map(|x| x.raw() as f32), + color, + }); + handler(model::CustomData::Rect { + pos: (input.mouse_pos + vec2(-gap_size / r64(2.0), -width / r64(2.0))) + .map(|x| x.raw() as f32), + size: vec2(-radius, width).map(|x| x.raw() as f32), + color, + }); + } + } + } + let mut velocity = r64(0.0); + if input.pressed_keys.contains(&self.left) { + velocity -= r64(1.0); + } + if input.pressed_keys.contains(&self.right) { + velocity += r64(1.0); + } + let jump = input.pressed_keys.contains(&self.jump); + let jump_down = input.pressed_keys.contains(&self.jump_down); + + let mut unit_actions = HashMap::new(); + for unit in view + .game + .units + .iter() + .filter(|unit| unit.player_id == view.my_id) + { + let unit_pos = unit.position + vec2(r64(0.0), unit.size.y / r64(2.0)); + unit_actions.insert( + unit.id, + model::UnitAction { + velocity: velocity * view.game.properties.unit_max_horizontal_speed, + jump, + jump_down, + aim: input.mouse_pos - unit_pos, + shoot: input.pressed_buttons.contains(&self.shoot), + swap_weapon: if input.pressed_keys.contains(&self.swap_weapon) { + if !self.last_swap_weapon { + self.last_swap_weapon = true; + true + } else { + false + } + } else { + self.last_swap_weapon = false; + false + }, + reload: input.pressed_keys.contains(&self.reload), + plant_mine: if input.pressed_keys.contains(&self.plant_mine) { + if !self.last_plant_mine { + self.last_plant_mine = true; + true + } else { + false + } + } else { + self.last_plant_mine = false; + false + }, + }, + ); + } + model::ActionWrapper::V1 { + actions: unit_actions, + } + }) + } +} diff --git a/app-src/src/level_editor.rs b/app-src/src/level_editor.rs new file mode 100644 index 0000000..e96f629 --- /dev/null +++ b/app-src/src/level_editor.rs @@ -0,0 +1,200 @@ +use crate::*; + +struct Data { + close: bool, + change_tile: bool, + tile_button: ui::TextButton, + save_button: ui::TextButton, +} + +impl Data { + fn ui<'a>(&'a mut self) -> impl ui::Widget + 'a { + use ui::*; + let change_tile = &mut self.change_tile; + let close = &mut self.close; + stack![ + self.tile_button + .ui(Box::new(move || { + *change_tile = true; + })) + .align(vec2(0.5, 0.0)) + .uniform_padding(8.0), + self.save_button + .ui(Box::new(move || { + *close = true; + })) + .align(vec2(1.0, 0.0)) + .uniform_padding(8.0), + ] + } +} + +pub struct LevelEditor { + geng: Rc, + simple_renderer: Rc, + camera: Camera, + level: model::Level, + spawn_points: HashSet>, + level_renderer: LevelRenderer, + level_options: Rc>>, + mouse_pos: Vec2, + ui_controller: ui::Controller, + data: Data, + tile_options: Vec, + current_tile: usize, +} + +impl LevelEditor { + pub fn new( + geng: &Rc, + simple_renderer: &Rc, + theme: &Rc, + level_options: &Rc>>, + size: Vec2, + ) -> Self { + Self { + geng: geng.clone(), + simple_renderer: simple_renderer.clone(), + camera: Camera::new(), + level: level_options.borrow().as_ref().map_or_else( + || model::Level { + tiles: vec![vec![model::Tile::Empty; size.y]; size.x], + }, + |options| options.clone().create().0, + ), + spawn_points: HashSet::new(), + level_renderer: LevelRenderer::new(geng, simple_renderer), + mouse_pos: vec2(r64(0.0), r64(0.0)), + ui_controller: ui::Controller::new(), + data: Data { + close: false, + change_tile: false, + tile_button: ui::TextButton::new(geng, theme, String::new(), 32.0), + save_button: ui::TextButton::new(geng, theme, translate("save").to_owned(), 32.0), + }, + tile_options: vec![ + model::Tile::Empty, + model::Tile::Wall, + model::Tile::Platform, + model::Tile::Ladder, + model::Tile::JumpPad, + ], + current_tile: 0, + level_options: level_options.clone(), + } + } +} + +impl geng::State for LevelEditor { + fn update(&mut self, delta_time: f64) { + if self + .geng + .window() + .is_button_pressed(geng::MouseButton::Left) + { + if self.mouse_pos.x >= r64(0.0) && self.mouse_pos.y >= r64(0.0) { + let pos = self.mouse_pos.map(|x| x.raw() as usize); + if let Some(tile) = self + .level + .tiles + .get_mut(pos.x) + .and_then(|col| col.get_mut(pos.y)) + { + *tile = self.tile_options[self.current_tile].clone(); + } + } + } + self.ui_controller.update(self.data.ui(), delta_time); + } + fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) { + ugli::clear(framebuffer, Some(Color::BLACK), None); + self.camera.center = self.level.size().map(|x| r64(x as _)) / r64(2.0); + self.camera.fov = r64(self.level.size().y as f64 + 5.0); + self.mouse_pos = self + .camera + .screen_to_world(framebuffer, self.geng.window().mouse_pos().map(|x| r64(x))); + self.data.tile_button.text = format!("{:?}", self.tile_options[self.current_tile]); + self.level_renderer + .draw(framebuffer, &self.camera, &self.level, None, None); + for pos in &self.spawn_points { + self.simple_renderer.frame( + framebuffer, + &self.camera, + AABB::pos_size(pos.map(|x| r64(x as _)), vec2(r64(1.0), r64(2.0))), + r64(0.1), + Color::rgba(1.0, 0.5, 0.5, 0.7), + ); + } + if self.mouse_pos.x >= r64(0.0) + && self.mouse_pos.y >= r64(0.0) + && self + .level + .tiles + .get(self.mouse_pos.x.raw() as usize) + .and_then(|col| col.get(self.mouse_pos.y.raw() as usize)) + .is_some() + { + self.simple_renderer.frame( + framebuffer, + &self.camera, + AABB::pos_size(self.mouse_pos.map(|x| x.floor()), vec2(r64(1.0), r64(1.0))), + r64(0.1), + Color::rgba(0.5, 0.5, 1.0, 0.7), + ); + } + self.ui_controller.draw(self.data.ui(), framebuffer); + } + fn handle_event(&mut self, event: geng::Event) { + match event { + geng::Event::KeyDown { key } => match key { + geng::Key::Escape => { + self.data.close = true; + } + #[cfg(not(any(target_arch = "asmjs", target_arch = "wasm32")))] + geng::Key::S if self.geng.window().is_key_pressed(geng::Key::LCtrl) => { + save_file(translate("save level"), "level.txt", |writer| { + self.level.save(writer, &self.spawn_points) + }) + .expect("Failed to save level"); + } + _ => {} + }, + geng::Event::MouseDown { button, .. } => match button { + geng::MouseButton::Right => { + if self.mouse_pos.x >= r64(0.0) && self.mouse_pos.y >= r64(0.0) { + let pos = self.mouse_pos.map(|x| x.raw() as usize); + if pos.x < self.level.size().x && pos.y < self.level.size().y { + if self.spawn_points.contains(&pos) { + self.spawn_points.remove(&pos); + } else { + self.spawn_points.insert(pos); + } + } + } + } + _ => {} + }, + _ => {} + } + self.ui_controller.handle_event(self.data.ui(), event); + if self.data.change_tile { + self.data.change_tile = false; + self.current_tile = (self.current_tile + 1) % self.tile_options.len(); + } + } + fn transition(&mut self) -> Option { + if self.data.close { + *self.level_options.borrow_mut() = Some(model::LevelOptions::Ready { + level: self.level.clone(), + spawn_points: self + .spawn_points + .iter() + .map(|pos| vec2(r64(pos.x as f64 + 0.5), r64(pos.y as _))) + .collect(), + }); + Some(geng::Transition::Pop) + } else { + None + } + } +} diff --git a/app-src/src/lib.rs b/app-src/src/lib.rs new file mode 100644 index 0000000..21ae195 --- /dev/null +++ b/app-src/src/lib.rs @@ -0,0 +1,369 @@ +pub use codegame::prelude::*; +#[cfg(feature = "rendering")] +use geng::ui; + +#[cfg(feature = "rendering")] +mod keyboard_player; +// #[cfg(feature = "rendering")] +// mod level_editor; +pub mod model; +mod quickstart_player; +mod random_player; +#[cfg(feature = "rendering")] +mod renderer; + +// #[cfg(feature = "rendering")] +// use level_editor::*; +#[cfg(feature = "rendering")] +use renderer::*; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum OptionsPreset { + Round1, + Round2, + Finals, + Custom(model::Options), +} + +impl From for model::Options { + fn from(preset: OptionsPreset) -> model::Options { + match preset { + // TODO + OptionsPreset::Round1 => model::Options { + level: model::LevelOptions::Simple, + properties: Some(model::Properties { + team_size: 1, + ..default() + }), + }, + OptionsPreset::Round2 => model::Options { + level: model::LevelOptions::Simple, + properties: Some(model::Properties { + team_size: 2, + ..default() + }), + }, + OptionsPreset::Finals => model::Options { + level: model::LevelOptions::Complex, + properties: Some(model::Properties { + team_size: 2, + ..default() + }), + }, + OptionsPreset::Custom(options) => options, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum PlayerOptions { + #[cfg(feature = "rendering")] + Keyboard, + Tcp(codegame::TcpPlayerOptions), + Quickstart, + Empty(codegame::EmptyPlayerOptions), + Random(random_player::RandomPlayerOptions), +} + +impl From for PlayerOptions { + fn from(options: codegame::TcpPlayerOptions) -> Self { + Self::Tcp(options) + } +} + +impl From for PlayerOptions { + fn from(options: codegame::EmptyPlayerOptions) -> Self { + Self::Empty(options) + } +} + +pub struct PlayerExtraData { + #[cfg(feature = "rendering")] + keyboard_input: Arc>, +} + +impl codegame::PlayerOptions for PlayerOptions { + fn get( + &self, + extra_data: &PlayerExtraData, + ) -> Pin< + Box< + dyn Future< + Output = Result>, codegame::PlayerError>, + >, + >, + > { + match self { + #[cfg(feature = "rendering")] + Self::Keyboard => futures::future::ready(Ok(Box::new( + keyboard_player::KeyboardPlayer::new(&extra_data.keyboard_input), + ) + as Box>)) + .boxed_local(), + Self::Tcp(options) => codegame::TcpPlayer::new(options.clone()) + .map(|result| match result { + Ok(player) => Ok(Box::new(player) as Box>), + Err(e) => Err(codegame::PlayerError::IOError(e)), + }) + .boxed_local(), + Self::Quickstart => { + futures::future::ready(Ok(Box::new(quickstart_player::QuickstartPlayer::new()) + as Box>)) + .boxed_local() + } + Self::Empty(_) => futures::future::ready(Ok( + Box::new(codegame::EmptyPlayer) as Box> + )) + .boxed_local(), + Self::Random(options) => futures::future::ready(Ok(Box::new( + random_player::RandomPlayer::new(options.clone()), + ) + as Box>)) + .boxed_local(), + } + } +} + +#[cfg(feature = "rendering")] +#[cfg(target_arch = "wasm32")] +#[derive(geng::Assets)] +pub struct Levels { + #[asset(path = "level.txt")] + level: String, +} + +#[cfg(feature = "rendering")] +#[derive(geng::Assets)] +pub struct Assets { + #[cfg(target_arch = "wasm32")] + #[asset(path = "levels")] + levels: Levels, + #[asset(path = "assets")] + renderer_assets: renderer::Assets, +} + +#[derive(Debug, StructOpt, Default)] +pub struct Opt { + #[structopt(long)] + pub lang: Option, + #[structopt(long)] + pub replay: Option, + #[structopt(long)] + pub repeat: Option, + #[structopt(long)] + pub save_replay: Option, + #[structopt(long)] + pub save_results: Option, + #[structopt(long)] + pub config: Option, + #[structopt(skip = None)] + pub actual_config: Option>, + #[structopt(long)] + pub batch_mode: bool, + #[structopt(long)] + pub log_level: Option, + #[structopt(long)] + pub player_names: Vec, +} + +pub fn run_with(opt: Opt) { + let mut config: Option> = opt.actual_config; + #[cfg(not(target_arch = "wasm32"))] + { + if let Some(path) = opt.config { + config = Some( + codegame::FullOptions::::load( + std::fs::File::open(path).expect("Could not open file"), + ) + .expect("Could not load config"), + ); + } + } + + let player_extra_data = PlayerExtraData { + #[cfg(feature = "rendering")] + keyboard_input: Arc::new(Mutex::new(keyboard_player::Input { + mouse_pos: vec2(r64(0.0), r64(0.0)), + pressed_keys: HashSet::new(), + pressed_buttons: HashSet::new(), + })), + }; + + let processor = if let Some(config) = config { + let mut processor = if let Some(path) = opt.repeat { + codegame::GameProcessor::::repeat_full( + config, + &player_extra_data, + std::fs::File::open(path).expect("Failed to open game log file"), + ) + } else { + codegame::GameProcessor::::new_full(config, &player_extra_data) + }; + if let Some(path) = &opt.save_replay { + processor.set_tick_handler(codegame::save_replay_tick_handler( + std::io::BufWriter::new( + std::fs::File::create(path).expect("Failed to create replay file"), + ), + )); + } + if let Some(path) = &opt.save_results { + let writer = std::io::BufWriter::new( + std::fs::File::create(path).expect("Failed to create results file"), + ); + processor.set_results_handler(Box::new(move |results| { + serde_json::to_writer_pretty(writer, &results).expect("Failed to write results"); + })); + } + Some(processor) + } else { + None + }; + + if opt.batch_mode { + match processor { + Some(processor) => processor.run(), + None => panic!("Batch mode can only be used with --config option"), + } + return; + } + + #[cfg(not(feature = "rendering"))] + panic!("Rendering feature not enabled"); + + #[cfg(feature = "rendering")] + { + let geng = Rc::new(Geng::new(geng::ContextOptions { + title: "AI Cup 2019".to_owned(), + ..default() + })); + let theme = Rc::new(geng::ui::Theme::default(&geng)); + + let replay: futures::future::OptionFuture<_> = opt + .replay + .map(|path| codegame::History::::load(&path)) + .into(); + + let player_names = opt.player_names; + + let preferences = Rc::new(RefCell::new(AutoSave::< + codegame::AppPreferences, + >::load("aicup2019-preferences.json"))); + + let state = geng::LoadingScreen::new( + &geng, + geng::EmptyLoadingScreen, + futures::future::join(::load(&geng, "."), replay), + { + let geng = geng.clone(); + move |(assets, replay)| { + let assets = assets.expect("Failed to load assets"); + let renderer = Renderer::new( + &geng, + preferences.clone(), + &player_extra_data.keyboard_input, + player_names, + assets.renderer_assets, + ); + if let Some(processor) = processor { + Box::new(codegame::GameScreen::new( + &geng, + processor, + renderer, + preferences, + )) as Box + } else if let Some(replay) = replay { + Box::new(codegame::GameScreen::replay( + &geng, + replay, + renderer, + preferences, + )) as Box + } else { + let player_config_options = vec![ + keyboard_player::Config::constructor( + &geng, + &theme, + &player_extra_data.keyboard_input, + ), + #[cfg(not(target_arch = "wasm32"))] + codegame::TcpPlayerConfig::constructor(&geng, &theme), + quickstart_player::Config::constructor(&geng, &theme), + random_player::Config::constructor(&geng, &theme), + codegame::EmptyPlayerConfig::constructor(&geng, &theme), + ]; + let mut levels = vec![ + (translate("simple").to_owned(), model::LevelOptions::Simple), + ( + translate("complex").to_owned(), + model::LevelOptions::Complex, + ), + ]; + #[cfg(target_arch = "wasm32")] + { + levels.push(( + "level.txt".to_owned(), + model::LevelOptions::parse(&assets.levels.level), + )); + } + #[cfg(not(target_arch = "wasm32"))] + { + fn add_levels( + levels: &mut Vec<(String, model::LevelOptions)>, + ) -> std::io::Result<()> { + for entry in std::fs::read_dir("levels")? { + let entry = entry?; + if entry.path().is_file() { + levels.push(( + entry.path().to_str().unwrap().to_owned(), + model::LevelOptions::LoadFrom { path: entry.path() }, + )); + } + } + Ok(()) + } + add_levels(&mut levels).expect("Failed to get list of levels"); + } + let game_options_config = model::OptionsConfig::new(&geng, &theme, levels); + Box::new(codegame::ConfigScreen::new( + &geng, + &theme, + Box::new(game_options_config), + player_config_options, + vec![0, 1], + renderer, + preferences, + )) + } + } + }, + ); + geng::run(geng, state); + } +} + +pub fn run() { + let opt: Opt = program_args::parse(); + if let Some(level) = opt.log_level { + logger::init_with_level(level) + } else { + logger::init() + } + .expect("Failed to initialize logger"); + #[cfg(feature = "rendering")] + logger::add_logger(Box::new(geng::logger())); + add_translations(include_str!("translations.txt")); + if let Some(lang) = &opt.lang { + set_locale(lang); + } + if let Ok(dir) = std::env::var("CARGO_MANIFEST_DIR") { + std::env::set_current_dir(std::path::Path::new(&dir).join("static")).unwrap(); + } else { + #[cfg(not(target_arch = "wasm32"))] + { + if let Some(path) = std::env::current_exe().unwrap().parent() { + std::env::set_current_dir(path).unwrap(); + } + } + } + run_with(program_args::parse()); +} diff --git a/app-src/src/main.rs b/app-src/src/main.rs new file mode 100644 index 0000000..9b109f6 --- /dev/null +++ b/app-src/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + aicup2019::run(); +} diff --git a/app-src/src/model/action.rs b/app-src/src/model/action.rs new file mode 100644 index 0000000..e11dac8 --- /dev/null +++ b/app-src/src/model/action.rs @@ -0,0 +1,55 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +#[schematic(rename = "UnitAction")] +pub struct OldUnitAction { + pub velocity: R64, + pub jump: bool, + pub jump_down: bool, + pub aim: Vec2, + pub shoot: bool, + pub swap_weapon: bool, + pub plant_mine: bool, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct UnitAction { + pub velocity: R64, + pub jump: bool, + pub jump_down: bool, + pub aim: Vec2, + pub shoot: bool, + pub reload: bool, + pub swap_weapon: bool, + pub plant_mine: bool, +} + +impl From for UnitAction { + fn from(old: OldUnitAction) -> Self { + Self { + velocity: old.velocity, + jump: old.jump, + jump_down: old.jump_down, + aim: old.aim, + shoot: old.shoot, + reload: false, + swap_weapon: old.swap_weapon, + plant_mine: old.plant_mine, + } + } +} + +impl Default for UnitAction { + fn default() -> Self { + Self { + velocity: r64(0.0), + jump: false, + jump_down: false, + aim: vec2(r64(0.0), r64(0.0)), + shoot: false, + reload: false, + swap_weapon: false, + plant_mine: false, + } + } +} diff --git a/app-src/src/model/bullet.rs b/app-src/src/model/bullet.rs new file mode 100644 index 0000000..48fe610 --- /dev/null +++ b/app-src/src/model/bullet.rs @@ -0,0 +1,22 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct Bullet { + pub weapon_type: WeaponType, + pub unit_id: Id, + pub player_id: Id, + pub position: Vec2, + pub velocity: Vec2, + pub damage: i32, + pub size: R64, + pub explosion_params: Option, +} + +impl Bullet { + pub fn rect(&self) -> AABB { + AABB::pos_size( + self.position - vec2(self.size, self.size) / r64(2.0), + vec2(self.size, self.size), + ) + } +} diff --git a/app-src/src/model/custom_data.rs b/app-src/src/model/custom_data.rs new file mode 100644 index 0000000..56e47a4 --- /dev/null +++ b/app-src/src/model/custom_data.rs @@ -0,0 +1,43 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +#[cfg_attr(feature = "rendering", derive(ugli::Vertex))] +pub struct ColoredVertex { + pub position: Vec2, + pub color: Color, +} + +#[derive(Debug, Serialize, Deserialize, Copy, Clone, Trans, Schematic)] +pub enum TextAlignment { + Left, + Center, + Right, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub enum CustomData { + Log { + text: String, + }, + Rect { + pos: Vec2, + size: Vec2, + color: Color, + }, + Line { + p1: Vec2, + p2: Vec2, + width: f32, + color: Color, + }, + Polygon { + vertices: Vec, + }, + PlacedText { + text: String, + pos: Vec2, + alignment: TextAlignment, + size: f32, + color: Color, + }, +} diff --git a/app-src/src/model/game.rs b/app-src/src/model/game.rs new file mode 100644 index 0000000..1797068 --- /dev/null +++ b/app-src/src/model/game.rs @@ -0,0 +1,556 @@ +use super::*; + +fn ladder_rect(unit: &Unit) -> AABB { + AABB::pos_size(unit.position, vec2(r64(0.0), unit.size.y / r64(2.0))) +} + +struct Explosion { + position: Vec2, + params: ExplosionParams, + player_id: Id, +} + +impl Game { + fn process_shooting( + &mut self, + rng: &mut dyn rand::RngCore, + events: &mut Vec, + unit_actions: &HashMap, + delta_time: R64, + ) { + for unit in &mut self.units { + let action = unit_actions.get(&unit.id).cloned().unwrap_or_else(default); + + let unit_center = unit.center(); + + if let Some(weapon) = &mut unit.weapon { + if action.aim.len() > r64(0.5) { + weapon.aim(action.aim); + weapon.set_shoot(action.shoot); + if action.reload { + weapon.reload(); + } + if action.shoot { + if let Some(bullet) = weapon.fire( + self.current_tick, + unit.id, + unit.player_id, + unit_center, + action.aim, + rng, + ) { + events.push(Event::Shot { + weapon_type: bullet.weapon_type, + }); + self.bullets.push(bullet); + } + } + } + weapon.update(delta_time); + } + } + } + fn process_movement(&mut self, unit_actions: &HashMap, delta_time: R64) { + fn update(old: R64, direction: R64, to: R64) -> R64 { + if direction > old { + max(old, to) + } else { + min(old, to) + } + } + let properties = &self.properties; + for unit_index in 0..self.units.len() { + let mut unit_position; + let mut unit_jump_state; + let mut on_ground = false; + { + let unit = &self.units[unit_index]; + let action = unit_actions.get(&unit.id).cloned().unwrap_or_else(default); + + unit_position = unit.position; + unit_jump_state = unit.jump_state.clone(); + let mut new_position = unit_position; + + new_position.x += + clamp_abs(action.velocity, properties.unit_max_horizontal_speed) * delta_time; + + if unit_jump_state.can_cancel && !action.jump { + unit_jump_state = JumpState::falling(); + } + if unit_jump_state.can_jump { + new_position.y += unit_jump_state.speed * delta_time; + unit_jump_state.max_time -= delta_time; + if unit_jump_state.max_time < r64(0.0) { + unit_jump_state = JumpState::falling(); + } + } else if action.jump_down + || !self + .level + .find_tiles(ladder_rect(unit)) + .any(|(_, tile)| *tile == Tile::Ladder) + { + new_position.y -= properties.unit_fall_speed * delta_time; + } + + let eps = r64(1e-9); + + // Horizontal + for other in &self.units { + if other.id == unit.id { + continue; + } + if unit + .rect_at(vec2(new_position.x, unit_position.y)) + .intersects(&other.rect()) + { + new_position.x = update( + unit_position.x, + new_position.x, + other.position.x + + (unit_position.x - other.position.x).signum() + * ((unit.size.x + other.size.x) / r64(2.0) + eps), + ); + } + } + if self + .level + .find_tiles(unit.rect_at(vec2(new_position.x, unit_position.y))) + .any(|(_, tile)| tile.is_blocking()) + { + if new_position.x > unit_position.x { + unit_position.x = update( + unit_position.x, + new_position.x, + unit_position.x + (unit.rect().x_max - eps).ceil() + - unit.rect().x_max + - eps, + ); + } else { + unit_position.x = update( + unit_position.x, + new_position.x, + unit_position.x + (unit.rect().x_min + eps).floor() - unit.rect().x_min + + eps, + ); + } + } else { + unit_position.x = new_position.x; + } + new_position.x = unit_position.x; + + // Vertical + for other in &self.units { + if other.id == unit.id { + continue; + } + if unit.rect_at(new_position).intersects(&other.rect()) { + if new_position.y > unit_position.y { + new_position.y = update( + unit_position.y, + new_position.y, + other.position.y - unit.size.y - eps, + ); + unit_jump_state = JumpState::falling(); + } else { + new_position.y = update( + unit_position.y, + new_position.y, + other.position.y + other.size.y + eps, + ); + unit_jump_state = JumpState { + can_jump: true, + speed: properties.unit_jump_speed, + max_time: properties.unit_jump_time, + can_cancel: true, + }; + } + } + } + if self + .level + .find_tiles(unit.rect_at(new_position)) + .any(|(pos, tile)| { + let falling_from = if action.jump_down { + None + } else { + Some(unit_position.y) + }; + match tile { + Tile::Empty | Tile::JumpPad => false, + Tile::Wall => true, + Tile::Platform => { + if let Some(height) = falling_from { + height > r64(0.0) && height.raw() as usize > pos.y + } else { + false + } + } + Tile::Ladder => { + if let Some(height) = falling_from { + height > r64(0.0) + && height.raw() as usize > pos.y + && unit_position.x > r64(0.0) + && unit_position.x.raw() as usize == pos.x + } else { + false + } + } + } + }) + { + if new_position.y < unit_position.y { + unit_jump_state = JumpState { + can_jump: true, + speed: properties.unit_jump_speed, + max_time: properties.unit_jump_time, + can_cancel: true, + }; + on_ground = true; + } else { + unit_jump_state = JumpState::falling(); + } + if new_position.y > unit_position.y { + unit_position.y = update( + unit_position.y, + new_position.y, + unit_position.y + (unit.rect().y_max - eps).ceil() + - unit.rect().y_max + - eps, + ); + } else { + unit_position.y = update( + unit_position.y, + new_position.y, + unit_position.y + (unit.rect().y_min + eps).floor() - unit.rect().y_min + + eps, + ); + } + } else { + unit_position.y = new_position.y; + } + new_position.y = unit_position.y; + } + let unit = &mut self.units[unit_index]; + unit.on_ground = on_ground; + unit.stand = unit_position.x == unit.position.x; + if !unit.stand { + unit.walked_right = unit_position.x > unit.position.x; + } + unit.position = unit_position; + unit.jump_state = unit_jump_state; + } + } + fn process_level_jumps(&mut self, events: &mut Vec) { + let properties = &self.properties; + for unit in &mut self.units { + unit.on_ladder = false; + let jump_pad_pos = self.level.find_tiles(unit.rect()).find_map(|(pos, tile)| { + if *tile == Tile::JumpPad { + Some(pos) + } else { + None + } + }); + if let Some(pos) = jump_pad_pos { + unit.jump_state = JumpState { + can_jump: true, + speed: properties.jump_pad_jump_speed, + max_time: properties.jump_pad_jump_time, + can_cancel: false, + }; + events.push(Event::LevelEvent { used_tile: pos }); + } + if self + .level + .find_tiles(ladder_rect(unit)) + .any(|(_, tile)| *tile == Tile::Ladder) + { + unit.jump_state = JumpState { + can_jump: true, + speed: properties.unit_jump_speed, + max_time: unit.jump_state.max_time.max(properties.unit_jump_time), + can_cancel: true, + }; + unit.on_ground = true; + unit.on_ladder = true; + } + } + } + fn process_bullets( + &mut self, + events: &mut Vec, + explosions: &mut Vec, + delta_time: R64, + ) { + { + let players = &mut self.players; + let units = &mut self.units; + let mines = &mut self.mines; + self.bullets.retain(|bullet| { + for unit in units.iter_mut() { + if unit.id == bullet.unit_id { + continue; + } + if bullet.rect().intersects(&unit.rect()) { + events.push(Event::Hit); + let score = bullet.damage.min(unit.health).max(0) as usize; + unit.health -= bullet.damage; + if unit.player_id != bullet.player_id { + players + .iter_mut() + .find(|player| player.id == bullet.player_id) + .unwrap() + .score += score; + } + if let Some(params) = &bullet.explosion_params { + explosions.push(Explosion { + player_id: bullet.player_id, + position: bullet.position, + params: params.clone(), + }); + } + return false; + } + } + for mine in mines.iter_mut() { + if bullet.rect().intersects(&mine.rect()) { + mine.state = MineState::Exploded; + if let Some(params) = &bullet.explosion_params { + explosions.push(Explosion { + player_id: bullet.player_id, + position: bullet.position, + params: params.clone(), + }); + } + return false; + } + } + true + }); + } + for bullet in &mut self.bullets { + bullet.position += bullet.velocity * delta_time; + } + let level = &self.level; + self.bullets.retain(|bullet| { + if level + .find_tiles(bullet.rect()) + .any(|(_, tile)| tile.is_blocking()) + { + if let Some(params) = &bullet.explosion_params { + explosions.push(Explosion { + player_id: bullet.player_id, + position: bullet.position, + params: params.clone(), + }); + } + false + } else { + true + } + }); + } + fn process_loot_boxes( + &mut self, + events: &mut Vec, + unit_actions: &HashMap, + unit_swapped: &mut HashSet, + ) { + let properties = &self.properties; + for unit in &mut self.units { + let swap_weapon = unit_actions + .get(&unit.id) + .map(|action| action.swap_weapon) + .unwrap_or(false) + && !unit_swapped.contains(&unit.id); + let loot_boxes = self + .loot_boxes + .drain(..) + .filter_map(|loot_box| { + if !loot_box.rect().intersects(&unit.rect()) { + return Some(loot_box); + } + let mut handle_item = |item: Item| -> Option { + match item { + Item::HealthPack { health } => { + if unit.health < properties.unit_max_health { + events.push(Event::Heal); + unit.health = + (unit.health + health).min(properties.unit_max_health); + None + } else { + Some(Item::HealthPack { health }) + } + } + Item::Weapon { mut weapon_type } => { + if let Some(unit_weapon) = &mut unit.weapon { + if swap_weapon { + let new_unit_weapon = Weapon::new(properties, weapon_type); + weapon_type = unit_weapon.typ; + *unit_weapon = new_unit_weapon; + unit_swapped.insert(unit.id); + } + Some(Item::Weapon { weapon_type }) + } else { + events.push(Event::PickupWeapon); + unit.weapon = Some(Weapon::new(properties, weapon_type)); + None + } + } + Item::Mine {} => { + events.push(Event::PickupMine); + unit.mines += 1; + None + } + } + }; + if let Some(item) = handle_item(loot_box.item) { + Some(LootBox { + position: loot_box.position, + size: loot_box.size, + item, + }) + } else { + None + } + }) + .collect::>(); + self.loot_boxes.extend(loot_boxes); + } + } + fn process_planting_mines( + &mut self, + unit_actions: &HashMap, + unit_planted_mine: &mut HashSet, + ) { + for unit in &mut self.units { + let action = unit_actions.get(&unit.id).cloned().unwrap_or_else(default); + if action.plant_mine && !unit_planted_mine.contains(&unit.id) { + if unit.mines > 0 + && unit.on_ground + && !unit.on_ladder + && self + .level + .get( + unit.position.x.raw().max(0.0) as usize, + (unit.position.y.raw().max(0.0) as usize).max(1) - 1, + ) + .map_or(false, |tile| tile.can_plant_mine()) + { + unit.mines -= 1; + self.mines + .push(Mine::spawn(unit.player_id, &self.properties, unit.position)); + } + unit_planted_mine.insert(unit.id); + } + } + } + fn process_mines(&mut self, explosions: &mut Vec, delta_time: R64) { + for mine in &mut self.mines { + mine.timer = match mine.timer { + Some(mut timer) => { + timer -= delta_time; + if timer > r64(0.0) { + Some(timer) + } else { + None + } + } + None => None, + }; + match mine.state { + MineState::Preparing => { + if mine.timer.is_none() { + mine.state = MineState::Idle; + } + } + MineState::Idle => { + for unit in &self.units { + let distance = unit.rect().distance_to(&mine.rect()); + if distance < mine.trigger_radius { + mine.state = MineState::Triggered; + mine.timer = Some(self.properties.mine_trigger_time); + break; + } + } + } + MineState::Triggered => { + if mine.timer.is_none() { + mine.state = MineState::Exploded; + } + } + MineState::Exploded => {} + }; + if mine.state == MineState::Exploded { + explosions.push(Explosion { + position: mine.rect().center(), + params: mine.explosion_params.clone(), + player_id: mine.player_id, + }); + } + } + self.mines.retain(|mine| mine.state != MineState::Exploded); + } + fn process_explosions(&mut self, explosions: &[Explosion]) { + for explosion in explosions { + let rect = AABB::from_corners( + explosion.position - vec2(explosion.params.radius, explosion.params.radius), + explosion.position + vec2(explosion.params.radius, explosion.params.radius), + ); + for unit in &mut self.units { + if unit.rect().intersects(&rect) { + let score = explosion.params.damage.min(unit.health).max(0) as usize; + unit.health -= explosion.params.damage; + if unit.player_id != explosion.player_id { + self.players + .iter_mut() + .find(|player| player.id == explosion.player_id) + .unwrap() + .score += score; + } + } + } + for mine in &mut self.mines { + if mine.rect().intersects(&rect) { + mine.state = MineState::Exploded; + } + } + } + } + pub fn update( + &mut self, + rng: &mut dyn rand::RngCore, + events: &mut Vec, + unit_planted_mine: &mut HashSet, + unit_swapped: &mut HashSet, + unit_actions: &HashMap, + delta_time: R64, + ) { + let mut explosions: Vec = Vec::new(); + self.process_planting_mines(unit_actions, unit_planted_mine); + self.process_shooting(rng, events, unit_actions, delta_time); + self.process_loot_boxes(events, unit_actions, unit_swapped); + self.process_movement(unit_actions, delta_time); + self.process_level_jumps(events); + self.process_bullets(events, &mut explosions, delta_time); + self.process_mines(&mut explosions, delta_time); + self.process_explosions(&explosions); + for unit in &self.units { + if unit.health <= 0 { + self.players + .iter_mut() + .find(|player| player.id != unit.player_id) + .unwrap() + .score += self.properties.kill_score; + } + } + self.units.retain(|unit| unit.health > 0); + for explosion in explosions { + events.push(Event::Explosion { + player_id: explosion.player_id, + position: explosion.position, + params: explosion.params, + }); + } + } +} diff --git a/app-src/src/model/level/complex.rs b/app-src/src/model/level/complex.rs new file mode 100644 index 0000000..a03620a --- /dev/null +++ b/app-src/src/model/level/complex.rs @@ -0,0 +1,152 @@ +use super::*; + +pub fn gen(rng: &mut dyn rand::RngCore) -> (Level, Vec) { + let width = 40; + let height = 30; + + let w = 5; + let h = 5; + assert_eq!(width % w, 0); + assert_eq!(height % h, 0); + + #[derive(Debug, Clone)] + struct BigTile { + left: bool, + down: bool, + }; + impl BigTile { + fn new(left: bool, down: bool) -> Self { + Self { left, down } + } + } + let sw = width / w / 2; + let sh = height / h; + let mut big = vec![vec![BigTile::new(false, false); sh]; sw]; + let mut nx = vec![vec![vec2(0, 0); sh]; sw]; + for i in 0..sw { + for j in 0..sh { + nx[i][j] = vec2(i, j); + } + } + fn get_root(nx: &[Vec>], p: Vec2) -> Vec2 { + let mut p = p; + while nx[p.x][p.y] != p { + p = nx[p.x][p.y]; + } + p + } + fn connected(nx: &[Vec>]) -> bool { + for i in 0..nx.len() { + for j in 0..nx[0].len() { + if get_root(nx, vec2(i, j)) != get_root(nx, vec2(0, 0)) { + return false; + } + } + } + true + } + fn unite(nx: &mut [Vec>], p1: Vec2, p2: Vec2) { + let r1 = get_root(nx, p1); + let r2 = get_root(nx, p2); + nx[r1.x][r1.y] = r2; + } + while !connected(&nx) { + let mut options = Vec::new(); + for i in 0..sw { + for j in 0..sh { + if i > 0 && !big[i][j].left { + options.push((i, j, 0)); + } + if j > 0 && !big[i][j].down { + options.push((i, j, 1)); + } + } + } + let (i, j, side) = options[rng.gen_range(0, options.len())]; + match side { + 0 => { + big[i][j].left = true; + unite(&mut nx, vec2(i, j), vec2(i - 1, j)); + } + 1 => { + big[i][j].down = true; + unite(&mut nx, vec2(i, j), vec2(i, j - 1)); + } + _ => unreachable!(), + } + } + + let mut level = Level { + tiles: vec![vec![Tile::Empty; height]; width], + }; + for i in 0..sw { + let mut j = 0; + while j < sh { + let mut nj = j + 1; + let mx = rng.gen_range(1, 3); + while nj < j + mx + 1 && nj < sh && big[i][nj].down { + nj += 1; + } + let nj = nj - 1; + let y = nj * h; + if nj > j { + if nj + 1 < sh && big[i][nj + 1].down { + for x in i * w..(i + 1) * w { + level.tiles[x][y] = Tile::Platform; + } + } + match nj - j { + 1 => {} + 2 => { + let x = rng.gen_range(i * w + 2, (i + 1) * w - 1); + if !(nj + 1 < sh && big[i][nj + 1].down) || rng.gen() { + let y = j * h + 1; + level.tiles[x][y] = Tile::JumpPad; + } else { + for y in j * h + 1..=nj * h { + level.tiles[x][y] = Tile::Ladder; + } + } + } + _ => unreachable!(), + } + j = nj; + } else { + j += 1; + } + } + } + for i in 0..sw { + for j in 0..sh { + if !big[i][j].left { + let x = i * w; + for y in j * h..(j + 1) * h + 1 { + if let Some(tile) = level.tiles[x].get_mut(y) { + *tile = Tile::Wall; + } + } + } + if !big[i][j].down { + let y = j * h; + for x in i * w..(i + 1) * w + 1 { + level.tiles[x][y] = Tile::Wall; + } + } + } + } + for x in 0..width / 2 { + for y in 0..height { + level.tiles[width - 1 - x][y] = level.tiles[x][y].clone(); + } + } + for x in 0..width { + level.tiles[x][height - 1] = Tile::Wall; + } + + let mut spawn_points = Vec::new(); + for i in 1..3 { + spawn_points.push(vec2(r64(i as f64 + 0.5), r64(1.0))); + spawn_points.push(vec2(r64(width as f64 - i as f64 - 0.5), r64(1.0))); + } + (level, spawn_points) +} diff --git a/app-src/src/model/level/mod.rs b/app-src/src/model/level/mod.rs new file mode 100644 index 0000000..50419de --- /dev/null +++ b/app-src/src/model/level/mod.rs @@ -0,0 +1,319 @@ +use super::*; + +mod complex; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum LevelOptions { + EmptyBox { + width: usize, + height: usize, + }, + LoadFrom { + path: std::path::PathBuf, + }, + Ready { + level: Level, + spawn_points: Vec, + }, + Simple, + Complex, +} + +impl LevelOptions { + pub fn parse(s: &str) -> Self { + let mut spawn_points = Vec::new(); + let mut extra_spawn_points = Vec::new(); + let mut tiles = Vec::new(); + for (y, line) in s.lines().enumerate() { + for (x, c) in line.chars().enumerate() { + while x >= tiles.len() { + tiles.push(Vec::new()); + } + while y >= tiles[x].len() { + tiles[x].push(Tile::Empty); + } + tiles[x][y] = match c { + '#' => Tile::Wall, + '.' => Tile::Empty, + '^' => Tile::Platform, + 'H' => Tile::Ladder, + 'T' => Tile::JumpPad, + 'P' => { + spawn_points.push(vec2(r64(x as f64 + 0.5), r64(y as _))); + Tile::Empty + } + _ => { + if let Some(digit) = c.to_digit(10) { + extra_spawn_points + .push((digit, vec2(r64(x as f64 + 0.5), r64(y as _)))); + Tile::Empty + } else { + panic!("Unexpected character"); + } + } + } + } + } + extra_spawn_points.sort_by_key(|&(digit, _)| digit); + for (_, point) in extra_spawn_points { + spawn_points.push(point); + } + let size = vec2(tiles.len(), tiles[0].len()); + for row in &mut tiles { + assert_eq!(row.len(), size.y); + row.reverse(); + } + for spawn_point in &mut spawn_points { + spawn_point.y = r64(size.y as _) - spawn_point.y - r64(1.0); + } + LevelOptions::Ready { + level: Level::new(tiles), + spawn_points, + } + } +} + +pub type SpawnPoint = Vec2; + +impl LevelOptions { + pub fn create(self, rng: &mut dyn rand::RngCore) -> (Level, Vec) { + match self { + LevelOptions::EmptyBox { width, height } => { + assert!(width > 2 && height > 2); + let mut tiles = vec![vec![Tile::Empty; height]; width]; + for (x, row) in tiles.iter_mut().enumerate() { + for (y, tile) in row.iter_mut().enumerate() { + if x == 0 || x + 1 == width || y == 0 || y + 1 == height { + *tile = Tile::Wall; + } + } + } + let mut spawn_points = Vec::new(); + for i in 1..width / 2 { + spawn_points.push(vec2(r64(i as f64 + 0.5), r64(1.0))); + spawn_points.push(vec2(r64(width as f64 - i as f64 - 0.5), r64(1.0))); + } + (Level::new(tiles), spawn_points) + } + LevelOptions::LoadFrom { path } => { + fn load(path: std::path::PathBuf) -> std::io::Result { + let mut content = String::new(); + std::fs::File::open(path)?.read_to_string(&mut content)?; + Ok(LevelOptions::parse(&content)) + } + load(path).expect("Failed to load map").create(rng) + } + LevelOptions::Ready { + level, + spawn_points, + } => (level, spawn_points), + LevelOptions::Simple => { + let width = 40; + let height = 30; + let mut tiles = vec![vec![Tile::Empty; height]; width]; + for y in 0..height { + tiles[0][y] = Tile::Wall; + } + let step = 5; + let mut y = 0; + let mut spawn_points = Vec::new(); + for x in 0..width / 2 { + tiles[x][height - 1] = Tile::Wall; + if x % step == 0 { + let next_y = rng.gen_range(0, height - 5); + for y in min(y, next_y)..=max(y, next_y) { + tiles[x][y] = Tile::Wall; + } + if x != 0 { + let options = if max(next_y, y) - min(next_y, y) < 10 { + 3 + } else { + 2 + }; + match rng.gen_range(0, options) { + 0 => { + let x = if next_y > y { x - 1 } else { x + 1 }; + for y in (min(y, next_y) + 1)..=max(y, next_y) { + tiles[x][y] = Tile::Ladder; + } + } + 1 => { + let x_range = if next_y > y { + (x - 2)..x + } else { + (x + 1)..(x + 3) + }; + for x in x_range { + for y in + ((min(y, next_y))..=max(y, next_y)).step_by(3).skip(1) + { + tiles[x][y] = Tile::Platform; + } + } + } + 2 => { + let x = if next_y > y { x - 1 } else { x + 1 }; + tiles[x][min(y, next_y) + 1] = Tile::JumpPad; + } + _ => unreachable!(), + } + } + y = next_y; + } + tiles[x][y] = Tile::Wall; + if x > 0 { + spawn_points.push(vec2(r64(x as f64 + 0.5), r64(y as f64 + 1.0))); + spawn_points.push(vec2( + r64(width as f64 - x as f64 - 0.5), + r64(y as f64 + 1.0), + )); + } + } + for x in 0..width / 2 { + for y in 0..height { + tiles[width - 1 - x][y] = tiles[x][y].clone(); + } + } + (Level::new(tiles), spawn_points) + } + LevelOptions::Complex => complex::gen(rng), + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Trans, Schematic)] +pub enum Tile { + Empty, + Wall, + Platform, + Ladder, + JumpPad, +} + +impl Tile { + pub fn is_blocking(&self) -> bool { + match self { + Tile::Empty => false, + Tile::Wall => true, + Tile::Platform => false, + Tile::Ladder => false, + Tile::JumpPad => false, + } + } + pub fn can_plant_mine(&self) -> bool { + match self { + Tile::Empty => false, + Tile::Wall => true, + Tile::Platform => true, + Tile::Ladder => false, + Tile::JumpPad => false, + } + } + pub fn is_walkable(&self) -> bool { + match self { + Tile::Empty => false, + Tile::Wall => true, + Tile::Platform => true, + Tile::Ladder => true, + Tile::JumpPad => false, + } + } + pub fn is_destructible(&self) -> bool { + match self { + _ => true, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, Diff, PartialEq, Eq, Trans, Schematic)] +pub struct Level { + #[diff = "eq"] + pub tiles: Vec>, +} + +impl<'a> IntoIterator for &'a Level { + type Item = (Vec2, &'a Tile); + type IntoIter = Box + 'a>; + fn into_iter(self) -> Self::IntoIter { + Box::new(self.tiles.iter().enumerate().flat_map(move |(x, row)| { + row.iter() + .enumerate() + .map(move |(y, tile)| (vec2(x, y), tile)) + })) + } +} + +impl Level { + fn new(tiles: Vec>) -> Self { + Self { tiles } + } + pub fn get(&self, x: usize, y: usize) -> Option<&Tile> { + self.tiles.get(x).and_then(|row| row.get(y)) + } + pub fn iter(&self) -> impl Iterator, &Tile)> { + self.into_iter() + } + pub fn size(&self) -> Vec2 { + vec2(self.tiles.len(), self.tiles[0].len()) + } + pub fn find_tiles(&self, rect: AABB) -> impl Iterator, &Tile)> { + let start = rect + .bottom_left() + .map(|t| t.raw().floor().max(0.0) as usize); + let end = rect.top_right().map(|t| t.raw().ceil().max(0.0) as usize); + let start = vec2(min(start.x, self.size().x), min(start.y, self.size().y)); + let end = vec2(min(end.x, self.size().x), min(end.y, self.size().y)); + self.tiles[start.x..end.x] + .iter() + .enumerate() + .flat_map(move |(dx, row)| { + row[start.y..end.y] + .iter() + .enumerate() + .map(move |(dy, tile)| (vec2(start.x + dx, start.y + dy), tile)) + }) + } + pub fn find_tiles_mut( + &mut self, + rect: AABB, + ) -> impl Iterator, &mut Tile)> { + let start = rect + .bottom_left() + .map(|t| t.raw().floor().max(0.0) as usize); + let end = rect.top_right().map(|t| t.raw().ceil().max(0.0) as usize); + let end = vec2(min(end.x, self.size().x), min(end.y, self.size().y)); + self.tiles[start.x..end.x] + .iter_mut() + .enumerate() + .flat_map(move |(dx, row)| { + row[start.y..end.y] + .iter_mut() + .enumerate() + .map(move |(dy, tile)| (vec2(start.x + dx, start.y + dy), tile)) + }) + } + pub fn save( + &self, + mut out: impl Write, + spawn_points: &HashSet>, + ) -> std::io::Result<()> { + for row in (0..self.size().y).rev() { + for col in 0..self.size().x { + let c = if spawn_points.contains(&vec2(col, row)) { + 'P' + } else { + match self.tiles[col][row] { + Tile::Empty => '.', + Tile::Wall => '#', + Tile::Ladder => 'H', + Tile::JumpPad => 'T', + Tile::Platform => '^', + } + }; + write!(out, "{}", c)? + } + writeln!(out)? + } + Ok(()) + } +} diff --git a/app-src/src/model/loot.rs b/app-src/src/model/loot.rs new file mode 100644 index 0000000..4e47c18 --- /dev/null +++ b/app-src/src/model/loot.rs @@ -0,0 +1,31 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub enum Item { + HealthPack { health: i32 }, + Weapon { weapon_type: WeaponType }, + Mine {}, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct LootBox { + pub position: Vec2, + pub size: Vec2, + pub item: Item, +} + +impl LootBox { + pub fn spawn(properties: &Properties, position: Vec2, item: Item) -> Self { + Self { + position, + size: properties.loot_box_size, + item, + } + } + pub fn rect(&self) -> AABB { + AABB::pos_size( + self.position - vec2(self.size.x / r64(2.0), r64(0.0)), + self.size, + ) + } +} diff --git a/app-src/src/model/mine.rs b/app-src/src/model/mine.rs new file mode 100644 index 0000000..bd46a57 --- /dev/null +++ b/app-src/src/model/mine.rs @@ -0,0 +1,40 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Trans, Schematic)] +pub enum MineState { + Preparing, + Idle, + Triggered, + Exploded, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct Mine { + pub player_id: Id, + pub position: Vec2, + pub size: Vec2, + pub state: MineState, + pub timer: Option, + pub trigger_radius: R64, + pub explosion_params: ExplosionParams, +} + +impl Mine { + pub fn spawn(player_id: Id, properties: &Properties, position: Vec2) -> Self { + Self { + player_id, + position, + size: properties.mine_size, + state: MineState::Preparing, + timer: Some(properties.mine_prepare_time), + trigger_radius: properties.mine_trigger_radius, + explosion_params: properties.mine_explosion_params.clone(), + } + } + pub fn rect(&self) -> AABB { + AABB::pos_size( + self.position - vec2(self.size.x / r64(2.0), r64(0.0)), + self.size, + ) + } +} diff --git a/app-src/src/model/mod.rs b/app-src/src/model/mod.rs new file mode 100644 index 0000000..ee60631 --- /dev/null +++ b/app-src/src/model/mod.rs @@ -0,0 +1,323 @@ +use codegame::prelude::*; + +mod action; +mod bullet; +mod custom_data; +mod game; +mod level; +mod loot; +mod mine; +mod options; +mod properties; +mod unit; +mod weapon; + +pub use action::*; +pub use bullet::*; +pub use custom_data::*; +pub use game::*; +pub use level::*; +pub use loot::*; +pub use mine::*; +pub use options::*; +pub use properties::*; +pub use unit::*; +pub use weapon::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, Copy, Trans, Schematic)] +pub struct Id(usize); + +impl Id { + pub fn new() -> Self { + static NEXT_ID: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(1); + Self(NEXT_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst)) + } + pub fn raw(&self) -> usize { + self.0 + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct Player { + pub id: Id, + pub score: usize, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Diff, Trans, Schematic)] +pub struct Game { + #[diff = "clone"] + pub current_tick: usize, + #[diff = "eq"] + pub properties: Properties, + pub level: Level, + #[diff = "clone"] + pub players: Vec, + #[diff = "clone"] + pub units: Vec, + #[diff = "clone"] + pub bullets: Vec, + #[diff = "clone"] + pub mines: Vec, + #[diff = "clone"] + pub loot_boxes: Vec, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct PlayerView { + pub my_id: Id, + pub game: Game, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum ActionWrapper { + V0 { actions: HashMap }, + V1 { actions: HashMap }, +} + +impl ActionWrapper { + const MAGIC: i32 = 0xabcd; + + fn to_new(&self) -> HashMap { + match self { + Self::V0 { actions } => actions + .clone() + .into_iter() + .map(|(id, action)| (id, action.into())) + .collect(), + Self::V1 { actions } => actions.clone(), + } + } +} + +impl Default for ActionWrapper { + fn default() -> Self { + Self::V1 { actions: default() } + } +} + +impl Trans for ActionWrapper { + fn read_from(mut reader: impl std::io::Read) -> std::io::Result { + let x = i32::read_from(&mut reader)?; + Ok(match x { + ActionWrapper::MAGIC => Self::V1 { + actions: Trans::read_from(&mut reader)?, + }, + _ => { + let mut actions = HashMap::new(); + for _ in 0..x { + let key = Id::read_from(&mut reader)?; + let value = OldUnitAction::read_from(&mut reader)?; + actions.insert(key, value); + } + Self::V0 { actions } + } + }) + } + fn write_to(&self, mut writer: impl std::io::Write) -> std::io::Result<()> { + unimplemented!("Not used") + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, Schematic)] +#[schematic(rename = "Versioned", magic = "ActionWrapper::MAGIC")] +struct LastVersionUnitAction { + inner: HashMap, +} + +impl Schematic for ActionWrapper { + fn create_schema() -> trans_schema::Schema { + LastVersionUnitAction::create_schema() + } +} + +pub type Action = ActionWrapper; +pub type Results = Vec; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub enum Event { + LevelEvent { + used_tile: Vec2, + }, + Explosion { + position: Vec2, + player_id: Id, + params: ExplosionParams, + }, + Shot { + weapon_type: WeaponType, + }, + Heal, + PickupWeapon, + PickupMine, + Hit, +} + +impl codegame::Game for Game { + type Options = Options; + type OptionsPreset = crate::OptionsPreset; + type PlayerOptions = crate::PlayerOptions; + type PlayerExtraData = crate::PlayerExtraData; + type Action = Action; + type PlayerView = PlayerView; + type Event = Event; + type Results = Results; + type CustomData = CustomData; + + fn init(rng: &mut dyn rand::RngCore, player_count: usize, options: Options) -> Self { + let properties = options.properties.unwrap_or_default(); + let (level, spawn_points) = options.level.create(rng); + let mut players = Vec::new(); + let mut units = Vec::new(); + for i in 0..player_count { + let player = Player { + id: Id::new(), + score: 0, + }; + players.push(player); + } + let mut spawn_points = spawn_points.into_iter(); + for _ in 0..properties.team_size { + for player in &players { + units.push(Unit::spawn( + &properties, + player.id, + spawn_points.next().unwrap(), + )); + } + } + let mut loot_boxes = Vec::new(); + { + let mut possible_positions = Vec::new(); + for (pos, tile) in &level { + if pos.x < level.size().x / 2 + && pos.y > 0 + && tile == &Tile::Empty + && level.get(pos.x, pos.y - 1).unwrap().is_walkable() + && level.get(pos.x, pos.y) == level.get(level.size().x - 1 - pos.x, pos.y) + && level.get(pos.x, pos.y - 1) + == level.get(level.size().x - 1 - pos.x, pos.y - 1) + { + possible_positions.push(pos); + } + } + let loot_count = possible_positions.len() / 4; + for (i, &mut pos) in possible_positions + .partial_shuffle(rng, loot_count) + .0 + .into_iter() + .enumerate() + { + let item = if i < 3 { + Item::Weapon { + weapon_type: match i { + 0 => WeaponType::Pistol, + 1 => WeaponType::AssaultRifle, + 2 => WeaponType::RocketLauncher, + _ => unreachable!(), + }, + } + } else if rng.gen::() { + Item::HealthPack { + health: properties.health_pack_health, + } + } else { + Item::Mine {} + }; + for &pos in &[pos, vec2(level.size().x - 1 - pos.x, pos.y)] { + loot_boxes.push(LootBox::spawn( + &properties, + vec2(r64(pos.x as f64 + 0.5), r64(pos.y as f64)), + item.clone(), + )); + } + } + let mut used_positions = HashSet::new(); + for _ in 0..15 { + let pos = loop { + let pos = vec2( + rng.gen_range(0, level.size().x), + rng.gen_range(1, level.size().y), + ); + if level.tiles[pos.x][pos.y] == Tile::Empty + && level.tiles[pos.x][pos.y - 1].is_walkable() + && !used_positions.contains(&pos) + { + break pos; + } + }; + used_positions.insert(pos); + } + for (i, pos) in used_positions.into_iter().enumerate() {} + } + Self { + current_tick: 0, + properties, + level, + players, + units, + bullets: Vec::new(), + mines: Vec::new(), + loot_boxes, + } + } + + fn player_view(&self, player_index: usize) -> PlayerView { + PlayerView { + my_id: self.players[player_index].id, + game: self.clone(), + } + } + + fn process_turn( + &mut self, + rng: &mut dyn rand::RngCore, + actions: HashMap, + ) -> Vec { + let mut unit_actions = HashMap::new(); + for (player_index, action) in actions { + let player = &self.players[player_index]; + for (unit_id, action) in action.to_new() { + let unit = self.units.iter().find(|unit| unit.id == unit_id); + if let Some(unit) = unit { + if unit.player_id != player.id { + warn!("Received action for a unit not owned by the player"); + continue; + } + unit_actions.insert(unit_id, action); + } else { + warn!("Received action for non-existent unit"); + } + } + } + let mut events = Vec::new(); + let mut unit_swapped = HashSet::new(); + let mut unit_planted_mine = HashSet::new(); + for _ in 0..self.properties.updates_per_tick { + let delta_time = r64(1.0) + / self.properties.ticks_per_second + / r64(self.properties.updates_per_tick as _); + self.update( + rng, + &mut events, + &mut unit_planted_mine, + &mut unit_swapped, + &unit_actions, + delta_time, + ); + } + self.current_tick += 1; + events + } + fn finished(&self) -> bool { + self.units + .iter() + .map(|unit| unit.player_id) + .collect::>() + .len() + <= 1 + || self.current_tick >= self.properties.max_tick_count + } + fn results(&self) -> Self::Results { + self.players.iter().map(|player| player.score).collect() + } +} diff --git a/app-src/src/model/options.rs b/app-src/src/model/options.rs new file mode 100644 index 0000000..98dff2c --- /dev/null +++ b/app-src/src/model/options.rs @@ -0,0 +1,143 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Options { + pub level: LevelOptions, + pub properties: Option, +} + +impl Default for Options { + fn default() -> Self { + Self { + level: LevelOptions::EmptyBox { + width: 40, + height: 30, + }, + properties: None, + } + } +} + +use crate::*; + +#[cfg(feature = "rendering")] +mod config { + use super::*; + + pub struct OptionsConfig { + geng: Rc, + theme: Rc, + predefined_maps: Vec<(String, model::LevelOptions)>, + team_size: usize, + team_size_button: ui::TextButton, + current_option: usize, + level_button: ui::TextButton, + custom_level: Rc>>, + level_editor_button: ui::TextButton, + request_level_editor: bool, + } + + impl OptionsConfig { + pub fn new( + geng: &Rc, + theme: &Rc, + predefined_maps: Vec<(String, model::LevelOptions)>, + ) -> Self { + Self { + geng: geng.clone(), + theme: theme.clone(), + predefined_maps, + team_size: 1, + team_size_button: ui::TextButton::new(geng, theme, String::new(), 32.0), + current_option: 0, + level_button: ui::TextButton::new(geng, theme, String::new(), 32.0), + custom_level: Rc::new(RefCell::new(None)), + level_editor_button: ui::TextButton::new( + geng, + theme, + translate("level editor").to_owned(), + 32.0, + ), + request_level_editor: false, + } + } + } + + impl ui::Config for OptionsConfig { + fn get(&self) -> OptionsPreset { + OptionsPreset::Custom(model::Options { + level: self.predefined_maps[self.current_option].1.clone(), + properties: Some(model::Properties { + team_size: self.team_size, + ..default() + }), + }) + } + fn ui<'a>(&'a mut self) -> Box { + use ui::*; + if let Some(options) = &*self.custom_level.borrow() { + if self.predefined_maps.last().unwrap().0 == "custom" { + self.predefined_maps.last_mut().unwrap().1 = options.clone(); + } else { + self.current_option = self.predefined_maps.len(); + self.predefined_maps + .push(("custom".to_owned(), options.clone())); + } + } + self.level_button.text = self.predefined_maps[self.current_option].0.clone(); + self.team_size_button.text = self.team_size.to_string(); + let request_level_editor = &mut self.request_level_editor; + let ui = ui::column![ + row![ + text(translate("Team size:"), &self.theme.font, 32.0, Color::GRAY) + .padding_right(32.0), + self.team_size_button.ui(Box::new({ + let team_size = &mut self.team_size; + let change = ((*team_size) % 2) + 1; + move || { + *team_size = change; + } + })), + ] + .align(vec2(0.5, 0.5)), + row![ + text(translate("Level:"), &self.theme.font, 32.0, Color::GRAY) + .padding_right(32.0), + self.level_button.ui(Box::new({ + let current_option = &mut self.current_option; + let change = (*current_option + 1) % self.predefined_maps.len(); + move || { + *current_option = change; + } + })), + ] + .align(vec2(0.5, 0.5)), + // self.level_editor_button + // .ui(Box::new(move || { + // *request_level_editor = true; + // })) + // .align(vec2(0.5, 0.5)), + // self.properties.ui().fixed_size(vec2(300.0, 200.0)), + ]; + Box::new(ui) + } + } + + impl codegame::DeepConfig for OptionsConfig { + fn transition(&mut self) -> Option> { + // if self.request_level_editor { + // self.request_level_editor = false; + // return Some(Box::new(LevelEditor::new( + // &self.geng, + // &Rc::new(SimpleRenderer::new(&self.geng)), + // &self.theme, + // &self.custom_level, + // vec2(40, 30), + // ))); + // } + None + } + } +} +#[cfg(feature = "rendering")] +pub use config::OptionsConfig; diff --git a/app-src/src/model/properties.rs b/app-src/src/model/properties.rs new file mode 100644 index 0000000..e742285 --- /dev/null +++ b/app-src/src/model/properties.rs @@ -0,0 +1,109 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Trans, Schematic)] +pub struct Properties { + pub max_tick_count: usize, + pub team_size: usize, + pub ticks_per_second: R64, + pub updates_per_tick: usize, + pub loot_box_size: Vec2, + pub unit_size: Vec2, + pub unit_max_horizontal_speed: R64, + pub unit_fall_speed: R64, + pub unit_jump_time: R64, + pub unit_jump_speed: R64, + pub jump_pad_jump_time: R64, + pub jump_pad_jump_speed: R64, + pub unit_max_health: i32, + pub health_pack_health: i32, + pub weapon_params: HashMap, + pub mine_size: Vec2, + pub mine_explosion_params: ExplosionParams, + pub mine_prepare_time: R64, + pub mine_trigger_time: R64, + pub mine_trigger_radius: R64, + pub kill_score: usize, +} + +impl Default for Properties { + fn default() -> Self { + Self { + max_tick_count: 3_600, + team_size: 1, + ticks_per_second: r64(60.0), + #[cfg(target_arch = "wasm32")] + updates_per_tick: 1, + #[cfg(not(target_arch = "wasm32"))] + updates_per_tick: 100, + loot_box_size: vec2(r64(0.5), r64(0.5)), + unit_size: vec2(r64(0.9), r64(1.8)), + unit_max_horizontal_speed: r64(10.0), + unit_fall_speed: r64(10.0), + unit_jump_time: r64(0.55), + unit_jump_speed: r64(10.0), + jump_pad_jump_time: r64(0.525), + jump_pad_jump_speed: r64(20.0), + unit_max_health: 100, + health_pack_health: 50, + mine_size: vec2(r64(0.5), r64(0.5)), + mine_explosion_params: ExplosionParams { + radius: r64(3.0), + damage: 50, + }, + mine_prepare_time: r64(1.0), + mine_trigger_time: r64(0.5), + mine_trigger_radius: r64(1.0), + weapon_params: hashmap![ + WeaponType::Pistol => WeaponParams { + fire_rate: r64(0.4), + magazine_size: 8, + reload_time: r64(1.0), + min_spread: r64(0.05), + max_spread: r64(0.5), + recoil: r64(0.5), + aim_speed: r64(1.0), + bullet: BulletParams { + speed: r64(50.0), + size: r64(0.2), + damage: 20, + }, + explosion: None, + }, + WeaponType::AssaultRifle => WeaponParams { + fire_rate: r64(0.1), + magazine_size: 20, + reload_time: r64(1.0), + min_spread: r64(0.1), + max_spread: r64(0.5), + recoil: r64(0.2), + aim_speed: r64(1.9), + bullet: BulletParams { + speed: r64(50.0), + size: r64(0.2), + damage: 5, + }, + explosion: None, + }, + WeaponType::RocketLauncher => WeaponParams { + fire_rate: r64(1.0), + magazine_size: 1, + reload_time: r64(1.0), + min_spread: r64(0.1), + max_spread: r64(0.5), + recoil: r64(1.0), + aim_speed: r64(1.0), + bullet: BulletParams { + speed: r64(20.0), + size: r64(0.4), + damage: 30, + }, + explosion: Some(ExplosionParams{ + radius: r64(3.0), + damage: 50, + }), + }, + ], + kill_score: 1000, + } + } +} diff --git a/app-src/src/model/unit.rs b/app-src/src/model/unit.rs new file mode 100644 index 0000000..c3a529c --- /dev/null +++ b/app-src/src/model/unit.rs @@ -0,0 +1,64 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct JumpState { + pub can_jump: bool, + pub speed: R64, + pub max_time: R64, + pub can_cancel: bool, +} + +impl JumpState { + pub fn falling() -> Self { + Self { + can_jump: false, + speed: r64(0.0), + max_time: r64(0.0), + can_cancel: false, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct Unit { + pub player_id: Id, + pub id: Id, + pub health: i32, + pub position: Vec2, + pub size: Vec2, + pub jump_state: JumpState, + pub walked_right: bool, + pub stand: bool, + pub on_ground: bool, + pub on_ladder: bool, + pub mines: usize, + pub weapon: Option, +} + +impl Unit { + pub(crate) fn spawn(properties: &Properties, player_id: Id, position: Vec2) -> Self { + Self { + player_id, + id: Id::new(), + health: properties.unit_max_health, + position, + size: properties.unit_size, + jump_state: JumpState::falling(), + mines: 0, + weapon: None, + walked_right: true, + stand: true, + on_ground: false, + on_ladder: false, + } + } + pub fn rect(&self) -> AABB { + self.rect_at(self.position) + } + pub fn rect_at(&self, position: Vec2) -> AABB { + AABB::pos_size(position - vec2(self.size.x / r64(2.0), r64(0.0)), self.size) + } + pub fn center(&self) -> Vec2 { + self.position + vec2(r64(0.0), self.size.y / r64(2.0)) + } +} diff --git a/app-src/src/model/weapon.rs b/app-src/src/model/weapon.rs new file mode 100644 index 0000000..1c0fbed --- /dev/null +++ b/app-src/src/model/weapon.rs @@ -0,0 +1,137 @@ +use super::*; + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Trans, Schematic)] +pub struct ExplosionParams { + pub radius: R64, + pub damage: i32, +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Trans, Schematic)] +pub struct BulletParams { + pub speed: R64, + pub size: R64, + pub damage: i32, +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Trans, Schematic)] +pub struct WeaponParams { + pub magazine_size: usize, + pub fire_rate: R64, + pub reload_time: R64, + pub min_spread: R64, + pub max_spread: R64, + pub recoil: R64, + pub aim_speed: R64, + pub bullet: BulletParams, + pub explosion: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Copy, Eq, PartialEq, Hash, Trans, Schematic)] +pub enum WeaponType { + Pistol, + AssaultRifle, + RocketLauncher, +} + +#[derive(Debug, Serialize, Deserialize, Clone, Trans, Schematic)] +pub struct Weapon { + pub typ: WeaponType, + pub params: WeaponParams, + pub magazine: usize, + pub was_shooting: bool, + pub spread: R64, + pub fire_timer: Option, + pub last_angle: Option, + pub last_fire_tick: Option, +} + +impl Weapon { + pub fn new(properties: &Properties, typ: WeaponType) -> Self { + let params = properties.weapon_params.get(&typ).unwrap().clone(); + Self { + typ, + spread: params.min_spread, + magazine: params.magazine_size, + was_shooting: false, + fire_timer: Some(params.reload_time), + params, + last_angle: None, + last_fire_tick: None, + } + } + pub fn reload(&mut self) { + if self.magazine == self.params.magazine_size { + return; + } + self.fire_timer = Some(self.params.reload_time); + self.magazine = self.params.magazine_size; + } + pub fn set_shoot(&mut self, shoot: bool) { + self.was_shooting = shoot; + } + pub fn update(&mut self, delta_time: R64) { + self.spread = max( + self.spread - self.params.aim_speed * delta_time, + self.params.min_spread, + ); + if let Some(timer) = self.fire_timer { + let timer = timer - delta_time; + if timer > r64(0.0) { + self.fire_timer = Some(timer); + } else { + self.fire_timer = None; + } + } + } + pub fn aim(&mut self, direction: Vec2) { + let angle = direction.arg(); + if let Some(last_angle) = self.last_angle { + let mut extra_spread = angle - last_angle; + while extra_spread >= R64::PI { + extra_spread -= r64(2.0) * R64::PI; + } + while extra_spread < -R64::PI { + extra_spread += r64(2.0) * R64::PI; + } + extra_spread = extra_spread.abs(); + self.spread = min(self.spread + extra_spread, self.params.max_spread); + } + self.last_angle = Some(angle); + } + pub fn fire( + &mut self, + current_tick: usize, + unit_id: Id, + player_id: Id, + position: Vec2, + direction: Vec2, + rng: &mut dyn rand::RngCore, + ) -> Option { + if self.fire_timer.is_some() || self.magazine == 0 { + return None; + } + self.last_fire_tick = Some(current_tick); + self.magazine -= 1; + let direction = Vec2::rotated( + direction, + r64(distributions::Uniform::from(-self.spread.raw()..=self.spread.raw()).sample(rng)), + ); + self.spread = min(self.spread + self.params.recoil, self.params.max_spread); + if self.magazine == 0 { + self.magazine = self.params.magazine_size; + self.fire_timer = Some(self.params.reload_time); + } else { + self.fire_timer = Some(self.params.fire_rate); + } + Some(Bullet { + weapon_type: self.typ, + unit_id, + player_id, + position, + velocity: direction.normalize() * self.params.bullet.speed, + damage: self.params.bullet.damage, + size: self.params.bullet.size, + explosion_params: self.params.explosion.clone(), + }) + } +} diff --git a/app-src/src/quickstart_player.rs b/app-src/src/quickstart_player.rs new file mode 100644 index 0000000..a0ef59c --- /dev/null +++ b/app-src/src/quickstart_player.rs @@ -0,0 +1,145 @@ +use crate::*; + +pub struct QuickstartPlayer {} + +impl QuickstartPlayer { + pub fn new() -> Self { + Self {} + } +} + +impl codegame::Player for QuickstartPlayer { + fn get_action( + &mut self, + view: &model::PlayerView, + _custom_data_handler: Option<&dyn Fn(model::CustomData)>, + ) -> Result { + Ok(model::ActionWrapper::V1 { + actions: view + .game + .units + .iter() + .filter(|unit| unit.player_id == view.my_id) + .map(|unit| { + let nearest_enemy = view + .game + .units + .iter() + .filter(|other| other.player_id != unit.player_id) + .min_by(|a, b| { + std::cmp::PartialOrd::partial_cmp( + &(a.position - unit.position).len(), + &(b.position - unit.position).len(), + ) + .unwrap() + }); + let nearest_weapon = view + .game + .loot_boxes + .iter() + .filter(|loot| { + if let model::Item::Weapon { .. } = loot.item { + true + } else { + false + } + }) + .min_by(|a, b| { + std::cmp::PartialOrd::partial_cmp( + &(a.position - unit.position).len(), + &(b.position - unit.position).len(), + ) + .unwrap() + }); + let target_pos = if unit.weapon.is_none() { + nearest_weapon.map(|loot| loot.position) + } else { + nearest_enemy.map(|enemy| enemy.position) + } + .unwrap_or(unit.position); + let direction = if target_pos.x > unit.position.x { + 1 + } else { + -1 + }; + let jump = target_pos.y > unit.position.y + || view.game.level.get( + (unit.position.x.raw() as i32 + direction) as usize, + unit.position.y.raw() as usize, + ) == Some(&model::Tile::Wall); + ( + unit.id, + model::UnitAction { + velocity: target_pos.x - unit.position.x, + jump, + jump_down: !jump, + aim: nearest_enemy + .map(|enemy| enemy.position - unit.position) + .unwrap_or(vec2(r64(0.0), r64(0.0))), + shoot: true, + reload: false, + swap_weapon: false, + plant_mine: false, + }, + ) + }) + .collect(), + }) + } +} + +#[cfg(feature = "rendering")] +mod config { + use super::*; + + #[derive(Clone)] + pub struct Config { + geng: Rc, + theme: Rc, + } + + impl codegame::PlayerConfig for Config { + fn name(&self) -> &str { + "quickstart" + } + fn ui<'a>(&'a mut self) -> Box { + use ui::*; + let ui = ui::text( + translate("Quickstart strategy"), + &self.theme.font, + 16.0, + Color::GRAY, + ) + .align(vec2(0.5, 1.0)); + Box::new(ui) + } + fn ready(&mut self) -> bool { + true + } + fn get(&mut self) -> Box> { + Box::new(QuickstartPlayer::new()) + } + fn to_options(&self) -> PlayerOptions { + PlayerOptions::Quickstart + } + } + + impl Config { + pub fn new(geng: &Rc, theme: &Rc) -> Self { + Self { + geng: geng.clone(), + theme: theme.clone(), + } + } + pub fn constructor( + geng: &Rc, + theme: &Rc, + ) -> Box Box>> { + let geng = geng.clone(); + let theme = theme.clone(); + Box::new(move || Box::new(Self::new(&geng, &theme))) + } + } +} +#[cfg(feature = "rendering")] +pub use config::Config; diff --git a/app-src/src/random_player.rs b/app-src/src/random_player.rs new file mode 100644 index 0000000..cfe86a4 --- /dev/null +++ b/app-src/src/random_player.rs @@ -0,0 +1,138 @@ +use crate::*; + +pub struct RandomPlayer { + think_ticks: usize, + next_think: usize, + last_action: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct RandomPlayerOptions { + pub think_ticks: usize, +} + +impl RandomPlayer { + pub fn new(options: RandomPlayerOptions) -> Self { + Self { + think_ticks: options.think_ticks, + next_think: 0, + last_action: None, + } + } +} + +impl codegame::Player for RandomPlayer { + fn get_action( + &mut self, + view: &model::PlayerView, + _custom_data_handler: Option<&dyn Fn(model::CustomData)>, + ) -> Result { + if self.next_think == 0 || self.last_action.is_none() { + self.last_action = Some(model::ActionWrapper::V1 { + actions: view + .game + .units + .iter() + .filter(|unit| unit.player_id == view.my_id) + .map(|unit| { + ( + unit.id, + model::UnitAction { + velocity: r64(global_rng().gen_range( + -view.game.properties.unit_max_horizontal_speed.raw(), + view.game.properties.unit_max_horizontal_speed.raw(), + )), + jump: global_rng().gen(), + jump_down: global_rng().gen(), + aim: Vec2::rotated( + vec2(r64(1.0), r64(0.0)), + r64(global_rng().gen_range(0.0, 2.0 * std::f64::consts::PI)), + ), + shoot: global_rng().gen(), + reload: global_rng().gen(), + swap_weapon: global_rng().gen(), + plant_mine: global_rng().gen(), + }, + ) + }) + .collect(), + }); + self.next_think = self.think_ticks; + } + self.next_think -= 1; + Ok(self.last_action.clone().unwrap()) + } +} + +#[cfg(feature = "rendering")] +mod config { + use super::*; + + #[derive(Clone)] + pub struct Config { + geng: Rc, + theme: Rc, + slider: ui::Slider, + options: RandomPlayerOptions, + } + + impl codegame::PlayerConfig for Config { + fn name(&self) -> &str { + translate("random") + } + fn ui<'a>(&'a mut self) -> Box { + use ui::*; + let think_ticks = &mut self.options.think_ticks; + let ui = row![ + text( + translate("thinking speed"), + &self.theme.font, + 16.0, + Color::GRAY + ) + .padding_right(16.0), + self.slider + .ui( + *think_ticks as f64, + 1.0..=120.0, + Box::new(move |new_value| { + *think_ticks = new_value as usize; + }), + ) + .fixed_size(vec2(50.0, 16.0)), + ] + .align(vec2(0.5, 1.0)); + Box::new(ui) + } + fn ready(&mut self) -> bool { + true + } + fn get(&mut self) -> Box> { + Box::new(RandomPlayer::new(self.options.clone())) + } + fn to_options(&self) -> PlayerOptions { + PlayerOptions::Random(self.options.clone()) + } + } + + impl Config { + pub fn new(geng: &Rc, theme: &Rc) -> Self { + Self { + geng: geng.clone(), + theme: theme.clone(), + options: RandomPlayerOptions { think_ticks: 60 }, + slider: geng::ui::Slider::new(geng, theme), + } + } + pub fn constructor( + geng: &Rc, + theme: &Rc, + ) -> Box Box>> { + let geng = geng.clone(); + let theme = theme.clone(); + Box::new(move || Box::new(Self::new(&geng, &theme))) + } + } +} +#[cfg(feature = "rendering")] +pub use config::Config; diff --git a/app-src/src/renderer/background.rs b/app-src/src/renderer/background.rs new file mode 100644 index 0000000..1654950 --- /dev/null +++ b/app-src/src/renderer/background.rs @@ -0,0 +1,63 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "city.png")] + city: ugli::Texture, + #[asset(path = "cloud.png")] + cloud: ugli::Texture, +} + +pub struct BackgroundRenderer { + geng: Rc, + assets: Assets, +} + +impl BackgroundRenderer { + const CLOUDS_Y: f32 = 160.0 / 576.0; + const CLOUD_SPEED: f32 = 1.0 / 60.0; + pub fn new(geng: &Rc, mut assets: Assets) -> Self { + assets.city.set_filter(ugli::Filter::Nearest); + assets.cloud.set_filter(ugli::Filter::Nearest); + Self { + geng: geng.clone(), + assets, + } + } + pub fn draw(&mut self, framebuffer: &mut ugli::Framebuffer, game: &model::Game) { + let framebuffer_size = framebuffer.size().map(|x| x as f32); + self.geng.draw_2d().textured_quad( + framebuffer, + AABB::pos_size(vec2(0.0, 0.0), framebuffer_size), + &self.assets.city, + Color::WHITE, + ); + let pos = (game.current_tick as f32 / game.properties.ticks_per_second.raw() as f32 + * Self::CLOUD_SPEED) + .fract(); + self.geng.draw_2d().textured_quad( + framebuffer, + AABB::pos_size( + vec2( + pos * framebuffer_size.x, + framebuffer_size.y * (1.0 - Self::CLOUDS_Y), + ), + vec2(framebuffer_size.x, framebuffer_size.y * Self::CLOUDS_Y), + ), + &self.assets.cloud, + Color::WHITE, + ); + self.geng.draw_2d().textured_quad( + framebuffer, + AABB::pos_size( + vec2( + pos * framebuffer_size.x - framebuffer_size.x, + framebuffer_size.y * (1.0 - Self::CLOUDS_Y), + ), + vec2(framebuffer_size.x, framebuffer_size.y * Self::CLOUDS_Y), + ), + &self.assets.cloud, + Color::WHITE, + ); + } +} diff --git a/app-src/src/renderer/bullet.rs b/app-src/src/renderer/bullet.rs new file mode 100644 index 0000000..914facf --- /dev/null +++ b/app-src/src/renderer/bullet.rs @@ -0,0 +1,24 @@ +use super::*; + +pub struct BulletRenderer { + simple_renderer: Rc, +} + +impl BulletRenderer { + pub fn new(simple_renderer: &Rc) -> Self { + Self { + simple_renderer: simple_renderer.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + for bullet in &game.bullets { + self.simple_renderer + .quad(framebuffer, camera, bullet.rect(), Color::WHITE); + } + } +} diff --git a/app-src/src/renderer/camera.rs b/app-src/src/renderer/camera.rs new file mode 100644 index 0000000..34b0a8b --- /dev/null +++ b/app-src/src/renderer/camera.rs @@ -0,0 +1,47 @@ +use super::*; + +pub struct Camera { + pub center: Vec2, + pub fov: R64, +} + +impl Camera { + pub fn new() -> Self { + Self { + center: vec2(r64(0.0), r64(0.0)), + fov: r64(100.0), + } + } + fn view_matrix(&self) -> Mat4 { + Mat4::scale_uniform(r64(1.0) / self.fov) * Mat4::translate(-self.center.extend(r64(0.0))) + } + fn projection_matrix(&self, framebuffer: &ugli::Framebuffer) -> Mat4 { + let framebuffer_size = framebuffer.size().map(|x| r64(x as _)); + Mat4::scale(vec3(framebuffer_size.y / framebuffer_size.x, r64(1.0), r64(1.0)) * r64(2.0)) + } + pub fn uniforms(&self, framebuffer: &ugli::Framebuffer) -> impl ugli::Uniforms { + ugli::uniforms! { + u_projection_matrix: self.projection_matrix(framebuffer).map(|x| x.raw() as f32), + u_view_matrix: self.view_matrix().map(|x| x.raw() as f32), + } + } + pub fn screen_to_world(&self, framebuffer: &ugli::Framebuffer, pos: Vec2) -> Vec2 { + let framebuffer_size = framebuffer.size().map(|x| r64(x as _)); + let pos = vec2( + pos.x / framebuffer_size.x * r64(2.0) - r64(1.0), + pos.y / framebuffer_size.y * r64(2.0) - r64(1.0), + ); + let pos = (self.projection_matrix(framebuffer) * self.view_matrix()).inverse() + * pos.extend(r64(0.0)).extend(r64(1.0)); + pos.xy() + } + pub fn world_to_screen(&self, framebuffer: &ugli::Framebuffer, pos: Vec2) -> Vec2 { + let framebuffer_size = framebuffer.size().map(|x| r64(x as _)); + let pos = (self.projection_matrix(framebuffer) * self.view_matrix()) + * pos.extend(r64(0.0)).extend(r64(1.0)); + vec2( + (pos.x + r64(1.0)) / r64(2.0) * framebuffer_size.x, + (pos.y + r64(1.0)) / r64(2.0) * framebuffer_size.y, + ) + } +} diff --git a/app-src/src/renderer/custom/mod.rs b/app-src/src/renderer/custom/mod.rs new file mode 100644 index 0000000..109ff34 --- /dev/null +++ b/app-src/src/renderer/custom/mod.rs @@ -0,0 +1,152 @@ +use super::*; + +use model::ColoredVertex as Vertex; + +pub struct CustomRenderer { + geng: Rc, + program: ugli::Program, + geometry: ugli::VertexBuffer, +} + +impl CustomRenderer { + pub fn new(geng: &Rc) -> Self { + Self { + geng: geng.clone(), + program: geng + .shader_lib() + .compile(include_str!("program.glsl")) + .unwrap(), + geometry: ugli::VertexBuffer::new_dynamic(geng.ugli(), Vec::new()), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera_uniforms: impl ugli::Uniforms, + geometry: &[Vertex], + ) { + self.geometry.clear(); + self.geometry.extend_from_slice(geometry); + ugli::draw( + framebuffer, + &self.program, + ugli::DrawMode::TriangleFan, + &self.geometry, + camera_uniforms, + ugli::DrawParameters { + blend_mode: Some(default()), + ..default() + }, + ); + } + + pub fn draw_all( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + custom_data: &HashMap>, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + let mut y = framebuffer.size().y as f32 - 100.0; + for player_custom_data in custom_data.values() { + for data in player_custom_data { + match *data { + model::CustomData::Log { ref text } => { + self.geng.default_font().draw( + framebuffer, + text, + vec2(10.0, y), + 20.0, + Color::WHITE, + ); + y += 20.0; + } + model::CustomData::PlacedText { + ref text, + pos, + size, + alignment, + color, + } => { + if size > 1.0 { + let pos = camera + .world_to_screen(framebuffer, pos.map(|x| r64(x as f64))) + .map(|x| x.raw() as f32); + let align = match alignment { + model::TextAlignment::Left => 0.0, + model::TextAlignment::Center => 0.5, + model::TextAlignment::Right => 1.0, + }; + self.geng.default_font().draw_aligned( + framebuffer, + text, + pos, + align, + size, + color, + ); + } + } + model::CustomData::Rect { pos, size, color } => { + self.draw( + framebuffer, + &camera_uniforms, + &[ + Vertex { + position: pos, + color, + }, + Vertex { + position: pos + vec2(size.x, 0.0), + color, + }, + Vertex { + position: pos + size, + color, + }, + Vertex { + position: pos + vec2(0.0, size.y), + color, + }, + ], + ); + } + model::CustomData::Line { + p1, + p2, + width, + color, + } => { + let n = (p2 - p1).rotate_90().normalize(); + let width = width / 2.0; + self.draw( + framebuffer, + &camera_uniforms, + &[ + Vertex { + position: p1 + n * width, + color, + }, + Vertex { + position: p2 + n * width, + color, + }, + Vertex { + position: p2 - n * width, + color, + }, + Vertex { + position: p1 - n * width, + color, + }, + ], + ); + } + model::CustomData::Polygon { ref vertices } => { + self.draw(framebuffer, &camera_uniforms, vertices); + } + } + } + } + } +} diff --git a/app-src/src/renderer/custom/program.glsl b/app-src/src/renderer/custom/program.glsl new file mode 100644 index 0000000..aa871f1 --- /dev/null +++ b/app-src/src/renderer/custom/program.glsl @@ -0,0 +1,20 @@ +varying vec4 v_color; + +#ifdef VERTEX_SHADER +attribute vec2 position; +attribute vec4 color; + +uniform mat4 u_projection_matrix; +uniform mat4 u_view_matrix; + +void main() { + v_color = color; + gl_Position = u_projection_matrix * u_view_matrix * vec4(position, 0.0, 1.0); +} +#endif + +#ifdef FRAGMENT_SHADER +void main() { + gl_FragColor = v_color; +} +#endif \ No newline at end of file diff --git a/app-src/src/renderer/fancy_bullet.rs b/app-src/src/renderer/fancy_bullet.rs new file mode 100644 index 0000000..7bc0815 --- /dev/null +++ b/app-src/src/renderer/fancy_bullet.rs @@ -0,0 +1,44 @@ +use super::*; + +pub struct FancyBulletRenderer { + sprite_renderer: Rc, + weapon_assets: Rc, +} + +impl FancyBulletRenderer { + pub fn new( + sprite_renderer: &Rc, + weapon_assets: &Rc, + ) -> Self { + Self { + sprite_renderer: sprite_renderer.clone(), + weapon_assets: weapon_assets.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + for bullet in &game.bullets { + let texture = match bullet.weapon_type { + model::WeaponType::Pistol => &self.weapon_assets.pistol_bullet, + model::WeaponType::AssaultRifle => &self.weapon_assets.assault_rifle_bullet, + model::WeaponType::RocketLauncher => &self.weapon_assets.rocket_launcher_bullet, + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + vec2(0.5, 0.5), + 0.04, + bullet.position.map(|x| x.raw() as f32), + bullet.velocity.arg().raw() as f32, + false, + Color::WHITE, + ); + } + } +} diff --git a/app-src/src/renderer/fancy_explosion.rs b/app-src/src/renderer/fancy_explosion.rs new file mode 100644 index 0000000..f8e482e --- /dev/null +++ b/app-src/src/renderer/fancy_explosion.rs @@ -0,0 +1,61 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "explosion.png")] + pub explosion: ugli::Texture, +} + +impl Assets { + fn setup(&mut self) { + self.explosion.set_filter(ugli::Filter::Nearest); + } +} + +pub struct FancyExplosionRenderer { + sprite_renderer: Rc, + assets: Assets, +} + +impl FancyExplosionRenderer { + const DURATION: f32 = 0.2; + pub fn new(sprite_renderer: &Rc, mut assets: Assets) -> Self { + assets.setup(); + Self { + sprite_renderer: sprite_renderer.clone(), + assets, + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + explosions: &[Explosion], + game: &model::Game, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + let texture = &self.assets.explosion; + let texture_size = texture.size().map(|x| x as f32); + for explosion in explosions { + let size = 2.0 * explosion.params.radius.raw() as f32 / texture_size.y; + let t = (game.current_tick - explosion.tick) as f32 + / game.properties.ticks_per_second.raw() as f32 + / Self::DURATION; + if t > 1.0 { + continue; + } + let size = size * t; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + vec2(0.5, 0.5), + size, + explosion.position.map(|x| x.raw() as f32), + 0.0, + false, + Color::rgba(1.0, 1.0, 1.0, 1.0 - t), + ); + } + } +} diff --git a/app-src/src/renderer/fancy_level/mod.rs b/app-src/src/renderer/fancy_level/mod.rs new file mode 100644 index 0000000..3785e1b --- /dev/null +++ b/app-src/src/renderer/fancy_level/mod.rs @@ -0,0 +1,387 @@ +use super::*; + +#[derive(geng::Assets)] +#[allow(non_snake_case)] +pub struct Assets { + #[asset(path = "jumper_1.png")] + jumper_1: ugli::Texture, + #[asset(path = "jumper_2.png")] + jumper_2: ugli::Texture, + #[asset(path = "jumper_3.png")] + jumper_3: ugli::Texture, + #[asset(path = "wall_down_L.png")] + wall_down_L: ugli::Texture, + #[asset(path = "wall_down_R.png")] + wall_down_R: ugli::Texture, + #[asset(path = "wall_down_C.png")] + wall_down_C: ugli::Texture, + #[asset(path = "wall_down_solo.png")] + wall_down_solo: ugli::Texture, + #[asset(path = "wall_L.png")] + wall_L: ugli::Texture, + #[asset(path = "wall_C.png")] + wall_C: ugli::Texture, + #[asset(path = "wall_R.png")] + wall_R: ugli::Texture, + #[asset(path = "wall_solo.png")] + wall_solo: ugli::Texture, + #[asset(path = "window_L.png")] + window_L: ugli::Texture, + #[asset(path = "window_R.png")] + window_R: ugli::Texture, + #[asset(path = "window_C.png")] + window_C: ugli::Texture, + #[asset(path = "window_solo.png")] + window_solo: ugli::Texture, + #[asset(path = "railing_L.png")] + railing_L: ugli::Texture, + #[asset(path = "railing_C.png")] + railing_C: ugli::Texture, + #[asset(path = "railing_R.png")] + railing_R: ugli::Texture, + #[asset(path = "platform_C.png")] + platform_C: ugli::Texture, + #[asset(path = "platform_L.png")] + platform_L: ugli::Texture, + #[asset(path = "platform_R.png")] + platform_R: ugli::Texture, + #[asset(path = "platform_solo.png")] + platform_solo: ugli::Texture, + #[asset(path = "floor_1.png")] + floor_1: ugli::Texture, + #[asset(path = "floor_2.png")] + floor_2: ugli::Texture, + #[asset(path = "door.png")] + door: ugli::Texture, + #[asset(path = "platform_small_L.png")] + platform_small_L: ugli::Texture, + #[asset(path = "platform_small_C.png")] + platform_small_C: ugli::Texture, + #[asset(path = "platform_small_R.png")] + platform_small_R: ugli::Texture, + #[asset(path = "platform_small_solo.png")] + platform_small_solo: ugli::Texture, + #[asset(path = "stairs.png")] + stairs: ugli::Texture, +} + +#[allow(non_snake_case)] +struct TextureAtlas { + atlas: geng::TextureAtlas, + jumper_1: usize, + jumper_2: usize, + jumper_3: usize, + wall_down_L: usize, + wall_down_R: usize, + wall_down_C: usize, + wall_down_solo: usize, + wall_L: usize, + wall_C: usize, + wall_R: usize, + wall_solo: usize, + window_L: usize, + window_R: usize, + window_C: usize, + window_solo: usize, + railing_L: usize, + railing_C: usize, + railing_R: usize, + platform_C: usize, + platform_L: usize, + platform_R: usize, + platform_solo: usize, + floor_1: usize, + floor_2: usize, + door: usize, + platform_small_L: usize, + platform_small_C: usize, + platform_small_R: usize, + platform_small_solo: usize, + stairs: usize, +} + +impl TextureAtlas { + fn new(ugli: &Rc, assets: Assets) -> Self { + let mut atlas = geng::TextureAtlas::new( + ugli, + &[ + &assets.jumper_1, + &assets.jumper_2, + &assets.jumper_3, + &assets.wall_down_L, + &assets.wall_down_R, + &assets.wall_down_C, + &assets.wall_down_solo, + &assets.wall_L, + &assets.wall_C, + &assets.wall_R, + &assets.wall_solo, + &assets.window_L, + &assets.window_R, + &assets.window_C, + &assets.window_solo, + &assets.railing_L, + &assets.railing_C, + &assets.railing_R, + &assets.platform_C, + &assets.platform_L, + &assets.platform_R, + &assets.platform_solo, + &assets.floor_1, + &assets.floor_2, + &assets.door, + &assets.platform_small_L, + &assets.platform_small_C, + &assets.platform_small_R, + &assets.platform_small_solo, + &assets.stairs, + ], + ); + atlas.set_filter(ugli::Filter::Nearest); + Self { + atlas, + jumper_1: 0, + jumper_2: 1, + jumper_3: 2, + wall_down_L: 3, + wall_down_R: 4, + wall_down_C: 5, + wall_down_solo: 6, + wall_L: 7, + wall_C: 8, + wall_R: 9, + wall_solo: 10, + window_L: 11, + window_R: 12, + window_C: 13, + window_solo: 14, + railing_L: 15, + railing_C: 16, + railing_R: 17, + platform_C: 18, + platform_L: 19, + platform_R: 20, + platform_solo: 21, + floor_1: 22, + floor_2: 23, + door: 24, + platform_small_L: 25, + platform_small_C: 26, + platform_small_R: 27, + platform_small_solo: 28, + stairs: 29, + } + } +} + +#[derive(ugli::Vertex)] +struct Vertex { + a_pos: Vec2, +} + +#[derive(ugli::Vertex)] +struct Instance { + i_pos: Vec2, + i_color: Color, + i_uv_pos: Vec2, + i_uv_size: Vec2, +} + +pub struct FancyLevelRenderer { + program: ugli::Program, + texture_atlas: TextureAtlas, + vertices: ugli::VertexBuffer, + instances: ugli::VertexBuffer, +} + +impl FancyLevelRenderer { + const JUMP_PAD_ANIMATION_TIME: f32 = 0.2; + pub fn new(geng: &Rc, assets: Assets) -> Self { + Self { + program: geng + .shader_lib() + .compile(include_str!("program.glsl")) + .unwrap(), + texture_atlas: TextureAtlas::new(geng.ugli(), assets), + vertices: ugli::VertexBuffer::new_static( + geng.ugli(), + vec![ + Vertex { + a_pos: vec2(0.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 1.0), + }, + Vertex { + a_pos: vec2(0.0, 1.0), + }, + ], + ), + instances: ugli::VertexBuffer::new_dynamic(geng.ugli(), Vec::new()), + } + } + fn add_quad(&mut self, x: usize, y: usize, texture: usize) { + self.add_colored_quad(x, y, texture, Color::WHITE); + } + fn add_colored_quad(&mut self, x: usize, y: usize, texture: usize, color: Color) { + let uv_rect = self.texture_atlas.atlas.uv(texture); + self.instances.push(Instance { + i_pos: vec2(x as f32, y as f32), + i_color: color, + i_uv_pos: uv_rect.bottom_left(), + i_uv_size: uv_rect.size(), + }); + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + level: &model::Level, + game: Option<&model::Game>, + extra_data: Option<&RendererExtraData>, + ) { + self.instances.clear(); + let mut has_ceiling = vec![false; level.size().x]; + for y in (0..level.size().y - 1).rev() { + for x in 1..level.size().x - 1 { + if level.get(x, y) == Some(&model::Tile::Wall) { + has_ceiling[x] = true; + } + } + for x in 0..level.size().x { + if has_ceiling[x] { + let has_left = x > 0 && has_ceiling[x - 1]; + let has_right = has_ceiling.get(x + 1) == Some(&true); + let texture = + if y == 1 || y > 0 && level.get(x, y - 1) == Some(&model::Tile::Wall) { + match (has_left, has_right) { + (true, true) => self.texture_atlas.wall_down_C, + (true, false) => self.texture_atlas.wall_down_R, + (false, true) => self.texture_atlas.wall_down_L, + (false, false) => self.texture_atlas.wall_down_solo, + } + } else { + match (has_left, has_right) { + (true, true) => self.texture_atlas.wall_C, + (true, false) => self.texture_atlas.wall_R, + (false, true) => self.texture_atlas.wall_L, + (false, false) => self.texture_atlas.wall_solo, + } + }; + self.add_quad(x, y, texture); + } + } + } + for (pos, tile) in level { + if pos.y == 0 { + let texture = if pos.x % 3 == 0 { + self.texture_atlas.floor_1 + } else { + self.texture_atlas.floor_2 + }; + self.add_quad(pos.x, pos.y, texture); + continue; + } else if pos.x == 0 || pos.x + 1 == level.size().x || pos.y + 1 == level.size().y { + continue; + } + match tile { + model::Tile::Empty => {} + model::Tile::Wall => { + let has_left = + pos.x > 0 && level.get(pos.x - 1, pos.y) == Some(&model::Tile::Wall); + let has_right = level.get(pos.x + 1, pos.y) == Some(&model::Tile::Wall); + let texture = match (has_left, has_right) { + (true, true) => self.texture_atlas.platform_C, + (true, false) => self.texture_atlas.platform_R, + (false, true) => self.texture_atlas.platform_L, + (false, false) => self.texture_atlas.platform_solo, + }; + self.add_quad(pos.x, pos.y, texture); + } + model::Tile::Platform => { + let has_left = + pos.x > 0 && level.get(pos.x - 1, pos.y) == Some(&model::Tile::Platform); + let has_right = level.get(pos.x + 1, pos.y) == Some(&model::Tile::Platform); + let texture = match (has_left, has_right) { + (true, true) => self.texture_atlas.platform_small_C, + (true, false) => self.texture_atlas.platform_small_R, + (false, true) => self.texture_atlas.platform_small_L, + (false, false) => self.texture_atlas.platform_small_solo, + }; + self.add_quad(pos.x, pos.y, texture); + } + model::Tile::Ladder => {} + model::Tile::JumpPad => {} + } + } + for y in (2..level.size().y).rev() { + let mut has_rail = vec![false; level.size().x]; + for x in 0..level.size().x { + has_rail[x] = level.get(x, y) != Some(&model::Tile::Wall) + && y > 0 + && level.get(x, y - 1) == Some(&model::Tile::Wall); + } + for x in 0..level.size().x { + if has_rail[x] { + let has_left = x > 0 && has_rail[x - 1]; + let has_right = has_rail.get(x + 1) == Some(&true); + let texture = match (has_left, has_right) { + (true, true) => self.texture_atlas.railing_C, + (true, false) => self.texture_atlas.railing_R, + (false, true) => self.texture_atlas.railing_L, + (false, false) => continue, + }; + self.add_quad(x, y, texture); + } + } + } + for (pos, tile) in level { + match tile { + model::Tile::Ladder => { + self.add_quad(pos.x, pos.y, self.texture_atlas.stairs); + } + model::Tile::JumpPad => { + let mut texture = self.texture_atlas.jumper_1; + if let Some(game) = game { + if let Some(last_used_tick) = extra_data.and_then(|extra_data| { + extra_data.level_last_used_tick.get(&pos).copied() + }) { + let t = ((game.current_tick as f32 - 1.0 - last_used_tick as f32) + / game.properties.ticks_per_second.raw() as f32 + / Self::JUMP_PAD_ANIMATION_TIME) + .min(1.0); + let t = if t < 0.0 { 1.0 } else { t }; + if t < 0.33 { + texture = self.texture_atlas.jumper_3; + } else if t < 0.66 { + texture = self.texture_atlas.jumper_2; + } + } + } + self.add_quad(pos.x, pos.y, texture); + } + _ => {} + } + } + let camera_uniforms = camera.uniforms(framebuffer); + ugli::draw( + framebuffer, + &self.program, + ugli::DrawMode::TriangleFan, + ugli::instanced(&self.vertices, &self.instances), + ( + camera_uniforms, + ugli::uniforms! { + u_texture: self.texture_atlas.atlas.texture(), + }, + ), + ugli::DrawParameters { + blend_mode: Some(default()), + ..default() + }, + ); + } +} diff --git a/app-src/src/renderer/fancy_level/program.glsl b/app-src/src/renderer/fancy_level/program.glsl new file mode 100644 index 0000000..295fbd4 --- /dev/null +++ b/app-src/src/renderer/fancy_level/program.glsl @@ -0,0 +1,27 @@ +varying vec4 v_color; +varying vec2 v_uv; + +#ifdef VERTEX_SHADER +attribute vec2 a_pos; + +attribute vec2 i_pos; +attribute vec4 i_color; +attribute vec2 i_uv_pos; +attribute vec2 i_uv_size; + +uniform mat4 u_projection_matrix; +uniform mat4 u_view_matrix; + +void main() { + v_color = i_color; + v_uv = i_uv_pos + vec2(a_pos.x, 1.0 - a_pos.y) * i_uv_size; + gl_Position = u_projection_matrix * u_view_matrix * vec4(i_pos + a_pos, 0.0, 1.0); +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D u_texture; +void main() { + gl_FragColor = texture2D(u_texture, v_uv) * v_color; +} +#endif \ No newline at end of file diff --git a/app-src/src/renderer/fancy_loot.rs b/app-src/src/renderer/fancy_loot.rs new file mode 100644 index 0000000..a7f2cfd --- /dev/null +++ b/app-src/src/renderer/fancy_loot.rs @@ -0,0 +1,70 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "health_pack.png")] + pub health_pack: ugli::Texture, + #[asset(path = "mine.png")] + pub mine: ugli::Texture, + #[asset(path = "pistol.png")] + pub pistol: ugli::Texture, + #[asset(path = "assault_rifle.png")] + pub assault_rifle: ugli::Texture, + #[asset(path = "rocket_launcher.png")] + pub rocket_launcher: ugli::Texture, +} + +impl Assets { + fn setup(&mut self) { + self.health_pack.set_filter(ugli::Filter::Nearest); + self.mine.set_filter(ugli::Filter::Nearest); + self.pistol.set_filter(ugli::Filter::Nearest); + self.assault_rifle.set_filter(ugli::Filter::Nearest); + self.rocket_launcher.set_filter(ugli::Filter::Nearest); + } +} + +pub struct FancyLootRenderer { + sprite_renderer: Rc, + assets: Assets, +} + +impl FancyLootRenderer { + pub fn new(sprite_renderer: &Rc, mut assets: Assets) -> Self { + assets.setup(); + Self { + sprite_renderer: sprite_renderer.clone(), + assets, + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + for loot_box in &game.loot_boxes { + let texture = match &loot_box.item { + model::Item::HealthPack { .. } => &self.assets.health_pack, + model::Item::Weapon { weapon_type } => match weapon_type { + model::WeaponType::Pistol => &self.assets.pistol, + model::WeaponType::AssaultRifle => &self.assets.assault_rifle, + model::WeaponType::RocketLauncher => &self.assets.rocket_launcher, + }, + model::Item::Mine {} => &self.assets.mine, + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + vec2(0.5, 0.0), + 0.04, + loot_box.position.map(|x| x.raw() as f32), + 0.0, + false, + Color::WHITE, + ); + } + } +} diff --git a/app-src/src/renderer/fancy_mine.rs b/app-src/src/renderer/fancy_mine.rs new file mode 100644 index 0000000..f7d4655 --- /dev/null +++ b/app-src/src/renderer/fancy_mine.rs @@ -0,0 +1,62 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "idle.png")] + idle: ugli::Texture, + #[asset(path = "preparing.png")] + preparing: ugli::Texture, + #[asset(path = "triggered.png")] + triggered: ugli::Texture, +} + +impl Assets { + fn setup(&mut self) { + self.idle.set_filter(ugli::Filter::Nearest); + self.preparing.set_filter(ugli::Filter::Nearest); + self.triggered.set_filter(ugli::Filter::Nearest); + } +} + +pub struct FancyMineRenderer { + sprite_renderer: Rc, + assets: Assets, +} + +impl FancyMineRenderer { + pub fn new(sprite_renderer: &Rc, mut assets: Assets) -> Self { + assets.setup(); + Self { + sprite_renderer: sprite_renderer.clone(), + assets, + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + for mine in &game.mines { + let texture = match mine.state { + model::MineState::Preparing { .. } => &self.assets.preparing, + model::MineState::Idle => &self.assets.idle, + model::MineState::Triggered { .. } | model::MineState::Exploded => { + &self.assets.triggered + } + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + vec2(0.5, 0.0), + 0.04, + mine.position.map(|x| x.raw() as f32), + 0.0, + false, + Color::WHITE, + ); + } + } +} diff --git a/app-src/src/renderer/fancy_unit.rs b/app-src/src/renderer/fancy_unit.rs new file mode 100644 index 0000000..3a91f9c --- /dev/null +++ b/app-src/src/renderer/fancy_unit.rs @@ -0,0 +1,251 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct PlayerAssets { + #[asset(path = "jump/*.png", range = "1..=3")] + jump: Vec, + #[asset(path = "rise/*.png", range = "1..=6")] + rise: Vec, + #[asset(path = "walk/*.png", range = "1..=6")] + walk: Vec, + #[asset(path = "hand.png")] + hand: ugli::Texture, + #[asset(path = "head.png")] + head: ugli::Texture, + #[asset(path = "stay.png")] + stay: ugli::Texture, +} + +impl PlayerAssets { + fn setup(&mut self) { + self.head.set_filter(ugli::Filter::Nearest); + self.hand.set_filter(ugli::Filter::Nearest); + self.stay.set_filter(ugli::Filter::Nearest); + for texture in &mut self.jump { + texture.set_filter(ugli::Filter::Nearest); + } + for texture in &mut self.rise { + texture.set_filter(ugli::Filter::Nearest); + } + for texture in &mut self.walk { + texture.set_filter(ugli::Filter::Nearest); + } + } +} + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "*", range = "1..=3")] + players: Vec, +} + +impl Assets { + fn setup(&mut self) { + for player in &mut self.players { + player.setup(); + } + } +} + +pub struct FancyUnitRenderer { + simple_renderer: Rc, + sprite_renderer: Rc, + assets: Assets, + weapon_assets: Rc, +} + +impl FancyUnitRenderer { + const ANIMATION_SPEED: f64 = 1.2; + pub fn new( + geng: &Rc, + simple_renderer: &Rc, + sprite_renderer: &Rc, + mut assets: Assets, + weapon_assets: &Rc, + ) -> Self { + assets.setup(); + Self { + simple_renderer: simple_renderer.clone(), + sprite_renderer: sprite_renderer.clone(), + assets, + weapon_assets: weapon_assets.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + let camera_uniforms = camera.uniforms(framebuffer); + for unit in &game.units { + let player_assets = &self.assets.players[unit.id.raw() % self.assets.players.len()]; + let texture = &player_assets.walk[0]; + let mut angle = unit + .weapon + .as_ref() + .and_then(|weapon| weapon.last_angle) + .map(|angle| angle.raw() as f32) + .unwrap_or(if unit.walked_right { + 0.0 + } else { + std::f32::consts::PI + }); + let flip = angle > std::f32::consts::PI / 2.0 || angle < -std::f32::consts::PI / 2.0; + if flip { + if angle < 0.0 { + angle = angle + std::f32::consts::PI; + } else { + angle = angle - std::f32::consts::PI; + } + } + let height = unit.size.y.raw() as f32 * 0.6; + let texture_scale = height / texture.size().y as f32; + // body + { + let mut y_off = 0.0; + let texture = if unit.on_ladder { + y_off = height * 0.8; + let index = (unit.position.y.raw() * Self::ANIMATION_SPEED) as usize + % player_assets.rise.len(); + &player_assets.rise[index] + } else if unit.on_ground { + if unit.stand { + &player_assets.stay + } else { + let index = (unit.position.x.raw() * Self::ANIMATION_SPEED) as usize + % player_assets.walk.len(); + &player_assets.walk[index] + } + } else { + &player_assets.jump[if unit.jump_state.can_jump { 0 } else { 2 }] + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + vec2(0.5, 1.0), + texture_scale, + vec2( + unit.position.x.raw() as f32, + unit.position.y.raw() as f32 + + unit.size.y.raw() as f32 * 0.6 + + y_off as f32, + ), + 0.0, + flip, + Color::WHITE, + ); + } + // head + { + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + &player_assets.head, + vec2(0.5, 0.3), + texture_scale, + vec2( + unit.position.x.raw() as f32, + unit.position.y.raw() as f32 + unit.size.y.raw() as f32 * 0.75, + ), + angle / 2.0, + flip, + Color::WHITE, + ); + } + // weapon + if let Some(weapon) = &unit.weapon { + let (texture, origin) = match weapon.typ { + model::WeaponType::Pistol => (&self.weapon_assets.pistol, vec2(-0.3, 0.8)), + model::WeaponType::AssaultRifle => { + (&self.weapon_assets.assault_rifle, vec2(-0.2, 0.6)) + } + model::WeaponType::RocketLauncher => { + (&self.weapon_assets.rocket_launcher, vec2(0.3, 0.5)) + } + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + origin, + texture_scale, + vec2( + unit.position.x.raw() as f32 + - if flip { -1.0 } else { 1.0 } * unit.size.x.raw() as f32 * 0.1, + unit.position.y.raw() as f32 + unit.size.y.raw() as f32 * 0.55, + ), + angle, + flip, + Color::WHITE, + ); + if let Some(tick) = weapon.last_fire_tick { + let muzzle_flash_index = (game.current_tick - tick) / 2; + if muzzle_flash_index < 2 { + let (texture, origin) = match weapon.typ { + model::WeaponType::Pistol => { + (&self.weapon_assets.pistol_muzzle_flash, vec2(-0.9, 0.5)) + } + model::WeaponType::AssaultRifle => ( + &self.weapon_assets.assault_rifle_muzzle_flash[muzzle_flash_index], + vec2(-1.2, 0.5), + ), + model::WeaponType::RocketLauncher => ( + &self.weapon_assets.rocket_launcher_muzzle_flash, + vec2(-1.8, 0.5), + ), + }; + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + texture, + origin, + texture_scale, + vec2( + unit.position.x.raw() as f32 + - if flip { -1.0 } else { 1.0 } + * unit.size.x.raw() as f32 + * 0.1, + unit.position.y.raw() as f32 + unit.size.y.raw() as f32 * 0.55, + ), + angle, + flip, + Color::WHITE, + ); + } + } + } + //hand + self.sprite_renderer.draw( + framebuffer, + &camera_uniforms, + &player_assets.hand, + vec2(0.1, 0.9), + texture_scale, + vec2( + unit.position.x.raw() as f32 + - if flip { -1.0 } else { 1.0 } * unit.size.x.raw() as f32 * 0.1, + unit.position.y.raw() as f32 + unit.size.y.raw() as f32 * 0.55, + ), + angle, + flip, + Color::WHITE, + ); + self.simple_renderer.quad( + framebuffer, + camera, + AABB::pos_size( + unit.position - vec2(unit.size.x / r64(2.0), r64(0.0)), + vec2( + unit.size.x, + unit.size.y + * (r64(1.0) + - r64(unit.health as f64 / game.properties.unit_max_health as f64)), + ), + ), + Color::rgba(1.0, 0.0, 0.0, 0.5), + ); + } + } +} diff --git a/app-src/src/renderer/fancy_weapon.rs b/app-src/src/renderer/fancy_weapon.rs new file mode 100644 index 0000000..f9e665d --- /dev/null +++ b/app-src/src/renderer/fancy_weapon.rs @@ -0,0 +1,41 @@ +use super::*; + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "assault_rifle/gun.png")] + pub assault_rifle: ugli::Texture, + #[asset(path = "assault_rifle/bullet.png")] + pub assault_rifle_bullet: ugli::Texture, + #[asset(path = "assault_rifle/muzzle_flash_*.png", range = "1..=2")] + pub assault_rifle_muzzle_flash: Vec, + #[asset(path = "pistol/gun.png")] + pub pistol: ugli::Texture, + #[asset(path = "pistol/bullet.png")] + pub pistol_bullet: ugli::Texture, + #[asset(path = "pistol/muzzle_flash.png")] + pub pistol_muzzle_flash: ugli::Texture, + #[asset(path = "rocket_launcher/gun.png")] + pub rocket_launcher: ugli::Texture, + #[asset(path = "rocket_launcher/bullet.png")] + pub rocket_launcher_bullet: ugli::Texture, + #[asset(path = "rocket_launcher/muzzle_flash.png")] + pub rocket_launcher_muzzle_flash: ugli::Texture, +} + +impl Assets { + pub fn setup(&mut self) { + self.assault_rifle.set_filter(ugli::Filter::Nearest); + for texture in &mut self.assault_rifle_muzzle_flash { + texture.set_filter(ugli::Filter::Nearest); + } + self.pistol.set_filter(ugli::Filter::Nearest); + self.pistol_muzzle_flash.set_filter(ugli::Filter::Nearest); + self.rocket_launcher.set_filter(ugli::Filter::Nearest); + self.rocket_launcher_muzzle_flash + .set_filter(ugli::Filter::Nearest); + self.pistol_bullet.set_filter(ugli::Filter::Nearest); + self.assault_rifle_bullet.set_filter(ugli::Filter::Nearest); + self.rocket_launcher_bullet + .set_filter(ugli::Filter::Nearest); + } +} diff --git a/app-src/src/renderer/level.rs b/app-src/src/renderer/level.rs new file mode 100644 index 0000000..776ab40 --- /dev/null +++ b/app-src/src/renderer/level.rs @@ -0,0 +1,112 @@ +use super::*; + +pub struct LevelRenderer { + simple_renderer: Rc, + quads: ugli::VertexBuffer, + last_drawn_level: Option, +} + +impl LevelRenderer { + const JUMP_PAD_ANIMATION_TIME: f32 = 0.2; + pub fn new(geng: &Rc, simple_renderer: &Rc) -> Self { + Self { + simple_renderer: simple_renderer.clone(), + quads: ugli::VertexBuffer::new_static(geng.ugli(), vec![]), + last_drawn_level: None, + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + level: &model::Level, + game: Option<&model::Game>, + extra_data: Option<&RendererExtraData>, + ) { + if true { + // TODO: caching breaks jump pad animation + // self.last_drawn_map.as_ref() != Some(&game.map) { + let quads: &mut Vec = &mut self.quads; + quads.clear(); + for (pos, tile) in level { + match tile { + model::Tile::Empty => {} + model::Tile::Wall => { + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32), + i_size: vec2(1.0, 1.0), + i_color: Color::GRAY, + }); + } + model::Tile::Platform => { + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(0.0, 0.9), + i_size: vec2(1.0, 0.1), + i_color: Color::GRAY, + }); + } + model::Tile::Ladder => { + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32), + i_size: vec2(0.1, 1.0), + i_color: Color::GRAY, + }); + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(1.0, 0.0), + i_size: vec2(-0.1, 1.0), + i_color: Color::GRAY, + }); + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(0.0, 0.4), + i_size: vec2(1.0, 0.1), + i_color: Color::GRAY, + }); + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(0.0, 0.9), + i_size: vec2(1.0, 0.1), + i_color: Color::GRAY, + }); + } + model::Tile::JumpPad => { + let height = if let Some(game) = game { + if let Some(last_used_tick) = extra_data.and_then(|extra_data| { + extra_data.level_last_used_tick.get(&pos).copied() + }) { + let t = ((game.current_tick as f32 - 1.0 - last_used_tick as f32) + / game.properties.ticks_per_second.raw() as f32 + / Self::JUMP_PAD_ANIMATION_TIME) + .min(1.0); + let t = if t < 0.0 { 1.0 } else { t }; + 1.0 - t * 0.5 + } else { + 0.5 + } + } else { + 0.5 + }; + + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(0.3, 0.0), + i_size: vec2(0.4, height - 0.1), + i_color: Color::GRAY, + }); + quads.push(simple::Instance { + i_pos: pos.map(|x| x as f32) + vec2(0.0, height - 0.2), + i_size: vec2(1.0, 0.2), + i_color: Color::YELLOW, + }); + } + } + } + self.last_drawn_level = Some(level.clone()); + } + self.simple_renderer.frame( + framebuffer, + camera, + AABB::pos_size(vec2(r64(0.0), r64(0.0)), level.size().map(|x| r64(x as _))), + r64(0.1), + Color::GRAY, + ); + self.simple_renderer.quads(framebuffer, camera, &self.quads); + } +} diff --git a/app-src/src/renderer/loot.rs b/app-src/src/renderer/loot.rs new file mode 100644 index 0000000..6926fc8 --- /dev/null +++ b/app-src/src/renderer/loot.rs @@ -0,0 +1,38 @@ +use super::*; + +pub struct LootRenderer { + simple_renderer: Rc, + weapon_renderer: Rc, +} + +impl LootRenderer { + pub fn new(simple_renderer: &Rc, weapon_renderer: &Rc) -> Self { + Self { + simple_renderer: simple_renderer.clone(), + weapon_renderer: weapon_renderer.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + for loot_box in &game.loot_boxes { + match &loot_box.item { + model::Item::HealthPack { .. } => { + self.simple_renderer + .quad(framebuffer, camera, loot_box.rect(), Color::GREEN); + } + model::Item::Weapon { weapon_type } => { + self.weapon_renderer + .draw(framebuffer, camera, loot_box.rect(), *weapon_type); + } + model::Item::Mine {} => { + self.simple_renderer + .quad(framebuffer, camera, loot_box.rect(), Color::YELLOW); + } + } + } + } +} diff --git a/app-src/src/renderer/mine.rs b/app-src/src/renderer/mine.rs new file mode 100644 index 0000000..2961533 --- /dev/null +++ b/app-src/src/renderer/mine.rs @@ -0,0 +1,37 @@ +use super::*; + +pub struct MineRenderer { + simple_renderer: Rc, +} + +impl MineRenderer { + pub fn new(simple_renderer: &Rc) -> Self { + Self { + simple_renderer: simple_renderer.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + for mine in &game.mines { + self.simple_renderer + .quad(framebuffer, camera, mine.rect(), Color::YELLOW); + self.simple_renderer.quad( + framebuffer, + camera, + AABB::pos_size( + mine.position - vec2(mine.size.x / r64(4.0), r64(0.0)), + mine.size / r64(2.0), + ), + match mine.state { + model::MineState::Preparing { .. } => Color::GREEN, + model::MineState::Idle => Color::rgb(1.0, 0.5, 1.0), + model::MineState::Triggered { .. } | model::MineState::Exploded => Color::RED, + }, + ); + } + } +} diff --git a/app-src/src/renderer/mod.rs b/app-src/src/renderer/mod.rs new file mode 100644 index 0000000..f051a05 --- /dev/null +++ b/app-src/src/renderer/mod.rs @@ -0,0 +1,475 @@ +use crate::*; + +mod background; +mod bullet; +mod camera; +mod custom; +mod fancy_bullet; +mod fancy_explosion; +mod fancy_level; +mod fancy_loot; +mod fancy_mine; +mod fancy_unit; +mod fancy_weapon; +mod level; +mod loot; +mod mine; +mod simple; +mod sprite; +mod unit; +mod weapon; + +use background::BackgroundRenderer; +use bullet::BulletRenderer; +pub use camera::Camera; +use custom::CustomRenderer; +use fancy_bullet::FancyBulletRenderer; +use fancy_explosion::FancyExplosionRenderer; +pub use fancy_level::FancyLevelRenderer; +use fancy_loot::FancyLootRenderer; +use fancy_mine::FancyMineRenderer; +use fancy_unit::FancyUnitRenderer; +pub use level::LevelRenderer; +use loot::LootRenderer; +use mine::MineRenderer; +pub use simple::SimpleRenderer; +use sprite::SpriteRenderer; +use unit::UnitRenderer; +use weapon::WeaponRenderer; + +#[derive(geng::Assets)] +pub struct Sounds { + #[asset(path = "explosion.wav")] + explosion: geng::Sound, + #[asset(path = "pickup.wav")] + pickup: geng::Sound, + #[asset(path = "heal.wav")] + heal: geng::Sound, + #[asset(path = "hit.wav")] + hit: geng::Sound, + #[asset(path = "guns/pistol/shoot.wav")] + pistol_shoot: geng::Sound, + #[asset(path = "guns/assault_rifle/shoot.wav")] + assault_rifle_shoot: geng::Sound, + #[asset(path = "guns/rocket_launcher/shoot.wav")] + rocket_launcher_shoot: geng::Sound, +} + +#[derive(geng::Assets)] +pub struct Assets { + #[asset(path = "level")] + level: fancy_level::Assets, + #[asset(path = ".")] + background: background::Assets, + #[asset(path = ".")] + explosion: fancy_explosion::Assets, + #[asset(path = "unit")] + unit: fancy_unit::Assets, + #[asset(path = "guns")] + weapon: fancy_weapon::Assets, + #[asset(path = "loot")] + loot: fancy_loot::Assets, + #[asset(path = "mine")] + mine: fancy_mine::Assets, + #[asset(path = ".")] + sounds: Sounds, +} + +#[derive(Debug, Clone, Copy, Serialize, Deserialize, Eq, PartialEq, Hash)] +enum Mode { + Fancy, + Schematic, + Blank, +} + +impl Mode { + fn switch_next(&mut self) { + let new_mode = match self { + Self::Fancy => Self::Schematic, + Self::Schematic => Self::Blank, + Self::Blank => Self::Fancy, + }; + *self = new_mode; + } +} + +pub struct Renderer { + geng: Rc, + default_tps: f64, + keyboard_player_input: Arc>, + simple_renderer: Rc, + sprite_renderer: Rc, + camera: Camera, + level_renderer: LevelRenderer, + fancy_level_renderer: FancyLevelRenderer, + unit_renderer: UnitRenderer, + bullet_renderer: BulletRenderer, + loot_renderer: LootRenderer, + fancy_loot_renderer: FancyLootRenderer, + fancy_bullet_renderer: FancyBulletRenderer, + mine_renderer: MineRenderer, + background: BackgroundRenderer, + fancy_unit: FancyUnitRenderer, + fancy_mine: FancyMineRenderer, + fancy_explosion: FancyExplosionRenderer, + custom: CustomRenderer, + sounds: Sounds, + player_names: Vec, + preferences: Rc>>>, +} + +impl Renderer { + pub fn new( + geng: &Rc, + preferences: Rc>>>, + keyboard_player_input: &Arc>, + mut player_names: Vec, + mut assets: Assets, + ) -> Self { + assets.weapon.setup(); + let weapon_assets = Rc::new(assets.weapon); + let simple_renderer = Rc::new(SimpleRenderer::new(geng)); + let sprite_renderer = Rc::new(SpriteRenderer::new(geng)); + let weapon_renderer = Rc::new(WeaponRenderer::new(&simple_renderer)); + if player_names.len() == 0 { + player_names.push(format!("{} 1", translate("Player"))); + } + if player_names.len() == 1 { + player_names.push(format!("{} 2", translate("Player"))); + } + Self { + geng: geng.clone(), + default_tps: 1.0, + keyboard_player_input: keyboard_player_input.clone(), + simple_renderer: simple_renderer.clone(), + sprite_renderer: sprite_renderer.clone(), + camera: Camera::new(), + level_renderer: LevelRenderer::new(geng, &simple_renderer), + fancy_level_renderer: FancyLevelRenderer::new(geng, assets.level), + unit_renderer: UnitRenderer::new(geng, &simple_renderer, &weapon_renderer), + bullet_renderer: BulletRenderer::new(&simple_renderer), + loot_renderer: LootRenderer::new(&simple_renderer, &weapon_renderer), + mine_renderer: MineRenderer::new(&simple_renderer), + background: BackgroundRenderer::new(geng, assets.background), + fancy_unit: FancyUnitRenderer::new( + geng, + &simple_renderer, + &sprite_renderer, + assets.unit, + &weapon_assets, + ), + fancy_loot_renderer: FancyLootRenderer::new(&sprite_renderer, assets.loot), + fancy_bullet_renderer: FancyBulletRenderer::new(&sprite_renderer, &weapon_assets), + fancy_mine: FancyMineRenderer::new(&sprite_renderer, assets.mine), + fancy_explosion: FancyExplosionRenderer::new(&sprite_renderer, assets.explosion), + custom: CustomRenderer::new(geng), + sounds: assets.sounds, + player_names, + preferences: preferences.clone(), + } + } +} + +#[derive(Clone, Serialize, Deserialize, Trans, PartialEq, Eq)] +pub struct Explosion { + tick: usize, + player_id: model::Id, + position: Vec2, + params: model::ExplosionParams, +} + +#[derive(Clone, Diff, Serialize, Deserialize, Trans)] +pub struct RendererExtraData { + #[diff = "eq"] + pub level_last_used_tick: HashMap, usize>, + #[diff = "eq"] + pub explosions: Vec, +} + +impl RendererExtraData { + const EXPLOSION_TICKS: usize = 30; +} + +impl codegame::RendererExtraData for RendererExtraData { + fn new(game: &model::Game) -> Self { + Self { + level_last_used_tick: HashMap::new(), + explosions: Vec::new(), + } + } + fn update(&mut self, events: &[model::Event], game: &model::Game) { + for event in events { + match event { + model::Event::LevelEvent { used_tile } => { + self.level_last_used_tick + .insert(*used_tile, game.current_tick); + } + model::Event::Explosion { + player_id, + position, + params, + } => { + self.explosions.push(Explosion { + tick: game.current_tick, + player_id: *player_id, + position: *position, + params: params.clone(), + }); + } + model::Event::Shot { .. } + | model::Event::PickupMine + | model::Event::PickupWeapon + | model::Event::Heal + | model::Event::Hit => {} + } + } + self.explosions + .retain(|explosion| explosion.tick + Self::EXPLOSION_TICKS > game.current_tick); + } +} + +impl Renderer { + const SCHEMATIC_EXPLOSION_TICKS: usize = 10; +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct RendererPreferences { + mode: Mode, +} + +impl Default for RendererPreferences { + fn default() -> Self { + Self { mode: Mode::Fancy } + } +} + +impl codegame::Renderer for Renderer { + type ExtraData = RendererExtraData; + type Preferences = RendererPreferences; + fn default_tps(&self) -> f64 { + self.default_tps + } + fn draw( + &mut self, + game: &model::Game, + extra_data: &RendererExtraData, + custom_data: &HashMap>, + framebuffer: &mut ugli::Framebuffer, + ) { + let framebuffer_size = framebuffer.size(); + self.default_tps = game.properties.ticks_per_second.raw(); + self.camera.center = game.level.size().map(|x| r64(x as _)) / r64(2.0); + self.camera.fov = r64(game.level.size().y as f64 + 5.0); + { + let mut input = self.keyboard_player_input.lock().unwrap(); + input.mouse_pos = self + .camera + .screen_to_world(framebuffer, self.geng.window().mouse_pos().map(|x| r64(x))); + input.pressed_keys = self.geng.window().pressed_keys().clone(); + input.pressed_buttons = self.geng.window().pressed_buttons().clone(); + } + match self.preferences.borrow().renderer.mode { + Mode::Fancy => { + ugli::clear(framebuffer, Some(Color::BLACK), None); + self.background.draw(framebuffer, game); + self.fancy_level_renderer.draw( + framebuffer, + &self.camera, + &game.level, + Some(game), + Some(extra_data), + ); + self.fancy_loot_renderer + .draw(framebuffer, &self.camera, game); + self.fancy_bullet_renderer + .draw(framebuffer, &self.camera, game); + self.fancy_unit.draw(framebuffer, &self.camera, game); + self.fancy_mine.draw(framebuffer, &self.camera, game); + self.fancy_explosion + .draw(framebuffer, &self.camera, &extra_data.explosions, game); + } + Mode::Schematic => { + ugli::clear(framebuffer, Some(Color::BLACK), None); + self.level_renderer.draw( + framebuffer, + &self.camera, + &game.level, + Some(game), + Some(extra_data), + ); + self.loot_renderer.draw(framebuffer, &self.camera, game); + self.bullet_renderer.draw(framebuffer, &self.camera, game); + self.unit_renderer.draw(framebuffer, &self.camera, game); + self.mine_renderer.draw(framebuffer, &self.camera, game); + for explosion in &extra_data.explosions { + if explosion.tick + Self::SCHEMATIC_EXPLOSION_TICKS > game.current_tick { + let size = vec2(explosion.params.radius, explosion.params.radius); + self.simple_renderer.quad( + framebuffer, + &self.camera, + AABB::from_corners( + explosion.position - size, + explosion.position + size, + ), + Color::rgba(1.0, 0.0, 0.0, 0.5), + ); + } + } + } + Mode::Blank => { + ugli::clear(framebuffer, Some(Color::BLACK), None); + } + } + self.custom.draw_all(framebuffer, &self.camera, custom_data); + let font_size = 20.0; + let player_colors = [Color::rgb(1.0, 0.7, 0.7), Color::rgb(0.7, 0.7, 1.0)]; + if self.preferences.borrow().renderer.mode != Mode::Blank { + for unit in &game.units { + let player_index = game + .players + .iter() + .position(|player| player.id == unit.player_id) + .unwrap(); + if let Some(name) = self.player_names.get(player_index) { + let pos = self.camera.world_to_screen( + framebuffer, + vec2(unit.position.x, unit.position.y + unit.size.y), + ); + self.geng.default_font().draw_aligned( + framebuffer, + name, + pos.map(|x| x.raw() as f32), + 0.5, + 20.0, + player_colors[player_index], + ); + } + } + let mid_width = partial_max( + self.geng + .default_font() + .measure(translate("score"), font_size) + .width(), + self.geng + .default_font() + .measure(translate("versus"), font_size) + .width(), + ); + let off = mid_width / 2.0 + font_size; + self.geng.default_font().draw_aligned( + framebuffer, + &format!("{}", game.players[0].score), + vec2( + framebuffer_size.x as f32 / 2.0 - off, + framebuffer_size.y as f32 - 40.0 - font_size, + ), + 1.0, + font_size, + Color::WHITE, + ); + self.geng.default_font().draw_aligned( + framebuffer, + translate("score"), + vec2( + framebuffer_size.x as f32 / 2.0, + framebuffer_size.y as f32 - 40.0 - font_size, + ), + 0.5, + font_size, + Color::GRAY, + ); + self.geng.default_font().draw_aligned( + framebuffer, + &format!("{}", game.players[1].score), + vec2( + framebuffer_size.x as f32 / 2.0 + off, + framebuffer_size.y as f32 - 40.0 - font_size, + ), + 0.0, + font_size, + Color::WHITE, + ); + if self.player_names.len() == 2 { + self.geng.default_font().draw_aligned( + framebuffer, + &self.player_names[0], + vec2( + framebuffer_size.x as f32 / 2.0 - off, + framebuffer_size.y as f32 - 40.0, + ), + 1.0, + font_size, + player_colors[0], + ); + self.geng.default_font().draw_aligned( + framebuffer, + translate("versus"), + vec2( + framebuffer_size.x as f32 / 2.0, + framebuffer_size.y as f32 - 40.0, + ), + 0.5, + font_size, + Color::GRAY, + ); + self.geng.default_font().draw_aligned( + framebuffer, + &self.player_names[1], + vec2( + framebuffer_size.x as f32 / 2.0 + off, + framebuffer_size.y as f32 - 40.0, + ), + 0.0, + font_size, + player_colors[1], + ); + } + } + } + fn process_event(&mut self, event: &model::Event) { + match event { + model::Event::Explosion { .. } => { + let mut effect = self.sounds.explosion.effect(); + effect.set_volume(self.preferences.borrow().volume); + effect.play(); + } + model::Event::LevelEvent { .. } => {} + model::Event::Shot { weapon_type } => { + let sound = match weapon_type { + model::WeaponType::Pistol => &self.sounds.pistol_shoot, + model::WeaponType::AssaultRifle => &self.sounds.assault_rifle_shoot, + model::WeaponType::RocketLauncher => &self.sounds.rocket_launcher_shoot, + }; + let mut effect = sound.effect(); + effect.set_volume(self.preferences.borrow().volume); + effect.play(); + } + model::Event::PickupMine | model::Event::PickupWeapon => { + let mut effect = self.sounds.pickup.effect(); + effect.set_volume(self.preferences.borrow().volume); + effect.play(); + } + model::Event::Heal => { + let mut effect = self.sounds.heal.effect(); + effect.set_volume(self.preferences.borrow().volume); + effect.play(); + } + model::Event::Hit => { + let mut effect = self.sounds.hit.effect(); + effect.set_volume(self.preferences.borrow().volume); + effect.play(); + } + } + } + fn handle_event(&mut self, event: &geng::Event) { + match event { + geng::Event::KeyDown { key, .. } => match key { + geng::Key::M => { + self.preferences.borrow_mut().renderer.mode.switch_next(); + } + _ => {} + }, + _ => {} + } + } +} diff --git a/app-src/src/renderer/simple/mod.rs b/app-src/src/renderer/simple/mod.rs new file mode 100644 index 0000000..2859c0b --- /dev/null +++ b/app-src/src/renderer/simple/mod.rs @@ -0,0 +1,158 @@ +use super::*; + +#[derive(ugli::Vertex)] +pub struct Vertex { + pub a_pos: Vec2, +} + +#[derive(ugli::Vertex)] +pub struct Instance { + pub i_pos: Vec2, + pub i_size: Vec2, + pub i_color: Color, +} + +pub struct SimpleRenderer { + quad_geometry: ugli::VertexBuffer, + instances: RefCell>, + program: ugli::Program, + white_texture: ugli::Texture, +} + +impl SimpleRenderer { + pub fn new(geng: &Rc) -> Self { + Self { + quad_geometry: ugli::VertexBuffer::new_static( + geng.ugli(), + vec![ + Vertex { + a_pos: vec2(0.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 1.0), + }, + Vertex { + a_pos: vec2(0.0, 1.0), + }, + ], + ), + instances: RefCell::new(ugli::VertexBuffer::new_dynamic(geng.ugli(), vec![])), + program: geng + .shader_lib() + .compile(include_str!("program.glsl")) + .unwrap(), + white_texture: ugli::Texture::new_with(geng.ugli(), vec2(1, 1), |_| Color::WHITE), + } + } + pub fn textured_quad( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + rect: AABB, + texture: &ugli::Texture, + ) { + let rect = rect.map(|x| x.raw() as f32); + let mut instances = self.instances.borrow_mut(); + instances.clear(); + instances.push(Instance { + i_pos: rect.bottom_left(), + i_size: rect.size(), + i_color: Color::WHITE, + }); + self.draw( + framebuffer, + camera, + &self.quad_geometry, + &instances, + Some(texture), + ); + } + pub fn quad( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + rect: AABB, + color: Color, + ) { + let rect = rect.map(|x| x.raw() as f32); + let mut instances = self.instances.borrow_mut(); + instances.clear(); + instances.push(Instance { + i_pos: rect.bottom_left(), + i_size: rect.size(), + i_color: color, + }); + self.quads(framebuffer, camera, &instances); + } + pub fn frame( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + rect: AABB, + width: R64, + color: Color, + ) { + self.quad( + framebuffer, + camera, + AABB::pos_size(rect.bottom_left(), vec2(-width, rect.height())), + color, + ); + self.quad( + framebuffer, + camera, + AABB::pos_size(rect.bottom_left(), vec2(rect.width(), -width)), + color, + ); + self.quad( + framebuffer, + camera, + AABB::pos_size(rect.top_right(), vec2(-rect.width(), width)), + color, + ); + self.quad( + framebuffer, + camera, + AABB::pos_size(rect.top_right(), vec2(width, -rect.height())), + color, + ); + } + pub fn quads( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + instances: &ugli::VertexBuffer, + ) { + self.draw(framebuffer, camera, &self.quad_geometry, instances, None); + } + pub fn draw( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + vertices: &ugli::VertexBuffer, + instances: &ugli::VertexBuffer, + texture: Option<&ugli::Texture>, + ) { + let texture = texture.unwrap_or(&self.white_texture); + let camera_uniforms = camera.uniforms(framebuffer); + ugli::draw( + framebuffer, + &self.program, + ugli::DrawMode::TriangleFan, + ugli::instanced(vertices, instances), + ( + camera_uniforms, + ugli::uniforms! { + u_texture: texture, + }, + ), + ugli::DrawParameters { + blend_mode: Some(default()), + ..default() + }, + ); + } +} diff --git a/app-src/src/renderer/simple/program.glsl b/app-src/src/renderer/simple/program.glsl new file mode 100644 index 0000000..8c60b46 --- /dev/null +++ b/app-src/src/renderer/simple/program.glsl @@ -0,0 +1,27 @@ +varying vec4 v_color; +varying vec2 v_pos; + +#ifdef VERTEX_SHADER +attribute vec2 a_pos; + +attribute vec2 i_pos; +attribute vec2 i_size; + +attribute vec4 i_color; + +uniform mat4 u_projection_matrix; +uniform mat4 u_view_matrix; + +void main() { + v_pos = a_pos; + v_color = i_color; + gl_Position = u_projection_matrix * u_view_matrix * vec4(i_pos + a_pos * i_size, 0.0, 1.0); +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D u_texture; +void main() { + gl_FragColor = texture2D(u_texture, vec2(v_pos.x, 1.0 - v_pos.y)) * v_color; +} +#endif \ No newline at end of file diff --git a/app-src/src/renderer/sprite/mod.rs b/app-src/src/renderer/sprite/mod.rs new file mode 100644 index 0000000..1111bd8 --- /dev/null +++ b/app-src/src/renderer/sprite/mod.rs @@ -0,0 +1,80 @@ +use super::*; + +#[derive(ugli::Vertex)] +pub struct Vertex { + pub a_pos: Vec2, +} + +pub struct SpriteRenderer { + program: ugli::Program, + quad: ugli::VertexBuffer, +} + +impl SpriteRenderer { + pub fn new(geng: &Rc) -> Self { + Self { + program: geng + .shader_lib() + .compile(include_str!("program.glsl")) + .unwrap(), + quad: ugli::VertexBuffer::new_static( + geng.ugli(), + vec![ + Vertex { + a_pos: vec2(0.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 0.0), + }, + Vertex { + a_pos: vec2(1.0, 1.0), + }, + Vertex { + a_pos: vec2(0.0, 1.0), + }, + ], + ), + } + } + pub fn draw( + &self, + framebuffer: &mut ugli::Framebuffer, + camera_uniforms: impl ugli::Uniforms, + texture: &ugli::Texture, + origin: Vec2, + scale: f32, + pos: Vec2, + rotation: f32, + flip: bool, + color: Color, + ) { + let texture_size = texture.size().map(|x| x as f32) * scale; + let origin = if flip { + vec2(1.0 - origin.x, origin.y) + } else { + origin + }; + ugli::draw( + framebuffer, + &self.program, + ugli::DrawMode::TriangleFan, + &self.quad, + ( + camera_uniforms, + ugli::uniforms! { + u_texture: texture, + u_rotation: rotation, + u_pos: pos, + u_flip: if flip { 0.0 } else { 1.0 }, + u_texture_size: texture_size, + u_origin: origin, + u_color: color, + }, + ), + ugli::DrawParameters { + blend_mode: Some(default()), + ..default() + }, + ); + } +} diff --git a/app-src/src/renderer/sprite/program.glsl b/app-src/src/renderer/sprite/program.glsl new file mode 100644 index 0000000..3c25419 --- /dev/null +++ b/app-src/src/renderer/sprite/program.glsl @@ -0,0 +1,34 @@ +varying vec2 v_vt; + +#ifdef VERTEX_SHADER +attribute vec2 a_pos; + +uniform mat4 u_projection_matrix; +uniform mat4 u_view_matrix; + +uniform vec2 u_texture_size; +uniform vec2 u_origin; +uniform vec2 u_pos; +uniform float u_rotation; +uniform float u_flip; + +vec2 rotate_vec(vec2 v, float angle) { + float s = sin(angle); + float c = cos(angle); + return vec2(v.x * c - v.y * s, v.x * s + v.y * c); +} + +void main() { + v_vt = vec2(a_pos.x * u_flip + (1.0 - a_pos.x) * (1.0 - u_flip), a_pos.y); + vec2 world_pos = u_pos + rotate_vec((a_pos - u_origin) * u_texture_size, u_rotation); + gl_Position = u_projection_matrix * u_view_matrix * vec4(world_pos, 0.0, 1.0); +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D u_texture; +uniform vec4 u_color; +void main() { + gl_FragColor = texture2D(u_texture, vec2(v_vt.x, 1.0 - v_vt.y)) * u_color; +} +#endif \ No newline at end of file diff --git a/app-src/src/renderer/unit.rs b/app-src/src/renderer/unit.rs new file mode 100644 index 0000000..efffba1 --- /dev/null +++ b/app-src/src/renderer/unit.rs @@ -0,0 +1,97 @@ +use super::*; + +pub struct UnitRenderer { + geng: Rc, + simple_renderer: Rc, + weapon_renderer: Rc, +} + +impl UnitRenderer { + pub fn new( + geng: &Rc, + simple_renderer: &Rc, + weapon_renderer: &Rc, + ) -> Self { + Self { + geng: geng.clone(), + simple_renderer: simple_renderer.clone(), + weapon_renderer: weapon_renderer.clone(), + } + } + pub fn draw( + &mut self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + game: &model::Game, + ) { + for unit in &game.units { + self.simple_renderer.quad( + framebuffer, + camera, + AABB::pos_size( + unit.position - vec2(unit.size.x / r64(2.0), r64(0.0)), + unit.size, + ), + Color::WHITE, + ); + self.simple_renderer.quad( + framebuffer, + camera, + AABB::pos_size( + unit.position - vec2(unit.size.x / r64(2.0), r64(0.0)), + vec2( + unit.size.x, + unit.size.y + * (r64(1.0) + - r64(unit.health as f64) + / r64(game.properties.unit_max_health as f64)), + ), + ), + Color::RED, + ); + if let Some(weapon) = &unit.weapon { + self.weapon_renderer.draw( + framebuffer, + camera, + AABB::pos_size( + unit.rect().center() - vec2(r64(0.25), r64(0.25)), + vec2(r64(0.5), r64(0.5)), + ), + weapon.typ, + ); + if let Some(angle) = weapon.last_angle { + let vertices = ugli::VertexBuffer::new_static( + &self.geng.ugli(), + vec![ + simple::Vertex { + a_pos: vec2(0.0, 0.0), + }, + simple::Vertex { + a_pos: Vec2::rotated( + vec2(100.0, 0.0), + (angle + weapon.spread).raw() as f32, + ), + }, + simple::Vertex { + a_pos: Vec2::rotated( + vec2(100.0, 0.0), + (angle - weapon.spread).raw() as f32, + ), + }, + ], + ); + let instances = ugli::VertexBuffer::new_static( + &self.geng.ugli(), + vec![simple::Instance { + i_pos: unit.center().map(|x| x.raw() as f32), + i_size: vec2(1.0, 1.0), + i_color: Color::rgba(1.0, 1.0, 1.0, 0.1), + }], + ); + self.simple_renderer + .draw(framebuffer, camera, &vertices, &instances, None); + } + } + } + } +} diff --git a/app-src/src/renderer/weapon.rs b/app-src/src/renderer/weapon.rs new file mode 100644 index 0000000..6a10bf2 --- /dev/null +++ b/app-src/src/renderer/weapon.rs @@ -0,0 +1,32 @@ +use super::*; + +pub struct WeaponRenderer { + simple_renderer: Rc, +} + +impl WeaponRenderer { + pub fn new(simple_renderer: &Rc) -> Self { + Self { + simple_renderer: simple_renderer.clone(), + } + } + pub fn draw( + &self, + framebuffer: &mut ugli::Framebuffer, + camera: &Camera, + rect: AABB, + typ: model::WeaponType, + ) { + use model::WeaponType::*; + self.simple_renderer.quad( + framebuffer, + camera, + rect, + match typ { + Pistol => Color::rgb(0.0, 0.0, 0.5), + AssaultRifle => Color::rgb(0.0, 0.0, 1.0), + RocketLauncher => Color::rgb(1.0, 0.5, 0.0), + }, + ); + } +} diff --git a/app-src/src/translations.txt b/app-src/src/translations.txt new file mode 100644 index 0000000..a708da2 --- /dev/null +++ b/app-src/src/translations.txt @@ -0,0 +1,41 @@ +en=keyboard +ru=клавиатура + +en=Keyboard player +ru=Игрок с клавиатуры + +en=Quickstart strategy +ru=Стратегия быстрого старта + +en=random +ru=случайный + +en=thinking speed +ru=скорость действий + +en=Level: +ru=Уровень: + +en=level editor +ru=редактор уровней + +en=save +ru=сохранить + +en=score +ru=счёт + +en=simple +ru=простой + +en=versus +ru=против + +en=Player +ru=Игрок + +en=Team size: +ru=Размер команды: + +en=complex +ru=сложный \ No newline at end of file diff --git a/app-src/static/aicup2019-preferences.json b/app-src/static/aicup2019-preferences.json new file mode 100644 index 0000000..26c4001 --- /dev/null +++ b/app-src/static/aicup2019-preferences.json @@ -0,0 +1,7 @@ +( + view_speed: 1, + volume: 0.5, + renderer: ( + mode: Fancy, + ), +) \ No newline at end of file diff --git a/app-src/static/assets/city.png b/app-src/static/assets/city.png new file mode 100644 index 0000000000000000000000000000000000000000..86739270831f3b33640e32ef10aa64ce6c1b0274 GIT binary patch literal 308612 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

E6Av+cN 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�olO5~p2U}gpLW!tjQ%7IM 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 KMNUMnLSTZWKP;;N literal 0 HcmV?d00001 diff --git a/app-src/static/assets/explosion.png b/app-src/static/assets/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..70d8547d7c955271309fed9b5b4ce249be29cef4 GIT binary patch literal 5063 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

RuHMi8X+)`I` zS6riDb(hO<20{phNY6X*2U?g~nBG*iG$~q{TAAKbwKgf*nA(`GTCZBAt&tg7s?1_f~YNI~E4xQMVwMQCJbWC(&)L6Jd`1_a`^=C(%K z>ej()cpY_B^-}7k)JFqs_IcJOpJ#3K+353j@Y}(GRRXK%p+f+)(7+#l@P#2*5g4q{ z2kV1%s(@gHHdq@x|IYk73$PH2uoz3Q6w9z2<`8p;J;okmgB7_dON=EZ2iY*AL*)*Y z+oK)Yq77Q(Ewn;QoQ^piBQvSW&ZTlqp=zL4)YsS7PjQr*>iAF79E$20)tzPk95Xr9 z$WTaYp;uIlVSJc&JMDHl9>WBAgv~@2%*ci-J142Rtz)$gXb;y+ zzBbI`YYmye*Alg3YR8OE9iKWu^>OOQsS`0tH92*1>J)e-dnH?LTW;sV3LEUmLq4Q$ zV*#rBD6089tE$hlJ`4LS>{EQAnie)KY^rKX*c4|K`0tUwN4n0<*H&6vX$_LF8mq7p zEAVd6yFnlOmYU%Etnt1IONu2W7gpF*_7ppv1oKkz;ZVhzW6i@=ac0E`vtp!KG0Hs3 zEa}Dn*YBWb<(`#`UnqW|2!$ws1Nq2<9X50|bTxcqR_rw^zBMbpGb^N1`>8vp?nvI; z1D^1LH+jW00^ zUtk7C1S{f#z_Hy!<-BG`-(pJ5WQ6&gntm;3q8>?qGg2S1SKOV*}z3uhy|FBc}T?k znE5f1u9a+UAAG3lZR~CQ0KHUmAI*I3AmH&ZNtkbU2g#X2)<8M{pQYoqeq0 zv5H4=1c&h>e!w9d!~xVd)HmF)C~jI5w=4>7Yfg78cPy7Qmozi=Gxc9!hHAQA@wr~{ znf^1qteLO9a8246y>JB*xVVf<_yfP=A|&E8Dtc7(NQ_X$MaM-CM=XY6C{9M5jM}Bz z8MQNN2exAyzQR^)!2p4@loN{1M<)-DP zSz*JT^gZcWFhjPZa#WUdOL{J>s{R@MGsyhmF1P?tqQS*Sfc_;MFuD$ z0u;soMKAwe{tN62>}+ud?-hX*_{IDK&X5DZlf zOCOdVi{Yxc^tkj9sAH*Pc}?}YMN!wHsAo~sx74?sjXE232B&cf@;f?#UvL~h<0q`h zTamZ2j8%E1R_B$9Pl-=SKqBU0J{Djh7D3J`WIFOG#*kOZ2o1_n84i*J1;@e8`@9!-6 zz7q1CCHdozFb?A}0Uu)`CSfwBVBTZJ{KxYjFTg_8qQ{FKFUAs;bXk%9Dyxx%HLA5~ zYtz*|yO|d(E!z+POvNARA_UpefZ$qv)wo^w21}Yr1R328|7B7v3(sE!v

``Y`;^2&mq5r@==)QdXQS4rePDWEI$3_Q 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 Rc(MXdR^Z7B{C}^&{{b&fh9Lj| literal 0 HcmV?d00001 diff --git a/app-src/static/assets/hit.wav b/app-src/static/assets/hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..1b6936d34ba379079f6d750a670824ad9d2fa4c5 GIT binary patch literal 10904 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/door.png b/app-src/static/assets/level/door.png new file mode 100644 index 0000000000000000000000000000000000000000..969db95e503bfdf718ee8117e2a8f6e8e0dc3dc1 GIT binary patch literal 2158 zcmaJ@X;f2Z8qOf4U||r!1yD~KP(&fg1+xlRk`PEGEHR_Os*vT9L`ZH(E|3HjYCxf- zSW(2O<5pCvxB>wyASz4i0s+DHywAIw@7#>A zkU*QcPIFNxlnpD0!9i9J(`#vleE0X&ZA2DFIDiLlfTH0>6V~3&XkP<`_utZNGum+DNQLq3JzlH#KpuO+_35O@(@I+5MK*f`(UI6<2 zgF&JxMbT6agZVxda`MGUU|2!L;Sv)Qv5DSTNGZkv6bc20_riI3c_JR3DvccGt3Bl^ zmsth|s1hor3Rnus(I!T|0E&lwF^JN4DaaHbXyvN+WkL#uQ}Y!#0E;)JH0#J_|9@AR z?1Q%o=74|c{V1`Dt5JYB4yc0Sl|rO((JrP?3MyR*@?l8Hg`n8kDuziQ7*a_f1)5Gb zRgH{Z$>s~Ca+A^hEsD*ivg9h5FBgI=hA#%;!AhkfD%l^;@TQPy0YnBJ00Jl!8hH(a z&IAYqqBq`)xn>s2fQ0cfP!7*xMSo%GpTwF5LZ(0>GeD&@0TeNnkPQ7cajNtqS_l+x zd;o=k@OgWGT+2JG=+j#KKdA+Wh{2iK`#bN@Tbf8r=p_ zDD!p}!=I}*oagyMO9LE^Zr$d8p0^7qNsY|By_fAYZ~p#K*HwN_PNblQJo8fQN!Ig* z4V0M_2M4KS;1oSWeTc)rBv{{Bw31w&O8z}NBY{#T?i%lyH2jdmGQx>{_Xdxy71vjk z-EKb;n0aaWD{-(~2?Sr&-<)>_P(Hlbm7l+8wB0pB>@-Es!;Ye4@s}gWafKvDTI@7X zJ!EV&`_b`0OJL(zl9fa^;@4YW#b00rsi0iyVHobeuz$5(W>V-DFEzpKVuw-I(@7-p zhDM&FnV(_WqTrb(LFAI>mXq%b^Kw6g8VA0`M*3oD^HJ{C_P>u5~`l+ z`e~3TD9-&twc&MPdi9;0{w96N^|Nltqc?X0S9CfH+edr9Up!)Qw+|#5&Nw7@VRy33 ztqsH0wQ0R7gWIp+`rW6l=4}%!Iq-z=on&GDsM=@r(H-03`?%w26{S=6oGm)B_hW2h zswLXObqAhtgX>nvbonihHb2k)o^SiJnLv&d>CX@?09-x!Pb9sR7ArB2$D+&Nyqz4~%dt(A1$ z8`$Q7Z<*SnDhzL(T%oQ#NNo0tI&x?+@#WLQ3j!VTd(=?&E_QvnO&WPq^ddufYe8Z6 zw;`eTT=ZI+SahYXpvZAfsM)`%b349bGNXR^GDc^faOO3^Vmd~*wm?_De9yjD!yUq* zy8Azhi}FKyCX6*hkw?fzZQ_oB+x7B9W5fQDEA|zn%Y@KlFK&^E-d0=Z?0BSTyq^;P z+v>IM19SmN@JGYz+NzmtqNF6;vgwMk*5S$87j446NnB;;kYxPE+`03|Un?9|-ze!u zpM3IM%RfFaUT3K)Z(ZawC*{gS0AWGQkVU9qAR4gaH(rvi`OwJ$>plJ!iGuWTt8!_@IU&G;TcU~Rx$!Fc*%#WXrqUDg`5rNzd3G+S#sB=SxYBU_vN4C-rWthqSNolF zc0$U*bH}*nto@XtnF7c`TCqgdv4 znai4nQvTr@_W4*ahxup0;yt44r}5ed8D5(n-nEJn4u+59cDa>nmuN#{_chvZo84O8 zY!OMfKXp!@dce%I5bAlFnvLsAG*mC-9v~j|bc@a#i|9#BFTj5FpHuTf@8V=%0%(t{ zjN&ZIbEJtfxh8T49pB$e{u6MyaCPY+pTxqPYsJxlc+7RGZXnq;xSIOpI~ emaijI{)WObdl`n-rIn^X09HT<<036;_kRIc@09rf literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/floor_1.png b/app-src/static/assets/level/floor_1.png new file mode 100644 index 0000000000000000000000000000000000000000..25ca8afc4ffbac9670665127549baa889c45f3c3 GIT binary patch literal 3951 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 D0G9{W literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/floor_2.png b/app-src/static/assets/level/floor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e5bb541454d57de62d50e499d65ebc9be4b442 GIT binary patch literal 3809 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/jumper_1.png b/app-src/static/assets/level/jumper_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf541bb51d90ec828e4ad8e8fb0aa5e96148b99 GIT binary patch literal 1898 zcmbVNe`p(J7{03Q+G=&EY;MXpuh`Yq%iSfpOYWN3rAfL*O;*}~oyD=s-IwG@?nm#g zP0}I7Qk~sg#qJMFtBh@kRiPVFZOa(**Tl&vh=@gs4$&e=CvJjc|J3jDYb&%;3|#KJ z`=00d-sk<^@4bpuo$$WRx~i+-|CclAW_YX7+7B2Aa_>XdRe?;r z{Ro0oUYDZXW_S2GPEchVFRC$M%gP!=BZ#LZtMNh#m}m?nB*lyUdHy1XN}?Bgo(_{? z%@2}N`+yF*1|m^mASJLO*77v!$#PIY1}2YY<+NgOSud8?<>1(QO<-sqVy3*9&sq@e z4tJn_RR<_-V{n0TlBkQdQ4Hy%si#moNx2A;CP)S+DUNh=b_y;2Fu0m7#<|WwTX8M; z6;+N?ORA=7B-IU)P@XQQ zLgV~8;7wJJs%pBl%N->Z)bF=;)r~fWc|lSv=_f5$MHUF~Ch%eq!QvE&Q%sa3If~|J zR}<;rNU{J8tD+Rotp~N+Iht7mg+(XwCchbQILw6xQyoi3WhS&|fR5iqP%Bt_aq#q)7Nen1uatQ?m3BINrV5YCW}AQSLYRFGv`-Ohl& zjiPDBLE77#CGLJ*f+vkn|33{;;Nq$-^RO%=nNI*hQxX_j-X6}crd1s#4rbSJ=lhV~ z-=V8mSJ$ajk1miOoL?%=u$rr+jLb%^QFs4>!hk^mE72Bfh%sD zCTc@2Q4XeEGGKk>iXET}^cF{H3C0Fb2FDB5X@-V)7&BIUxn97V+uMR@CJCVA+R|K8 zZv~j4#?1_`178Bx!6xg!z!Z|ak^r#95}4(cu$oc998uVW+rIO2cQmdN9Ckx%SZ>4c zq1?!U0;P4>rdO5aHxQ&^S190%x{t4%xDfeb@7CdqA1^(AYJ8%q>qh<5xnyo=ZfMWQ z>G5rU?VPC|{&j4Rrvm>db+s~?JhgY`zE@Tn?{DZuy1)nDEnHh#`e{0Jy2gEc$~L_H z^VO#G9|u#{>fTJpN1I-s%$}Y4`t0P3?z)x83rcYD*_y)=&=Fqdh^U>+~-W%TiXWqYAKhrEVc-}g3bhUB$$17X!dimJZ zUv3@!{oLxisC#kCAtQC>;la7Vd(im{O_#RpzWb9*|H$aA@t?nWY_jHZ_rab^*DG^_ zFY%Xqe8MruJU5m-Jg~4Z--B#NIq&ojM<(Vx&BXHJGqYg1Ay)O;x2f9Mpz`VipZXp= Y`FErG&cG8VC#RM$w;me$7xYYbN&o-= literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/jumper_2.png b/app-src/static/assets/level/jumper_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d13d8f27885165c3997427df0d1137605ee7c730 GIT binary patch literal 1986 zcmbVN4Q$k8814uzYzql8L>!oO9Wg`cwY|Sx>(1?VKio}kT#lQJFp;kPZfkbeue9CW zjh{$BBB;|SxCFzGpu=s+1e5s#IEDl^6Nm|#Oi}qWNGf;B z=Y78SdA|31yDe0=WM*MWA%)ssk?%@`5BA)Qb#NnJD1lb>Jirf+ZQ6Wb6@|<`^4i zb38#?IGRpFgHV*B?Gr)G2xPktii%F;b$%+~V2}&Qn$F7t2zZr7At^RV0mUdFBI>ALYv`XHeN*WE(=T3cDllA_qZ9x%d#~N ztH2lHpR%N7GCzqOz z6(_gJHfb!COU5s0sJ_}W9bg$)lNrS%lp8u394{EB842Q1&P3+rLBZU@TZU(5uQiP$EGMZ6Z9F^XLySm5c?rB_EIO>MR zFxQ6BL#~kn8BwdKO&9pyd<4Vt5&@4Z;^_Eo$3R_;Yu1**QvI`o^Zms%zV) zbuT=Nl^!0sUGlL{*mU+p;ojpT)qO+ZQ{8>}9eu)wjk7*|XKO=y@4&j~m%GmGKDxj6 z%(Oi_yZxzQ>;*Nz0QQ0`}tVif|u6!oO@x;mfGz#T~|vQ%PY!v z%)fZ0a&O?1TT9u3m7Rs7!;J@l@5qATo|o64QDgD@m!lOjfBLJ@$k^zjv;fJ%ImtxDmN%q6hb>|(g@t+;S`(bcDH4nSgb!+u8chQVjAHLwcFudwfxoZ3A zX|t~N|8nWavDq7kuCBOvY(U!XKXB-k`m$K>qTWr^oN5l9`u_J~ZDjqy`ETqieztzq z%Gaak4?8ewkr_xsFcb OD;x0Ec|NFFz3E?=Afs#m literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/jumper_3.png b/app-src/static/assets/level/jumper_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cadb9daa89a333a3c55ed051a27f905972aeec62 GIT binary patch literal 3890 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 C_t3Ne literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/platform_C.png b/app-src/static/assets/level/platform_C.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb99364366061ae9f0d48c33dcc7083751a2be5 GIT binary patch literal 3816 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 NOS4m^WybE8{s)#Mt&;!% literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/platform_small_solo.png b/app-src/static/assets/level/platform_small_solo.png new file mode 100644 index 0000000000000000000000000000000000000000..d87952b881f991a716ab170049f7f26d5c2fa574 GIT binary patch literal 3874 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 X_nBy~2_G%rd(D`eoH8ymbi4dNd{4a< literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/platform_solo.png b/app-src/static/assets/level/platform_solo.png new file mode 100644 index 0000000000000000000000000000000000000000..2af3d2c3a06c725e72fd5b364ad42c8312421332 GIT binary patch literal 4039 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/railing_C.png b/app-src/static/assets/level/railing_C.png new file mode 100644 index 0000000000000000000000000000000000000000..8de9edd99f2832b6a0c2ba9efae304f921ef26b6 GIT binary patch literal 3946 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 B`ab{w literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/railing_L.png b/app-src/static/assets/level/railing_L.png new file mode 100644 index 0000000000000000000000000000000000000000..089fcc9dcff6b54e8256b721b053292cbef42d0c GIT binary patch literal 3983 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/railing_R.png b/app-src/static/assets/level/railing_R.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8d9a55a9b76694410e12accf0940ec555d5015 GIT binary patch literal 3995 zcmaJ^c{o)4+dsBKkz|*Q5h=^e*iFc8l&!H%i!{byn9Uf>5RuT6JzLgnB^rv9C0nH^ zTNITgOO|9AyJYDd{hprp{p0t%=eo{0-|v0y&*%Q!%XO}E{<5_;=i`;&1pt800%3w= z-9>g!?met)b0z*H0Pq^)jE!wAjEzBL3dtRZ#{vMYKie(|)0kbO>`dq-L;-o=Q;8XtLVs0Ro4MXdg90ZR)bV=`ke@a0Bm(c=Q{JmcW3v`pDUh$#-s&iw!& zvC;i}NBdO5)a3Z+r27<}x$-K1$9sVU)|Xiv-l>aW=L7_-yO{kh6BB(LR3S_LjksoIKlBU8%#o`}WPrx#rbFzeel-QX3_WM2D=g zp6(0;E&x6m2I-|u1>xI1Xrg}^GH$Ak(+EafpOW2aiMYBQcf5N{z5Jq*@XbZkU)8o? zs}_0C|nWqyRpE5oyz8{dDh>HhfdaJR5s7KdQ$cFbG*zj*-}x z2ncwntJ2p2AgOU9-awHJ=twL43IKKA#4g@X7PWlM4FD#&VJ99L?%n@fh|$EK^<1j1 zNt7ME$HZX&(I#C1qdnuHhk5hFQVqrJo8X@~pFHA_$UT@bDp2_xrp-4sB6u-uhAg`0 zvRKXwvAReePQzC2LueWJjf1XnpTM2mqUmv*U^GJgR%jt;`i9V1@T*ozA$zfrSE4gQ zc1f8cq!WA5;Ag@>D@gU`*3CL|SaMj!S&k3veg-x7r6q2@&h_o4svmF;P0jc2mZ&_U z7y2~6sQb(}KPnJ>GY%8l4dZu@`Ha386J>h&FO-CQiwI@{rQsN_fssOK`3p-n<)E3| zN7w5 zW600T9FfV9yL62IkV_KcDF2&V0|@0pyF&dQ0bG`){7eGj&6jcR zickh9EwL)$K!VM!%{MQ{tAyaMZj4#-#%+bl1-xwod#9(S z!&d_K^F{K7w;)^<#J$CX#EZnL#3AXH_qg7trMKEcKdMTmd)z*7o8*8xv3BB$aN=9R z6nKhbN=V97iM@lb!>L|+$v*oB4hJ4watyv_=J43|YcbCUkq5oSQV!3GHOo4Y0myjU zuCp!$4KCZ)eq#74A|uRlBM}Amn5x&}u`(jBRk4dGqdtlw$BdHqZ7bIc6&tgb{#=`q z{*WL`J7eDxcZPeSd-kMH2OIzE@{t9d&snECWjgsfgOoXxPbru8d6l}ChLmdc2lhAg zyUtPOMCNAtnSSJKgKVYjRX72@?#ENBS$noNqISTq>%0DY%nW^+XZ7tW|MXC|`6^+h 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/wall_C.png b/app-src/static/assets/level/wall_C.png new file mode 100644 index 0000000000000000000000000000000000000000..51410c747e2f1a29c16b9a0849455d145b2a8910 GIT binary patch literal 3705 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/wall_down_solo.png b/app-src/static/assets/level/wall_down_solo.png new file mode 100644 index 0000000000000000000000000000000000000000..46eb0dfc3232d1a6591095f3f63d4565b72055e4 GIT binary patch literal 3929 zcmaJ^c{o)49zV81k*pyZBU&soV~fc;wo#Tb_KJ)#7-N>kU`BQ+C0n+v*-C1tyozK? zglthHlqE|-V+o0L$9v!2d;hraJJ+##wZJ8V-ST(_QLz&0DwM}YZv64vM#Pax{llDh!|Xal;IZ% zfaRIIZ9*=ELN@@+B_UzMmY7(6M^Ul;IY@`*sD6HAZtO(<(Q0p_Yq4kI9L{Nfl^rR0 z92(48SlE2GSv!+6v(?S$*%z^2STT9J&==4_$LPWbWfN_X&Fys&oMOl^ZjjJ)N0T>C z3ji!~G3a5mhXz|556A!~K_~xIwvzNTEJr8IbZ{eJr1cs3?bev^p9#l$Co~?NQx?0n0GO9;8m*t~e%#^L81|KeGfvRCFAy*cTT!_#wI>-6 z^43setOGzw!$zW^5(m(gQTz!2YCj)1cQ;kS@+B_-nB+$ue`vIO?{iURqhQW+nc7AP zPRuS7!@Y+ab%hYSCL<2=7aT}8lC*Dx4{|?#$R(A(KWkj5@;OXfU}jACT;v=@Vwd}Y zyru)Sm-)Dj+IU4Ua`4#w9tnfsZeEGZ1a2?}sc|Es7&IFzY71^@qZV_PB7Bowk@Cwb zR8gJybA~^XhTA}D*S4p;xN%kY2=- z!jj(8p95$>=(PlFL@!Lx>-u}lx$9R<-LE=JDYlAZr<^q%6E(3i&L;xJq#N@vEZ)PM zaS0CbrHM0`;=X-L4Uw6D&$g>H?=A1WSop0o z7R3BO6vXaIsfb2EmO@vyxN%3ZN>TsoEW9^<-3KyDtKs_)eaJN9bw(fI^X}Q1+30UU zdj&2FM7JV6j!F_FFG`jisFH+aTHfJ#labkG4}GU5o#}mZ-%YZE^YOLgA!5m|gwx<@ zj%i_OGxzKr{2dJX8TaO9u4@Gd6k8gofrxpsvq)L zpe~3n%nh*uD7l8Y%DJm>B78l7uSToJwkD=#IH2c?{u}HZW0r6A)vDm^hhFnl;}R>EKDXN?&K*bkuibIIcRrV_FQHn^T@64mkOtq@A+& zX2Y{Pp4=_VE^7|VCXR|uh$bHEJGN>^8iLJl&GXM^&F@;!S;MR;tP$6GWI7KD%M6^P zoeZJU0y+czD7ACN;~FnYn@eBJI(bWb7x?F{XiD5Uozx+m5tt!iM=ZHkLb?^)kv1ju zwWja!o7JN1XW1iV?}=|ebn3N)-ruxR&6aL=eWAxP`nI_4JaM7(Q*KFiNz+Qw48$$a z&BblA?vTwNIf{7$P-5F~^VzYwj*ISaeLdWd?pZGVm-?Kyf^S`^zf%t$)vK2e8wkq` z+r5>ydGbfc&&2Ny{I1BmD!~sc3mejU&@ZLF|99*FSLDBReehL#&oV@+M4!< zlcB~xd@kFV1-w+}vq38{k|l3Em0z)PG#U8F?0J9Ty^2n1PHIjOS^%G3sq_w7b+pRH zOGzn3V3ILSd?lT7<<x*R1aZV9=oL_d4rEWH|8hdlFEebj6F z%ZB`(DDjZGq=%^Lhkp!K(_NOvzzwF)#O34cB!X07uIL(1I)1S)w8N*PBK;?7!Wr$b z?8_KgPC!TZ-M($C6y>CmR+`%0K`Q@t<|$STljiBb^3CW!>ll7qBJDhr!n|Al{h?X) z^n{c3`Tmeq261TU%#IqzX*V;huZRQAL z-Eu3F;A-ny=WX1RXCOiQYFTxDy?y25Orq;zE#(_{-D6mx>U5c2xt@6#<>xr^!CCSg zZoOl{Nw=K#&1&vsFY8VC58uXq|99Wtsk+``)UjU9OIMK;KOC%9s9F6UxV9h>#Q)WD z#5FjP{$Q(q=;xQ+KlXhIuiSowYb1_+cW-p>dEv5;CCGOrZ#(tZn=9je=AGvK@@De! ziMg_}(gIR-%bwjS<0Ta(B0aCd9Dgz9{O`|<{+!r6-Q&D9xVUE{uBV}#QMy89-7kFr zZmCkeRkLbFTkB*qk8T-mqgHx@I*lYmMHK0>4SOSg)^1ylHNqS(`vj#8-@2LlN(zJqFQH*gucw{gYXBTX3j}0bZ zbv(fa`XF68oGn1a(J&x7(U0U0r|W_L)P=LxJ7x$N^e2Qy&;$QFC}%4a$e2vUfizXM zRIo4&DCmTaDohKip$St4sX<{UAW%&RR7(X4gG069YB11W2bk@R>gfeXo0$FOi@nnW z`_O0uYu1cnQLtr{OIuNKDL`_YFjZpDtkZ2gX3dvvow}J`IA4|nkXm~OS zw4;deAP3O&!0br>odS{aw=Bv3uQIU<2BBjp5SS`-C#By&E35wxB@+Ke`_s_4|HS)0 zh5hXr6dVMN^Ct&TvFyfq$?v$Lz>TRm42?{+CzJhtR}tkyrjh-9$P^I!4}x7aZO~CG z3>Ht?F&_JqWn~4oAobhpL%r{N|dFu>nLJiT0c8`5&&)KXP{lf=FR|Ho;NxfjCbyDwzoSGjTZnf5oD% z1BGfqwf|A?FRtf5$MVly2s;?aPJ92W-M>xj8QNL?J-qDA-{X%Xv1gvj9`5~%jlTeZ zgKlABWKSO|wl}gy812oq-gdJB(Yc?C9hR~g>po5Av>9s>p>smUo0?^$v4=hhAN^qPx^1*%yu)WX?4rLw zC_3E)5grn@x_5t6r#Rs_N$L3lO{p2M!HFOa8|Lq|e#S2*Q6U%0amWqDujlU3Ai8Hw zKwH$3r{zRr$QjQ&-!F;ADbGI-c{&j@AB9jk#@(4QXFUh%=ESGiW^ec{;qIekkScGU zg~uh{yq_JltA4#gs6GGvR`b!!1f-_hepPAONhjeesBj{NSB_sQcc9PZ#Jhl!Lc*!u zt3Kkxvr)|+$pty9HuTG42?%quxn;XpeQr-))R=og;*S@cC*w_;I7bB}K2d!on-pe! zmu^2g*GG8ZJrk{ZJP|-B8kg$Ab=j~)+YHd=EaF6;I)J^jx literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/wall_solo.png b/app-src/static/assets/level/wall_solo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce975b35c7364fb78dc2a2ffdd87f6990757e9a GIT binary patch literal 3777 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 IqjORJ1B~MmasU7T literal 0 HcmV?d00001 diff --git a/app-src/static/assets/level/window_R.png b/app-src/static/assets/level/window_R.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0a589b13e49d2299f8a4448ecbef0611f1a2ab GIT binary patch literal 4010 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 XGJIrD&Gmt;*PV@}y+w(+*M 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 Z0Cs9?+DJz89((UG3sY;8D&zB){s*#72+IHf literal 0 HcmV?d00001 diff --git a/app-src/static/assets/loot/assault_rifle.png b/app-src/static/assets/loot/assault_rifle.png new file mode 100644 index 0000000000000000000000000000000000000000..681534e15d754153a2c5237c8c850593b0011548 GIT binary patch literal 4183 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/loot/health_pack.png b/app-src/static/assets/loot/health_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..2b30ccf1389bbb9c5e8f6936e5c2ee5a464ea1e8 GIT binary patch literal 3729 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 pm(1wqf*p(PFLxWiwgBc+aX=7x|nov?mrAW3= z$gW5zI|+>?WJ&LMo~P%1|M*?MKi+d)=bZ2N{@$N^zt44_tG3qW!h*7b000PEpiMBG zw=CzDXIXR3&36$6*G7f6(i^BZ$t78O=Ui?rnH2#`U_x8SU>1 zgZa-xgV}R)8y`0+r!uBC+nF7^!}o|O$4}gp#JKRb;$mTdCa8UrIM5^w zl-NDP3j&D%;KvLx0s{|)f!QAxdVD}%LBgOE(3i8XfFHQY1*9G}KgezH3h;2agi+Kp42HDv^YOJdSJB9?}-ssN=4L5U>uy0lCHQHJ;h_$zKav} zwXWA&+WM@i$?=g%uPHzFk2g76zVj5Y-hqXot;!qRynv{62fN>WVxpIa+Q?NBP~%&0 z8t8Wf&JC@(sSgNby9#y&uU%(qZyM~+x@+5XTz;RRkkFix=iMr`vFm!j)ki49*TYsg zr&|NT^T7EugVdth+{j<&vE;yFOzcz(uMwQQI;FVP7tOA1QKKE>;rj&dN+%o2*w>=^c%PT>$Y$?J8xbvi4c8W)8WuZqX@)Ab z!$Uf&PP#H$fY-2ze=qg`DrS#oY#+FtUn(`07mP(~+zQVFO~;6z0>5dZ<#87n`NX@S z6&E2iapcW22J5VWCJ^G<=Cw+5c;cm}r+7Ya2N=A3pdfqgZMJ_GU1PUfcyf+!mu%^N z-S8JV`CTW!2GD`fYq7ZSF1U!-jZfG!H?Ej^Ty>UJZj{7LIBPn_Y2xIaj|ED|)n;MY z{0F(Ohwq)`KYLlU&M$(+GIzFgHh!Qqt5_;l!S5sxc^O`J2%PZ1rc^0dY^{OeiF(3v zHY-&AeqjHBETyxDME1HTpbv^P-x{|TJfOrvSO{78q6g5BJi9!-Zc$=}rSc4m)cj?f z|7mz3C?&p(wVP#gYoob-yi6SRCT7%9Am<<^FH!7-CP9CK_ud_ZQEK+XQ*8xVANU`} zpzgR@kg@}9VRlyv_G$#ADYd0b8n@&@a(g<{h~C82bFgW8g}~>?{iZ3MDc!zbcTP`D zNB#)fB^)gr*@*T$EaNM4K_*|iOa_)}d7tlnN@|n6+DC+3s`u^Pw% zTp;X%rJb?=L$5-wc(2UK^KD!rZ=Vd$BR^%FXg|;{+(>Gdh{Dhew))*swo z-S0U^o0FWI>1PK}GYv9TGnY{$)M|i0g;vF>il~Z#fR1l^?{PECX@TW;%OcaCyUdqK zKXR9)zOj4RT?)t4H2AexGJbGv+k^2mcdE$1rY8_wl+S>zrnSN?v* zdrXrdrRP;h+2>iP@r5wxdmQUYL=5CLcMR%uK0P4lYgDt%9HZEaE=EbJ?6o{dHJ zWcX%bt3Oo^Y~GBzXPWWm#C5IfjmiDVAuW8#R>`Y{w;lBynU2ej9}6vd&&;UKkb0f` zY~`HNccr7!TV6aUN-t^%OeYPAkBY~sbgL}ek^AAZo3nzmX|p@#kSo{~r4`ajhkWZk zG5KB{x=sj<9?%--N3ER68_}pQXeg+kcJh|& z1v?vf*5&L*)qb028Om9`YNV!thSS4UEf+jcdb))5_Guoyw|d-ng6~|ZzF!R<(ydku z>kUf{+qs#wp|jrdEAD5_2y;<#!J5y5>owN|SJfriOV49aRoQZX@1EG`4*nt0Fv|Tk%jwn^ z{4vAkelg_=M442nwNP=DBZ!C4Z>LJ_=;!IHs=bBdE*sueu?ukpH(u%t_`IM6dKdcm zVf=8j>E+?&56dqxuKYAzND-s&Jt#1Db-bakLHFvIKlhYhntH}~ntd`IS3EJ8^HOSZ zy1gYU=(vlf3oArB>b6+QQ~ilZkdZA++GZl3Y$d;U@p5{UjcIkx&74zD%F0h1zcrcZ zn6#q(StrzZ{amz-S-@L$0UOLwX1vU;mx@bPjwZcd3OhcX{{%rMW+Z0hVuXpwrAI%i zl^rg#@j7}mL3o@wNqQ%jaOK_VxZ;}s(tw0tlx0_LDW=#~MA8!W;3(s?^l3&px(e<3 zL4C+;>)V>5P=sVi6|2OyyyRJ5Im2aP7+hoeN>cHqe>qY1Zf*uWlQ%;yTy?2=e4@(7u%|P6UbskZ;pT*#JL$w1 z`rTlk<=D2;ws&njnpn-b)2%NG2Nv&Y<*o#0UUX}5{8jX*tooC3e{ap_pbJYPk@6Bc zU)YJWmCuhdoP4WHLzl_j-y=T9$$H9F)J%qbE;kRdd6N});ogOvE2iujA3DWv@NrGe zQvni2>*jtmiaL=VPU%mdOAC5Vbv+_dXE^ct(9r#m3uCrl@3z+u*0&9%UMySYpFuN^ zcB5(n3L&|qY~8z6?5{U+Gv&|9n^%|p4r9Z|Z~={)aZXv;nTK^3*2W_e#`5v`S((=Q zx*t*pnX8tYslINf+^W2dJF@hp=-(~N+*g~IzD&ir%~w)?fLA>Sl*&#P=@#pnhf#lx zpdX*6%n(*v=A4cf(|=ga=yb8)UtIU8?eYKk^CQ&l4zr5=c2=&8to(Ujxl+aQ&%l*A zsUX4cmV<7=ag4{C)&0M|?Ofme?PBTH6GAO%_@_s$M@PNOZnlWPm8`AA-|w%Cbep%D z_b8ev-i*ssP>>Urty;vlCyeAj&EMPcF3j;abH@MC)X=ZdjguYDn|<>_Yu7t!ikSsV zH1?x{$EZfdMup0DrtZT1&7$^!P2?$^dJvXI01WXIPXfq-g!Lw12v|Jxd^6!V0Prw~_Re%?D@zoP zLV{wqd7umum4gO=f}1H}#Q8k(SENGM!OT?2_!1tHYn+AuY37+f6!*FtHip%4hrKNpyzjfVF^VNA^a z(Z$*6g3r^KUy5$ebRcahm1)ijE5aaIq~+4DA{HrO8#+^=hJx>>Mas{Gi8WXeF0W=GRtU zzj%X)@2!06Kw_Ox$?NbBUe%C?N>R;>ZnVzfp$i#{8qZ)s5Snwo*MpWM{StSm`;KJou}_5I%TAV zZ#AKRz9(KYVx`2=PZSu-d48Ok`Xv71h>GR?tOi#(mMcT9PD_qmYna|bNw9tx$sqR=_ zEFb9bdZ!oK`9MhhoA@=IcQ4Ej$js0OrJ(LUUt6Z9Rc^}}}Y zWYn?L-AZiHL+|%r)05tF0`_9B`|Bf_{59soL-`4ryX;DCT{PZ0#J_fH-6rN|bgcr{ Z4#11Zw*MfR*tY$VwJ^0dDK_$m_#a8$QEmVL literal 0 HcmV?d00001 diff --git a/app-src/static/assets/loot/pistol.png b/app-src/static/assets/loot/pistol.png new file mode 100644 index 0000000000000000000000000000000000000000..e809db08a0bbef1242a15bf58f97f59500974d44 GIT binary patch literal 4027 zcmbVPc{o&k`#+WnWy!uI(~zgd7&DB_WM40 z7~WfscS{Iur%Ocx+?&R0fxYm6WjUN7@$ehsYx1W zk_U<$pWsD+H~{cxoihak`J%w|4{O6MKyO~`fE>`9wJT2uh~xv3_F1X%8@~X~IA6qQ z@YlQoGC0OyO~IN%zA*P^a4Y_>$}K=plp9;z_zV!1WUA2$fb{qQv)xi{0w5cK46Ux} zp}f=7D`jXtpr$3hE%9iVwscwi8^z%7vqK|$Mqc?Bn_}hmOLz&7f>RSyRHe`p0ygbC z06=lM^W}z~5qn~Mba>or!k_!2K5N5omI5~1GdH+Vaf@FNkg)6E_MILZ>k*(f@)ZSE z`{kVg`dk2?!DSEae&LMcB5y*LBUpNC#=Fxq9h&r&cZqD@KC{;|vr_AGgyApkVaiZM z=pt`-qd#O82uLt#Z2NhzXCRzkdVdSL=)s4n07uKWpcaG>3pVW}KIp=nx z%mHlM$a;>6G2hc1KO#AK0Y0aaur3@MEDCV0+Sk}U+xE1@zb5n>AAf|HTUQWZ96ArV zrMNu?knq-lvz7oLwt6|*_#hw9mYDMy04l!7pL`G}XVV}A0OlDN4-}bf+woGGQzMr8 zQn{i=jvu?#+<1ptjlP8G*3qzCBAN0DCJIh9s9wRRMFNT$JClbcN?yYBL??zMPhOm& z%56O(pZ-d|;;OKqNt2Kib`R?MPS2=baJ!IPQj{PVi`KavmIIo+E`1DK-$cvd&olLn z@j$D7htQ;vktdB;*!@i)_|3JO6;`mgi;s^9yyFive*Qp3@n%B?y_2CM?h%%d<=3fL zvfCi+Sypc6(Jz4v;QY-fTv#Ve%n7&?KAtTizxnH92X$hbtv{-x0qx}3vyq%J={)}Ls~jQx@-l1m>zDnm5ux2cZXQkIeU5d!Oj++@|ZfG>`v?KKg!g< zUGx5oV9FVKaVWbyIXa&R1Ah8gPa?cOr!J>{v}%7_oL{n6d1uL6Mr&)6#sH_6(>xu8 z>`wJd$5wr)=wFMxa?c{Q{z!ywL}NlKC>(j(H*`@8lpIFkEd(`(Zr)5+6YXON57#l4H9#SZ1x zU6RT@hZ%>@(HMcPLH^W=shnY*+Pu2F+DTV$CGSjn+B`z;{!w;|WMWXFoFggsW-j?| zNK5>f;*uuGl-yVI z>X`^z?y ztp0D}!ScxMefU%^}!x?p7^{$MXi_W|C{BXbTGg^>0 z$JZa@kDE>@3oFYnyU4uu(_$`Bk|CugJac2TuD8zM#%DVJgnzPj>S(f40s~h#HjwpP zZhW%6B|TW*9pTPCr+4L!Wa49^u}dIR2dKRLST5OCS?c@clq>cYRauc)$BIkKj_BVW zPjiW1)cbh&yxEG+ReQ_825n(`%t2O+!tLj(^R_PLJ)bxo9|Ar=ka4MTso5A&VnWHm z_gba%2OrP(U@xNlznO%Y@bP$uZfj&6MJRyIAS%$7e zAAhGk=(X{6S#^83?72#IkwaP0lio6>``i$?+Tw+*YJ{U)uqMm{Q;ug6XS>d~__RDu zSa%q4!#IEUWet3f!d&XQchBr#xT{WlUR-kvx$wvF=QtT`Jl>h>o7jEA<-!5E_|qIJ z=Rx7mBFnPz5m&p@-RBlqq`tmSM@nDMOrfW8rpTNn_v%MSDt%45-&~y)El`?^98)?? zI`WB;8REMT)mGB>x=jFqMa-ONea7kko~fI?7?O6uqs3*t;9+Ui2lc+5>W{%^=fy55 z%N+j1jhn7`dXVYrS7~v6f!y^i{A0ADr&4+Kc<9G6t6=;3^ystq&Td<@;7<86DESV|bBFJ&e<_$l@H0kKymV=w<0ynpWOXNNDD?X?57ZG%Y{N*9Et z(5!=9sOmrtB%73BkXgz7aw|Jc`INF%Rq3x#F6=Wdun`gMnx2ui&tPtOG(7fmEC71ST#CC~o7rAG@43Jt76 zsq4e&M<*y#gr$}lSN%f958J83o!qwFm#d2JKWZKXSXj$bW|6z z^5$vWhk1`sjjD|*740m8x%+Dc?fvJuW!&eQU-W4)dKWxW?Q!_DhBn=Qh@$ zOPA+Y!;pJ-@=lcs3=21gBgKmmjHM9(6FkL}0J0`wy$Kis7S9T3Cg=lz0F&tC#&EN> zLE$JQP3)$OCX+C(IGT~ zV~Cv-F2oOq#Dk3tLHbM-PXUR*z=D`0e=;4#Gywmp7sVTIE0%nv2*@FAPhC$PJc5A7BYx}oH@vyIskxpx!o*S= z0f)gXkS5yZ+NOGzmZlcwS{8by|6r}jbOx4;BmA~aJ3EF3i#SzJyi~Bbd^_Sn~1R61jfVZSkNT5F>jUxUF3oH_+ zL(tRKh9I$CaEJ~}j{rf!4|zg72?T@=45ovJ<9J^Dg~$J|5rpzcK{w0gKg#F#60asV zhyOGKZ}Lw&5y-qAqVbyLX9=Vn0QhcNo0~W>`*NHr?P|3os?1_U4iVwo2$u|NGFD!iw4mL3r>Rk-1 znm~DLpR711Sn^U~c4?!rnk~0GffZh}ts-PrU7xPe5OSb7BVenHtD0Y*YEpmAy3f(- zLsUz5v4E214&vegPqV;nZ?c44^j0%u?+o9lLpzKCcXBhh;U^**o{26R#Vg*^Kx@Z< z`OGBSLgFfo2d28TU$rlyY;wW-ALm@Y>NBb4XGNb2zf}Baf53`<`t#ylsga`bmSOQe z0gqJWcP85ih}%UCd9w3GBJj0`Z{}w{8_#XLMri&))=y%(KT)flIw7Wsr`9ODuN;$8 zXPwfOI*MGI#vH%62=y??+{J&N-%*w7t&}NsHFbG*yfDhWUaiQL-Y-9Y#IdD{$tU4) z2nTU3D!)*o(U5v*s;bTXJ>M_l@dHONktw&*+;1GO>UiQ|*SqxOcFUQBzRSqLH{~pn dZ#Dl8K;=zExu*lCV)OfFZDD6#XnH36{{Wqj7IXjr literal 0 HcmV?d00001 diff --git a/app-src/static/assets/loot/rocket_launcher.png b/app-src/static/assets/loot/rocket_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..107ce47e06cbe132b9c31a985c001384df82fe1c GIT binary patch literal 4388 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 YA4@&LB)TbwX2GWCr7AIiwbhX4Qo literal 0 HcmV?d00001 diff --git a/app-src/static/assets/mine/idle.png b/app-src/static/assets/mine/idle.png new file mode 100644 index 0000000000000000000000000000000000000000..f06f3d8466c77c6ac8b73d67079d6b08db682bd2 GIT binary patch literal 3757 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/mine/preparing.png b/app-src/static/assets/mine/preparing.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4211a76ee1cb63423985640b65b5d5a1cb874b GIT binary patch literal 3754 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 YU^ESpj`C!nwobf_0Og*ROaK4? literal 0 HcmV?d00001 diff --git a/app-src/static/assets/pickup.wav b/app-src/static/assets/pickup.wav new file mode 100644 index 0000000000000000000000000000000000000000..96519fcb7f1ba685a55517c622e2237c9501333d GIT binary patch literal 14414 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/head.png b/app-src/static/assets/unit/1/head.png new file mode 100644 index 0000000000000000000000000000000000000000..f300868c6195271f0d9f4a43b8f67c4597e1a7a8 GIT binary patch literal 4104 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 A^8f$< literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/jump/1.png b/app-src/static/assets/unit/1/jump/1.png new file mode 100644 index 0000000000000000000000000000000000000000..63fbd0daef434b0c794126339d23459baf44bf32 GIT binary patch literal 4428 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/jump/2.png b/app-src/static/assets/unit/1/jump/2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff48037d44cf8340390b2dbafcd08672a1b6ec3a GIT binary patch literal 4424 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/jump/3.png b/app-src/static/assets/unit/1/jump/3.png new file mode 100644 index 0000000000000000000000000000000000000000..f115e572afd1eddb69e85d57c07d60d71c53449e GIT binary patch literal 4345 zcmaJ^c{r5q_kV0ANe!oQVe{Q){Y=ixRyVU}Z}>hD<>cuCF92m9t&4sypJBa%lMzOLXt2fcfC6v=)P8kEk@m4)k+pWpE&wPQ7zK;W2yi6X10Cv)9b!O- z6!6gD5rH2_1ppsrh%p$rCkV`cx6tPS-j}2dO9Jl;_LuMi@f<*=in$`EVI6SJDZ*Zj zv-vrYUup>T$A=1o&&-&jnz56Wdgq~jgB82f9_LZjFnUs_TZZY=cH#Vh+<~Ath)CA zfXqhkvmI@Nq?zf-v1yMPpT+O31v}nL6tMom<&mBGYn^gMi_VWt}EGXe_HNYmW>i^Ohql{h+ zTVt>83)JTGoRWgn;v|bHZC%I5wR?PW1BA}P!K4Mv2C__vimX1r#b8^2j^8G*S-M2Fl+^K zO-3LY5cbqWFxLSfrD-G4@CXOcm0mOf0QH}xPTx(Hv})r80Mq=4!w-#i?|CLx+ANgw zOs>9Jk`uej)Nqetv#zl5uF3HI{I{fT7)d)equ+Bse#j-0zb|V{xat{PTX1Gn^)YY%mi*Q7NdDRya+TKCw2nd+CeMgEHU;< zcE>1ugV4lK@uv-cCJl9f5LdRY)SJUoBPvgDz2)>be0o=2=1N<>UoTyAuY3570`Fd# zssnoAPYQ~AkAL>31EE(E@Zr61A&+Yxu&1xZnw`7sDx=&kfuC|kIwvCWa;`@M#ATcF zu#3EkoL9p|=XuXW2|xF_l$2!dYUOHjS7~0MN~D(8g)cG+{`?R)<*sd&Qjo|-3j>F) zNOC<^s{HlffrEKUXATL8o=w3h3cb8OX~Ta|DG6aAVBw7!!a#}~iuC)0NjX-^b4lcv zpC)-L!%IQw$<;}FlWebVzI-uRErxE58@J*sP_!>f6|qDT4W_tn-$WQ^=HENfRg(9X z_g)ZRRk&Qf1O40B(0x^&eCi7K1LoeOMji-=lyy2 z?96QB_rN`ZF@llp7@Ufd~YT0_m{{y)s<+KciRWr zC))L#I9u3wcKgy#ykKQa^s)RHOraybx=lL%phO#jxa?{?Ky&7rQ}fQS#+|C%n70bx z*^~`{23t9p_}%j;^+@)}oxae;A=Fkex`g_WW7&PMTd+GA!UZvaR1A2Pd6b2f9UTlB zY#hWb&=w>X<^~u2skw%^YPqXuGJ4&guU4z}L~V5Kkbln?{WthI<}Bapt5u=dkGZRZ3{p++Qq8HB<$MCF zKgT-{+xVe=Xe&PYwpmWAtT zv6FSl-jj{aW<9xEmR;5okWC&D8y8Dd?NeQK@EwHDZ_V@1XU*?gK&@fdl-9^=J#wA< zMdSu_=sF=Zx_@VY54C=-XiW1(NlVF#Sr<=P&s%=ED@e&Z$CFqh=>h4I4&>r1#lAO# zSZPx-Uu*jwzgaEJuFD=S`#^sCu~V-#^!}!`dbaFK_ZNDLM&Fm#UB@qUPUIG67e8M~ znt`4PIOBF^v*Cd4qa5YD0T{VssO8jX11tC(T3?U&vwN0HzfGU>X3)*p#ygGR5xqu* zuz|45u-#jEn>s&P+lfD##+ctEmTh>>aXjOg;%JDFiFm~2%_YyB$$fh_k|&<0ZWnZq zzPRxoK0!BmS_-9E@|)}iUSrr(Evr}j6>qNiN!g#UPGzeD1N#zUdU!{K!zgz)tY$l( z@Wzdr`^44AlcX~xH$uf!4qX*K)*m=R~smubldc7NLWrRx%O0N$mru+d9vkwi{9l4Kh7DSERCGWEXNykeEHOH!BffU z*=|-|pspLzEh$7hIzuGA(qJkQWNZhOvYjgSwU!h87L^@sYt~p0UvQ$Ly2euX`gE>y z+M4!9olujX=VNS-`L}8C+1ejrCQDy`s<2}1Y&!6%wCBTx4-iypPHIk}y&&mE)sc6w zYL#kRk0VD?1Sgr(WRo>XP z8+WyL`sT$P{+3`L*?0T4$&pJgnrS7eFIm3j-%mcpi(}IWPK#dY{imES9+pfyTS_gx zTmIwWv6|^|7n`&FA*)RC;NU0A>Q@VMn7N`k-_murrU#Y{UPk?|W0nNVWS8ToWY3Z< zKhbXmd95aNRdv1U;zDAP3#U4tln#BnrB%2VlzY*g<-A>Xzq;{*^58(z$H3qfp-4G# zollFY^YxF9FkHMF%tBXv`@UZKm?(pjt!8WulaE6kNUBWK=N{VQw{K7sddM<%-D<>#vCEpJR-N|`7o6zApI z80fvt9A>UtZDo49pKx#RH0jARkfeXLsy@5^a^=%ZqWe-k^*eYSH>6a3yiBiL&peE} zJ%)L3iZVxBXDztsmeapm&*}6ozPb3*tGVCr-H&(b?l+kYi*56=)xOFf_tz-ZuKoyE zTaXOo|7tbt9+b#UG- zvO-(DU-AImuFx)D-_6upzOz-Py z9<{O=j#ApkK2=K7&0OgY6c2hJmPQ1O2oxL8{pR zXgr0ij{U8p&LC6SXaLYPU{JAmZz3IpBYKj2^}vgDO<)j-pa*tATEncVCdBh3Oc0Ie z5M<+s5Aw#N2w($!kS+twHb5rQu^lFxmw$S zOei!W2&t|G!NWC?pra^txR!<{3Z(`@z~I_Ym^Kuy0fB3wHDPE30`$)XW_zO%Jka*0 z$Nurfp6P+l)9F++6dD*9s2-@HPN8{1;V2Xe3PV5<2nbsP;>Yx*V;K-%KZQRQOo@JY z8i`6LQG7waEn;yLf4Ux+&GhdO$W&|Ve+~Qk{gWtm%AgD^6$)2}LCNIbas8$3N4F>b zKaKyY?dQm(5~21)KZ-vM&)yFYg+E|+?*6x<-->KDXj>Zl^x%v2F{R-B$wXheg{dBx zy`oMa5zqt_jEE!<;Sdi^A`+shp+$gbBd|!wQ4O3HPLqHn5(vmYcK#b)Tg%8)3kEkm z2GiDn!_81e8fHk8ktPy})Y5`!!~Vru`1;YYzIfsv-z2v0f3PP16N@&X5wUa%&5=U! z`BMdU=P7iG-+2lZ#QpY*kVvWUz;({gr7n>A$dm z;czG|1OWv>5^yMpCKiE(;BcA<2p*yBf%DMRMxo$Z;D7Lh|H$CqmCBZ|Bcc8wghmpu zNKFL0dbD6zZ3rHxiGrZC;YT3^I0CN)gCS8zwU2_KY>Lp|#q%G<^hd<5(BH#cjfVevhX;z>OhqyFxsl?Grq- zFjnHl(HP2+p&$7=$RKW^q;}LsXse+=@=bceBPwdeVEQ&zpiArI9MQX|2~?qHR}zP zWne;P69iU+ogW%DM(#es#aYceEczsCz%3sUA*!#QwjfNW>oT9AWna^*Ure}YZK*TH zRuegmYIGl9TplHPIxZhJa9L4>iA-=%G-}&^WVoDr6#x44n2zlw6%h49*}l545xyyo z{ga1Dx7P4OnxeY|6+{$-q&iehq*#YC2J1x9j&@C1rM`c`CVx{^G389eQ6d|GVJ ztK9gA&MDUEtVdBBb2GX+y$9a#9dds*noaq+IS8=~KX%H5U~8Upz5fONrGkz{@^I}l zR+rYh5v*9a;nVN2<mJ(u5XF4t64-@X;mG9x|0^iV(zDz~6*70ogf_1%AfGSF_Rrn@Lk>+fzx<}jB# zb8fc?*`{yYKQJ81o2jH1a{&k9GPjn$#VAnuB++J2C(6Y-zJ{u{sZfY0Z|dhr(0{w! zb0&80TXeK)vPe&{6#n`z@hi7~ysyagbj8H>Y9Bm4zw5Cj&(6q1#|~~={2XvySvNwo TZTkH0uZM-1jcK{@xl8{Cskg9= literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/rise/1.png b/app-src/static/assets/unit/1/rise/1.png new file mode 100644 index 0000000000000000000000000000000000000000..52e344e5cecf986ef070fd284a434d1d0a9b7ecd GIT binary patch literal 4269 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/rise/2.png b/app-src/static/assets/unit/1/rise/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccb253b938499fb7e7f6bb002508afbb0075020 GIT binary patch literal 4281 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/rise/3.png b/app-src/static/assets/unit/1/rise/3.png new file mode 100644 index 0000000000000000000000000000000000000000..769b29d341228b27bc88a68f8cdf37ea3b006e12 GIT binary patch literal 4178 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 TTm$d#kBhm9wQ;H8xrqM(9}UcI literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/walk/1.png b/app-src/static/assets/unit/1/walk/1.png new file mode 100644 index 0000000000000000000000000000000000000000..897cd3bf2cb56aa97564a46f72edc9b5cffe0649 GIT binary patch literal 4436 zcmaJ^c{r5q_kV2JvSg29jEFSG41*cjw^6pNqfN76n5{9E5wet&vSiDeEJ=-4MY5K% zMij{s%97AnLJIw+_kDYR-#@&;NY)vvxXfdZUZgEfKv#N+WfuC;&jZo;!dVP)T-1H@DSA^U9*f_(76W z9nbs(UI4%XA1f@1dCzQv=PnK41?YV`d!$;%f5p|fXm|mjRA3A&H7&}M;tI6txVOpx ztqQy(roWT%dtXRToFMYA^Bf1CmbNoI#(-$$mb13(vja zhQRWpz@R7KKe~QgZ%DZCh{)^k^+cA@hPiUVb(huyyLX9*iq5O!uGi^)N;LhYH%=Q% zj9TTcZViPm0H<=yvnv{l<2FxWsUde&9*p1?O zO}lFw<$1B&tj)LYX*?ilxoskPm&kR6OpBfFji>?sNB8&?3wPvjbR z(&e|ER490+P#Z7IZ_z3wja5Y@?7$@rfV+g`vy=G2ShW6?=n~LOg3Mv?i&jPnZ@Fba z>T$H%5`-axynM|3N6Jtu2!3(nVyzu4J?6n-zPG%==1*>_C|-P77}UemmpC4sSrpi# zSgC9h{kW*C=g{Y1CJ=cs2_M}96ZgIJ9((N4d7G0LFp3&2a`;IM!ZR6x-;FU0kyUCe zz;cB4@Fqq}&k3D4EBTBZo04LOallyJRG(9;l&TT(5{^3yd$t#xcGJ01JzQ$NIShxo zpMtSvYkXBzRxMCJu~%H$Ck?$vyzR<_lZdK%3fx}QJ`g>GhLpIKnD$DN@*Ff~Qz&g8 zCWIbDvq4#@RVflF&R2f6J)fwOLA^-$=pbCQ$F(F~>L7w>HpyRl4Q`oTc}NSv}w*6Xa^z|Vp+ z(=&13Lbr>>i^a8|ahf{=cb?u^rckvLn(c5y;7wL`tGn(yxKg&?Rf(%K56r&ReG#&$ z?NS-249|?HjOknM9zh;veXLue?zcT8ZlCasykYC{(B)IP@LRdtedW77o|YTj>2eKq zO?K%%>{DFtvl;sXFZLk*oNZw|y4W3G^>XKBRk@dN;v&YfpW(?jyFc)%Bkt&f^*M(S zfuBkt(9;fXRzbIX*}kd1`BSG}@rb{?Kem8;pLeiJwM(q)G=vXg2D#rKP~lqUg6a9@`TO%%P!!Z!uyBn*&EcAJHABJOUrgWNXIV4CEA1=dGb25A zE0k}=EAn4B{hS^ZLtT9#gOr_Qm=S)VGX?)S@G7agXW{Jl%^e;7HL1=1#Xa`Ld#g3R zp7;BN2$MJUWz%-y*!mxc!+{5|I1+rQq`Bn9M7`Fl^uQe7nx4ux%+Ai%{ln}5cH3MM zvM(>N09*gQc4*`Bxl)_F7Y7p!5?e9{Gb1_#G95G5*jGJGJz1VBp6}T9{l{ka&rz|RrOWMYWMEW zT~fRIjhV&~3}$d=2$^0xTQaWyyu7*m`HYvJlHc{9{AGmvjYBCNQduEc@@|x}i)GYn z;T;*1ieGDbAH7*A&V8CYT=AarcBIqfMdaim>nmRt60 zIb|ApBIJbkiJx`K&JXi63i@>^twYU6$LcyxpG29O5Px*d@R`0e<-Hbu?R@=>dhn=8 zy;@X%RCbi$M!`?xA03;?-y6nROLB`&0w;NzcqV!3ViaQ@@&)p#@MrUv3L*q93q0Kh z-EJytxm{SyTZNHEYm{G7TF2`R`|Z!^k!=^smp!8NL$_1ILAifNQhc}2sALrF#=65y z=VPISF*|ZXwF+rxw)}dejMhH*EuAliE8Uo$;98894>ky zKQ+_UQ4o5-8{wT2VRY`QRMrEt$vBXu3sk{*vW)7uTYBki?m1_h`l8E4hwoQaA3Shn zD&I3>)o8>x(&~qQyt8faOFdy{S8Z16&MQyUmK{B<`#-R|-=BI9L8j-W=M}q(kuoc_ z-|1FqRyq4>Yp01#u%;;ON@?fY*Cy1~gO-P6$>$t;iYs03xQNR+KyPY?9aT6QR*kMh zA9<@c>bv!2T}?DrE}|~wo=f$;hXd7N-iu@42AijHYKd<0p*pbRt~G=((n4=!hkwU| z%uSb%7*~&_0M_tQl51RVX{nWVte1X9d3sw1_0G2=Pw=wX41xzIAgk}F=b3%-89r<} z`{teR_iU@DK6*L%^hK<&D1(C^4pz0#&!T5bW~uBo?}obv>jEtLUdJzpRVXc9o>cOo z9Q?q%9v-lg^s4ez`zt;K7BPRc^D%p9>AFGjYIy#c;~k!x6}PME-)ju^H;jayUKWqr zEo=ONlRj7bNIT3cu+AoOh1&Zyb|hI5r&QB06*W?A7wY_?Ao+CZX~9(+&TIgaMjpP~ z(C|Q*;%abN8I7V(=0?*7bLVqHAJLEO6Mtqg*|c}`M#Sk)E}yS=Js*DlYBc*y)r!z8 znx)-~Y6xaSiYbLA*XuZ+FBRwSKC#=bzUo&L2lfdc+=58t3#E~THEr6>Ez=Jwe)Y`HQbPT)u9TLJ0^Bf z^v!Yf-J`Tw;#$YN*MU3CZ;rFZJ)AdZegri31-<+JPUrYFRvqW%oKh84V`Nvgdd4{m-D{2}q>Oy$;nVk2ej`^mB=;p_thq^Hv0}G<-iQNr% zSmnzM&h7HMs1~&rmD(NQTimstZPBo`yw53iZTXVyF%VoLe2fn53weyc9;2^pVK@Ah<5f2&!uYh3P?H1}J@96dVrv=K^!RF$lgW zS8LmUd~s(cV1Fi)j)Fo%Lql~!^>kJt$VeLVvL#0ZW>Kn(S81~`2Jf=D1B{@D3%cv~YYm@Ui_ zW~*zY2ZPxlE%a;=;HC*xbb=reH>B`g2Nl>L$G)QI1!J>;^1&B_#ZssKQj1trE(?QNa%kEp>Qw* z149_n7lJUr!XX4BeJlir(=~$NeRXlZdRRl8AAI$|p5%kiR#ZqR&5GSa}{u>j?2e#_Uq6iIVJPUhlZopQQl` zoHKDbSWeczAJu^6AMnOMn=SKxEuC&QykHN#4^ zT9u62Wx~GG_43T7V+E71Y&VtMRvl?rqly4+nqHED`PH+dp#%J)sp^?o(LxcRTE6%$ z)OFe~BfGmLzuab{5ALDMBo6VmT=YpQ#b!0|;ChH#(T!TY#%uh{)u-46OKB-xP^kuX z;-GtGhlRF6WNt@-oZ528+oMmY??)1lPVnzOmnt99jAISsbhbb1HnS6z^IET{dW#*C|MjGu6H*hfcyz>6K+)r= zuz90OOBQB_tk9!ln(p17EMyDJGdX*u7ACeNI_4*vg!W`c4c!1c^CX!|cg_tQhSr9g zilW4mnGqSt6kY=C(h1@C7g`s#Yr$8ijHN}Dmn=iCDHSBynrA8`Cs{5XLSS5kN3I^* zWy%wYScY2nC&=il9gTabJWdI zt24U!1Qn|@{X<+FBMKZWm^!NMJFSay@+<24+M0QdwE7yQrb57mvl8~yAO3MU8|kq+ zWc-7yyYi6Ije6AmY<_+xCp9sQv7Ts~<)bTpzXTM3rh=0rq_R$j-ybG>8z<{KmM3HX E5ACYcqyPW_ literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/walk/2.png b/app-src/static/assets/unit/1/walk/2.png new file mode 100644 index 0000000000000000000000000000000000000000..41cb2fb6091524f0db3020bac8d19c30591487a8 GIT binary patch literal 4295 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/walk/4.png b/app-src/static/assets/unit/1/walk/4.png new file mode 100644 index 0000000000000000000000000000000000000000..495293a40bf1153e24ab3e757651b49e0415ad90 GIT binary patch literal 4556 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 P-!@aDvxdd`PS^hf=5O}1 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/1/walk/6.png b/app-src/static/assets/unit/1/walk/6.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd62f65a7ef2018464ad07983d8b2e68b1efa9e GIT binary patch literal 4300 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/hand.png b/app-src/static/assets/unit/2/hand.png new file mode 100644 index 0000000000000000000000000000000000000000..c68e4cbfc67f98930cea3d3321a981e72b7dc9f2 GIT binary patch literal 3930 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 NjpZ?mVl%G`{|D`br|JLz literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/jump/1.png b/app-src/static/assets/unit/2/jump/1.png new file mode 100644 index 0000000000000000000000000000000000000000..09b774d08fd2500f67cf5d963c0b5260d9497ce3 GIT binary patch literal 4305 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 xQ9G&@v7Ik_J&@ks=`oh`kC(p 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/rise/1.png b/app-src/static/assets/unit/2/rise/1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3af99b4da5a28216827ec9e8f97b2f8311d3fd GIT binary patch literal 4129 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/rise/3.png b/app-src/static/assets/unit/2/rise/3.png new file mode 100644 index 0000000000000000000000000000000000000000..01346e365fb2de72f7d2d832c3d15380e7e11474 GIT binary patch literal 4130 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/rise/4.png b/app-src/static/assets/unit/2/rise/4.png new file mode 100644 index 0000000000000000000000000000000000000000..2c600a405bbf90f0a2420363ea6d2e86b00c08ef GIT binary patch literal 4125 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 EA7;5;$N&HU literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/stay.png b/app-src/static/assets/unit/2/stay.png new file mode 100644 index 0000000000000000000000000000000000000000..75b31cb39926fca145ba8b02a9264175e52b9244 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/walk/1.png b/app-src/static/assets/unit/2/walk/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e90707118c3e464218d3b0f51630e08314d8ecd1 GIT binary patch literal 4150 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 AW&i*H literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/walk/2.png b/app-src/static/assets/unit/2/walk/2.png new file mode 100644 index 0000000000000000000000000000000000000000..16cdad77b6f2f608d2c450ce08bde8ea6fb11d6b GIT binary patch literal 4282 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/walk/3.png b/app-src/static/assets/unit/2/walk/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b69ea91296c66860085163e421bc18bdb8f0146d GIT binary patch literal 4360 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 Hcj^BC(z(Cv literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/walk/4.png b/app-src/static/assets/unit/2/walk/4.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7febf1d314a20ef4bfd0ab6c309b65e547d9e8 GIT binary patch literal 4277 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 C(M;d~ literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/2/walk/6.png b/app-src/static/assets/unit/2/walk/6.png new file mode 100644 index 0000000000000000000000000000000000000000..18a390bd23a73e009ca9a098905f1342be9ef0f7 GIT binary patch literal 4288 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/hand.png b/app-src/static/assets/unit/3/hand.png new file mode 100644 index 0000000000000000000000000000000000000000..65a70b7b93cc27be78a707b54d14647653b86842 GIT binary patch literal 3940 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 xqf?Z02#{{{VEp=*R#7 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/head.png b/app-src/static/assets/unit/3/head.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0120e6078f120bd26823ecea0c4fbe1e320227 GIT binary patch literal 3911 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 X?-oSaz2I%x`|Mkoo;E2ra*O&uXqS&G literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/jump/2.png b/app-src/static/assets/unit/3/jump/2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6492694d58c0986e3b9437038095e420d1b08c0 GIT binary patch literal 4254 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 F{s*2(a=rin literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/rise/1.png b/app-src/static/assets/unit/3/rise/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1166aa5b4e4c1bb80db9dcc147dde4210c63f986 GIT binary patch literal 4181 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/rise/2.png b/app-src/static/assets/unit/3/rise/2.png new file mode 100644 index 0000000000000000000000000000000000000000..36d0f9b7df3db670b2f09a15f5537df7f447a077 GIT binary patch literal 4188 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/rise/3.png b/app-src/static/assets/unit/3/rise/3.png new file mode 100644 index 0000000000000000000000000000000000000000..81c351ccc43eb26eddea742ef30c0b5e68f493dc GIT binary patch literal 4114 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 Z2J|KU9PYmsUi9m5wY74vthDex^FNK*KXd>9 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/rise/5.png b/app-src/static/assets/unit/3/rise/5.png new file mode 100644 index 0000000000000000000000000000000000000000..56da834ac7ffb816294c881a806359edd1ae7003 GIT binary patch literal 4185 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 Y7Cg@@SC?snUmsUXvlFHj#%Ch`2ersOBme*a literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/stay.png b/app-src/static/assets/unit/3/stay.png new file mode 100644 index 0000000000000000000000000000000000000000..bfad3cdc006dcbae01fec00daa30b57ecc14bf71 GIT binary patch literal 4251 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 Cw2$Th literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/walk/1.png b/app-src/static/assets/unit/3/walk/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c365baaa206d4a2a4cfd080ad13f87dc96ea0d0d GIT binary patch literal 4146 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/walk/2.png b/app-src/static/assets/unit/3/walk/2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e435da1bf980d30d7e7f9c623f8ba689af8cdc2 GIT binary patch literal 4276 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/walk/3.png b/app-src/static/assets/unit/3/walk/3.png new file mode 100644 index 0000000000000000000000000000000000000000..7b91d8a46a98cf96d481085824d4f7748007494c GIT binary patch literal 4341 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 qlizZFJv8x^>ei)5l@>N}?*u{@tl3H!Dk+k! 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/unit/3/walk/6.png b/app-src/static/assets/unit/3/walk/6.png new file mode 100644 index 0000000000000000000000000000000000000000..79fd0b58a45cca29fa37912d79a78a464359f8a8 GIT binary patch literal 4266 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 Lo-ruZcMktQ5h!l| literal 0 HcmV?d00001 diff --git a/app-src/static/index.html b/app-src/static/index.html new file mode 100644 index 0000000..f4da52d --- /dev/null +++ b/app-src/static/index.html @@ -0,0 +1,62 @@ + + + + + + + + + + + +

+ + + + + \ No newline at end of file diff --git a/app-src/static/levels/level.txt b/app-src/static/levels/level.txt new file mode 100644 index 0000000..26ccb7a --- /dev/null +++ b/app-src/static/levels/level.txt @@ -0,0 +1,30 @@ +######################################## +#.................#....................# +#......................................# +#.................#....................# +#...........H#############.............# +#...........H..........................# +#...........H..........................# +#...........H..........................# +#.....########^^^^^^^^^^########.......# +#..........#.............#.............# +#..........#.............#.............# +#..........#............##.............# +#..........##..........................# +#.................^^#..................# +#...................#..................# +#...................#..................# +#.....T..................^^^###H###....# +#....########..................H.......# +#....#......#..................H.......# +#...........#..................H.......# +#..#...............T...................# +#..#............#######^^^^^...........# +#..####^^H^............................# +#........H.............................# +#........H.............................# +#....H#######^^^^#^^^^^^^^######.......# +#....H.................H...............# +#....H.................H...............# +#.13.H.......T...#.#...H.........T..42.# +######################################## \ No newline at end of file

dPRD|1MVn~a&W`bh^G-( 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 Vf#+A?`4xD61)g7l|1Yk<{{X0mmd*eG literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/assault_rifle/bullet.png b/app-src/static/assets/guns/assault_rifle/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..74ccfb663275bc6d13a69e070bf2ec5430435ece GIT binary patch literal 3743 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 Vu(KxO@bI1f(a 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 JnW6i&{{fS;;%EQ> literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/assault_rifle/shoot.wav b/app-src/static/assets/guns/assault_rifle/shoot.wav new file mode 100644 index 0000000000000000000000000000000000000000..8cf8eba4e710dbd37c3148b5e8ed6999c632a55c GIT binary patch literal 11638 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 BKk5Jg literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/pistol/bullet.png b/app-src/static/assets/guns/pistol/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc8caa5e8230f5d5b2a4fd46b4e4f01e43a1d3e GIT binary patch literal 3676 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 JnW6i&{{fS;;%EQ> literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/pistol/shoot.wav b/app-src/static/assets/guns/pistol/shoot.wav new file mode 100644 index 0000000000000000000000000000000000000000..875153596e803bdded8f19fa61c34f9cbda5ed93 GIT binary patch literal 17318 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/rocket_launcher/bullet.png b/app-src/static/assets/guns/rocket_launcher/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbe4464d368c664a17b5cc357c8539c7514f37c GIT binary patch literal 3784 zcmbVPc{o)2|38)rA;~ToBW{Z^W*C{tzK$Xq+o+T=GZ@U$7|f_dQp%n!YeJ!hHbt^k z3XLU-gtC*+kS+Uf+{}%6a5n9lew6AL z27p!BLJbnGxe_-3++_(#<2MnJBF<9MJ2TNvb(cCs&{>g#Is3}JOs+?sh;llm_d~h2 z;OT{6?$p%ErQaugL)SG{h4M?I`vpM~qnuY> zTiyV`v;d14!gy%3%J+Z@@B_3C&ApQK0~_HL_UbMGC;{jPOO9>li^l*BnvM-pK!Y6c z(BTO|1V{n^Kh}9uFmO){n4GgV+yZnJCHBe!UAeo9gn$@6AZ?%3UVh^jfV)!|MuWfh z6_CR=25Sn|mhgqTK7(8FhgNL?0%Ni9JB;0d&@@wxCIF5d{E+ zrM8#rdPebMqr(HEo@0L8xi`7%zSC5&p~_6(dSx`fARuw9mD_!0WTaDoR?qh^pvJf8 zB+%^)c=s*2Y4-@{oDg{*ycEUKTQ%O3ecQf4Uun0<_U%(@9=EHshN28Nv6FbHcG=)(X$5hwrBQCDR?r$5^d2~uc`uYs^TDd*g zwx0DIlVGmWm^>&sei1&SoU$gI7$gR;uh`Wdd$#Q<$FDZz2OocwIJP|yFb~UTFnO3VVE9;3I#4@$*7uh3ju~{M#5hJKRE3a(&wrO7|Fq zKFcj=JNhkv0bIBqiw|vsiF-zW#+{13YTOWNWsAQ|1{zH7%nMCwn@x~j&$3#@r;^EfYt$oowXh^<8zG1rrDbq%MBA(p%by(xZTP!_)<-tNXq6B@oZZ9PstUYfKC+_It= z2t8-xVCH|%lkJ({nKgR0nNR%fqyA~+=gcE5DlK9y=O6+QBgmsppJLDAkm5t#!QIu} z9#ixwnW>3xZU8OII7=gI9z{ki1_)Q^RvfR0sOSl3{ciXHKfxLoo_{wlKK`Z6YMwlo zH!u60+sSQHKBT21q#G~q2h+n(H^t+>`Q9Xzw@qIjDBQ{Mu1Ki!&TF&I`=ea_$5pQ( z1XI?~lTF?2!Pfao?Df^hd63{e`E~hkhO75CC;6s(R_q$_}MGE zWQb;=lj)ONr;rP{1+@k8LaS2KZb_xi z!;Hh{>5PD;KtEdLME-!z>!P}%*W)f;ie9(Y&A0!8{J+Ta82f>7qNq9n})IqG74VJ#*aZy z2cC94y;8Nu?n$P4cBdA(p{MR-e--DPJIc_2xZE->VEERM|5os=tJQa_!F>kRsv(^r zX(8KIvsVr;bJpU1)eNwH%FG6uVu zzm;EPxiU#UO?K&m)cynTdz#;mmpU-cG8Q#D*~6|YURAL(aYfP35BK;yqX&Aief%(f z_{og&(DHlbVa%()EM`(A8N2ohPhA_X>#8%jHssGg=9jLWIh^j8!oZh|^yWU79UX7s zWC!WHB3$Fo>qXp@Onq!L5)Lx8hsxQF6i{rHcKy7Z5n*Rhog0&T{83r?5&avZSzI+j z$FyG7qRncWuiJ6ADlfCvY$I9551X|_70W2lPfxe6U*Gz4m?E@{aEpOV=L}Ysvk;+-u!iU%T$$iVI)OUQgQiaCM;Fs>!ND z)lxMkE=yTiQB0xgC!r;Apx|-AuGV)U&Ks-=|NCQoYlACCTd}KM)7zJ#T5C#JMYDA7 z{h|k`dewU6$`+Qv%-z-EmYxgTa&ARmeU)1yjBks2Vl7EBMSr3Zy+Ltwfn9W4|b4*L57^R&?ko+ymD<=?t^ zGXtF4&g~a{8*BpQQ6 zrGPdWaURqFh5?vo>0d68X|}fi5L5jB4iqnBP$rHBg=uO*$>dGH{*?A-V2J;3#=lDY zJF;j*D2C`y4WQ$B`S4Wz4d%t}zbo1lc^js)$q#oVE0}0L=TL6#xJL literal 0 HcmV?d00001 diff --git a/app-src/static/assets/guns/rocket_launcher/gun.png b/app-src/static/assets/guns/rocket_launcher/gun.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd8f944ea9df0a151ae3cd3f5b7f50397fe9120 GIT binary patch literal 4258 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 literal 0 HcmV?d00001 diff --git a/app-src/static/assets/heal.wav b/app-src/static/assets/heal.wav new file mode 100644 index 0000000000000000000000000000000000000000..fd055df632b9e66db128494db670f0ce08c6399c GIT binary patch literal 50692 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