/// <summary> /// /// </summary> /// <param name="action"></param> private void OnSubmit(UINavigationData action) { action.navigationHandler.Unfocus(); StopMusic(); switch (action.actionName) { case "Rematch": if (GameModeParams.instance.useRandomMap) { GameModeParams.instance.selectedMap = GetRandomMap(GameModeParams.instance.selectedMap); } GameplayStatics.TransitionToScene(GameModeParams.instance.selectedMap); break; case "QuitGame": GameplayStatics.TransitionToScene( GameConstants.TitleScreenScene ); break; default: MatchSettingsManager.showMaps = true; GameplayStatics.TransitionToScene( GameConstants.MatchSettingsScene ); break; } }
/// <summary> /// /// </summary> /// <param name="weapon"></param> /// <param name="spawnPickable"></param> /// <param name="index"></param> /// <returns></returns> public bool ClearWeapon(WeaponEquippable weapon, bool spawnPickable = true, int index = -1) { if (index == -1) { for (var i = 0; i < _weapons.Length; ++i) { if (_weapons[i] == weapon) { index = i; } } Debug.Assert(index >= 0); } var switchWeapon = _currentEquippable is WeaponEquippable; Destroy(weapon.gameObject); if (spawnPickable && weapon.weaponDescriptor != spawner.defaultWeapon) { GameplayStatics.SpawnWeaponPickable(weapon.weaponDescriptor, transform.position); } _weapons[index] = null; if (switchWeapon) { _currentEquippable = null; SwitchWeapon(); } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> private void StartAnimation() { _currentSequence = DOTween.Sequence(); _currentSequence.Append(_textDemo.DOFade(1f, 0.5f)); foreach (var item in _images) { _currentSequence.Join(item.DOFade(1f, 0.5f)); } _currentSequence.AppendInterval(1.0f); _currentSequence.Append(_textDemo.DOFade(0f, 0.5f)); foreach (var item in _images) { _currentSequence.Join(item.DOFade(0f, 0.5f)); } _currentSequence.Append(_textMesh.DOFade(1f, 0.5f)); _currentSequence.Join(_controllerImage.DOFade(1f, 0.5f)); _currentSequence.AppendInterval(1.0f); _currentSequence.Append(_textMesh.DOFade(0f, 0.5f)); _currentSequence.Join(_controllerImage.DOFade(0f, 0.5f)); _currentSequence.AppendCallback(() => GameplayStatics.TransitionToScene(GameConstants.TitleScreenScene)); }
/// <summary> /// /// </summary> /// <returns></returns> private IEnumerator LoadGame() { MenuMusicController.StopMusic(); yield return(new WaitForSecondsRealtime(1.0f)); GameplayStatics.TransitionToScene(_mapSettings.selectedMap.sceneName); }
/// <summary> /// /// </summary> /// <param name="winner"></param> /// <returns></returns> private IEnumerator GameOver(CharacterSpawner winner) { for (var i = 0; i < characterSpawners.Count; ++i) { if (characterSpawners[i].teamIndex == -1) { continue; } characterSpawners[i].UpdateScoreInfo(); Telemetry.game.Set($"player{i}Score", characterSpawners[i].score); } isGameOver = true; var character = winner.character; var aiBehaviourManager = character.GetComponentInChildren <AIBehaviourManager>(); if (aiBehaviourManager != null) { Destroy(aiBehaviourManager.gameObject); } yield return(winner.OpenPod()); character.SetGameplayState(CharacterGameplayState.Leaving); yield return((character.gameplayStateHandler as CharacterGameplayState_Leaving).coroutine); yield return(winner.ClosePod()); StartCoroutine(TriggerExplosions()); yield return(new WaitForSeconds(1.0f)); for (var i = 0; i < characterSpawners.Count; ++i) { if (characterSpawners[i].teamIndex == -1) { continue; } Telemetry.game.Set($"player{i}Score", characterSpawners[i].score); if (characterSpawners[i] == winner) { continue; } if (characterSpawners[i].character != null) { characterSpawners[i].character.SetGameplayState(CharacterGameplayState.Panicking); } } yield return(new WaitForSeconds(4.0f)); GameplayStatics.TransitionToScene(GameConstants.VictoryScene); yield break; }
/// <summary> /// /// </summary> /// <param name="collision"></param> private bool OnTriggerCollide(Collider2D collision) { _untriggeredContacts.Remove(collision); if (_beingDestroyed) { return(true); } var shooter = (instigator as WeaponEquippable)?.shooter; if (shooter == null) { shooter = instigator as ShooterBehaviour; } if (shooter != null) { if (collision.GetComponent <ShooterBehaviour>() == shooter) { return(false); } } var bulletReaction = collision.GetComponent <BulletReaction>(); var tilemapChunk = collision.GetComponent <TilemapChunk>(); if (bulletReaction == null && tilemapChunk == null) { return(false); } var received = false; if (bulletReaction != null) { var bulletResponse = new BulletResponse(this, collision); bulletReaction.SendBulletReceive(bulletResponse); received = bulletResponse.received; } if (tilemapChunk != null) { received = true; } if (received) { _beingDestroyed = true; if (_hitAnimation) { GameplayStatics.SpawnFireAndForgetAnimation(_hitAnimation, transform.position, Quaternion.identity) .AddComponent <TileObjectRenderer>().additive = 12; } Destroy(gameObject); } return(received); }
/// <summary> /// /// </summary> /// <param name="data"></param> private IEnumerator OnSubmit(UINavigationData data) { var shakeTime = 0.5f; var shakeStrenght = 5f; var shakeVibrato = 50; switch (data.actionName) { case "Start": data.navigationHandler.Unfocus(); ShakeAllControllers(); MatchSettingsManager.showMaps = false; yield return(UITitleScreenPanel.titleScreenPanelInstance.playButton.transform.DOShakePosition(shakeTime, shakeStrenght, shakeVibrato).WaitForCompletion()); UITitleScreenPanel.CloseTitleScreenPanel(); break; case "Settings": data.navigationHandler.Unfocus(); ShakeAllControllers(); yield return(UITitleScreenPanel.titleScreenPanelInstance.settingsButton.transform.DOShakePosition(shakeTime, shakeStrenght, shakeVibrato).WaitForCompletion()); UITitleScreenPanel.titleScreenPanelInstance.gameObject.SetActive(false); SettingsPanelNavigationHandler.OpenSettingsPanel(() => { data.navigationHandler.Focus(); UITitleScreenPanel.titleScreenPanelInstance.gameObject.SetActive(true); }); break; case "Credits": data.navigationHandler.Unfocus(); ShakeAllControllers(); yield return(UITitleScreenPanel.titleScreenPanelInstance.creditsButton.transform.DOShakePosition(shakeTime, shakeStrenght, shakeVibrato).WaitForCompletion()); UITitleScreenPanel.titleScreenPanelInstance.gameObject.SetActive(false); var credits = FindObjectOfType <Credits>(); credits?.StartCredits(() => { data.navigationHandler.Focus(); UITitleScreenPanel.titleScreenPanelInstance.gameObject.SetActive(true); }); UITitleScreenPanel.titleScreenPanelInstance.gameObject.SetActive(false); break; case "QuitGame": data.navigationHandler.Unfocus(); ShakeAllControllers(); MenuMusicController.StopMusic(); yield return(UITitleScreenPanel.titleScreenPanelInstance.quitButton.transform.DOShakePosition(shakeTime, shakeStrenght, shakeVibrato).WaitForCompletion()); GameplayStatics.TransitionToScene(GameConstants.SupportScene); break; } }
/// <summary> /// /// </summary> protected virtual void LateUpdate() { if (hasGameStarted && !_isGameOver && InputHelper.AnyButtonDown(UIStartInputName)) { GameplayStatics.TogglePause(); } if (!isGameOver && GameplayStatics.state == GameplayState.GamePaused) { Telemetry.game.Incr("timeInPause", GameplayStatics.pauseDeltaTime); } }
/// <summary> /// /// </summary> private void UpdateCharacterSelection() { if (CheckTransitionBack(State.None)) { GameplayStatics.TransitionToScene(GameConstants.TitleScreenScene); return; } UpdateControllers(); var allReady = _characterSettings.Where(x => x.isJoining).All(x => x.hasSelected); var playersReady = _characterSettings.Where(x => x.isReady).ToArray(); var playersReadyCount = playersReady.Count(x => x.isReady); var playersJoinCount = _characterSettings.Count(x => x.isJoining); var enoughPlayers = playersReadyCount >= (Debug.isDebugBuild ? 1 : MinimumNumberOfPlayers); if (playersJoinCount < 2 && playersReadyCount >= 1 && !Debug.isDebugBuild) { _playerMinPrompt.Open(); } else if (_playerMinPrompt.isOpen) { _playerMinPrompt.Close(); } if (allReady && enoughPlayers) { if (!_continuePrompt.isOpen) { _continuePrompt.Open(); } } else if (_continuePrompt.isOpen) { _continuePrompt.Close(); } if (_continuePrompt.isOpen) { int controllerIndex; if (InputHelper.AnyButtonDown(SubmitInputName, out controllerIndex)) { if (playersReady.Any(x => x.controllerIndex == controllerIndex && x.isReady) || playersReady.All(x => x.useCPU)) { GotoMapSelection(); } } } }
/// <summary> /// /// </summary> public bool ScatterSupply() { var supply = resources.supply; if (supply > 0 && GetComponent <NoSupplyPickupBuff>() == null) { resources.TakeSupply(supply); GameplayStatics.ScatterSupply(transform, supply); TryAddBuff <NoSupplyPickupBuff>(0.5f); return(true); } return(false); }
/// <summary> /// /// </summary> /// <param name="dropDefault"></param> public void DropAllWeapons(bool dropDefault = false) { foreach (var weapon in weapons) { if (weapon != null && weapon.weaponDescriptor != null) { if (!dropDefault && weapon.weaponDescriptor == spawner.defaultWeapon) { continue; } weapon.OnUnequip(); GameplayStatics.SpawnWeaponPickable(weapon.weaponDescriptor, transform.position); } } }
/// <summary> /// /// </summary> private static void OnMapLoaded(Scene oldScene, Scene newScene) { if (newScene.name.StartsWith(GameConstants.MapPrefixe)) { foreach (var playerParams in GameModeParams.instance.playerParams) { foreach (var loadoutItem in playerParams.loadout.items) { loadoutItem?.Load(); } } GameObject.Instantiate(GameModeParams.instance.selectedGameModePrefab, Vector3.zero, Quaternion.identity); } GameplayStatics.InitMap(newScene); }
/// <summary> /// /// </summary> private IEnumerator CloseInternal() { _playButton.transform.DOMoveX(500f, 0.3f); yield return(new WaitForSeconds(0.2f)); _settingsButton.transform.DOMoveX(-500f, 0.3f); yield return(new WaitForSeconds(0.2f)); _creditsButton.transform.DOMoveX(500f, 0.3f); yield return(new WaitForSeconds(0.2f)); yield return(_quitButton.transform.DOMoveX(-500f, 0.3f).WaitForCompletion()); GameplayStatics.TransitionToScene(GameConstants.MatchSettingsScene); }
/// <summary> /// /// </summary> public void BeginDestroy() { if (_isDestroyed) { return; } _isDestroyed = true; this.EmitSound(DestroySoundKey); if (_destroyAnimation != null) { GameplayStatics.SpawnFireAndForgetAnimation(_destroyAnimation, transform.position, transform.rotation) .AddComponent <TileObjectRenderer>(); } GameplayStatics.ScatterSupply(transform, _supplyCost); Destroy(gameObject); }
/// <summary> /// /// </summary> /// <param name="data"></param> private void OnSubmit(UINavigationData data) { switch (data.actionName) { case "Resume": GameplayStatics.UnpauseGame(); break; case "Rematch": StopMusic(); GameplayStatics.TransitionToScene( UnityEngine.SceneManagement.SceneManager.GetActiveScene().name ); break; case "Settings": data.navigationHandler.Unfocus(); _pausePanel.gameObject.SetActive(false); SettingsPanelNavigationHandler.OpenSettingsPanel(() => { _pausePanel.gameObject.SetActive(true); data.navigationHandler.Focus(); }); break; case "QuitGame": StopMusic(); GameplayStatics.TransitionToScene( GameConstants.TitleScreenScene ); break; case "ChangeMap": MatchSettingsManager.showMaps = true; StopMusic(); GameplayStatics.TransitionToScene( GameConstants.MatchSettingsScene ); break; } }
/// <summary> /// /// </summary> private void Update() { if (_updateCount % frequency == 0) { var index = _updateCount / frequency; if (index >= explosions.Count) { Destroy(gameObject); return; } foreach (var pos in explosions[index]) { GameplayStatics.SpawnFireAndForgetAnimation(explosionAnimation, pos, Quaternion.identity) .GetComponent <SpriteRenderer>().sortingLayerID = SortingLayerHelper.GetSortingLayerValue(StaticSortingLayer.Default); } } ++_updateCount; }
/// <summary> /// /// </summary> /// <returns></returns> private IEnumerator TriggerExplosions() { this.EmitSound(ShipDamageSoundKey); CameraShakeManager.instance.Shake(_lastShipHitGameCameraShake); yield return(new WaitForSeconds(2f)); var halfWidth = GameConstants.SceneWidth / 2.0f; var halfHeight = GameConstants.SceneHeight / 2.0f; var explosionSoundSkip = 0; do { var pos = new Vector2(Random.Range(halfWidth * -1.0f, halfWidth), Random.Range(halfHeight * -1.0f, halfHeight)); var index = Random.Range(0, _endGameExplosionAnimations.Count); GameplayStatics.SpawnFireAndForgetAnimation(_endGameExplosionAnimations[index], pos, Quaternion.identity) .GetComponent <SpriteRenderer>().sortingLayerID = SortingLayerHelper.GetSortingLayerValue(StaticSortingLayer.Default); explosionSoundSkip++; if (explosionSoundSkip > 5) { this.EmitSound(ShipExplosionSoundKey, false); explosionSoundSkip = 0; } CameraShakeManager.instance.Shake(_endGameCameraShake); if (_endGameExplosionRandomIntervalMax > _endGameExplosionIntervalMin) { _endGameExplosionRandomIntervalMin -= _endGameExplosionDecrementValue; _endGameExplosionRandomIntervalMax -= _endGameExplosionDecrementValue; } yield return(new WaitForSeconds(Random.Range(_endGameExplosionRandomIntervalMin, _endGameExplosionRandomIntervalMax))); } while (true); }
/// <summary> /// /// </summary> /// <param name="startPoint"></param> /// <param name="direction"></param> /// <param name="originalShot"></param> private void DoRay(Vector2 startPoint, Vector2 direction, bool originalShot) { var rebounced = false; var raycastHit = Physics2D.Raycast(startPoint, direction, GameConstants.SceneWidth, LayerMask.GetMask(SolidLayerName, CharacterLayerName)); if (raycastHit.collider != null) { var damageComponent = raycastHit.collider.GetComponent <DamageComponent>(); if (damageComponent != null) { var opponent = damageComponent as Character; var takeDamages = opponent == null; if (opponent != null) { if (opponent.GetComponent <InvincilityBuff>() != null) { takeDamages = false; } else { var dashState = opponent.gameplayStateHandler as CharacterGameplayState_Dash; if (dashState != null) { takeDamages = false; if (dashState.isActive) { rebounced = true; var bounceDirection = direction * -1.0f; dashState.dashDeflectAbility.SpawnDeflectAnimation(dashState, opponent.transform); DoRay((Vector2)opponent.transform.position + bounceDirection * (GameConstants.HalfTileSize + 1.0f), bounceDirection, false); } } else { opponent.Push(character.targetOrientation, 2000.0f, 0.1f); takeDamages = true; } } } if (takeDamages) { damageComponent.TakeDamages(new DamageInfo { provider = this, damages = (int)weaponDescriptor.damages, damageType = weaponDescriptor.damageType, }); if (opponent != null && opponent.resources.health <= 0) { SpawnHeadshot(opponent.transform); } } } } this.EmitSound(weaponDescriptor.fireSounds, true); DoKnockbackSequence(); AddHeat(weaponDescriptor.heatPerShot); elapsedSinceLastFire = 0.0f; // Spawn fire effect. if (originalShot && weaponDescriptor.fireEffectPrefab != null) { Instantiate(weaponDescriptor.fireEffectPrefab, startPoint, muzzleTransform.rotation); } if (weaponDescriptor.shotTrailRenderer != null) { var shotTrail = Instantiate(weaponDescriptor.shotTrailRenderer, startPoint, muzzleTransform.rotation); shotTrail.transform.DOMove(raycastHit.point, 0.1f); } if (!rebounced && weaponDescriptor.impactAnimation != null) { GameplayStatics.SpawnFireAndForgetAnimation(weaponDescriptor.impactAnimation, raycastHit.point, Quaternion.identity); } }
/// <summary> /// /// </summary> /// <param name="dashState"></param> /// <param name="transform"></param> public void SpawnDeflectAnimation(CharacterGameplayState_Dash dashState, Transform transform) { dashState.character.EmitSound(DeflectSoundKey); GameplayStatics.SpawnFireAndForgetAnimation(abilityData.deflectAnimation, transform.position, transform.rotation, dashState.character.transform); }
/// <summary> /// /// </summary> /// <param name="unloadedScene"></param> private static void OnMapUnloaded(Scene unloadedScene) { GameplayStatics.DeinitMap(unloadedScene); }
/// <summary> /// /// </summary> private IEnumerator Spawn() { if (!canSpawn) { yield break; } if (_firstSpawn) { _firstSpawn = false; FirstSpawn(); } _playerSpawnParticleSystem.Play(); yield return(new WaitForSeconds(_spawnDelay)); _playerSpawnParticleSystem.Stop(); var animation = GameplayStatics.SpawnFireAndForgetAnimation(_playerSpawnAnimation, transform.position, Quaternion.identity); yield return(new WaitForSeconds(_materializationDelay)); character = Instantiate(_characterPrefab, transform.position + spawnOffset, transform.rotation).GetComponent <Character>(); var hitFlash = character.GetComponent <HitFlash>(); hitFlash?.Flash(1.0f, 0.4f, 1f); var playerParams = GameModeParams.instance.playerParams[playerIndex - 1]; character.GetComponent <GameplayTeam>().teamIndex = teamIndex; character.GetComponent <CharacterResources>().supply = _supply; character.spawner = this; character.characterDescriptor = playerParams.selectedCharacter; character.skinDescriptor = playerParams.selectedSkin; character.name = $"Character_{playerParams.selectedSkin.name}"; character.SetConstructsFromLoadout(playerParams.loadout); character.TryAddBuff <InvincilityBuff>(1.0f); character.SetWeapon(0, _defaultWeapon); character.Orientate(_orientation, _orientation); var playerIdBehaviour = Instantiate(_playerIdSpritePrefab, transform.position + _playerIdSpritePrefab.transform.position, Quaternion.identity, character.transform) .GetComponent <CharacterPlayerIdBehaviour>(); if (playerParams.isAiControlled) { playerIdBehaviour.playerIndex = -1; } else { playerIdBehaviour.playerIndex = playerIndex; } playerIdBehaviour.color = character.characterDescriptor.mainColor; this.EmitSound(PlayerSpawnSoundKey); var additiveArmor = GameMode.instance.highestScore - score; if (additiveArmor > 0) { var powerUp = new ArmorPowerUp(); powerUp.powerUpData = _armorPowerUpData; powerUp.Apply(character, additiveArmor); } GameMode.instance.OnCharacterSpawned(character); if (playerParams.isAiControlled) { var behaviourManager = new GameObject(nameof(AIBehaviourManager)).AddComponent <AIBehaviourManager>(); behaviourManager.gameObject.layer = LayerMask.NameToLayer("CharacterAI"); behaviourManager.GetComponent <AINavigationController>().navMesh = _navMesh; behaviourManager.transform.SetParent(character.transform); } else { var characterInput = character.gameObject.AddComponent <CharacterInput>(); characterInput.userIndex = playerParams.controllerIndex; characterInput.vibrationMultiplier = playerParams.vibrationMultiplier; } }
/// <summary> /// /// </summary> /// <param name="data"></param> private void OnCancel(UINavigationData data) { GameplayStatics.UnpauseGame(); }