public override void OnEnter(TankEternalGameState prevState, object parameter) { if (playerPawn == null) { playerPawn = Context.PlayerPawn; playerPawnStateMachine = playerPawn.StateMachine; } Context.CameraHolder.Follow(playerPawn.transform); Context.UiController.StateMachine.SetState <PlayTankEternalUiState>(); }
private void Awake() { var levelSettings = SettingsSet.LevelSettings; // Input manager setup GameInputManager = new TankEternalGameInputManager { InputEnabled = true, StandaloneInputModule = StandaloneInputModule, GameInputHandler = StateMachine, Camera = CameraHolder.Camera, CameraDistance = levelSettings.CameraDistance, FireButtonName = this.FireButtonName, NextWeaponButtonName = this.NextWeaponButtonName, PrevWeaponButtonName = this.PrevWeaponButtonName }; GameInputManager.Init(); // State Machine setup StateMachine.Init(); // Level setup // todo Move to a separate class and call it each time Game Begins float levelWidth = Random.Range(levelSettings.LevelMinWidth, levelSettings.LevelMaxWidth); float levelHeight = Random.Range(levelSettings.LevelMinHeight, levelSettings.LevelMaxHeight); LevelLeftBorder = -levelWidth / 2f; LevelRightBorder = levelWidth / 2f; LevelBottomBorder = -levelHeight / 2f; LevelTopBorder = levelHeight / 2f; BackgroundRectangleSpawner.CuboidArea.Size.x = levelWidth * 1.5f; BackgroundRectangleSpawner.CuboidArea.Size.z = levelHeight * 1.5f; BackgroundRectangleSpawner.ObjectNumber = (int)(levelWidth + levelHeight); BackgroundRectangleSpawner.Spawn(); // todo Rework Spawner so it will have ability to Shuffle Rectangles positions without recreating them Destroy(BackgroundRectangleSpawner); int obstaclesSpawnAmount = levelSettings.ObstaclesSpawnAmount; var obstaclePrefabs = levelSettings.ObstaclePrefabs; for (int index = 0; index < obstaclesSpawnAmount; index++) { var obstaclePrefab = obstaclePrefabs[Random.Range(0, obstaclePrefabs.Length)]; var obstacle = Instantiate(obstaclePrefab); var spawnPosition = new Vector3(Random.Range(LevelLeftBorder, LevelRightBorder), 0f, Random.Range(LevelBottomBorder, LevelTopBorder)); obstacle.transform.localPosition = spawnPosition; } LevelNavMeshQuadTransform.localScale = new Vector3(levelWidth, levelHeight, 1f); NavMeshSurface.BuildNavMesh(); // PlayerBullet Pawn setup PlayerPawn = Instantiate(playerPawnPrefab); PlayerPawn.GameController = this; PlayerPawn.Init(); // Enemy Pawns setup var enemySettings = SettingsSet.EnemySettings; EnemyPawnObjectPool.InitialSize = enemySettings.MaxEnemyAmount; EnemyPawnObjectPool.AbleToExpand = false; EnemyPawnObjectPool.Init(); var enemies = EnemyPawnObjectPool.AvailableObjects; for (int index = 0; index < enemies.Count; index++) { var enemy = (TankEternalEnemyPawn)enemies[index]; enemy.PlayerPawn = PlayerPawn; enemy.Init(); } enemySpawnDelay = enemySettings.SpawnDelay; enemySpawnCurrentDelay = enemySpawnDelay; var screenWorldBorders = GameInputManager.ScreenToWorldPoint(new Vector2(Screen.width, Screen.height)); ScreenWorldHalfWidth = screenWorldBorders.x; ScreenWorldHalfHeight = -screenWorldBorders.y; // Camera setup CameraHolder.CameraOffset = new Vector3(0.0f, levelSettings.CameraDistance, 0.0f); CameraHolder.Init(); // Ui setup UiController.GameController = this; UiController.Init(); }