/// <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));
        }
Exemple #4
0
        /// <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;
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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;
            }
        }
Exemple #8
0
        /// <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);
            }
        }
Exemple #9
0
        /// <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);
         }
     }
 }
Exemple #12
0
        /// <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);
        }
Exemple #13
0
        /// <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);
        }
Exemple #14
0
        /// <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;
            }
        }
Exemple #16
0
        /// <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);
            }
        }
Exemple #19
0
 /// <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);
 }
Exemple #20
0
 /// <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();
 }