add assets and frontend to backend package
This commit is contained in:
		
							parent
							
								
									e4d2ad4a14
								
							
						
					
					
						commit
						a5a3f2cc81
					
				
					 8 changed files with 56 additions and 21 deletions
				
			
		
							
								
								
									
										27
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -5,13 +5,17 @@ | |||
|     nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05"; | ||||
| 
 | ||||
|     binding = { | ||||
|         url = "git+https://git.berlin.ccc.de/servicepoint/servicepoint-binding-csharp.git"; | ||||
|         inputs.nixpkgs.follows = "nixpkgs"; | ||||
|       url = "git+https://git.berlin.ccc.de/servicepoint/servicepoint-binding-csharp.git"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = | ||||
|     { self, nixpkgs, binding }: | ||||
|     { | ||||
|       self, | ||||
|       nixpkgs, | ||||
|       binding, | ||||
|     }: | ||||
|     let | ||||
|       supported-systems = [ | ||||
|         "x86_64-linux" | ||||
|  | @ -47,7 +51,7 @@ | |||
|             ]; | ||||
|           }; | ||||
|           backend-set = { | ||||
|             inputsFrom = [ selfPkgs.servicepoint-tanks-backend ]; | ||||
|             inputsFrom = [ selfPkgs.servicepoint-tanks ]; | ||||
|             packages = with pkgs; [ | ||||
|               nuget-to-json | ||||
|               cargo-tarpaulin | ||||
|  | @ -71,7 +75,7 @@ | |||
|         }: | ||||
|         { | ||||
|           servicepoint-tanks-frontend = pkgs.buildNpmPackage (finalAttrs: { | ||||
|             pname = "tank-frontend"; | ||||
|             pname = "servicepoint-tanks-frontend"; | ||||
|             version = "0.0.0"; | ||||
| 
 | ||||
|             src = ./tank-frontend; | ||||
|  | @ -82,20 +86,27 @@ | |||
|             ''; | ||||
|           }); | ||||
| 
 | ||||
|           servicepoint-tanks-backend = pkgs.buildDotnetModule { | ||||
|             pname = "servicepoint-tanks-backend"; | ||||
|           servicepoint-tanks-assets = ./tanks-backend/TanksServer/assets; | ||||
| 
 | ||||
|           servicepoint-tanks = pkgs.buildDotnetModule { | ||||
|             pname = "servicepoint-tanks"; | ||||
|             version = "0.0.0"; | ||||
| 
 | ||||
|             dotnet-sdk = pkgs.dotnetCorePackages.sdk_8_0; | ||||
|             dotnet-runtime = pkgs.dotnetCorePackages.runtime_8_0; | ||||
| 
 | ||||
|             src = ./tanks-backend; | ||||
|             projectFile =   "TanksServer/TanksServer.csproj"; | ||||
|             projectFile = "TanksServer/TanksServer.csproj"; | ||||
|             nugetDeps = ./tanks-backend/deps.json; | ||||
| 
 | ||||
|             selfContainedBuild = true; | ||||
| 
 | ||||
|             buildInputs = [ bindingPkgs.servicepoint-binding-csharp ]; | ||||
| 
 | ||||
|             makeWrapperArgs = [ | ||||
|               "--set-default TANKSSERVER_CLIENT ${selfPkgs.servicepoint-tanks-frontend}" | ||||
|               "--set-default TANKSSERVER_ASSETS ${selfPkgs.servicepoint-tanks-assets}" | ||||
|             ]; | ||||
|           }; | ||||
|         } | ||||
|       ); | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ namespace TanksServer.GameLogic; | |||
| 
 | ||||
| internal sealed class CollideBullets : ITickStep | ||||
| { | ||||
|     private readonly Sprite _explosiveSprite = Sprite.FromImageFile("assets/explosion.png"); | ||||
|     private readonly Sprite _explosiveSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "explosion.png")); | ||||
|     private readonly Predicate<Bullet> _removeBulletsPredicate; | ||||
|     private readonly MapEntityManager _entityManager; | ||||
|     private readonly MapService _map; | ||||
|  |  | |||
|  | @ -22,9 +22,10 @@ internal sealed class MapService | |||
| 
 | ||||
|     public MapService() | ||||
|     { | ||||
|         foreach (var file in Directory.EnumerateFiles("./assets/maps/", "*.txt")) | ||||
|         var dir = Path.Combine(Program.AssetsDir, "maps"); | ||||
|         foreach (var file in Directory.EnumerateFiles(dir, "*.txt")) | ||||
|             LoadMapString(file); | ||||
|         foreach (var file in Directory.EnumerateFiles("./assets/maps/", "*.png")) | ||||
|         foreach (var file in Directory.EnumerateFiles(dir, "*.png")) | ||||
|             LoadMapPng(file); | ||||
|         Current = GetRandomMap(); | ||||
|     } | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| global using System; | ||||
| global using System.Collections.Concurrent; | ||||
| global using System.Collections.Generic; | ||||
| global using System.IO; | ||||
| global using System.Linq; | ||||
| global using System.Threading; | ||||
| global using System.Threading.Tasks; | ||||
|  |  | |||
|  | @ -4,11 +4,11 @@ namespace TanksServer.Graphics; | |||
| 
 | ||||
