Example #1
0
    ////////////////////////////////////////////////////////////////

    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
        });
    }
Example #2
0
    ////////////////////////////////////////////////////////////////

    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);
    }
Example #3
0
    ////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////

    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;
    }
Example #4
0
    ////////////////////////////////////////////////////////////////

    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);
    }
Example #5
0
    ////////////////////////////////////////////////////////////////

    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;
    }
Example #6
0
    ////////////////////////////////////////////////////////////////

    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;
    }