コード例 #1
0
    private void Update()
    {
        var position = transform.position;

        position.y        -= m_fallingSpeed * Time.deltaTime;
        transform.position = position;

        var rotation = transform.rotation;

        rotation           = rotation * Quaternion.AngleAxis(m_rotationSpeed * Time.deltaTime, Vector3.forward);
        transform.rotation = rotation;

        if (!m_isOnWater)
        {
            var waterHeight = m_waterLevel.GetWaterHeight(transform.position.x, true);
            if (waterHeight >= transform.position.y)
            {
                m_isOnWater = true;
                // TODO, water circles
                // m_water.Impulse(waterStripIndex, 4.0f, transform.position.x);
                m_fallingSpeed   = 0.1f;
                m_rotationSpeed *= 0.3f;
                SetFireEnabled(false);
            }
        }

        if (transform.position.y < -2.0)
        {
            gameObject.SetActive(false);
        }
    }
コード例 #2
0
    private void Update()
    {
        float level = m_waterLevel.GetWaterHeight(transform.position.x, m_waterLevelNoise);

        level += 0.02f;

        foreach (var item in m_spriteRenderers)
        {
            item.material.SetFloat(m_uniformId, level);
        }
    }
コード例 #3
0
ファイル: Superhero.cs プロジェクト: asmCode/ggb_hero
    void Update()
    {
        Vector2 velocity = Velocity;

        if (IsOnWater && velocity.y > 0.0f)
        {
            Dude.SetBobyPartsKinematic(false);
            DudeAnimator.ClearClip();
            m_isPLayingSwimmAnim = false;
            IsOnWater            = false;
            IsInAir = true;

            m_waterWaver.Reset();

            if (m_waterCircles != null)
            {
                m_waterCircles.Stop();
                m_waterCircles = null;
            }
        }

        if (velocity.y > 0)
        {
            IsInAir = true;
        }

        Vector2 position = transform.position;
        float   waterHeight;
        int     waterStripIndex;
        Vector2 prevPosition = position;

        if (IsOnWater)
        {
            waterHeight = m_waterLevel.GetWaterHeight(transform.position.x, false);

            position           = transform.position;
            position.y         = waterHeight;
            position.y        += m_waterWaver.GetValue(Time.deltaTime);
            position.x        += velocity.x * Time.deltaTime;
            transform.position = position;
        }
        else
        {
            position += velocity * Time.deltaTime;
        }

        Bounds bounds = m_superheroArea.GetBounds();

        float bounce_power = 0.3f;

        if (position.x < bounds.min.x)
        {
            position.x = bounds.min.x;
            velocity.x = -velocity.x * bounce_power;
        }
        if (position.x > bounds.max.x)
        {
            position.x = bounds.max.x;
            velocity.x = -velocity.x * bounce_power;
        }
        if (position.y > bounds.max.y)
        {
            position.y = bounds.max.y;
            velocity.y = 0.0f;
        }

        if (m_rescueAreaLeft.IsPointInside(position) ||
            m_rescueAreaRight.IsPointInside(position))
        {
            NotifyCollisionWithRescueArea();
        }

        Bounds shoreLeftBounds = m_shoreLeftBounds.GetBounds();

        if (position.x < shoreLeftBounds.max.x && position.y < shoreLeftBounds.max.y && velocity.y < 0 && prevPosition.y >= shoreLeftBounds.max.y)
        {
            position.y = shoreLeftBounds.max.y;
            velocity   = Vector2.zero;
            if (IsInAir)
            {
                AudioManager.GetInstance().SoundLand.Play();
                IsInAir = false;
            }
        }
        else if (position.x < shoreLeftBounds.max.x && position.y < shoreLeftBounds.max.y && velocity.x < 0 && prevPosition.y <= shoreLeftBounds.max.y)
        {
            position.x = shoreLeftBounds.max.x;
            velocity.x = -velocity.x * bounce_power;
        }

        Bounds shoreRightBounds = m_shoreRightBounds.GetBounds();

        if (position.x > shoreRightBounds.min.x && position.y < shoreRightBounds.max.y && velocity.y < 0 && prevPosition.y >= shoreRightBounds.max.y)
        {
            position.y = shoreRightBounds.max.y;
            velocity   = Vector2.zero;
            if (IsInAir)
            {
                AudioManager.GetInstance().SoundLand.Play();
                IsInAir = false;
            }
        }
        else if (position.x > shoreRightBounds.min.x && position.y < shoreRightBounds.max.y && velocity.x > 0 && prevPosition.y <= shoreRightBounds.max.y)
        {
            position.x = shoreRightBounds.min.x;
            velocity.x = -velocity.x * bounce_power;
        }

        waterHeight = m_waterLevel.GetWaterHeight(transform.position.x, false);

        if (position.y <= waterHeight && !IsOnWater && velocity.y <= 0.0f)
        {
            IsOnWater = true;
            IsInAir   = false;

            SpawWaterCircles(position);
            // TODO, water circles
            // m_water.Impulse(waterStripIndex, Mathf.Min(3.0f, Velocity.magnitude), position.x);
            velocity.y = 0.0f;
            velocity.x = 0.0f;

            WaterSplash splash = WaterSplashPool.Instance.Get();
            if (splash != null)
            {
                splash.Splash(1.0f, Vector2.up, waterHeight, position.x);
            }
            AudioManager.GetInstance().SoundWaterSplash.Play();
        }

        if (IsOnWater && velocity.x != 0.0f)
        {
            if (!AudioManager.GetInstance().SoundSwim.IsPlaying())
            {
                AudioManager.GetInstance().SoundSwim.Play();
            }

            m_nextWaterCircleWhenSwimming -= Time.deltaTime;
            if (m_nextWaterCircleWhenSwimming <= 0.0f)
            {
                m_nextWaterCircleWhenSwimming = Random.Range(0.2f, 0.4f);
                SpawWaterCircles(position);
            }
        }
        else
        {
            if (AudioManager.GetInstance().SoundSwim.IsPlaying())
            {
                AudioManager.GetInstance().SoundSwim.Stop();
            }
        }

        if (IsOnWater && !m_isPLayingSwimmAnim)
        {
            Dude.SetBobyPartsKinematic(true);
            if (Dude.IsConnected(BodyPartType.HandLeft))
            {
                Dude.SetBobyPartKinematic(BodyPartType.HandLeft, false);
            }
            if (Dude.IsConnected(BodyPartType.HandRight))
            {
                Dude.SetBobyPartKinematic(BodyPartType.HandRight, false);
            }
            DudeAnimator.Swim();
            m_isPLayingSwimmAnim = true;
            m_isPLayingJumpAnim  = false;
        }

        if (!IsOnWater && !m_isPLayingJumpAnim)
        {
            Dude.SetBobyPartsKinematic(true);
            if (Dude.IsConnected(BodyPartType.HandLeft))
            {
                Dude.SetBobyPartKinematic(BodyPartType.HandLeft, false);
            }
            if (Dude.IsConnected(BodyPartType.HandRight))
            {
                Dude.SetBobyPartKinematic(BodyPartType.HandRight, false);
            }
            DudeAnimator.Jump();
            m_isPLayingJumpAnim = true;
        }

        Velocity           = velocity;
        transform.position = new Vector3(position.x, position.y, -0.3f);
    }