From 27f6b11f8ffed0cc1086aeb2450a7a9d5a931abe Mon Sep 17 00:00:00 2001 From: lionarius Date: Sat, 4 Jan 2025 22:44:43 +0300 Subject: [PATCH] . --- DoomDeathmatch/DoomDeathmatch.csproj | 4 - DoomDeathmatch/asset/font/doom/atlas.png | Bin 28425 -> 48007 bytes DoomDeathmatch/asset/font/doom/metadata.json | 1768 +++++++++++++---- DoomDeathmatch/asset/model/map.obj | 101 + DoomDeathmatch/asset/texture/demon.png | Bin 0 -> 30035 bytes DoomDeathmatch/asset/texture/imp.png | Bin 0 -> 47331 bytes DoomDeathmatch/asset/texture/pistol.png | Bin 0 -> 32674 bytes DoomDeathmatch/asset/texture/shotgun.png | Bin 0 -> 20513 bytes .../src/Component/HealthComponent.cs | 33 - .../MVC/Controller/HealthController.cs | 31 + .../MVC/Controller/PlayerController.cs | 45 + .../MVC/Controller/ScoreController.cs | 22 + .../MVC/Controller/WeaponController.cs | 74 + .../src/Component/MVC/Model/HealthModel.cs | 35 + .../src/Component/MVC/Model/ScoreModel.cs | 18 + .../src/Component/MVC/Model/WeaponData.cs | 54 + .../src/Component/MVC/Model/WeaponModel.cs | 29 + .../src/Component/MVC/View/HealthView.cs | 23 + .../src/Component/MVC/View/ScoreView.cs | 19 + .../src/Component/MVC/View/WeaponView.cs | 31 + .../src/Component/UI/SelectorComponent.cs | 2 +- .../src/Component/UI/TestComponent.cs | 20 - .../src/Component/UI/TextAlignComponent.cs | 4 +- .../src/Component/UI/UiComponent.cs | 26 +- .../{ => Util}/BillboardComponent.cs | 2 +- .../{ => Util}/ControllerComponent.cs | 2 +- .../src/Component/Util/CopySizeComponent.cs | 25 + .../src/Component/{ => Util}/DragComponent.cs | 2 +- .../Component/{ => Util}/GravityComponent.cs | 2 +- .../{ => Util}/RigidbodyComponent.cs | 2 +- .../Component/{ => Util}/RotateComponent.cs | 2 +- DoomDeathmatch/src/DoomDeathmatch.cs | 66 +- DoomDeathmatch/src/GameObjectUtil.cs | 35 + .../src/Scene/Leaders/LeadersScene.cs | 33 +- DoomDeathmatch/src/Scene/Main/MainScene.cs | 100 +- DoomDeathmatch/src/Scene/Play/PlayScene.cs | 136 ++ DoomDeathmatch/src/Scene/Rules/RulesScene.cs | 45 +- DoomDeathmatch/src/UiUtil.cs | 160 +- Engine/src/Engine.cs | 36 +- Engine/src/Graphics/GenericRenderer.cs | 25 +- Engine/src/Graphics/Renderer.cs | 20 +- Engine/src/Input/KeyboardButtonCode.cs | 11 + Engine/src/Input/WindowInputHandler.cs | 10 + Engine/src/Resource/Loader/FontLoader.cs | 5 +- Engine/src/Resource/Loader/TextureLoader.cs | 3 +- Engine/src/Scene/Component/BuiltIn/Camera.cs | 3 + Engine/src/Scene/Component/Component.cs | 8 + Engine/src/Scene/GameObject.cs | 40 +- Engine/src/Scene/Hierarchy.cs | 2 +- Engine/src/Scene/Scene.cs | 26 +- Engine/src/Scene/SceneManager.cs | 7 +- Engine/src/Util/Timer.cs | 62 + EngineTests/src/Scene/HierarchyTests.cs | 20 +- PresenterConsole/src/ConsoleInputHandler.cs | 10 + PresenterWpf/src/WPFInputHandler.cs | 10 + 55 files changed, 2547 insertions(+), 702 deletions(-) create mode 100644 DoomDeathmatch/asset/model/map.obj create mode 100644 DoomDeathmatch/asset/texture/demon.png create mode 100644 DoomDeathmatch/asset/texture/imp.png create mode 100644 DoomDeathmatch/asset/texture/pistol.png create mode 100644 DoomDeathmatch/asset/texture/shotgun.png delete mode 100644 DoomDeathmatch/src/Component/HealthComponent.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Controller/HealthController.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Controller/PlayerController.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Controller/ScoreController.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Controller/WeaponController.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Model/HealthModel.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Model/ScoreModel.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Model/WeaponData.cs create mode 100644 DoomDeathmatch/src/Component/MVC/Model/WeaponModel.cs create mode 100644 DoomDeathmatch/src/Component/MVC/View/HealthView.cs create mode 100644 DoomDeathmatch/src/Component/MVC/View/ScoreView.cs create mode 100644 DoomDeathmatch/src/Component/MVC/View/WeaponView.cs delete mode 100644 DoomDeathmatch/src/Component/UI/TestComponent.cs rename DoomDeathmatch/src/Component/{ => Util}/BillboardComponent.cs (96%) rename DoomDeathmatch/src/Component/{ => Util}/ControllerComponent.cs (97%) create mode 100644 DoomDeathmatch/src/Component/Util/CopySizeComponent.cs rename DoomDeathmatch/src/Component/{ => Util}/DragComponent.cs (91%) rename DoomDeathmatch/src/Component/{ => Util}/GravityComponent.cs (96%) rename DoomDeathmatch/src/Component/{ => Util}/RigidbodyComponent.cs (95%) rename DoomDeathmatch/src/Component/{ => Util}/RotateComponent.cs (95%) create mode 100644 DoomDeathmatch/src/GameObjectUtil.cs create mode 100644 DoomDeathmatch/src/Scene/Play/PlayScene.cs create mode 100644 Engine/src/Util/Timer.cs diff --git a/DoomDeathmatch/DoomDeathmatch.csproj b/DoomDeathmatch/DoomDeathmatch.csproj index 3d2f171..e1baa34 100644 --- a/DoomDeathmatch/DoomDeathmatch.csproj +++ b/DoomDeathmatch/DoomDeathmatch.csproj @@ -10,8 +10,4 @@ - - - - diff --git a/DoomDeathmatch/asset/font/doom/atlas.png b/DoomDeathmatch/asset/font/doom/atlas.png index 7c76c050e360e9fc5a9d3279b179cd47929aadbd..83f3349c860ee6310d2add04a746d68134e70e5d 100644 GIT binary patch literal 48007 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 diff --git a/DoomDeathmatch/asset/font/doom/metadata.json b/DoomDeathmatch/asset/font/doom/metadata.json index d4e15d3..53caf9d 100644 --- a/DoomDeathmatch/asset/font/doom/metadata.json +++ b/DoomDeathmatch/asset/font/doom/metadata.json @@ -4,8 +4,8 @@ "distanceRange": 2, "distanceRangeMiddle": 0, "size": 32.875, - "width": 184, - "height": 184, + "width": 248, + "height": 248, "yOrigin": "bottom" }, "metrics": { @@ -31,10 +31,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 31.5, - "bottom": 153.5, - "right": 38.5, - "top": 183.5 + "left": 91.5, + "bottom": 217.5, + "right": 98.5, + "top": 247.5 } }, { @@ -47,10 +47,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 138.5, - "bottom": 17.5, - "right": 150.5, - "top": 28.5 + "left": 36.5, + "bottom": 1.5, + "right": 48.5, + "top": 12.5 } }, { @@ -63,10 +63,10 @@ "top": 1.0494296577946769 }, "atlasBounds": { - "left": 39.5, - "bottom": 153.5, - "right": 51.5, - "top": 183.5 + "left": 99.5, + "bottom": 217.5, + "right": 111.5, + "top": 247.5 } }, { @@ -79,10 +79,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 110.5, - "bottom": 30.5, - "right": 132.5, - "top": 53.5 + "left": 0.5, + "bottom": 13.5, + "right": 22.5, + "top": 36.5 } }, { @@ -95,10 +95,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 176.5, - "bottom": 172.5, - "right": 183.5, - "top": 183.5 + "left": 240.5, + "bottom": 135.5, + "right": 247.5, + "top": 146.5 } }, { @@ -111,10 +111,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 58.5, - "bottom": 115.5, - "right": 66.5, - "top": 144.5 + "left": 32.5, + "bottom": 148.5, + "right": 40.5, + "top": 177.5 } }, { @@ -127,10 +127,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 67.5, - "bottom": 115.5, - "right": 75.5, - "top": 144.5 + "left": 146.5, + "bottom": 148.5, + "right": 154.5, + "top": 177.5 } }, { @@ -143,10 +143,10 @@ "top": 0.92775665399239526 }, "atlasBounds": { - "left": 172.5, - "bottom": 33.5, - "right": 183.5, - "top": 45.5 + "left": 236.5, + "bottom": 235.5, + "right": 247.5, + "top": 247.5 } }, { @@ -159,10 +159,10 @@ "top": 0.80608365019011397 }, "atlasBounds": { - "left": 90.5, - "bottom": 15.5, - "right": 101.5, - "top": 28.5 + "left": 236.5, + "bottom": 221.5, + "right": 247.5, + "top": 234.5 } }, { @@ -175,10 +175,10 @@ "top": 0.38022813688212925 }, "atlasBounds": { - "left": 176.5, - "bottom": 158.5, - "right": 183.5, - "top": 171.5 + "left": 229.5, + "bottom": 23.5, + "right": 236.5, + "top": 36.5 } }, { @@ -191,10 +191,10 @@ "top": 0.71482889733840294 }, "atlasBounds": { - "left": 160.5, - "bottom": 21.5, - "right": 171.5, - "top": 28.5 + "left": 90.5, + "bottom": 5.5, + "right": 101.5, + "top": 12.5 } }, { @@ -207,10 +207,10 @@ "top": 0.3802281368821292 }, "atlasBounds": { - "left": 176.5, - "bottom": 103.5, - "right": 183.5, - "top": 113.5 + "left": 49.5, + "bottom": 2.5, + "right": 56.5, + "top": 12.5 } }, { @@ -223,10 +223,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 52.5, - "bottom": 153.5, - "right": 64.5, - "top": 183.5 + "left": 112.5, + "bottom": 217.5, + "right": 124.5, + "top": 247.5 } }, { @@ -239,10 +239,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 76.5, - "bottom": 115.5, - "right": 89.5, - "top": 144.5 + "left": 183.5, + "bottom": 148.5, + "right": 196.5, + "top": 177.5 } }, { @@ -255,10 +255,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 65.5, - "bottom": 153.5, - "right": 75.5, - "top": 183.5 + "left": 125.5, + "bottom": 217.5, + "right": 135.5, + "top": 247.5 } }, { @@ -271,10 +271,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 90.5, - "bottom": 115.5, - "right": 103.5, - "top": 144.5 + "left": 210.5, + "bottom": 148.5, + "right": 223.5, + "top": 177.5 } }, { @@ -287,10 +287,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 104.5, - "bottom": 115.5, - "right": 117.5, - "top": 144.5 + "left": 224.5, + "bottom": 148.5, + "right": 237.5, + "top": 177.5 } }, { @@ -303,10 +303,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 76.5, - "bottom": 153.5, - "right": 89.5, - "top": 183.5 + "left": 136.5, + "bottom": 217.5, + "right": 149.5, + "top": 247.5 } }, { @@ -319,10 +319,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 118.5, - "bottom": 115.5, - "right": 131.5, - "top": 144.5 + "left": 0.5, + "bottom": 117.5, + "right": 13.5, + "top": 146.5 } }, { @@ -335,10 +335,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 132.5, - "bottom": 115.5, - "right": 145.5, - "top": 144.5 + "left": 14.5, + "bottom": 117.5, + "right": 27.5, + "top": 146.5 } }, { @@ -351,10 +351,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 146.5, - "bottom": 115.5, - "right": 159.5, - "top": 144.5 + "left": 56.5, + "bottom": 117.5, + "right": 69.5, + "top": 146.5 } }, { @@ -367,10 +367,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 160.5, - "bottom": 115.5, - "right": 173.5, - "top": 144.5 + "left": 84.5, + "bottom": 117.5, + "right": 97.5, + "top": 146.5 } }, { @@ -383,10 +383,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 0.5, - "bottom": 84.5, - "right": 14.5, - "top": 113.5 + "left": 98.5, + "bottom": 117.5, + "right": 112.5, + "top": 146.5 } }, { @@ -399,10 +399,10 @@ "top": 0.92775665399239526 }, "atlasBounds": { - "left": 176.5, - "bottom": 85.5, - "right": 183.5, - "top": 102.5 + "left": 240.5, + "bottom": 117.5, + "right": 247.5, + "top": 134.5 } }, { @@ -415,10 +415,10 @@ "top": 0.92775665399239537 }, "atlasBounds": { - "left": 82.5, - "bottom": 9.5, - "right": 89.5, - "top": 28.5 + "left": 221.5, + "bottom": 17.5, + "right": 228.5, + "top": 36.5 } }, { @@ -431,10 +431,10 @@ "top": 0.7756653992395437 }, "atlasBounds": { - "left": 102.5, - "bottom": 16.5, - "right": 113.5, - "top": 28.5 + "left": 12.5, + "bottom": 0.5, + "right": 23.5, + "top": 12.5 } }, { @@ -447,10 +447,10 @@ "top": 0.7756653992395437 }, "atlasBounds": { - "left": 114.5, - "bottom": 16.5, - "right": 125.5, - "top": 28.5 + "left": 24.5, + "bottom": 0.5, + "right": 35.5, + "top": 12.5 } }, { @@ -463,10 +463,10 @@ "top": 0.7756653992395437 }, "atlasBounds": { - "left": 126.5, - "bottom": 16.5, - "right": 137.5, - "top": 28.5 + "left": 0.5, + "bottom": 0.5, + "right": 11.5, + "top": 12.5 } }, { @@ -479,10 +479,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 15.5, - "bottom": 84.5, - "right": 28.5, - "top": 113.5 + "left": 142.5, + "bottom": 117.5, + "right": 155.5, + "top": 146.5 } }, { @@ -495,10 +495,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 90.5, - "bottom": 153.5, - "right": 103.5, - "top": 183.5 + "left": 150.5, + "bottom": 217.5, + "right": 163.5, + "top": 247.5 } }, { @@ -511,10 +511,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 66.5, - "bottom": 84.5, - "right": 79.5, - "top": 113.5 + "left": 156.5, + "bottom": 117.5, + "right": 169.5, + "top": 146.5 } }, { @@ -527,10 +527,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 80.5, - "bottom": 84.5, - "right": 93.5, - "top": 113.5 + "left": 170.5, + "bottom": 117.5, + "right": 183.5, + "top": 146.5 } }, { @@ -543,10 +543,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 121.5, - "bottom": 84.5, - "right": 134.5, - "top": 113.5 + "left": 184.5, + "bottom": 117.5, + "right": 197.5, + "top": 146.5 } }, { @@ -559,10 +559,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 149.5, - "bottom": 84.5, - "right": 162.5, - "top": 113.5 + "left": 198.5, + "bottom": 117.5, + "right": 211.5, + "top": 146.5 } }, { @@ -575,10 +575,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 104.5, - "bottom": 153.5, - "right": 117.5, - "top": 183.5 + "left": 164.5, + "bottom": 217.5, + "right": 177.5, + "top": 247.5 } }, { @@ -591,10 +591,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 55.5, - "bottom": 54.5, - "right": 68.5, - "top": 83.5 + "left": 212.5, + "bottom": 117.5, + "right": 225.5, + "top": 146.5 } }, { @@ -607,10 +607,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 118.5, - "bottom": 153.5, - "right": 131.5, - "top": 183.5 + "left": 178.5, + "bottom": 217.5, + "right": 191.5, + "top": 247.5 } }, { @@ -623,10 +623,10 @@ "top": 1.0798479087452473 }, "atlasBounds": { - "left": 8.5, - "bottom": 149.5, - "right": 15.5, - "top": 183.5 + "left": 22.5, + "bottom": 213.5, + "right": 29.5, + "top": 247.5 } }, { @@ -639,10 +639,10 @@ "top": 1.0798479087452471 }, "atlasBounds": { - "left": 16.5, - "bottom": 150.5, - "right": 30.5, - "top": 183.5 + "left": 30.5, + "bottom": 214.5, + "right": 44.5, + "top": 247.5 } }, { @@ -655,10 +655,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 132.5, - "bottom": 153.5, - "right": 145.5, - "top": 183.5 + "left": 192.5, + "bottom": 217.5, + "right": 205.5, + "top": 247.5 } }, { @@ -671,10 +671,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 27.5, - "bottom": 54.5, - "right": 40.5, - "top": 83.5 + "left": 226.5, + "bottom": 117.5, + "right": 239.5, + "top": 146.5 } }, { @@ -687,10 +687,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 146.5, - "bottom": 153.5, - "right": 161.5, - "top": 183.5 + "left": 206.5, + "bottom": 217.5, + "right": 221.5, + "top": 247.5 } }, { @@ -703,10 +703,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 13.5, - "bottom": 54.5, - "right": 26.5, - "top": 83.5 + "left": 0.5, + "bottom": 87.5, + "right": 13.5, + "top": 116.5 } }, { @@ -719,10 +719,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 0.5, - "bottom": 54.5, - "right": 12.5, - "top": 83.5 + "left": 14.5, + "bottom": 87.5, + "right": 26.5, + "top": 116.5 } }, { @@ -735,10 +735,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 41.5, - "bottom": 54.5, - "right": 54.5, - "top": 83.5 + "left": 27.5, + "bottom": 87.5, + "right": 40.5, + "top": 116.5 } }, { @@ -751,10 +751,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 163.5, - "bottom": 84.5, - "right": 175.5, - "top": 113.5 + "left": 41.5, + "bottom": 87.5, + "right": 53.5, + "top": 116.5 } }, { @@ -767,10 +767,10 @@ "top": 0.95817490494296575 }, "atlasBounds": { - "left": 162.5, - "bottom": 153.5, - "right": 175.5, - "top": 183.5 + "left": 222.5, + "bottom": 217.5, + "right": 235.5, + "top": 247.5 } }, { @@ -783,10 +783,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 135.5, - "bottom": 84.5, - "right": 148.5, - "top": 113.5 + "left": 54.5, + "bottom": 87.5, + "right": 67.5, + "top": 116.5 } }, { @@ -800,9 +800,9 @@ }, "atlasBounds": { "left": 0.5, - "bottom": 114.5, + "bottom": 178.5, "right": 14.5, - "top": 144.5 + "top": 208.5 } }, { @@ -815,10 +815,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 108.5, - "bottom": 84.5, - "right": 120.5, - "top": 113.5 + "left": 68.5, + "bottom": 87.5, + "right": 80.5, + "top": 116.5 } }, { @@ -831,10 +831,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 94.5, - "bottom": 84.5, - "right": 107.5, - "top": 113.5 + "left": 81.5, + "bottom": 87.5, + "right": 94.5, + "top": 116.5 } }, { @@ -848,9 +848,9 @@ }, "atlasBounds": { "left": 15.5, - "bottom": 114.5, + "bottom": 178.5, "right": 30.5, - "top": 144.5 + "top": 208.5 } }, { @@ -864,9 +864,9 @@ }, "atlasBounds": { "left": 31.5, - "bottom": 114.5, + "bottom": 178.5, "right": 44.5, - "top": 144.5 + "top": 208.5 } }, { @@ -879,10 +879,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 52.5, - "bottom": 84.5, - "right": 65.5, - "top": 113.5 + "left": 95.5, + "bottom": 87.5, + "right": 108.5, + "top": 116.5 } }, { @@ -895,10 +895,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 38.5, - "bottom": 84.5, - "right": 51.5, - "top": 113.5 + "left": 109.5, + "bottom": 87.5, + "right": 122.5, + "top": 116.5 } }, { @@ -911,10 +911,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 174.5, - "bottom": 115.5, - "right": 182.5, - "top": 144.5 + "left": 238.5, + "bottom": 148.5, + "right": 246.5, + "top": 177.5 } }, { @@ -928,9 +928,9 @@ }, "atlasBounds": { "left": 45.5, - "bottom": 114.5, + "bottom": 178.5, "right": 57.5, - "top": 144.5 + "top": 208.5 } }, { @@ -943,10 +943,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 29.5, - "bottom": 84.5, - "right": 37.5, - "top": 113.5 + "left": 123.5, + "bottom": 87.5, + "right": 131.5, + "top": 116.5 } }, { @@ -959,10 +959,10 @@ "top": 0.38022813688212925 }, "atlasBounds": { - "left": 172.5, - "bottom": 46.5, - "right": 183.5, - "top": 53.5 + "left": 78.5, + "bottom": 5.5, + "right": 89.5, + "top": 12.5 } }, { @@ -975,10 +975,10 @@ "top": 0.71482889733840305 }, "atlasBounds": { - "left": 151.5, - "bottom": 20.5, - "right": 159.5, - "top": 28.5 + "left": 57.5, + "bottom": 4.5, + "right": 65.5, + "top": 12.5 } }, { @@ -991,10 +991,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 133.5, - "bottom": 30.5, - "right": 145.5, - "top": 53.5 + "left": 178.5, + "bottom": 13.5, + "right": 190.5, + "top": 36.5 } }, { @@ -1007,10 +1007,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 66.5, - "bottom": 29.5, - "right": 78.5, - "top": 53.5 + "left": 14.5, + "bottom": 62.5, + "right": 26.5, + "top": 86.5 } }, { @@ -1023,10 +1023,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 53.5, - "bottom": 29.5, - "right": 65.5, - "top": 53.5 + "left": 27.5, + "bottom": 62.5, + "right": 39.5, + "top": 86.5 } }, { @@ -1039,10 +1039,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 39.5, - "bottom": 29.5, - "right": 52.5, - "top": 53.5 + "left": 0.5, + "bottom": 62.5, + "right": 13.5, + "top": 86.5 } }, { @@ -1055,10 +1055,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 13.5, - "bottom": 29.5, - "right": 25.5, - "top": 53.5 + "left": 222.5, + "bottom": 92.5, + "right": 234.5, + "top": 116.5 } }, { @@ -1071,10 +1071,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 56.5, - "bottom": 5.5, - "right": 68.5, - "top": 28.5 + "left": 52.5, + "bottom": 38.5, + "right": 64.5, + "top": 61.5 } }, { @@ -1087,10 +1087,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 90.5, - "bottom": 59.5, - "right": 102.5, - "top": 83.5 + "left": 196.5, + "bottom": 92.5, + "right": 208.5, + "top": 116.5 } }, { @@ -1103,10 +1103,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 146.5, - "bottom": 30.5, - "right": 158.5, - "top": 53.5 + "left": 139.5, + "bottom": 13.5, + "right": 151.5, + "top": 36.5 } }, { @@ -1119,10 +1119,10 @@ "top": 1.0798479087452471 }, "atlasBounds": { - "left": 82.5, - "bottom": 56.5, - "right": 89.5, - "top": 83.5 + "left": 171.5, + "bottom": 89.5, + "right": 178.5, + "top": 116.5 } }, { @@ -1135,10 +1135,10 @@ "top": 1.0798479087452471 }, "atlasBounds": { - "left": 69.5, - "bottom": 55.5, - "right": 81.5, - "top": 83.5 + "left": 145.5, + "bottom": 88.5, + "right": 157.5, + "top": 116.5 } }, { @@ -1151,10 +1151,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 43.5, - "bottom": 5.5, - "right": 55.5, - "top": 28.5 + "left": 161.5, + "bottom": 38.5, + "right": 173.5, + "top": 61.5 } }, { @@ -1167,10 +1167,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 103.5, - "bottom": 59.5, - "right": 115.5, - "top": 83.5 + "left": 66.5, + "bottom": 62.5, + "right": 78.5, + "top": 86.5 } }, { @@ -1183,10 +1183,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 13.5, - "bottom": 5.5, - "right": 29.5, - "top": 28.5 + "left": 79.5, + "bottom": 13.5, + "right": 95.5, + "top": 36.5 } }, { @@ -1199,10 +1199,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 69.5, - "bottom": 5.5, - "right": 81.5, - "top": 28.5 + "left": 49.5, + "bottom": 13.5, + "right": 61.5, + "top": 36.5 } }, { @@ -1215,10 +1215,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 129.5, - "bottom": 59.5, - "right": 141.5, - "top": 83.5 + "left": 160.5, + "bottom": 62.5, + "right": 172.5, + "top": 86.5 } }, { @@ -1231,10 +1231,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 0.5, - "bottom": 5.5, - "right": 12.5, - "top": 28.5 + "left": 148.5, + "bottom": 38.5, + "right": 160.5, + "top": 61.5 } }, { @@ -1247,10 +1247,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 155.5, - "bottom": 59.5, - "right": 167.5, - "top": 83.5 + "left": 199.5, + "bottom": 62.5, + "right": 211.5, + "top": 86.5 } }, { @@ -1263,10 +1263,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 30.5, - "bottom": 5.5, - "right": 42.5, - "top": 28.5 + "left": 92.5, + "bottom": 38.5, + "right": 104.5, + "top": 61.5 } }, { @@ -1279,10 +1279,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 168.5, - "bottom": 59.5, - "right": 180.5, - "top": 83.5 + "left": 0.5, + "bottom": 37.5, + "right": 12.5, + "top": 61.5 } }, { @@ -1295,10 +1295,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 159.5, - "bottom": 30.5, - "right": 171.5, - "top": 53.5 + "left": 204.5, + "bottom": 38.5, + "right": 216.5, + "top": 61.5 } }, { @@ -1312,9 +1312,9 @@ }, "atlasBounds": { "left": 26.5, - "bottom": 29.5, + "bottom": 37.5, "right": 38.5, - "top": 53.5 + "top": 61.5 } }, { @@ -1327,10 +1327,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 142.5, - "bottom": 59.5, - "right": 154.5, - "top": 83.5 + "left": 121.5, + "bottom": 62.5, + "right": 133.5, + "top": 86.5 } }, { @@ -1343,10 +1343,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 93.5, - "bottom": 30.5, - "right": 109.5, - "top": 53.5 + "left": 230.5, + "bottom": 38.5, + "right": 246.5, + "top": 61.5 } }, { @@ -1359,10 +1359,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 79.5, - "bottom": 30.5, - "right": 92.5, - "top": 53.5 + "left": 65.5, + "bottom": 38.5, + "right": 78.5, + "top": 61.5 } }, { @@ -1375,10 +1375,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 116.5, - "bottom": 59.5, - "right": 128.5, - "top": 83.5 + "left": 186.5, + "bottom": 62.5, + "right": 198.5, + "top": 86.5 } }, { @@ -1391,10 +1391,10 @@ "top": 0.95817490494296564 }, "atlasBounds": { - "left": 0.5, - "bottom": 29.5, - "right": 12.5, - "top": 53.5 + "left": 147.5, + "bottom": 62.5, + "right": 159.5, + "top": 86.5 } }, { @@ -1408,9 +1408,1101 @@ }, "atlasBounds": { "left": 0.5, - "bottom": 145.5, + "bottom": 209.5, "right": 7.5, - "top": 183.5 + "top": 247.5 + } + }, + { + "unicode": 160, + "advance": 0.248 + }, + { + "unicode": 165, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.059218631178707237, + "bottom": 0.045627376425855508, + "right": 0.33621863117870721, + "top": 1.1102661596958174 + }, + "atlasBounds": { + "left": 8.5, + "bottom": 212.5, + "right": 21.5, + "top": 247.5 + } + }, + { + "unicode": 173, + "advance": 0.25, + "planeBounds": { + "left": -0.056800380228136882, + "bottom": 0.50190114068441061, + "right": 0.2778003802281368, + "top": 0.71482889733840294 + }, + "atlasBounds": { + "left": 66.5, + "bottom": 5.5, + "right": 77.5, + "top": 12.5 + } + }, + { + "unicode": 1025, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 1.0798479087452471 + }, + "atlasBounds": { + "left": 45.5, + "bottom": 214.5, + "right": 58.5, + "top": 247.5 + } + }, + { + "unicode": 1040, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.055718631178707248, + "bottom": 0.045627376425855508, + "right": 0.33971863117870715, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 58.5, + "bottom": 178.5, + "right": 71.5, + "top": 208.5 + } + }, + { + "unicode": 1041, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.060927756653992415, + "bottom": 0.076045627376425839, + "right": 0.36492775665399235, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 127.5, + "bottom": 117.5, + "right": 141.5, + "top": 146.5 + } + }, + { + "unicode": 1042, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 113.5, + "bottom": 117.5, + "right": 126.5, + "top": 146.5 + } + }, + { + "unicode": 1043, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.059218631178707237, + "bottom": 0.045627376425855508, + "right": 0.33621863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 72.5, + "bottom": 178.5, + "right": 85.5, + "top": 208.5 + } + }, + { + "unicode": 1044, + "advance": 0.44800000000000001, + "planeBounds": { + "left": -0.052555133079847931, + "bottom": -0.015209125475285169, + "right": 0.4645551330798478, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 73.5, + "bottom": 215.5, + "right": 90.5, + "top": 247.5 + } + }, + { + "unicode": 1045, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 70.5, + "bottom": 117.5, + "right": 83.5, + "top": 146.5 + } + }, + { + "unicode": 1046, + "advance": 0.38500000000000001, + "planeBounds": { + "left": -0.051636882129277577, + "bottom": 0.045627376425855508, + "right": 0.40463688212927751, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 86.5, + "bottom": 178.5, + "right": 101.5, + "top": 208.5 + } + }, + { + "unicode": 1047, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 42.5, + "bottom": 117.5, + "right": 55.5, + "top": 146.5 + } + }, + { + "unicode": 1048, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.056218631178707221, + "bottom": 0.076045627376425839, + "right": 0.33921863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 28.5, + "bottom": 117.5, + "right": 41.5, + "top": 146.5 + } + }, + { + "unicode": 1049, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.055718631178707248, + "bottom": 0.076045627376425839, + "right": 0.33971863117870715, + "top": 1.0798479087452471 + }, + "atlasBounds": { + "left": 59.5, + "bottom": 214.5, + "right": 72.5, + "top": 247.5 + } + }, + { + "unicode": 1050, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.055218631178707234, + "bottom": 0.045627376425855508, + "right": 0.34021863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 102.5, + "bottom": 178.5, + "right": 115.5, + "top": 208.5 + } + }, + { + "unicode": 1051, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.048718631178707228, + "bottom": 0.045627376425855508, + "right": 0.34671863117870722, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 116.5, + "bottom": 178.5, + "right": 129.5, + "top": 208.5 + } + }, + { + "unicode": 1052, + "advance": 0.38500000000000001, + "planeBounds": { + "left": -0.058136882129277576, + "bottom": 0.045627376425855508, + "right": 0.39813688212927756, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 130.5, + "bottom": 178.5, + "right": 145.5, + "top": 208.5 + } + }, + { + "unicode": 1053, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.055718631178707248, + "bottom": 0.045627376425855508, + "right": 0.33971863117870715, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 146.5, + "bottom": 178.5, + "right": 159.5, + "top": 208.5 + } + }, + { + "unicode": 1054, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.035509505703422074, + "bottom": 0.076045627376425839, + "right": 0.32950950570342202, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 197.5, + "bottom": 148.5, + "right": 209.5, + "top": 177.5 + } + }, + { + "unicode": 1055, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.045627376425855508, + "right": 0.34071863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 160.5, + "bottom": 178.5, + "right": 173.5, + "top": 208.5 + } + }, + { + "unicode": 1056, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.059218631178707237, + "bottom": 0.076045627376425839, + "right": 0.33621863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 169.5, + "bottom": 148.5, + "right": 182.5, + "top": 177.5 + } + }, + { + "unicode": 1057, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 155.5, + "bottom": 148.5, + "right": 168.5, + "top": 177.5 + } + }, + { + "unicode": 1058, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.064427756653992391, + "bottom": 0.045627376425855508, + "right": 0.36142775665399235, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 174.5, + "bottom": 178.5, + "right": 188.5, + "top": 208.5 + } + }, + { + "unicode": 1059, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 132.5, + "bottom": 148.5, + "right": 145.5, + "top": 177.5 + } + }, + { + "unicode": 1060, + "advance": 0.39900000000000002, + "planeBounds": { + "left": -0.030927756653992396, + "bottom": 0.076045627376425839, + "right": 0.39492775665399232, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 117.5, + "bottom": 148.5, + "right": 131.5, + "top": 177.5 + } + }, + { + "unicode": 1061, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.045627376425855508, + "right": 0.34071863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 189.5, + "bottom": 178.5, + "right": 202.5, + "top": 208.5 + } + }, + { + "unicode": 1062, + "advance": 0.32300000000000001, + "planeBounds": { + "left": -0.055718631178707248, + "bottom": 0.076045627376425839, + "right": 0.33971863117870715, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 89.5, + "bottom": 148.5, + "right": 102.5, + "top": 177.5 + } + }, + { + "unicode": 1063, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.051218631178707237, + "bottom": 0.045627376425855508, + "right": 0.34421863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 234.5, + "bottom": 178.5, + "right": 247.5, + "top": 208.5 + } + }, + { + "unicode": 1064, + "advance": 0.38500000000000001, + "planeBounds": { + "left": -0.057636882129277561, + "bottom": 0.045627376425855508, + "right": 0.39863688212927756, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 0.5, + "bottom": 147.5, + "right": 15.5, + "top": 177.5 + } + }, + { + "unicode": 1065, + "advance": 0.38500000000000001, + "planeBounds": { + "left": -0.058136882129277576, + "bottom": 0.045627376425855508, + "right": 0.39813688212927756, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 16.5, + "bottom": 147.5, + "right": 31.5, + "top": 177.5 + } + }, + { + "unicode": 1066, + "advance": 0.39300000000000002, + "planeBounds": { + "left": -0.055136882129277559, + "bottom": 0.076045627376425839, + "right": 0.40113688212927751, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 41.5, + "bottom": 148.5, + "right": 56.5, + "top": 177.5 + } + }, + { + "unicode": 1067, + "advance": 0.42899999999999999, + "planeBounds": { + "left": -0.057055133079847928, + "bottom": 0.076045627376425839, + "right": 0.4600551330798478, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 57.5, + "bottom": 148.5, + "right": 74.5, + "top": 177.5 + } + }, + { + "unicode": 1068, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 75.5, + "bottom": 148.5, + "right": 88.5, + "top": 177.5 + } + }, + { + "unicode": 1069, + "advance": 0.33300000000000002, + "planeBounds": { + "left": -0.054718631178707219, + "bottom": 0.076045627376425839, + "right": 0.34071863117870721, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 103.5, + "bottom": 148.5, + "right": 116.5, + "top": 177.5 + } + }, + { + "unicode": 1070, + "advance": 0.41799999999999998, + "planeBounds": { + "left": -0.053846007604562734, + "bottom": 0.045627376425855508, + "right": 0.43284600760456271, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 217.5, + "bottom": 178.5, + "right": 233.5, + "top": 208.5 + } + }, + { + "unicode": 1071, + "advance": 0.32400000000000001, + "planeBounds": { + "left": -0.056718631178707235, + "bottom": 0.045627376425855508, + "right": 0.33871863117870721, + "top": 0.95817490494296575 + }, + "atlasBounds": { + "left": 203.5, + "bottom": 178.5, + "right": 216.5, + "top": 208.5 + } + }, + { + "unicode": 1072, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 23.5, + "bottom": 13.5, + "right": 35.5, + "top": 36.5 + } + }, + { + "unicode": 1073, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 209.5, + "bottom": 92.5, + "right": 221.5, + "top": 116.5 + } + }, + { + "unicode": 1074, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 40.5, + "bottom": 62.5, + "right": 52.5, + "top": 86.5 + } + }, + { + "unicode": 1075, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 126.5, + "bottom": 13.5, + "right": 138.5, + "top": 36.5 + } + }, + { + "unicode": 1076, + "advance": 0.40400000000000003, + "planeBounds": { + "left": -0.036136882129277591, + "bottom": 0.2585551330798479, + "right": 0.42013688212927747, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 110.5, + "bottom": 13.5, + "right": 125.5, + "top": 36.5 + } + }, + { + "unicode": 1077, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 95.5, + "bottom": 62.5, + "right": 107.5, + "top": 86.5 + } + }, + { + "unicode": 1078, + "advance": 0.44600000000000001, + "planeBounds": { + "left": -0.036346007604562761, + "bottom": 0.2585551330798479, + "right": 0.45034600760456273, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 62.5, + "bottom": 13.5, + "right": 78.5, + "top": 36.5 + } + }, + { + "unicode": 1079, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 108.5, + "bottom": 62.5, + "right": 120.5, + "top": 86.5 + } + }, + { + "unicode": 1080, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 36.5, + "bottom": 13.5, + "right": 48.5, + "top": 36.5 + } + }, + { + "unicode": 1081, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 1.0798479087452471 + }, + "atlasBounds": { + "left": 158.5, + "bottom": 89.5, + "right": 170.5, + "top": 116.5 + } + }, + { + "unicode": 1082, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 152.5, + "bottom": 13.5, + "right": 164.5, + "top": 36.5 + } + }, + { + "unicode": 1083, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 217.5, + "bottom": 38.5, + "right": 229.5, + "top": 61.5 + } + }, + { + "unicode": 1084, + "advance": 0.44600000000000001, + "planeBounds": { + "left": -0.036346007604562761, + "bottom": 0.2585551330798479, + "right": 0.45034600760456273, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 131.5, + "bottom": 38.5, + "right": 147.5, + "top": 61.5 + } + }, + { + "unicode": 1085, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 191.5, + "bottom": 13.5, + "right": 203.5, + "top": 36.5 + } + }, + { + "unicode": 1086, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 235.5, + "bottom": 92.5, + "right": 247.5, + "top": 116.5 + } + }, + { + "unicode": 1087, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 118.5, + "bottom": 38.5, + "right": 130.5, + "top": 61.5 + } + }, + { + "unicode": 1088, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 79.5, + "bottom": 38.5, + "right": 91.5, + "top": 61.5 + } + }, + { + "unicode": 1089, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 39.5, + "bottom": 37.5, + "right": 51.5, + "top": 61.5 + } + }, + { + "unicode": 1090, + "advance": 0.32000000000000001, + "planeBounds": { + "left": -0.035009505703422074, + "bottom": 0.2585551330798479, + "right": 0.33000950570342202, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 105.5, + "bottom": 38.5, + "right": 117.5, + "top": 61.5 + } + }, + { + "unicode": 1091, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 173.5, + "bottom": 62.5, + "right": 185.5, + "top": 86.5 + } + }, + { + "unicode": 1092, + "advance": 0.50900000000000001, + "planeBounds": { + "left": -0.029764258555133004, + "bottom": 0.2585551330798479, + "right": 0.51776425855513308, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 229.5, + "bottom": 63.5, + "right": 247.5, + "top": 86.5 + } + }, + { + "unicode": 1093, + "advance": 0.33200000000000002, + "planeBounds": { + "left": -0.042718631178707223, + "bottom": 0.2585551330798479, + "right": 0.35271863117870722, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 96.5, + "bottom": 13.5, + "right": 109.5, + "top": 36.5 + } + }, + { + "unicode": 1094, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 53.5, + "bottom": 62.5, + "right": 65.5, + "top": 86.5 + } + }, + { + "unicode": 1095, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 165.5, + "bottom": 13.5, + "right": 177.5, + "top": 36.5 + } + }, + { + "unicode": 1096, + "advance": 0.44600000000000001, + "planeBounds": { + "left": -0.036346007604562761, + "bottom": 0.2585551330798479, + "right": 0.45034600760456273, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 187.5, + "bottom": 38.5, + "right": 203.5, + "top": 61.5 + } + }, + { + "unicode": 1097, + "advance": 0.44600000000000001, + "planeBounds": { + "left": -0.036346007604562761, + "bottom": 0.22813688212927755, + "right": 0.45034600760456273, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 179.5, + "bottom": 92.5, + "right": 195.5, + "top": 116.5 + } + }, + { + "unicode": 1098, + "advance": 0.39500000000000002, + "planeBounds": { + "left": -0.042136882129277575, + "bottom": 0.22813688212927755, + "right": 0.41413688212927752, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 79.5, + "bottom": 62.5, + "right": 94.5, + "top": 86.5 + } + }, + { + "unicode": 1099, + "advance": 0.44600000000000001, + "planeBounds": { + "left": -0.036346007604562761, + "bottom": 0.28897338403041822, + "right": 0.45034600760456273, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 204.5, + "bottom": 14.5, + "right": 220.5, + "top": 36.5 + } + }, + { + "unicode": 1100, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 134.5, + "bottom": 62.5, + "right": 146.5, + "top": 86.5 + } + }, + { + "unicode": 1101, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 13.5, + "bottom": 37.5, + "right": 25.5, + "top": 61.5 + } + }, + { + "unicode": 1102, + "advance": 0.42999999999999999, + "planeBounds": { + "left": -0.042346007604562752, + "bottom": 0.22813688212927755, + "right": 0.44434600760456272, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 212.5, + "bottom": 62.5, + "right": 228.5, + "top": 86.5 + } + }, + { + "unicode": 1103, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.2585551330798479, + "right": 0.33350950570342208, + "top": 0.95817490494296564 + }, + "atlasBounds": { + "left": 174.5, + "bottom": 38.5, + "right": 186.5, + "top": 61.5 + } + }, + { + "unicode": 1105, + "advance": 0.32500000000000001, + "planeBounds": { + "left": -0.031509505703422057, + "bottom": 0.22813688212927755, + "right": 0.33350950570342208, + "top": 1.0798479087452471 + }, + "atlasBounds": { + "left": 132.5, + "bottom": 88.5, + "right": 144.5, + "top": 116.5 } } ], diff --git a/DoomDeathmatch/asset/model/map.obj b/DoomDeathmatch/asset/model/map.obj new file mode 100644 index 0000000..fdd2d0b --- /dev/null +++ b/DoomDeathmatch/asset/model/map.obj @@ -0,0 +1,101 @@ +# Blender 4.2.3 LTS +# www.blender.org +o Plane +v -14.316629 -4.684887 0.000000 +v 14.316629 -4.684887 0.000000 +v -14.316629 4.684887 0.000000 +v 14.316629 4.684887 0.000000 +v 6.822107 -4.684887 0.000000 +v 6.822107 4.684887 0.000000 +v 14.316629 33.607601 0.000000 +v 6.822107 33.607601 0.000000 +v 14.316629 25.280016 0.000000 +v 6.822107 25.280016 0.000000 +v -6.847844 33.607601 0.000000 +v -6.847844 25.280016 0.000000 +v -25.254845 24.277735 0.000000 +v -18.173466 20.114567 0.000000 +v -26.336294 7.837210 0.000000 +v -19.225933 10.395360 0.000000 +v -14.316629 -4.684887 3.000000 +v 14.316629 -4.684887 3.000000 +v 14.316629 4.684887 3.000000 +v 6.822107 -4.684887 3.000000 +v 14.316629 33.607601 3.000000 +v 6.822107 33.607601 3.000000 +v 14.316629 25.280016 3.000000 +v -6.847844 33.607601 3.000000 +v -25.254845 24.277735 3.000000 +v -26.336294 7.837210 3.000000 +v -14.316629 4.684887 3.000000 +v 6.822107 4.684887 3.000000 +v 6.822107 25.280016 3.000000 +v -6.847844 25.280016 3.000000 +v -18.173466 20.114567 3.000000 +v -19.225933 10.395360 3.000000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.7214 0.6925 -0.0000 +vn 0.9978 -0.0656 -0.0000 +vn 0.4521 -0.8920 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.7583 -0.6519 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.4150 0.9098 -0.0000 +vn -0.9942 0.1077 -0.0000 +vt 1.000000 0.000000 +vt 0.738258 1.000000 +vt 0.738258 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +s 0 +f 2/1/1 6/2/1 5/3/1 +f 5/3/1 3/4/1 1/5/1 +f 9/6/1 8/2/1 10/2/1 +f 4/6/1 10/2/1 6/2/1 +f 8/2/1 12/2/1 10/2/1 +f 11/2/1 14/2/1 12/2/1 +f 14/2/1 15/2/1 16/2/1 +f 3/4/1 15/2/1 1/5/1 +f 2/1/2 19/6/2 4/6/2 +f 15/2/3 17/5/3 1/5/3 +f 13/2/4 26/2/4 15/2/4 +f 4/6/2 23/6/2 9/6/2 +f 11/2/5 25/2/5 13/2/5 +f 7/6/6 22/2/6 8/2/6 +f 8/2/6 24/2/6 11/2/6 +f 1/5/7 20/3/7 5/3/7 +f 5/3/7 18/1/7 2/1/7 +f 9/6/2 21/6/2 7/6/2 +f 12/2/7 29/2/7 10/2/7 +f 3/4/8 32/2/8 16/2/8 +f 10/2/9 28/2/9 6/2/9 +f 14/2/10 30/2/10 12/2/10 +f 6/2/6 27/4/6 3/4/6 +f 16/2/11 31/2/11 14/2/11 +f 2/1/1 4/6/1 6/2/1 +f 5/3/1 6/2/1 3/4/1 +f 9/6/1 7/6/1 8/2/1 +f 4/6/1 9/6/1 10/2/1 +f 8/2/1 11/2/1 12/2/1 +f 11/2/1 13/2/1 14/2/1 +f 14/2/1 13/2/1 15/2/1 +f 3/4/1 16/2/1 15/2/1 +f 2/1/2 18/1/2 19/6/2 +f 15/2/3 26/2/3 17/5/3 +f 13/2/4 25/2/4 26/2/4 +f 4/6/2 19/6/2 23/6/2 +f 11/2/5 24/2/5 25/2/5 +f 7/6/6 21/6/6 22/2/6 +f 8/2/6 22/2/6 24/2/6 +f 1/5/7 17/5/7 20/3/7 +f 5/3/7 20/3/7 18/1/7 +f 9/6/2 23/6/2 21/6/2 +f 12/2/7 30/2/7 29/2/7 +f 3/4/8 27/4/8 32/2/8 +f 10/2/9 29/2/9 28/2/9 +f 14/2/10 31/2/10 30/2/10 +f 6/2/6 28/2/6 27/4/6 +f 16/2/11 32/2/11 31/2/11 diff --git a/DoomDeathmatch/asset/texture/demon.png b/DoomDeathmatch/asset/texture/demon.png new file mode 100644 index 0000000000000000000000000000000000000000..56b96cab49dab9f3125e7a934ae5ea5d7457ade2 GIT binary patch literal 30035 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
    b(^bNY3wN{dbp{ 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 literal 0 HcmV?d00001 diff --git a/DoomDeathmatch/asset/texture/pistol.png b/DoomDeathmatch/asset/texture/pistol.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f2b76d6349d6d4adcd05fb94e054bd1c32991d GIT binary patch literal 32674 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 literal 0 HcmV?d00001 diff --git a/DoomDeathmatch/src/Component/HealthComponent.cs b/DoomDeathmatch/src/Component/HealthComponent.cs deleted file mode 100644 index 9ebc517..0000000 --- a/DoomDeathmatch/src/Component/HealthComponent.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace DoomDeathmatch.Component; - -public class HealthComponent : Engine.Scene.Component.Component -{ - public float MaxHealth { get; set; } = 100; - public float Health { get; private set; } = 100; - public event Action? HealthChanged; - public event Action? Died; - - public void TakeDamage(float parDamage) - { - Health -= parDamage; - if (Health <= 0) - { - Died?.Invoke(this); - } - else - { - HealthChanged?.Invoke(this); - } - } - - public void Heal(float parHeal) - { - Health += parHeal; - if (Health > MaxHealth) - { - Health = MaxHealth; - } - - HealthChanged?.Invoke(this); - } -} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Controller/HealthController.cs b/DoomDeathmatch/src/Component/MVC/Controller/HealthController.cs new file mode 100644 index 0000000..3fb7408 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Controller/HealthController.cs @@ -0,0 +1,31 @@ +using DoomDeathmatch.Component.MVC.Model; +using DoomDeathmatch.Component.MVC.View; + +namespace DoomDeathmatch.Component.MVC.Controller; + +public class HealthController : Engine.Scene.Component.Component +{ + private readonly HealthModel _healthModel = new(100); + private HealthView? _healthView; + + public override void Awake() + { + _healthView = GameObject.GetComponent(); + + if (_healthView != null) + { + _healthView.UpdateView(_healthModel); + _healthModel.HealthChanged += _healthView.UpdateView; + } + } + + public void TakeDamage(float parDamage) + { + _healthModel.Health -= parDamage; + } + + public void Heal(float parHeal) + { + _healthModel.Health += parHeal; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Controller/PlayerController.cs b/DoomDeathmatch/src/Component/MVC/Controller/PlayerController.cs new file mode 100644 index 0000000..f388ea0 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Controller/PlayerController.cs @@ -0,0 +1,45 @@ +using DoomDeathmatch.Component.MVC.Model; +using Engine.Input; + +namespace DoomDeathmatch.Component.MVC.Controller; + +public class PlayerController : Engine.Scene.Component.Component +{ + private readonly IInputHandler _inputHandler = Engine.Engine.Instance.InputHandler!; + + private HealthController _healthController = null!; + private WeaponController _weaponController = null!; + private ScoreController _scoreController = null!; + + public override void Awake() + { + _healthController = GameObject.GetComponent()!; + _weaponController = GameObject.GetComponent()!; + _scoreController = GameObject.GetComponent()!; + + ArgumentNullException.ThrowIfNull(_healthController); + ArgumentNullException.ThrowIfNull(_weaponController); + ArgumentNullException.ThrowIfNull(_scoreController); + } + + public override void Update(double parDeltaTime) + { + if (_inputHandler.IsKeyJustPressed(KeyboardButtonCode.C)) + _weaponController.AddWeapon(WeaponData.Shotgun); + + for (var i = 0; i < 10; i++) + { + if (KeyboardButtonCode.D1 + i > KeyboardButtonCode.D0) + break; + + if (!_inputHandler.IsKeyJustPressed(KeyboardButtonCode.D1 + i)) + continue; + + _weaponController.SelectWeapon(i); + break; + } + + if (_inputHandler.IsKeyJustPressed(KeyboardButtonCode.Space)) + _weaponController.TryShoot(); + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Controller/ScoreController.cs b/DoomDeathmatch/src/Component/MVC/Controller/ScoreController.cs new file mode 100644 index 0000000..3140b48 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Controller/ScoreController.cs @@ -0,0 +1,22 @@ +using DoomDeathmatch.Component.MVC.Model; +using DoomDeathmatch.Component.MVC.View; + +namespace DoomDeathmatch.Component.MVC.Controller; + +public class ScoreController : Engine.Scene.Component.Component +{ + private readonly ScoreModel _scoreModel = new(); + private ScoreView _scoreView = null!; + + public override void Awake() + { + _scoreView = GameObject.GetComponent()!; + _scoreView.UpdateView(_scoreModel); + _scoreModel.ScoreChanged += _scoreView.UpdateView; + } + + public void AddScore(int parScore) + { + _scoreModel.Score += parScore; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Controller/WeaponController.cs b/DoomDeathmatch/src/Component/MVC/Controller/WeaponController.cs new file mode 100644 index 0000000..a2a4a30 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Controller/WeaponController.cs @@ -0,0 +1,74 @@ +using DoomDeathmatch.Component.MVC.Model; +using DoomDeathmatch.Component.MVC.View; + +namespace DoomDeathmatch.Component.MVC.Controller; + +public class WeaponController : Engine.Scene.Component.Component +{ + public event Action? OnWeaponShot; + + private readonly WeaponModel _weaponModel = new(); + private WeaponView _weaponView = null!; + + public override void Awake() + { + _weaponView = GameObject.GetComponent()!; + _weaponView.UpdateView(_weaponModel.SelectedWeapon); + + _weaponModel.OnWeaponSelected += WeaponSelected; + WeaponSelected(null, _weaponModel.SelectedWeapon); + } + + public bool TryShoot() + { + if (_weaponModel.SelectedWeapon.Ammo <= 0) + return false; + + _weaponModel.SelectedWeapon.Ammo--; + + OnWeaponShot?.Invoke(_weaponModel.SelectedWeapon); + + return true; + } + + public void Reload() + { + _weaponModel.SelectedWeapon.Ammo = _weaponModel.SelectedWeapon.MaxAmmo; + } + + public void AddWeapon(WeaponData parWeaponData) + { + if (_weaponModel.Weapons.Contains(parWeaponData)) + return; + + _weaponModel.Weapons.Add(parWeaponData); + } + + public void RemoveWeapon(int parIndex) + { + if (parIndex <= 0 || parIndex >= _weaponModel.Weapons.Count) + return; + + var newSelectedIndex = parIndex >= _weaponModel.SelectedWeaponIndex ? _weaponModel.SelectedWeaponIndex : 0; + + _weaponModel.SelectedWeaponIndex = newSelectedIndex; + _weaponModel.Weapons.RemoveAt(parIndex); + } + + public void SelectWeapon(int parIndex) + { + if (parIndex >= _weaponModel.Weapons.Count) + return; + + _weaponModel.SelectedWeaponIndex = parIndex; + } + + private void WeaponSelected(WeaponData? parOldWeapon, WeaponData parNewWeapon) + { + if (parOldWeapon != null) + parOldWeapon.OnAmmoChanged -= _weaponView.UpdateAmmoView; + + parNewWeapon.OnAmmoChanged += _weaponView.UpdateAmmoView; + _weaponView.UpdateView(parNewWeapon); + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Model/HealthModel.cs b/DoomDeathmatch/src/Component/MVC/Model/HealthModel.cs new file mode 100644 index 0000000..cc492ba --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Model/HealthModel.cs @@ -0,0 +1,35 @@ +namespace DoomDeathmatch.Component.MVC.Model; + +public class HealthModel +{ + public float MaxHealth + { + get => _maxHealth; + set + { + _maxHealth = Math.Max(value, 1); + HealthChanged?.Invoke(this); + } + } + + public float Health + { + get => _health; + set + { + _health = Math.Clamp(value, 0, MaxHealth); + HealthChanged?.Invoke(this); + } + } + + public event Action? HealthChanged; + + private float _health; + private float _maxHealth; + + public HealthModel(float parMaxHealth) + { + MaxHealth = parMaxHealth; + Health = parMaxHealth; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Model/ScoreModel.cs b/DoomDeathmatch/src/Component/MVC/Model/ScoreModel.cs new file mode 100644 index 0000000..994d5c3 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Model/ScoreModel.cs @@ -0,0 +1,18 @@ +namespace DoomDeathmatch.Component.MVC.Model; + +public class ScoreModel +{ + public event Action? ScoreChanged; + + public int Score + { + get => _score; + set + { + _score = Math.Max(value, 0); + ScoreChanged?.Invoke(this); + } + } + + private int _score; +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Model/WeaponData.cs b/DoomDeathmatch/src/Component/MVC/Model/WeaponData.cs new file mode 100644 index 0000000..d2a060b --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Model/WeaponData.cs @@ -0,0 +1,54 @@ +namespace DoomDeathmatch.Component.MVC.Model; + +public class WeaponData +{ + public static WeaponData Pistol => + new(30) { Id = "pistol", Name = "Пистолет", Texture = "texture/pistol.png", Damage = 10 }; + + public static WeaponData Shotgun => + new(10) { Id = "shotgun", Name = "Дробовик", Texture = "texture/shotgun.png", Damage = 50 }; + + public string Id { get; private init; } = ""; + public string Name { get; private init; } = ""; + public string Texture { get; private init; } = ""; + public int Damage { get; private init; } + public int MaxAmmo { get; } + + public int Ammo + { + get => _ammo; + set + { + if (value < 0) + value = 0; + if (value > MaxAmmo) + value = MaxAmmo; + + if (_ammo == value) + return; + + _ammo = value; + OnAmmoChanged?.Invoke(this); + } + } + + public event Action? OnAmmoChanged; + + private int _ammo; + + private WeaponData(int parMaxAmmo) + { + MaxAmmo = parMaxAmmo; + Ammo = MaxAmmo; + } + + public override bool Equals(object? parObj) + { + return parObj is WeaponData weaponModel && Id == weaponModel.Id; + } + + public override int GetHashCode() + { + return HashCode.Combine(Id); + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/Model/WeaponModel.cs b/DoomDeathmatch/src/Component/MVC/Model/WeaponModel.cs new file mode 100644 index 0000000..b5190d5 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/Model/WeaponModel.cs @@ -0,0 +1,29 @@ +namespace DoomDeathmatch.Component.MVC.Model; + +public class WeaponModel +{ + public event Action? OnWeaponSelected; + + public IList Weapons => _weapons; + + public WeaponData SelectedWeapon => _weapons[_selectedWeaponIndex]; + + public int SelectedWeaponIndex + { + get => _selectedWeaponIndex; + set + { + value = Math.Clamp(value, 0, _weapons.Count - 1); + + if (_selectedWeaponIndex == value) + return; + + var oldSelectedWeapon = SelectedWeapon; + _selectedWeaponIndex = value; + OnWeaponSelected?.Invoke(oldSelectedWeapon, SelectedWeapon); + } + } + + private readonly List _weapons = [WeaponData.Pistol]; + private int _selectedWeaponIndex = 0; +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/View/HealthView.cs b/DoomDeathmatch/src/Component/MVC/View/HealthView.cs new file mode 100644 index 0000000..1ae04c0 --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/View/HealthView.cs @@ -0,0 +1,23 @@ +using DoomDeathmatch.Component.MVC.Model; +using Engine.Scene.Component.BuiltIn.Renderer; + +namespace DoomDeathmatch.Component.MVC.View; + +public class HealthView : Engine.Scene.Component.Component +{ + private readonly TextRenderer _healthTextRenderer; + + public HealthView(TextRenderer parHealthTextRenderer) + { + _healthTextRenderer = parHealthTextRenderer; + } + + public void UpdateView(HealthModel parHealthModel) + { + var percentage = parHealthModel.Health / parHealthModel.MaxHealth * 100; + if (parHealthModel.Health != 0) + percentage = Math.Max(1, percentage); + + _healthTextRenderer.Text = $"Здоровье: {percentage:000}"; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/View/ScoreView.cs b/DoomDeathmatch/src/Component/MVC/View/ScoreView.cs new file mode 100644 index 0000000..0640aae --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/View/ScoreView.cs @@ -0,0 +1,19 @@ +using DoomDeathmatch.Component.MVC.Model; +using Engine.Scene.Component.BuiltIn.Renderer; + +namespace DoomDeathmatch.Component.MVC.View; + +public class ScoreView : Engine.Scene.Component.Component +{ + private readonly TextRenderer _scoreTextRenderer; + + public ScoreView(TextRenderer parScoreTextRenderer) + { + _scoreTextRenderer = parScoreTextRenderer; + } + + public void UpdateView(ScoreModel parScoreModel) + { + _scoreTextRenderer.Text = $"Счет: {parScoreModel.Score:00000}"; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/MVC/View/WeaponView.cs b/DoomDeathmatch/src/Component/MVC/View/WeaponView.cs new file mode 100644 index 0000000..7b8907d --- /dev/null +++ b/DoomDeathmatch/src/Component/MVC/View/WeaponView.cs @@ -0,0 +1,31 @@ +using DoomDeathmatch.Component.MVC.Model; +using Engine.Graphics.Texture; +using Engine.Scene.Component.BuiltIn.Renderer; + +namespace DoomDeathmatch.Component.MVC.View; + +public class WeaponView : Engine.Scene.Component.Component +{ + private readonly TextRenderer _weaponName; + private readonly TextRenderer _weaponAmmo; + private readonly Box2DRenderer _weaponSprite; + + public WeaponView(TextRenderer parWeaponName, TextRenderer parWeaponAmmo, Box2DRenderer parWeaponSprite) + { + _weaponName = parWeaponName; + _weaponAmmo = parWeaponAmmo; + _weaponSprite = parWeaponSprite; + } + + public void UpdateView(WeaponData parWeaponData) + { + UpdateAmmoView(parWeaponData); + _weaponName.Text = $"Оружие: {parWeaponData.Name}"; + _weaponSprite.Texture = Engine.Engine.Instance.AssetResourceManager.Load(parWeaponData.Texture); + } + + public void UpdateAmmoView(WeaponData parWeaponData) + { + _weaponAmmo.Text = $"Патроны: {parWeaponData.Ammo}/{parWeaponData.MaxAmmo}"; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/UI/SelectorComponent.cs b/DoomDeathmatch/src/Component/UI/SelectorComponent.cs index 94d2fd5..e116a3a 100644 --- a/DoomDeathmatch/src/Component/UI/SelectorComponent.cs +++ b/DoomDeathmatch/src/Component/UI/SelectorComponent.cs @@ -67,7 +67,7 @@ public class SelectorComponent : Engine.Scene.Component.Component var scale = transformMatrix.ExtractScale(); GameObject.Transform.Translation = translation; - GameObject.Transform.Translation.X -= scale.X / 2 + 0.05f; + GameObject.Transform.Translation.X -= scale.X / 2; GameObject.Transform.Size.Y = scale.Y; } diff --git a/DoomDeathmatch/src/Component/UI/TestComponent.cs b/DoomDeathmatch/src/Component/UI/TestComponent.cs deleted file mode 100644 index 7be81b1..0000000 --- a/DoomDeathmatch/src/Component/UI/TestComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Engine.Input; -using Engine.Scene.Component.BuiltIn; - -namespace DoomDeathmatch.Component.UI; - -public class TestComponent : Engine.Scene.Component.Component -{ - private readonly IInputHandler _inputHandler = Engine.Engine.Instance.InputHandler!; - public Camera? Camera { get; set; } - - public override void Update(double parDeltaTime) - { - if (Camera == null) - { - return; - } - - GameObject.Transform.Size.Xy = 2 * Camera.ScreenToWorld(_inputHandler.MousePosition).Xy; - } -} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/UI/TextAlignComponent.cs b/DoomDeathmatch/src/Component/UI/TextAlignComponent.cs index 261c764..5b79755 100644 --- a/DoomDeathmatch/src/Component/UI/TextAlignComponent.cs +++ b/DoomDeathmatch/src/Component/UI/TextAlignComponent.cs @@ -27,9 +27,7 @@ public class TextAlignComponent : Engine.Scene.Component.Component _cachedText = _textRenderer.Text; var font = _textRenderer.Font; var size = font.Measure(_textRenderer.Text); - var scale = GameObject.Transform.FullTransformMatrix.ExtractScale(); - var offset = GetOffset(size) + new Vector2(0, font.Metadata.Metrics.LineHeight - font.Metadata.Metrics.Ascender) / 2; - offset *= scale.Xy; + var offset = GetOffset(size) + new Vector2(0, _textRenderer.Font.Metadata.Metrics.Descender / 4); GameObject.Transform.Translation.Xy = offset; } diff --git a/DoomDeathmatch/src/Component/UI/UiComponent.cs b/DoomDeathmatch/src/Component/UI/UiComponent.cs index 61255f9..6271d46 100644 --- a/DoomDeathmatch/src/Component/UI/UiComponent.cs +++ b/DoomDeathmatch/src/Component/UI/UiComponent.cs @@ -8,7 +8,7 @@ public class UiComponent : Engine.Scene.Component.Component public UiContainerComponent? Container { get; set; } public Anchor Anchor { get; set; } = Anchor.Center; public Vector2 Offset { get; set; } = Vector2.Zero; - public Vector2 Center { get; set; } = Vector2.Zero; + public Anchor Center { get; set; } = Anchor.Center; public event Action? OnClick; public event Action? OnMouseOver; @@ -22,17 +22,17 @@ public class UiComponent : Engine.Scene.Component.Component return; } - GameObject.Transform.Translation.Xy = GetAnchorPosition(Container.GameObject.Transform.Size.Xy) + Offset; + var size = GameObject.Transform.Size * GameObject.Transform.Scale; + GameObject.Transform.Translation.Xy = GetAnchorPosition(Container.GameObject.Transform.Size.Xy, Anchor) + Offset - + GetAnchorPosition(size.Xy, Center); + var transformMatrix = GameObject.Transform.FullTransformMatrix; + var actualSize = transformMatrix.ExtractScale(); var translation = transformMatrix.ExtractTranslation(); - var scale = transformMatrix.ExtractScale(); - var relativeMousePosition = Container.MousePosition.Xy - - (translation.Xy); + var relativeMousePosition = Container.MousePosition.Xy - translation.Xy; - var objectSize = scale.Xy; - - if (Math.Abs(relativeMousePosition.X) <= objectSize.X / 2 && Math.Abs(relativeMousePosition.Y) <= objectSize.Y / 2) + if (Math.Abs(relativeMousePosition.X) <= actualSize.X / 2 && Math.Abs(relativeMousePosition.Y) <= actualSize.Y / 2) { OnMouseOver?.Invoke(this); @@ -48,14 +48,14 @@ public class UiComponent : Engine.Scene.Component.Component OnClick?.Invoke(this); } - private Vector2 GetAnchorPosition(Vector2 parSize) + private static Vector2 GetAnchorPosition(Vector2 parSize, Anchor parAnchor) { - return parSize * GetAnchorRatio(); + return parSize * GetAnchorRatio(parAnchor); } - private Vector2 GetAnchorRatio() + private static Vector2 GetAnchorRatio(Anchor parAnchor) { - return Anchor switch + return parAnchor switch { Anchor.TopLeft => new Vector2(-0.5f, 0.5f), Anchor.TopCenter => new Vector2(0, 0.5f), @@ -66,7 +66,7 @@ public class UiComponent : Engine.Scene.Component.Component Anchor.BottomLeft => new Vector2(-0.5f, -0.5f), Anchor.BottomCenter => new Vector2(0, -0.5f), Anchor.BottomRight => new Vector2(0.5f, -0.5f), - _ => throw new ArgumentOutOfRangeException(nameof(Anchor), Anchor, null) + _ => throw new ArgumentOutOfRangeException(nameof(parAnchor), parAnchor, null) }; } } \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/BillboardComponent.cs b/DoomDeathmatch/src/Component/Util/BillboardComponent.cs similarity index 96% rename from DoomDeathmatch/src/Component/BillboardComponent.cs rename to DoomDeathmatch/src/Component/Util/BillboardComponent.cs index d1e89a4..79d214c 100644 --- a/DoomDeathmatch/src/Component/BillboardComponent.cs +++ b/DoomDeathmatch/src/Component/Util/BillboardComponent.cs @@ -1,7 +1,7 @@ using Engine.Scene.Component.BuiltIn; using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class BillboardComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/Component/ControllerComponent.cs b/DoomDeathmatch/src/Component/Util/ControllerComponent.cs similarity index 97% rename from DoomDeathmatch/src/Component/ControllerComponent.cs rename to DoomDeathmatch/src/Component/Util/ControllerComponent.cs index 535c25b..2a58c48 100644 --- a/DoomDeathmatch/src/Component/ControllerComponent.cs +++ b/DoomDeathmatch/src/Component/Util/ControllerComponent.cs @@ -1,7 +1,7 @@ using Engine.Input; using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class ControllerComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/Component/Util/CopySizeComponent.cs b/DoomDeathmatch/src/Component/Util/CopySizeComponent.cs new file mode 100644 index 0000000..034098c --- /dev/null +++ b/DoomDeathmatch/src/Component/Util/CopySizeComponent.cs @@ -0,0 +1,25 @@ +using Engine.Scene.Component.BuiltIn; +using OpenTK.Mathematics; + +namespace DoomDeathmatch.Component.Util; + +public class CopySizeComponent : Engine.Scene.Component.Component +{ + public Vector3 Coefficient { get; set; } = Vector3.One; + public Transform? Target { get; set; } + + public override void Update(double parDeltaTime) + { + if (Target == null) + return; + + if (Coefficient.X != 0) + GameObject.Transform.Size.X = Target.Size.X * Coefficient.X; + + if (Coefficient.Y != 0) + GameObject.Transform.Size.Y = Target.Size.Y * Coefficient.Y; + + if (Coefficient.Z != 0) + GameObject.Transform.Size.Z = Target.Size.Z * Coefficient.Z; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Component/DragComponent.cs b/DoomDeathmatch/src/Component/Util/DragComponent.cs similarity index 91% rename from DoomDeathmatch/src/Component/DragComponent.cs rename to DoomDeathmatch/src/Component/Util/DragComponent.cs index 99b93f0..0427a9f 100644 --- a/DoomDeathmatch/src/Component/DragComponent.cs +++ b/DoomDeathmatch/src/Component/Util/DragComponent.cs @@ -1,6 +1,6 @@ using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class DragComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/Component/GravityComponent.cs b/DoomDeathmatch/src/Component/Util/GravityComponent.cs similarity index 96% rename from DoomDeathmatch/src/Component/GravityComponent.cs rename to DoomDeathmatch/src/Component/Util/GravityComponent.cs index ac063cd..7231969 100644 --- a/DoomDeathmatch/src/Component/GravityComponent.cs +++ b/DoomDeathmatch/src/Component/Util/GravityComponent.cs @@ -1,6 +1,6 @@ using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class GravityComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/Component/RigidbodyComponent.cs b/DoomDeathmatch/src/Component/Util/RigidbodyComponent.cs similarity index 95% rename from DoomDeathmatch/src/Component/RigidbodyComponent.cs rename to DoomDeathmatch/src/Component/Util/RigidbodyComponent.cs index c18df42..219f5a3 100644 --- a/DoomDeathmatch/src/Component/RigidbodyComponent.cs +++ b/DoomDeathmatch/src/Component/Util/RigidbodyComponent.cs @@ -1,6 +1,6 @@ using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class RigidbodyComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/Component/RotateComponent.cs b/DoomDeathmatch/src/Component/Util/RotateComponent.cs similarity index 95% rename from DoomDeathmatch/src/Component/RotateComponent.cs rename to DoomDeathmatch/src/Component/Util/RotateComponent.cs index d961dd9..ab1bb29 100644 --- a/DoomDeathmatch/src/Component/RotateComponent.cs +++ b/DoomDeathmatch/src/Component/Util/RotateComponent.cs @@ -1,7 +1,7 @@ using Engine.Input; using OpenTK.Mathematics; -namespace DoomDeathmatch.Component; +namespace DoomDeathmatch.Component.Util; public class RotateComponent : Engine.Scene.Component.Component { diff --git a/DoomDeathmatch/src/DoomDeathmatch.cs b/DoomDeathmatch/src/DoomDeathmatch.cs index 36303bb..15f7f9b 100644 --- a/DoomDeathmatch/src/DoomDeathmatch.cs +++ b/DoomDeathmatch/src/DoomDeathmatch.cs @@ -21,70 +21,6 @@ public static class DoomDeathmatch { public static void Initialize(Engine.Engine parEngine) { - parEngine.SceneManager.TransitionTo(MainScene.Create(parEngine)); + parEngine.SceneManager.TransitionTo(() => MainScene.Create(parEngine)); } - - // private static Scene MainScene(Engine.Engine parEngine) - // { - // var playerObject = new GameObject(); - // playerObject.AddComponent(); - // playerObject.AddComponent(new ControllerComponent { Speed = 5f }); - // playerObject.AddComponent(new DragComponent { Drag = 5f, Coefficient = new Vector3(1, 1, 0) }); - // playerObject.AddComponent(new TestComponent()); - // - // var cameraObject = new GameObject(); - // cameraObject.Transform.Translation.Z = 2; - // cameraObject.AddComponent(); - // - // var testObject = new GameObject { Transform = { Translation = new Vector3(0, 6, 0), Rotation = Quaternion.FromAxisAngle(Vector3.UnitX, (float)Math.PI / 2) } }; - // testObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); - // - // var mesh = parEngine.AssetResourceManager.Load("model/untitled.obj"); - // var texture = parEngine.AssetResourceManager.Load("TestImage.png"); - // var font = parEngine.AssetResourceManager.Load("font/test"); - // - // var box2dRenderer = new GameObject - // { - // Transform = { Scale = new Vector3(1), Rotation = Quaternion.FromAxisAngle(Vector3.UnitX, (float)Math.PI / 2) } - // }; - // // box2dRenderer.AddComponent(new MeshRenderer { Mesh = mesh, Albedo = texture }); - // box2dRenderer.AddComponent(new TextRenderer { Font = font, Text = "A", RenderLayer = RenderLayer.HUD }); - // // box2dRenderer.AddComponent(new BillboardComponent { Target = cameraObject.Transform }); - // - // var xAxis = new GameObject(); - // xAxis.Transform.Translation.X = 5; - // xAxis.Transform.Scale.X = 10; - // xAxis.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); - // - // var yAxis = new GameObject(); - // yAxis.Transform.Translation.Y = 5; - // yAxis.Transform.Scale.X = 10; - // yAxis.Transform.Rotation *= Quaternion.FromAxisAngle(Vector3.UnitZ, (float)Math.PI / 2); - // yAxis.AddComponent(new Box2DRenderer { Color = new Vector4(0, 1, 0, 1) }); - // - // var zAxis = new GameObject(); - // zAxis.Transform.Translation.Z = 5; - // zAxis.Transform.Scale.Y = 10; - // zAxis.Transform.Scale.X = 10; - // zAxis.Transform.Rotation *= Quaternion.FromAxisAngle(Vector3.UnitX, (float)Math.PI / 2); - // zAxis.AddComponent(new Box2DRenderer - // { - // Color = new Vector4(0, 0, 1, 1), Texture = parEngine.AssetResourceManager.Load("test.jpeg") - // }); - // - // var scene = new Scene(); - // scene.Add(cameraObject); - // scene.AddChild(cameraObject, testObject); - // scene.Add(playerObject); - // scene.SetChild(playerObject, cameraObject); - // - // scene.Add(box2dRenderer); - // // scene.AddChild(box2dRenderer, testChild); - // - // scene.Add(xAxis); - // // scene.Add(yAxis); - // // scene.Add(zAxis); - // - // return scene; - // } } \ No newline at end of file diff --git a/DoomDeathmatch/src/GameObjectUtil.cs b/DoomDeathmatch/src/GameObjectUtil.cs new file mode 100644 index 0000000..46579b4 --- /dev/null +++ b/DoomDeathmatch/src/GameObjectUtil.cs @@ -0,0 +1,35 @@ +using Engine.Scene; +using Engine.Scene.Component.BuiltIn; + +namespace DoomDeathmatch; + +public static class GameObjectUtil +{ + public static GameObject CreateGameObject(Engine.Scene.Scene parScene, + List parComponents) + { + var gameObject = new GameObject(); + foreach (var component in parComponents) + { + gameObject.AddComponent(component); + } + + parScene.Add(gameObject); + + return gameObject; + } + + public static GameObject CreateGameObject(Engine.Scene.Scene parScene, Transform parTransform, + List parComponents) + { + var gameObject = new GameObject(parTransform); + foreach (var component in parComponents) + { + gameObject.AddComponent(component); + } + + parScene.Add(gameObject); + + return gameObject; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Scene/Leaders/LeadersScene.cs b/DoomDeathmatch/src/Scene/Leaders/LeadersScene.cs index 73352c7..8069801 100644 --- a/DoomDeathmatch/src/Scene/Leaders/LeadersScene.cs +++ b/DoomDeathmatch/src/Scene/Leaders/LeadersScene.cs @@ -16,36 +16,25 @@ public static class LeadersScene var (cameraObject, camera) = UiUtil.CreateOrthographicCamera(scene); - var (uiContainerObject, uiContainer) = UiUtil.CreateBackgroundUi(scene, camera); + var (uiContainerObject, uiContainer) = UiUtil.CreateBackgroundUi(scene, new UiContainerComponent { Camera = camera }); var (logoObject, logoUi) = UiUtil.CreateLogoUi(parEngine, scene, uiContainer); + logoUi.Offset = new Vector2(0, 3f); - var (backUiObject, backUi) = UiUtil.CreateTextUi(scene, uiContainer, + var (backUiObject, backUi, _) = UiUtil.CreateTextUi(scene, uiContainer, UiUtil.GetDoomFont(parEngine), "Назад"); - backUi.OnClick += _ => parEngine.SceneManager.TransitionTo(MainScene.Create(parEngine)); + backUi.OnClick += _ => parEngine.SceneManager.TransitionTo(() => MainScene.Create(parEngine)); - var (stackObject, stack) = UiUtil.CreateStackUi(scene, uiContainer, - [backUi]); - stack.Offset = new Vector2(0, -1f); - stackObject.Transform.Size = new Vector3(1f, 6f, 1f); + var (stackObject, stack) = UiUtil.CreateStackUi(scene, + new StackComponent { Offset = new Vector2(0, -1f), Container = uiContainer, Children = { backUi } }); + stackObject.Transform.Size.Xy = new Vector2(1f, 6f); - var selectorObject = new GameObject - { - Transform = { Translation = new Vector3(0, 0, -1), Size = new Vector3(0.5f, 1f, 1f) } - }; - selectorObject.AddComponent(new SelectorComponent - { - Children = { backUi }, - SelectKey = KeyboardButtonCode.Space, - NextKey = KeyboardButtonCode.Down, - PrevKey = KeyboardButtonCode.Up, - }); - selectorObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); + var (selectorObject, selector) = UiUtil.CreateSelectorUi(scene, new SelectorComponent { Children = { backUi } }); scene.AddChild(uiContainerObject, selectorObject); - scene.SetChild(uiContainerObject, logoObject); - scene.SetChild(uiContainerObject, stackObject); - scene.SetChild(stackObject, backUiObject); + scene.AddChild(uiContainerObject, logoObject); + scene.AddChild(uiContainerObject, stackObject); + scene.AddChild(stackObject, backUiObject); return scene; } diff --git a/DoomDeathmatch/src/Scene/Main/MainScene.cs b/DoomDeathmatch/src/Scene/Main/MainScene.cs index ec875b4..b651f85 100644 --- a/DoomDeathmatch/src/Scene/Main/MainScene.cs +++ b/DoomDeathmatch/src/Scene/Main/MainScene.cs @@ -1,11 +1,8 @@ using DoomDeathmatch.Component.UI; using DoomDeathmatch.Scene.Leaders; +using DoomDeathmatch.Scene.Play; using DoomDeathmatch.Scene.Rules; -using Engine.Asset.Font; -using Engine.Input; -using Engine.Scene; using Engine.Scene.Component.BuiltIn; -using Engine.Scene.Component.BuiltIn.Renderer; using OpenTK.Mathematics; namespace DoomDeathmatch.Scene.Main; @@ -18,60 +15,49 @@ public static class MainScene var (cameraObject, camera) = UiUtil.CreateOrthographicCamera(scene); - AddMainUi(parEngine, scene, camera); + var (uiContainerObject, uiContainer) = + UiUtil.CreateBackgroundUi(scene, new UiContainerComponent { Camera = camera }); + + var (playUiObject, playUi, _) = + UiUtil.CreateTextUi(scene, uiContainer, UiUtil.GetDoomFont(parEngine), "Играть"); + + var (leadersUiObject, leadersUi, _) = + UiUtil.CreateTextUi(scene, uiContainer, UiUtil.GetDoomFont(parEngine), "Лидеры"); + + var (rulesUiObject, rulesUi, _) = + UiUtil.CreateTextUi(scene, uiContainer, UiUtil.GetDoomFont(parEngine), "Правила"); + + var (exitUiObject, exitUi, _) = + UiUtil.CreateTextUi(scene, uiContainer, UiUtil.GetDoomFont(parEngine), "Выход"); + + var (stackObject, stack) = UiUtil.CreateStackUi(scene, + new StackComponent + { + Offset = new Vector2(0, -1f), Container = uiContainer, Children = { playUi, leadersUi, rulesUi, exitUi } + }); + stackObject.Transform.Size.Xy = new Vector2(1f, 6f); + + playUi.OnClick += _ => parEngine.SceneManager.TransitionTo(() => PlayScene.Create(parEngine)); + leadersUi.OnClick += _ => parEngine.SceneManager.TransitionTo(() => LeadersScene.Create(parEngine)); + rulesUi.OnClick += _ => parEngine.SceneManager.TransitionTo(() => RulesScene.Create(parEngine)); + exitUi.OnClick += _ => parEngine.Close(); + + var (logoObject, logoUi) = UiUtil.CreateLogoUi(parEngine, scene, uiContainer); + logoUi.Offset = new Vector2(0, 3f); + + var (selectorObject, selector) = UiUtil.CreateSelectorUi(scene, + new SelectorComponent { Children = { playUi, leadersUi, rulesUi, exitUi } }); + + scene.AddChild(uiContainerObject, selectorObject); + + scene.AddChild(uiContainerObject, stackObject); + scene.AddChild(uiContainerObject, logoObject); + + scene.AddChild(stackObject, playUiObject); + scene.AddChild(stackObject, leadersUiObject); + scene.AddChild(stackObject, rulesUiObject); + scene.AddChild(stackObject, exitUiObject); return scene; } - - private static void AddMainUi(Engine.Engine parEngine, Engine.Scene.Scene parScene, Camera parCamera) - { - var (uiContainerObject, uiContainer) = UiUtil.CreateBackgroundUi(parScene, parCamera); - - var (playUiObject, playUi) = - UiUtil.CreateTextUi(parScene, uiContainer, UiUtil.GetDoomFont(parEngine), "Играть"); - - var (leadersUiObject, leadersUi) = - UiUtil.CreateTextUi(parScene, uiContainer, UiUtil.GetDoomFont(parEngine), "Лидеры"); - - var (rulesUiObject, rulesUi) = - UiUtil.CreateTextUi(parScene, uiContainer, UiUtil.GetDoomFont(parEngine), "Правила"); - - var (exitUiObject, exitUi) = - UiUtil.CreateTextUi(parScene, uiContainer, UiUtil.GetDoomFont(parEngine), "Выход"); - - var (stackObject, stack) = UiUtil.CreateStackUi(parScene, uiContainer, - [playUi, leadersUi, rulesUi, exitUi]); - stack.Offset = new Vector2(0, -1f); - stackObject.Transform.Size = new Vector3(2f, 5f, 1f); - - playUi.OnClick += _ => Console.WriteLine("Play"); - leadersUi.OnClick += _ => parEngine.SceneManager.TransitionTo(LeadersScene.Create(parEngine)); - rulesUi.OnClick += _ => parEngine.SceneManager.TransitionTo(RulesScene.Create(parEngine)); - exitUi.OnClick += _ => parEngine.Close(); - - var (logoObject, logoUi) = UiUtil.CreateLogoUi(parEngine, parScene, uiContainer); - - var selectorObject = new GameObject - { - Transform = { Translation = new Vector3(0, 0, -1), Size = new Vector3(0.5f, 1f, 1f) } - }; - selectorObject.AddComponent(new SelectorComponent - { - Children = { playUi, leadersUi, rulesUi, exitUi }, - SelectKey = KeyboardButtonCode.Space, - NextKey = KeyboardButtonCode.Down, - PrevKey = KeyboardButtonCode.Up, - }); - selectorObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); - - parScene.AddChild(uiContainerObject, selectorObject); - - parScene.SetChild(uiContainerObject, stackObject); - parScene.SetChild(uiContainerObject, logoObject); - - parScene.SetChild(stackObject, playUiObject); - parScene.SetChild(stackObject, leadersUiObject); - parScene.SetChild(stackObject, rulesUiObject); - parScene.SetChild(stackObject, exitUiObject); - } } \ No newline at end of file diff --git a/DoomDeathmatch/src/Scene/Play/PlayScene.cs b/DoomDeathmatch/src/Scene/Play/PlayScene.cs new file mode 100644 index 0000000..aac150c --- /dev/null +++ b/DoomDeathmatch/src/Scene/Play/PlayScene.cs @@ -0,0 +1,136 @@ +using DoomDeathmatch.Component; +using DoomDeathmatch.Component.MVC.Controller; +using DoomDeathmatch.Component.MVC.View; +using DoomDeathmatch.Component.UI; +using DoomDeathmatch.Component.Util; +using Engine.Asset.Mesh; +using Engine.Graphics.Pipeline; +using Engine.Graphics.Texture; +using Engine.Scene; +using Engine.Scene.Component.BuiltIn; +using Engine.Scene.Component.BuiltIn.Renderer; +using OpenTK.Mathematics; + +namespace DoomDeathmatch.Scene.Play; + +public static class PlayScene +{ + public static Engine.Scene.Scene Create(Engine.Engine parEngine) + { + var scene = new Engine.Scene.Scene(); + + var (hudCameraObject, hudCamera) = UiUtil.CreateOrthographicCamera(scene, RenderLayer.HUD); + var (uiContainerObject, uiContainer) = + UiUtil.CreateContainerUi(scene, new UiContainerComponent { Camera = hudCamera }); + + var (bottomContainerObject, bottomContainer) = + UiUtil.CreateContainerUi(scene, new UiContainerComponent { Container = uiContainer }); + bottomContainer.Anchor = Anchor.BottomCenter; + bottomContainer.Center = Anchor.BottomCenter; + bottomContainerObject.AddComponent(new Box2DRenderer + { + Color = new Vector4(1, 0, 0, 1), RenderLayer = RenderLayer.HUD + }); + bottomContainerObject.AddComponent(new CopySizeComponent + { + Target = uiContainerObject.Transform, Coefficient = new Vector3(1, 0, 1) + }); + bottomContainerObject.Transform.Size.Y = 1.5f; + scene.AddChild(uiContainerObject, bottomContainerObject); + + var (gunObject, (gunUi, gunSprite)) = UiUtil.CreateSpriteUi(scene, bottomContainer, + parEngine.AssetResourceManager.Load("texture/pistol.png"), RenderLayer.HUD); + gunObject.Transform.Scale = new Vector3(5); + gunUi.Anchor = Anchor.TopCenter; + gunUi.Center = Anchor.BottomCenter; + scene.AddChild(bottomContainerObject, gunObject); + + var (healthObject, healthUi, (_, healthTextRenderer)) = + UiUtil.CreateTextUi(scene, bottomContainer, UiUtil.GetDoomFont(parEngine), "Здоровье: 000", + TextAlignComponent.Align.Center, + RenderLayer.HUD); + healthObject.Transform.Scale = new Vector3(0.75f); + healthUi.Anchor = Anchor.CenterLeft; + healthUi.Center = Anchor.CenterLeft; + scene.AddChild(bottomContainerObject, healthObject); + + var (ammoObject, ammoUi, (_, ammoTextRenderer)) = + UiUtil.CreateTextUi(scene, bottomContainer, UiUtil.GetDoomFont(parEngine), "Патроны: 00/00", + TextAlignComponent.Align.Center, + RenderLayer.HUD); + ammoObject.Transform.Scale = new Vector3(0.75f); + ammoUi.Anchor = Anchor.TopRight; + ammoUi.Center = Anchor.TopRight; + scene.AddChild(bottomContainerObject, ammoObject); + + var (weaponObject, weaponUi, (_, weaponTextRenderer)) = + UiUtil.CreateTextUi(scene, bottomContainer, UiUtil.GetDoomFont(parEngine), "Оружие: ОРУЖИЕОР", + TextAlignComponent.Align.Center, + RenderLayer.HUD); + weaponObject.Transform.Scale = new Vector3(0.75f); + weaponUi.Anchor = Anchor.BottomRight; + weaponUi.Center = Anchor.BottomRight; + scene.AddChild(bottomContainerObject, weaponObject); + + var (topContainerObject, topContainer) = + UiUtil.CreateContainerUi(scene, new UiContainerComponent { Container = uiContainer }); + topContainer.Anchor = Anchor.TopCenter; + topContainer.Center = Anchor.TopCenter; + topContainerObject.AddComponent( + new Box2DRenderer { Color = new Vector4(1, 0, 0, 1), RenderLayer = RenderLayer.HUD }); + topContainerObject.AddComponent(new CopySizeComponent + { + Target = uiContainerObject.Transform, Coefficient = new Vector3(1, 0, 1) + }); + topContainerObject.Transform.Size.Y = 1f; + scene.AddChild(uiContainerObject, topContainerObject); + + var (timerObject, timerUi, _) = + UiUtil.CreateTextUi(scene, topContainer, UiUtil.GetDoomFont(parEngine), "Время: 00:00", + parRenderLayer: RenderLayer.HUD); + timerUi.Anchor = Anchor.CenterLeft; + timerUi.Center = Anchor.CenterLeft; + scene.AddChild(topContainerObject, timerObject); + + var (scoreObject, scoreUi, (_, scoreTextRenderer)) = + UiUtil.CreateTextUi(scene, topContainer, UiUtil.GetDoomFont(parEngine), "Счет: 00000", + parRenderLayer: RenderLayer.HUD); + scoreUi.Anchor = Anchor.CenterRight; + scoreUi.Center = Anchor.CenterRight; + scene.AddChild(topContainerObject, scoreObject); + + var playerObject = GameObjectUtil.CreateGameObject(scene, [ + new RigidbodyComponent(), + new ControllerComponent { Speed = 5f }, + new DragComponent { Drag = 5f, Coefficient = new Vector3(1, 1, 0) }, + + new PlayerController(), + + new WeaponController(), + new WeaponView(weaponTextRenderer, ammoTextRenderer, gunSprite), + + new HealthController(), + new HealthView(healthTextRenderer), + + new ScoreController(), + new ScoreView(scoreTextRenderer), + ]); + + var (perspectiveCameraObject, perspectiveCamera) = UiUtil.CreatePerspectiveCamera(scene); + perspectiveCameraObject.Transform.Translation.Z = 2; + + var mapObject = GameObjectUtil.CreateGameObject(scene, [ + new MeshRenderer { Mesh = parEngine.AssetResourceManager.Load("model/map.obj") }, + ]); + + var impObject = GameObjectUtil.CreateGameObject(scene, + new Transform { Translation = new Vector3(0, 0, 1), Scale = new Vector3(1, 2, 1), }, [ + new Box2DRenderer { Texture = parEngine.AssetResourceManager.Load("texture/imp.png") }, + new BillboardComponent { Target = perspectiveCameraObject.Transform } + ]); + + scene.AddChild(playerObject, perspectiveCameraObject); + + return scene; + } +} \ No newline at end of file diff --git a/DoomDeathmatch/src/Scene/Rules/RulesScene.cs b/DoomDeathmatch/src/Scene/Rules/RulesScene.cs index 1ec5d74..04c4512 100644 --- a/DoomDeathmatch/src/Scene/Rules/RulesScene.cs +++ b/DoomDeathmatch/src/Scene/Rules/RulesScene.cs @@ -1,9 +1,5 @@ using DoomDeathmatch.Component.UI; using DoomDeathmatch.Scene.Main; -using Engine.Asset.Font; -using Engine.Input; -using Engine.Scene; -using Engine.Scene.Component.BuiltIn.Renderer; using OpenTK.Mathematics; namespace DoomDeathmatch.Scene.Rules; @@ -16,42 +12,31 @@ public static class RulesScene var (cameraObject, camera) = UiUtil.CreateOrthographicCamera(scene); - var (uiContainerObject, uiContainer) = UiUtil.CreateBackgroundUi(scene, camera); + var (uiContainerObject, uiContainer) = UiUtil.CreateBackgroundUi(scene, new UiContainerComponent { Camera = camera }); var (logoObject, logoUi) = UiUtil.CreateLogoUi(parEngine, scene, uiContainer); + logoUi.Offset = new Vector2(0, 3f); - var (backUiObject, backUi) = UiUtil.CreateTextUi(scene, uiContainer, - parEngine.AssetResourceManager.Load("font/test"), "Назад"); - backUi.OnClick += _ => parEngine.SceneManager.TransitionTo(MainScene.Create(parEngine)); + var (backUiObject, backUi, _) = UiUtil.CreateTextUi(scene, uiContainer, + UiUtil.GetDoomFont(parEngine), "Назад"); + backUi.OnClick += _ => parEngine.SceneManager.TransitionTo(() => MainScene.Create(parEngine)); - var (rulesObject, rulesUi) = UiUtil.CreateTextUi(scene, uiContainer, - parEngine.AssetResourceManager.Load("font/test"), "Правила"); + var (rulesObject, rulesUi, _) = UiUtil.CreateTextUi(scene, uiContainer, + UiUtil.GetDoomFont(parEngine), "Правила"); - var (stackObject, stack) = UiUtil.CreateStackUi(scene, uiContainer, - [rulesUi, backUi]); - stack.Offset = new Vector2(0, -1f); - stackObject.Transform.Size = new Vector3(1f, 6f, 1f); + var (stackObject, stack) = UiUtil.CreateStackUi(scene, + new StackComponent { Offset = new Vector2(0, -1f), Container = uiContainer, Children = { rulesUi, backUi } }); + stackObject.Transform.Size.Xy = new Vector2(1f, 6f); - var selectorObject = new GameObject - { - Transform = { Translation = new Vector3(0, 0, -1), Size = new Vector3(0.5f, 1f, 1f) } - }; - selectorObject.AddComponent(new SelectorComponent - { - Children = { backUi }, - SelectKey = KeyboardButtonCode.Space, - NextKey = KeyboardButtonCode.Down, - PrevKey = KeyboardButtonCode.Up, - }); - selectorObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); + var (selectorObject, selector) = UiUtil.CreateSelectorUi(scene, new SelectorComponent { Children = { backUi } }); scene.AddChild(uiContainerObject, selectorObject); - scene.SetChild(uiContainerObject, logoObject); - scene.SetChild(uiContainerObject, stackObject); + scene.AddChild(uiContainerObject, logoObject); + scene.AddChild(uiContainerObject, stackObject); - scene.SetChild(stackObject, rulesObject); - scene.SetChild(stackObject, backUiObject); + scene.AddChild(stackObject, rulesObject); + scene.AddChild(stackObject, backUiObject); return scene; } diff --git a/DoomDeathmatch/src/UiUtil.cs b/DoomDeathmatch/src/UiUtil.cs index d4bab96..713e04b 100644 --- a/DoomDeathmatch/src/UiUtil.cs +++ b/DoomDeathmatch/src/UiUtil.cs @@ -1,6 +1,8 @@ using DoomDeathmatch.Component.UI; using Engine.Asset.Font; +using Engine.Graphics.Pipeline; using Engine.Graphics.Texture; +using Engine.Input; using Engine.Scene; using Engine.Scene.Component.BuiltIn; using Engine.Scene.Component.BuiltIn.Renderer; @@ -15,102 +17,154 @@ public static class UiUtil return parEngine.AssetResourceManager.Load("font/doom"); } - public static (GameObject, OrthographicCamera) CreateOrthographicCamera(Engine.Scene.Scene parScene) + public static (GameObject, OrthographicCamera) CreateOrthographicCamera(Engine.Scene.Scene parScene, + RenderLayer? parRenderLayer = null) { - var cameraObject = new GameObject(); - var camera = new OrthographicCamera(); - cameraObject.AddComponent(camera); - - parScene.Add(cameraObject); + OrthographicCamera camera; + var cameraObject = GameObjectUtil.CreateGameObject(parScene, [ + camera = new OrthographicCamera { RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT } + ]); return (cameraObject, camera); } - public static (GameObject, UiComponent) CreateTextUi(Engine.Scene.Scene parScene, UiContainerComponent parContainer, - Font parFont, string parText) + public static (GameObject, PerspectiveCamera) CreatePerspectiveCamera(Engine.Scene.Scene parScene, + RenderLayer? parRenderLayer = null) + { + PerspectiveCamera camera; + var cameraObject = GameObjectUtil.CreateGameObject(parScene, [ + camera = new PerspectiveCamera { RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT } + ]); + + return (cameraObject, camera); + } + + public static (GameObject, UiContainerComponent, (GameObject, TextRenderer)) CreateTextUi(Engine.Scene.Scene parScene, + UiContainerComponent parContainer, + Font parFont, string parText, TextAlignComponent.Align parAlign = TextAlignComponent.Align.Center, + RenderLayer? parRenderLayer = null) { var size = parFont.Measure(parText); var outerObject = new GameObject { Transform = { Size = new Vector3(size.X, size.Y, 1f), Translation = new Vector3(0, 0, -1) } }; - var uiComponent = new UiComponent { Container = parContainer, Anchor = Anchor.Center }; + var uiComponent = new UiContainerComponent { Container = parContainer }; outerObject.AddComponent(uiComponent); - outerObject.AddComponent(new Box2DRenderer { Color = new Vector4(0, 0, 1, 1) }); + outerObject.AddComponent(new Box2DRenderer + { + Color = new Vector4(0, 0, 1, 1), RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT + }); var innerObject = new GameObject { Transform = { Translation = new Vector3(0, 0, -1) } }; - innerObject.AddComponent(new TextRenderer { Font = parFont, Text = parText }); - innerObject.AddComponent(new TextAlignComponent { Alignment = TextAlignComponent.Align.Center }); + // var innerUiComponent = new UiComponent { Container = uiComponent }; + // innerObject.AddComponent(innerUiComponent); + var innerTextRenderer = new TextRenderer + { + Font = parFont, Text = parText, RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT + }; + innerObject.AddComponent(innerTextRenderer); + innerObject.AddComponent(new TextAlignComponent { Alignment = parAlign }); parScene.Add(outerObject); parScene.AddChild(outerObject, innerObject); - return (outerObject, uiComponent); + return (outerObject, uiComponent, (innerObject, innerTextRenderer)); } - public static (GameObject, UiContainerComponent) CreateBackgroundUi(Engine.Scene.Scene parScene, Camera parCamera) + public static (GameObject, UiContainerComponent) CreateContainerUi(Engine.Scene.Scene parScene, + UiContainerComponent parUiContainerComponent) { var uiContainerObject = new GameObject(); - var uiContainer = new UiContainerComponent { Camera = parCamera }; - uiContainerObject.AddComponent(uiContainer); - uiContainerObject.AddComponent(new Box2DRenderer { Color = new Vector4(0.1f, 0.1f, 0.1f, 1) }); + uiContainerObject.AddComponent(parUiContainerComponent); parScene.Add(uiContainerObject); + return (uiContainerObject, parUiContainerComponent); + } + + public static (GameObject, UiContainerComponent) CreateBackgroundUi(Engine.Scene.Scene parScene, + UiContainerComponent parUiContainerComponent, Vector4? parColor = null, + RenderLayer? parRenderLayer = null) + { + var (uiContainerObject, uiContainer) = CreateContainerUi(parScene, parUiContainerComponent); + uiContainerObject.AddComponent(new Box2DRenderer + { + Color = parColor ?? new Vector4(0.1f, 0.1f, 0.1f, 1), RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT + }); + return (uiContainerObject, uiContainer); } public static (GameObject, UiComponent) CreateLogoUi(Engine.Engine parEngine, Engine.Scene.Scene parScene, - UiContainerComponent parContainer) + UiContainerComponent parContainer, RenderLayer? parRenderLayer = null) { - var logoObject = new GameObject - { - Transform = + UiComponent uiComponent; + var logoObject = GameObjectUtil.CreateGameObject(parScene, + new Transform { Translation = new Vector3(0, 0, -10), Scale = new Vector3(3), Size = new Vector3(1.6385869565f, 1f, 1f) - } - }; - logoObject.AddComponent(new Box2DRenderer - { - Texture = parEngine.AssetResourceManager.Load("texture/doom_logo.png") - }); - - var uiComponent = new UiComponent { Container = null, Anchor = Anchor.Center }; - - logoObject.AddComponent(new UiComponent - { - Container = parContainer, Anchor = Anchor.Center, Offset = new Vector2(0, 3f) - }); - - parScene.Add(logoObject); + }, [ + new Box2DRenderer + { + Texture = parEngine.AssetResourceManager.Load("texture/doom_logo.png"), + RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT + }, + uiComponent = new UiComponent { Container = parContainer, Anchor = Anchor.Center } + ] + ); return (logoObject, uiComponent); } - public static (GameObject, StackComponent) CreateStackUi(Engine.Scene.Scene parScene, - UiContainerComponent parContainer, List parChildren, Orientation parOrientation = Orientation.Vertical) + public static (GameObject, (UiComponent, Box2DRenderer)) CreateSpriteUi(Engine.Scene.Scene parScene, + UiContainerComponent parContainer, + Texture? parTexture, RenderLayer? parRenderLayer = null) { - var stack = new StackComponent + var spriteObject = new GameObject(); + var spriteComponent = new Box2DRenderer { - Container = parContainer, - Anchor = Anchor.Center + Texture = parTexture, RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT }; + spriteObject.AddComponent(spriteComponent); + var uiComponent = new UiContainerComponent { Container = parContainer }; + spriteObject.AddComponent(uiComponent); - stack.Children.AddRange(parChildren); - foreach (var child in parChildren) - { - child.Container = stack; - } + return (spriteObject, (uiComponent, spriteComponent)); + } - var stackObject = new GameObject - { - Transform = { Translation = new Vector3(0, 0, -1) } - }; - stackObject.AddComponent(stack); - stackObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1) }); + public static (GameObject, StackComponent) CreateStackUi(Engine.Scene.Scene parScene, + StackComponent parStackComponent, RenderLayer? parRenderLayer = null) + { + foreach (var child in parStackComponent.Children) + child.Container = parStackComponent; + + var stackObject = new GameObject { Transform = { Translation = new Vector3(0, 0, -1) } }; + stackObject.AddComponent(parStackComponent); + // stackObject.AddComponent(new Box2DRenderer { Color = new Vector4(1, 0, 0, 1), RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT }); parScene.Add(stackObject); - return (stackObject, stack); + return (stackObject, parStackComponent); + } + + public static (GameObject, SelectorComponent) CreateSelectorUi(Engine.Scene.Scene parScene, + SelectorComponent parSelectorComponent, RenderLayer? parRenderLayer = null) + { + var selectorObject = new GameObject { Transform = { Translation = new Vector3(0, 0, -1) } }; + selectorObject.AddComponent(parSelectorComponent); + var innerSelectorObject = new GameObject + { + Transform = { Translation = new Vector3(-0.5f, 0, 0), Size = new Vector3(0.25f, 0.5f, 1f) } + }; + innerSelectorObject.AddComponent(new Box2DRenderer + { + Color = new Vector4(1, 1, 1, 1), RenderLayer = parRenderLayer ?? RenderLayer.DEFAULT + }); + + parScene.Add(selectorObject); + parScene.AddChild(selectorObject, innerSelectorObject); + + return (selectorObject, parSelectorComponent); } } \ No newline at end of file diff --git a/Engine/src/Engine.cs b/Engine/src/Engine.cs index f864e24..95572b9 100644 --- a/Engine/src/Engine.cs +++ b/Engine/src/Engine.cs @@ -4,6 +4,7 @@ using Engine.Asset; using Engine.Asset.Font; using Engine.Asset.Mesh; using Engine.Graphics; +using Engine.Graphics.Pipeline; using Engine.Graphics.Pixel; using Engine.Graphics.Shader; using Engine.Graphics.Texture; @@ -155,28 +156,33 @@ public sealed class Engine Debug.RenderDocStartFrame(); #endif - Renderer.StartFrame(); + Renderer.RunScheduledActions(); - var projection = Matrix4.Identity; - var view = Matrix4.Identity; - lock (_sceneLock) + if (Monitor.TryEnter(_sceneLock)) { - var camera = SceneManager.CurrentScene?.MainCamera; - if (camera != null) + Renderer.StartFrame(); + var matrices = new Dictionary(); { - camera.ScreenSize = new Vector2i(Renderer.ViewportWidth, Renderer.ViewportHeight); - projection = camera.Projection; - view = camera.View; + var cameras = SceneManager.CurrentScene?.Cameras; + if (cameras != null) + { + foreach (var (renderLayer, camera) in cameras) + { + camera.ScreenSize = new Vector2i(Renderer.ViewportWidth, Renderer.ViewportHeight); + matrices[renderLayer] = (camera.Projection, camera.View); + } + } + + SceneManager.Render(); } + Monitor.Exit(_sceneLock); - SceneManager.Render(); + Renderer.EndFrame(matrices); + + Presenter!.Present(Renderer.RenderTexture); + Presenter!.Render(); } - Renderer.EndFrame(projection, view); - - Presenter!.Present(Renderer.RenderTexture); - Presenter!.Render(); - #if DEBUG Debug.RenderDocEndFrame(); #endif diff --git a/Engine/src/Graphics/GenericRenderer.cs b/Engine/src/Graphics/GenericRenderer.cs index f08c0bf..3e31621 100644 --- a/Engine/src/Graphics/GenericRenderer.cs +++ b/Engine/src/Graphics/GenericRenderer.cs @@ -10,11 +10,11 @@ namespace Engine.Graphics; public class GenericRenderer : IRenderer { public QuadRenderer QuadRenderer => _quadRenderer ??= new QuadRenderer(_engine, 1024 * 8); - public AnyMeshRenderer AnyMeshRenderer => _globalMeshRenderer ??= new AnyMeshRenderer(_engine, 1024); + public AnyMeshRenderer AnyMeshRenderer => _anyMeshRenderer ??= new AnyMeshRenderer(_engine, 1024); public TextRenderer TextRenderer => _textRenderer ??= new TextRenderer(_engine, 1024 * 8); private QuadRenderer? _quadRenderer; - private AnyMeshRenderer? _globalMeshRenderer; + private AnyMeshRenderer? _anyMeshRenderer; private TextRenderer? _textRenderer; private readonly Engine _engine; @@ -47,14 +47,23 @@ public class GenericRenderer : IRenderer GL.ClearColor(0.0f, 0.0f, 0.0f, 0.0f); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); - QuadRenderer.Render(parProjectionMatrix, parViewMatrix); - QuadRenderer.Reset(); + if (_anyMeshRenderer != null) + { + _anyMeshRenderer.Render(parProjectionMatrix, parViewMatrix); + _anyMeshRenderer.Reset(); + } - AnyMeshRenderer.Render(parProjectionMatrix, parViewMatrix); - AnyMeshRenderer.Reset(); + if (_quadRenderer != null) + { + _quadRenderer.Render(parProjectionMatrix, parViewMatrix); + _quadRenderer.Reset(); + } - TextRenderer.Render(parProjectionMatrix, parViewMatrix); - TextRenderer.Reset(); + if (_textRenderer != null) + { + _textRenderer.Render(parProjectionMatrix, parViewMatrix); + _textRenderer.Reset(); + } _framebuffer.Unbind(); diff --git a/Engine/src/Graphics/Renderer.cs b/Engine/src/Graphics/Renderer.cs index b94d77d..2aeb05b 100644 --- a/Engine/src/Graphics/Renderer.cs +++ b/Engine/src/Graphics/Renderer.cs @@ -74,8 +74,8 @@ public class Renderer // GL.Enable(EnableCap.FramebufferSrgb); - GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); GL.Enable(EnableCap.Blend); + GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); GL.Viewport(0, 0, parWidth, parHeight); } @@ -118,21 +118,22 @@ public class Renderer { EnsureRenderThread(); - RunScheduledActions(); - foreach (var renderer in _renderers.Values) { renderer.StartFrame(); } } - internal void EndFrame(in Matrix4 parViewMatrix, in Matrix4 parProjectionMatrix) + internal void EndFrame(Dictionary parMatrices) { EnsureRenderThread(); - foreach (var renderer in _renderers.Values) + foreach (var (renderLayer, renderer) in _renderers) { - renderer.EndFrame(in parViewMatrix, in parProjectionMatrix); + if (!parMatrices.TryGetValue(renderLayer, out var matrices)) + renderer.EndFrame(Matrix4.Identity, Matrix4.Identity); + else + renderer.EndFrame(in matrices.Item1, in matrices.Item2); } _framebuffer.Bind(); @@ -143,8 +144,11 @@ public class Renderer GL.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); GL.Clear(ClearBufferMask.ColorBufferBit); - foreach (var renderer in _renderers.Values) + foreach (var (renderLayer, renderer) in _renderers) { + if (!parMatrices.ContainsKey(renderLayer)) + continue; + QuadRenderer.Commit(Matrix4.CreateScale(2f, -2f, 1f), Vector4.One, renderer._framebuffer.TextureInternal); QuadRenderer.Render(Matrix4.Identity, Matrix4.Identity); QuadRenderer.Reset(); @@ -167,7 +171,7 @@ public class Renderer } } - private void RunScheduledActions() + internal void RunScheduledActions() { while (_scheduleActions.TryDequeue(out var action)) { diff --git a/Engine/src/Input/KeyboardButtonCode.cs b/Engine/src/Input/KeyboardButtonCode.cs index baff356..bfdd0d5 100644 --- a/Engine/src/Input/KeyboardButtonCode.cs +++ b/Engine/src/Input/KeyboardButtonCode.cs @@ -29,6 +29,17 @@ public enum KeyboardButtonCode Y, Z, + D1, + D2, + D3, + D4, + D5, + D6, + D7, + D8, + D9, + D0, + Ctrl, Alt, Shift, diff --git a/Engine/src/Input/WindowInputHandler.cs b/Engine/src/Input/WindowInputHandler.cs index f4ad46b..5fc9442 100644 --- a/Engine/src/Input/WindowInputHandler.cs +++ b/Engine/src/Input/WindowInputHandler.cs @@ -103,6 +103,16 @@ public class WindowInputHandler(Window parWindow) : IInputHandler KeyboardButtonCode.End => Keys.End, KeyboardButtonCode.PageUp => Keys.PageUp, KeyboardButtonCode.PageDown => Keys.PageDown, + KeyboardButtonCode.D0 => Keys.D0, + KeyboardButtonCode.D1 => Keys.D1, + KeyboardButtonCode.D2 => Keys.D2, + KeyboardButtonCode.D3 => Keys.D3, + KeyboardButtonCode.D4 => Keys.D4, + KeyboardButtonCode.D5 => Keys.D5, + KeyboardButtonCode.D6 => Keys.D6, + KeyboardButtonCode.D7 => Keys.D7, + KeyboardButtonCode.D8 => Keys.D8, + KeyboardButtonCode.D9 => Keys.D9, _ => throw new ArgumentOutOfRangeException(nameof(parKeyboardButtonCode), parKeyboardButtonCode, null) }; } diff --git a/Engine/src/Resource/Loader/FontLoader.cs b/Engine/src/Resource/Loader/FontLoader.cs index 728f822..d13307f 100644 --- a/Engine/src/Resource/Loader/FontLoader.cs +++ b/Engine/src/Resource/Loader/FontLoader.cs @@ -19,7 +19,10 @@ public class FontLoader : IResourceLoader var atlasPath = Path.Combine(parPath, "atlas.png"); using var atlasStream = parStreamProvider.GetStream(atlasPath); - var atlasTexture = ImageLoader.Load(atlasStream).ToStaticTexture(); + var atlasImage = ImageLoader.Load(atlasStream); + + // TODO: We should not be using engine instance here + var atlasTexture = Engine.Instance.Renderer.Schedule(() => atlasImage.ToStaticTexture()).Result; return new Font(atlasTexture, metadata); } diff --git a/Engine/src/Resource/Loader/TextureLoader.cs b/Engine/src/Resource/Loader/TextureLoader.cs index d496779..7530a13 100644 --- a/Engine/src/Resource/Loader/TextureLoader.cs +++ b/Engine/src/Resource/Loader/TextureLoader.cs @@ -7,6 +7,7 @@ public class TextureLoader : IResourceLoader using var stream = parStreamProvider.GetStream(parPath); var image = ImageLoader.Load(stream); - return image.ToStaticTexture(); + // TODO: We should not be using engine instance here + return Engine.Instance.Renderer.Schedule(() => image.ToStaticTexture()).Result; } } \ No newline at end of file diff --git a/Engine/src/Scene/Component/BuiltIn/Camera.cs b/Engine/src/Scene/Component/BuiltIn/Camera.cs index 7d012be..2851e6e 100644 --- a/Engine/src/Scene/Component/BuiltIn/Camera.cs +++ b/Engine/src/Scene/Component/BuiltIn/Camera.cs @@ -1,4 +1,5 @@ using Engine.Graphics.Camera; +using Engine.Graphics.Pipeline; using OpenTK.Mathematics; using Serilog; @@ -13,6 +14,8 @@ public abstract class Camera( public float NearPlane { get; set; } = parNearPlane; public float FarPlane { get; set; } = parFarPlane; + public RenderLayer RenderLayer { get; set; } = RenderLayer.DEFAULT; + private Vector2i _screenSize = new(1, 1); public abstract Matrix4 View { get; } diff --git a/Engine/src/Scene/Component/Component.cs b/Engine/src/Scene/Component/Component.cs index f680bff..22cbeef 100644 --- a/Engine/src/Scene/Component/Component.cs +++ b/Engine/src/Scene/Component/Component.cs @@ -25,6 +25,14 @@ public abstract class Component : IUpdate, IRender public virtual void Destroy() { } + + public virtual void Enable() + { + } + + public virtual void Disable() + { + } } public static class ComponentTypeExtensions diff --git a/Engine/src/Scene/GameObject.cs b/Engine/src/Scene/GameObject.cs index b19e25b..45d7fd7 100644 --- a/Engine/src/Scene/GameObject.cs +++ b/Engine/src/Scene/GameObject.cs @@ -7,6 +7,17 @@ namespace Engine.Scene; public sealed class GameObject : IUpdate, IRender { public Guid Id { get; } = Guid.NewGuid(); + + public bool IsEnabled + { + get => IsSelfEnabled && IsParentEnabled; + set => IsSelfEnabled = value; + } + + private bool IsSelfEnabled { get; set; } = true; + private bool _prevIsSelfEnabled = true; + private bool IsParentEnabled => Scene?.Hierarchy.GetParent(this)?.IsEnabled ?? true; + public Transform Transform { get; } internal Scene? Scene { get; set; } @@ -50,6 +61,30 @@ public sealed class GameObject : IUpdate, IRender public void Update(double parDeltaTime) { + if (!IsEnabled) + { + if (!_prevIsSelfEnabled) + return; + + foreach (var component in _components) + { + component.Disable(); + } + + _prevIsSelfEnabled = false; + return; + } + + if (!_prevIsSelfEnabled) + { + foreach (var component in _components) + { + component.Enable(); + } + } + + _prevIsSelfEnabled = true; + foreach (var component in _components) { component.Update(parDeltaTime); @@ -58,6 +93,9 @@ public sealed class GameObject : IUpdate, IRender public void Render() { + if (!IsEnabled) + return; + foreach (var component in _components) { component.Render(); @@ -113,7 +151,7 @@ public sealed class GameObject : IUpdate, IRender parComponent.GameObject = this; _components.Add(parComponent); - _addedComponentTypes.Add(typeof(T).GetComponentBaseType()); + _addedComponentTypes.Add(parComponent.GetType().GetComponentBaseType()); }); } diff --git a/Engine/src/Scene/Hierarchy.cs b/Engine/src/Scene/Hierarchy.cs index 3e78833..accfd21 100644 --- a/Engine/src/Scene/Hierarchy.cs +++ b/Engine/src/Scene/Hierarchy.cs @@ -32,7 +32,7 @@ public class Hierarchy { if (_parentLookup.ContainsKey(parObj)) { - throw new ArgumentException("Object is already added to hierarchy"); + return; } _childrenLookup.Add(parObj, new List()); diff --git a/Engine/src/Scene/Scene.cs b/Engine/src/Scene/Scene.cs index 887242e..868b31f 100644 --- a/Engine/src/Scene/Scene.cs +++ b/Engine/src/Scene/Scene.cs @@ -1,4 +1,5 @@ using Engine.Graphics.Camera; +using Engine.Graphics.Pipeline; using Engine.Scene.Component.BuiltIn; namespace Engine.Scene; @@ -6,7 +7,8 @@ namespace Engine.Scene; public class Scene : IUpdate, IRender { public bool IsPlaying { get; private set; } - public ICamera? MainCamera { get; private set; } + public IReadOnlyDictionary Cameras => _cameras; + private readonly Dictionary _cameras = new(); internal Hierarchy Hierarchy { get; } = new(); @@ -21,14 +23,25 @@ public class Scene : IUpdate, IRender ProcessChanges(); - MainCamera = FindFirstComponent(); + var allCameras = FindAllComponents(); + foreach (var camera in allCameras) + { + _cameras.Add(camera.RenderLayer, camera); + } IsPlaying = true; } + public List FindAllComponents() where T : Component.Component + { + return Hierarchy.Objects.Select(parGameObject => parGameObject.GetComponent()) + .Where(parComponent => parComponent != null).ToList()!; + } + public T? FindFirstComponent() where T : Component.Component { - return Hierarchy.Objects.Select(parGameObject => parGameObject.GetComponent()).FirstOrDefault(parComponent => parComponent != null); + return Hierarchy.Objects.Select(parGameObject => parGameObject.GetComponent()) + .FirstOrDefault(parComponent => parComponent != null); } public void Update(double parDeltaTime) @@ -87,15 +100,10 @@ public class Scene : IUpdate, IRender }); } - public void SetChild(GameObject parParent, GameObject parChild) - { - Hierarchy.AddChild(parParent, parChild); - } - public void AddChild(GameObject parParent, GameObject parChild) { Add(parChild); - SetChild(parParent, parChild); + Hierarchy.AddChild(parParent, parChild); } public void Remove(GameObject parGameObject) diff --git a/Engine/src/Scene/SceneManager.cs b/Engine/src/Scene/SceneManager.cs index 2dcce9f..1456e50 100644 --- a/Engine/src/Scene/SceneManager.cs +++ b/Engine/src/Scene/SceneManager.cs @@ -5,9 +5,10 @@ public class SceneManager : IUpdate, IRender public Scene? CurrentScene => _currentScene; private Scene? _currentScene; - private Scene? _nextScene; + // private Scene? _nextScene; + private Func? _nextScene; - public void TransitionTo(Scene parScene) + public void TransitionTo(Func? parScene) { _nextScene = parScene; } @@ -17,7 +18,7 @@ public class SceneManager : IUpdate, IRender if (_nextScene != null) { _currentScene?.Exit(); - _currentScene = _nextScene; + _currentScene = _nextScene(); _nextScene = null; _currentScene.Enter(); } diff --git a/Engine/src/Util/Timer.cs b/Engine/src/Util/Timer.cs new file mode 100644 index 0000000..239c722 --- /dev/null +++ b/Engine/src/Util/Timer.cs @@ -0,0 +1,62 @@ +namespace Engine.Util; + +public class Timer +{ + public event Action? OnFinished; + public event Action? OnUpdate; + + public double TotalTime + { + get => _totalTime; + set + { + if (value <= 0) + ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value); + + _totalTime = value; + CurrentTime = value; + } + } + + public double CurrentTime + { + get => _currentTime; + set + { + if (value < 0) + value = 0; + if (value > TotalTime) + value = TotalTime; + + _currentTime = value; + OnUpdate?.Invoke(value); + + if (IsFinished) + OnFinished?.Invoke(); + } + } + + public bool IsFinished => _currentTime <= 0; + + private double _totalTime; + private double _currentTime; + + public Timer(double parTotalTime) + { + if (parTotalTime <= 0) + ArgumentOutOfRangeException.ThrowIfNegativeOrZero(parTotalTime); + + _totalTime = parTotalTime; + _currentTime = parTotalTime; + } + + public void Update(double parDeltaTime) + { + CurrentTime -= parDeltaTime; + } + + public void Reset() + { + CurrentTime = TotalTime; + } +} \ No newline at end of file diff --git a/EngineTests/src/Scene/HierarchyTests.cs b/EngineTests/src/Scene/HierarchyTests.cs index 35fc9dc..a3e535d 100644 --- a/EngineTests/src/Scene/HierarchyTests.cs +++ b/EngineTests/src/Scene/HierarchyTests.cs @@ -169,16 +169,16 @@ public class HierarchyTests Assert.That(_hierarchy.GetChildren(obj).Count(), Is.EqualTo(0)); } - [Test] - public void AddDuplicateObjectThrows() - { - var obj = new object(); - - _hierarchy.Add(obj); - _hierarchy.Add(obj); - - Assert.Throws(() => _hierarchy.ProcessChanges()); - } + // [Test] + // public void AddDuplicateObjectThrows() + // { + // var obj = new object(); + // + // _hierarchy.Add(obj); + // _hierarchy.Add(obj); + // + // Assert.Throws(() => _hierarchy.ProcessChanges()); + // } [Test] public void AddChild_ParentNotInHierarchyThrows() diff --git a/PresenterConsole/src/ConsoleInputHandler.cs b/PresenterConsole/src/ConsoleInputHandler.cs index 25919fa..ed595fa 100644 --- a/PresenterConsole/src/ConsoleInputHandler.cs +++ b/PresenterConsole/src/ConsoleInputHandler.cs @@ -99,6 +99,16 @@ public class ConsoleInputHandler : IInputHandler KeyboardButtonCode.End => 0x23, KeyboardButtonCode.PageUp => 0x21, KeyboardButtonCode.PageDown => 0x22, + KeyboardButtonCode.D0 => 0x30, + KeyboardButtonCode.D1 => 0x31, + KeyboardButtonCode.D2 => 0x32, + KeyboardButtonCode.D3 => 0x33, + KeyboardButtonCode.D4 => 0x34, + KeyboardButtonCode.D5 => 0x35, + KeyboardButtonCode.D6 => 0x36, + KeyboardButtonCode.D7 => 0x37, + KeyboardButtonCode.D8 => 0x38, + KeyboardButtonCode.D9 => 0x39, _ => throw new ArgumentOutOfRangeException(nameof(parKeyboardButtonCode), parKeyboardButtonCode, null) }; } \ No newline at end of file diff --git a/PresenterWpf/src/WPFInputHandler.cs b/PresenterWpf/src/WPFInputHandler.cs index 6d182b5..3aebb08 100644 --- a/PresenterWpf/src/WPFInputHandler.cs +++ b/PresenterWpf/src/WPFInputHandler.cs @@ -163,6 +163,16 @@ public class WpfInputHandler : IInputHandler Key.Insert => (int)KeyboardButtonCode.Insert, Key.Home => (int)KeyboardButtonCode.Home, Key.End => (int)KeyboardButtonCode.End, + Key.D0 => (int)KeyboardButtonCode.D0, + Key.D1 => (int)KeyboardButtonCode.D1, + Key.D2 => (int)KeyboardButtonCode.D2, + Key.D3 => (int)KeyboardButtonCode.D3, + Key.D4 => (int)KeyboardButtonCode.D4, + Key.D5 => (int)KeyboardButtonCode.D5, + Key.D6 => (int)KeyboardButtonCode.D6, + Key.D7 => (int)KeyboardButtonCode.D7, + Key.D8 => (int)KeyboardButtonCode.D8, + Key.D9 => (int)KeyboardButtonCode.D9, _ => -1 };