| internal sealed class DrawPowerUpsStep(MapEntityManager entityManager) : IDrawStep | ||||
| { | ||||
|     private readonly Sprite _genericSprite = Sprite.FromImageFile("assets/powerup_generic.png"); | ||||
|     private readonly Sprite _smartSprite = Sprite.FromImageFile("assets/powerup_smart.png"); | ||||
|     private readonly Sprite _magazineSprite = Sprite.FromImageFile("assets/powerup_magazine.png"); | ||||
|     private readonly Sprite _explosiveSprite = Sprite.FromImageFile("assets/powerup_explosive.png"); | ||||
|     private readonly Sprite _fastSprite = Sprite.FromImageFile("assets/powerup_fastbullet.png"); | ||||
|     private readonly Sprite _genericSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "powerup_generic.png")); | ||||
|     private readonly Sprite _smartSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "powerup_smart.png")); | ||||
|     private readonly Sprite _magazineSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "powerup_magazine.png")); | ||||
|     private readonly Sprite _explosiveSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "powerup_explosive.png")); | ||||
|     private readonly Sprite _fastSprite = Sprite.FromImageFile(Path.Combine(Program.AssetsDir, "powerup_fastbullet.png")); | ||||
| 
 | ||||
|     public void Draw(GamePixelGrid pixels) | ||||
|     { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ namespace TanksServer.Graphics; | |||
| internal sealed class DrawTanksStep(MapEntityManager entityManager) : IDrawStep | ||||
| { | ||||
|     private readonly SpriteSheet _tankSprites = | ||||
|         SpriteSheet.FromImageFile("assets/tank.png", (int)MapService.TileSize, (int)MapService.TileSize); | ||||
|         SpriteSheet.FromImageFile(Path.Combine(Program.AssetsDir, "tank.png"), (int)MapService.TileSize, (int)MapService.TileSize); | ||||
| 
 | ||||
|     public void Draw(GamePixelGrid pixels) | ||||
|     { | ||||
|  |  | |||
|  | @ -11,22 +11,44 @@ namespace TanksServer; | |||
| 
 | ||||
| public static class Program | ||||
| { | ||||
|     internal static string AssetsDir = (Environment.GetEnvironmentVariable("TANKSSERVER_ASSETS") ?? "./assets") + "/"; | ||||
| 
 | ||||
|     [RequiresUnreferencedCode("Calls Endpoints.Map")] | ||||
|     [RequiresDynamicCode("Calls Endpoints.Map")] | ||||
|     public static async Task Main(string[] args) | ||||
|     { | ||||
|         var app = Configure(args); | ||||
| 
 | ||||
|         var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client")); | ||||
|         app.Logger.LogInformation("Running in {}", app.Environment.ContentRootPath); | ||||
| 
 | ||||
|         app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = clientFileProvider }); | ||||
|         app.UseStaticFiles(new StaticFileOptions { FileProvider = clientFileProvider }); | ||||
|         AddStaticClientHost(app); | ||||
| 
 | ||||
|         app.Services.GetRequiredService<Endpoints>().Map(app); | ||||
| 
 | ||||
|         await app.RunAsync(); | ||||
|     } | ||||
| 
 | ||||
|     private static void AddStaticClientHost(WebApplication app) | ||||
|     { | ||||
|         var clientDir = Environment.GetEnvironmentVariable("TANKSSERVER_CLIENT"); | ||||
|         bool required = clientDir != null; | ||||
| 
 | ||||
|         clientDir ??= Path.Combine(app.Environment.ContentRootPath, "client"); | ||||
|         bool available = Directory.Exists(clientDir); | ||||
| 
 | ||||
|         if (!available) | ||||
|         { | ||||
|             if (required) | ||||
|                 throw new InvalidOperationException($"The environment variable TANKSSERVER_CLIENT is set, but the specified directory {clientDir} does not exist."); | ||||
|             app.Logger.LogError("Not providing static file host for client because {} does not exist", clientDir); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         var clientFileProvider = new PhysicalFileProvider(clientDir); | ||||
|         app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = clientFileProvider }); | ||||
|         app.UseStaticFiles(new StaticFileOptions { FileProvider = clientFileProvider }); | ||||
|     } | ||||
| 
 | ||||
|     [RequiresUnreferencedCode("Calls Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<TOptions>(IConfiguration)")] | ||||
|     [RequiresDynamicCode("Calls Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<TOptions>(IConfiguration)")] | ||||
|     private static WebApplication Configure(string[] args) | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
|     </ItemGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|         <None Include="./assets/**" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="Always"/> | ||||
|         <None Include="./assets/**" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="Always" Condition="'$(ContinuousIntegrationBuild)'!='true'" /> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vinzenz Schroeter
						Vinzenz Schroeter