private void CreateAndSpawnPlayers(GameModePvEConfig gameMode, LevelStageConfig levelStageConfig, GameLevelGridModel levelGridModel) { var playerConfigs = gameMode.PlayerConfigs; var spawnCorners = levelStageConfig.PlayersSpawnCorners; Assert.IsTrue(playerConfigs.Length <= spawnCorners.Length, "players count greater than the level spawn corners"); var zip = spawnCorners.Zip(playerConfigs, (spawnCorner, playerConfig) => (spawnCorner, playerConfig)); foreach (var(spawnCorner, playerConfig) in zip) { var playerInput = _inputService.RegisterPlayerInput(playerConfig); var player = _gameFactory.CreatePlayer(playerConfig, playerInput); Assert.IsNotNull(player); var position = levelGridModel.GetCornerWorldPosition(spawnCorner); var go = _gameFactory.SpawnEntity(playerConfig.HeroConfig, position); Assert.IsNotNull(go); var hero = (IHero)go.GetComponent <HeroController>(); player.AttachHero(hero, playerInput); Game.LevelManager.AddPlayer(playerConfig.PlayerTagConfig, player); } }
private static void SetupCamera(LevelStage levelStage, GameModeBaseConfig gameMode, GameLevelGridModel levelGridModel, IPlayer defaultPlayer) { // Camera setup and follow var mainCamera = Camera.main; if (mainCamera == null) { return; } var playerPosition = defaultPlayer.Hero.WorldPosition.xy; var levelSize = levelGridModel.Size; var levelConfig = gameMode.LevelConfigs[levelStage.LevelIndex]; var cameraRect = math.float2(Screen.width * 2f / Screen.height, 1) * mainCamera.orthographicSize; var fieldRect = (levelSize - cameraRect) / 2f; var fieldMargins = (float4)levelConfig.ViewportPadding / levelConfig.OriginalPixelsPerUnits; var position = math.clamp(playerPosition, fieldMargins.xy - fieldRect, fieldRect + fieldMargins.zw); mainCamera.transform.position = math.float3(position, -1); }