//////////////////////////////////////////////////////////////// public void AddPlatform(PlatformData platformData) { AssetDataPlayer assetDataPlayer = AssetManager.GetAssetData <AssetDataPlayer>(); GameObject gameObject = new GameObject("~ Platform"); gameObject.layer = (int)GameLayer.Platform; gameObject.transform.parent = m_PlatformCoreObject.transform; (Mesh mesh, Vector2[] collisionVerts) = platformData.Create(); MeshFilter filter = gameObject.AddComponent <MeshFilter>(); filter.sharedMesh = mesh; MeshRenderer renderer = gameObject.AddComponent <MeshRenderer>(); renderer.sharedMaterial = assetDataPlayer.PlatformMaterial; PolygonCollider2D collider = gameObject.AddComponent <PolygonCollider2D>(); collider.points = collisionVerts; m_Platforms.Add(new Platform { _Data = platformData, _GameObject = gameObject }); }
//////////////////////////////////////////////////////////////// public bool ShouldPlayerPlaceSpiritsAtTotem() { AssetDataPlayer assetData = AssetManager.GetAssetData <AssetDataPlayer>(); float distanceSQ = Vector2.SqrMagnitude(m_PlayerController.transform.position.xy() - m_Totem.transform.position.xy()); return(distanceSQ < assetData.KeyPlaceDistance * assetData.KeyPlaceDistance); }
//////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// void CreateSpawnPointEffectObject() { AssetDataPlayer assetDataPlayer = AssetManager.GetAssetData <AssetDataPlayer>(); m_CurrentSaveParticleSystem = GameObject.Instantiate(assetDataPlayer.FirePlantParticleSystem).GetComponent <ParticleSystem>(); m_CurrentSaveParticleSystem.transform.parent = GameCore.Get().transform; m_CurrentSaveParticleSystem.transform.position = Vector3.zero; }
//////////////////////////////////////////////////////////////// private void InitializePlayerForLevel(LevelID level) { if (m_PlayerController == null || m_PlayerController.gameObject == null) { // Get player asset AssetDataPlayer assetData = AssetManager.GetAssetData <AssetDataPlayer>(); // Spawn the player GameObject playerObject = GameObject.Instantiate(assetData.PlayerPrefab, GameCore.Get().transform); m_PlayerController = playerObject.GetComponentInChildren <PlayerController>(); } AssetDataLevels assetDataLevels = AssetManager.GetAssetData <AssetDataLevels>(); bool isIntroCutsceneLevel = level == assetDataLevels.LevelWithIntroCutscene; m_GameState = isIntroCutsceneLevel ? GameState.Pregameplay : GameState.Gameplay; //////////////////////////////////////////////////////////////// // 1st prio: current spawn point (set by loading level) if (m_CurrentPlayerSpawnPoint != null) { m_PlayerController.Reset(m_CurrentPlayerSpawnPoint.transform.position); return; } // 2nd prio: spawn at first spawnpoint in this level //Find all spawn points in level List <PlayerSpawnPoint> validSpawnPoints = m_PlayerSpawnPoints.FindAll((PlayerSpawnPoint psp) => { return(psp._LevelID == level); }); bool success = validSpawnPoints.Count != 0; if (success) { // Sort by ID validSpawnPoints.Sort((PlayerSpawnPoint lhs, PlayerSpawnPoint rhs) => { if (lhs.Index == rhs.Index) { return(0); } return((lhs.Index < rhs.Index) ? -1 : 1); }); m_PlayerController.Reset(validSpawnPoints[0].transform.position); } else { m_PlayerController.Reset(Vector3.zero); } m_PlayerController.SetVisible(!isIntroCutsceneLevel); }
//////////////////////////////////////////////////////////////// void SetPlayerSpawnPoint(PlayerSpawnPoint spawnPoint) { if (spawnPoint != null) { EventManager.Get().FireEvent(new SpawnPointReachedEvent(spawnPoint)); if (m_CurrentSaveParticleSystem != null && spawnPoint._IsVizualized) { AssetDataPlayer assetDataPlayer = AssetManager.GetAssetData <AssetDataPlayer>(); m_CurrentSaveParticleSystem.Clear(); m_CurrentSaveParticleSystem.Play(); m_CurrentSaveParticleSystem.transform.position = spawnPoint.transform.position + assetDataPlayer.SavePointEffectOffset; if (m_CurrentPlayerSpawnPoint != null) { EventManager.Get().FireEvent(new PlaySoundEvent(Sounds.FX_StopFirePlant, m_CurrentPlayerSpawnPoint.gameObject)); } EventManager.Get().FireEvent(new PlaySoundEvent(Sounds.FX_FirePlant, spawnPoint.gameObject)); GameCore.Get().StartCoroutine(C_FaceInLightForSaveParticleSystem()); } } m_CurrentPlayerSpawnPoint = spawnPoint; }
//////////////////////////////////////////////////////////////// IEnumerator C_Reset() { const float SHADER_ZERO_PERCENTAGE_VALUE = 0.0f; const float SHADER_HALF_PERCENTAGE_VALUE = 0.5f; const float SHADER_FULL_PERCENTAGE_VALUE = 1.0f; //////////////////////////////////////////////////////////////// if (m_IsResetting) { Debug.LogError("Already resetting"); yield break; } //////////////////////////////////////////////////////////////// AssetDataPlayer assetData = AssetManager.GetAssetData <AssetDataPlayer>(); m_IsResetting = true; //////////////////////////////////////////////////////////////// // 1) Start the death screen animation // ... Wait until the screen is completly covered by the effect. MeshRenderer effectRenderer = CameraManager.Get().GetEffectRenderer(); effectRenderer.material = assetData.ScreenDeathTransitionMaterial; effectRenderer.enabled = true; effectRenderer.transform.localScale = new Vector3(12f * Screen.width / Screen.height, 12f, 1f); string shaderPercentagePropertyName = "_Progress"; int shaderPercentagePropertyID = Shader.PropertyToID(shaderPercentagePropertyName); effectRenderer.material.SetFloat(shaderPercentagePropertyID, SHADER_ZERO_PERCENTAGE_VALUE); yield return(new WaitForEndOfFrame()); float currentTime = 0.0f; float effectTime = assetData.ScreenDeathTransitionLength1stHalf; while (currentTime < effectTime) { currentTime += Time.deltaTime; float percentage = Mathf.SmoothStep(SHADER_ZERO_PERCENTAGE_VALUE, SHADER_HALF_PERCENTAGE_VALUE, currentTime / effectTime); percentage = Mathf.Min(percentage, SHADER_HALF_PERCENTAGE_VALUE); effectRenderer.material.SetFloat(shaderPercentagePropertyID, percentage); yield return(new WaitForEndOfFrame()); } //////////////////////////////////////////////////////////////// // 2) Execute the reset if (m_CurrentPlayerSpawnPoint != null) { m_PlayerController.Reset(m_CurrentPlayerSpawnPoint.transform.position); } else { if (m_PlayerSpawnPoints.Count != 0) { m_PlayerController.Reset(Vector3.zero); } } ResetPlatforms(); ResetBlobs(m_CurrentPlayerSpawnPoint._LevelID); ResetResetPlants(m_CurrentPlayerSpawnPoint._LevelID); //////////////////////////////////////////////////////////////// // 3) End the death screen animation // Wait until its done, then disable the renderer again. currentTime = 0.0f; effectTime = assetData.ScreenDeathTransitionLength2ndHalf; while (currentTime < effectTime) { currentTime += Time.deltaTime; float percentage = Mathf.SmoothStep(SHADER_HALF_PERCENTAGE_VALUE, SHADER_FULL_PERCENTAGE_VALUE, currentTime / effectTime); percentage = Mathf.Min(percentage, SHADER_FULL_PERCENTAGE_VALUE); effectRenderer.material.SetFloat(shaderPercentagePropertyID, percentage); yield return(new WaitForEndOfFrame()); } effectRenderer.material.SetFloat(shaderPercentagePropertyID, SHADER_FULL_PERCENTAGE_VALUE); yield return(new WaitForEndOfFrame()); effectRenderer.enabled = false; m_IsResetting = false; }