/*
     * \brief Works out if a value is almost another value (for floating point accuracy)
     */
    public void CallOnCollisionEnter(Collision collision)
    {
        m_collisionState = CollisionState.None;

        foreach (ContactPoint contact in collision)
        {
            m_platform = contact.otherCollider.gameObject.GetComponent <CSceneObjectPlatform>();
            if (m_platform != null)
            {
                m_platform.resetDeltaA();
            }
            if (isNearly(contact.normal.y, 1.0f, 0.2f))
            {
                m_collisionState = CollisionState.OnFloor;

                // are we on a special material?
                m_footMaterial = FootMaterial.Stone;
                if (contact.otherCollider.tag == "Wood Object")
                {
                    m_footMaterial = FootMaterial.Wood;
                }
                else if (contact.otherCollider.tag == "Metal Object")
                {
                    m_footMaterial = FootMaterial.Metal;
                }
            }
            else if (isNearly(contact.normal.y, -1.0f, 0.2f))
            {
                m_collisionState = CollisionState.OnRoof;
            }
            else
            {
                m_collisionState    = CollisionState.OnWall;
                m_ladderClimb.State = LadderState.None;
            }
        }

        if (m_collisionState == CollisionState.OnFloor)
        {
            if (m_jumpState != JumpState.Landed)
            {
                m_player.GetPlayerAnimation().PlayFootstepAudio(m_footMaterial);
            }

            m_jumpState         = JumpState.Landed;
            m_ladderClimb.State = LadderState.None;

            if (m_player.GetPlayerState() != PlayerState.Turning)
            {
                m_player.SetPlayerState(PlayerState.Standing);
            }

            //m_ledgeGrabBox.collider.enabled = true;
        }
    }
 public void SetLedgeGrabState(CEntityPlayer player, PlayerState state)
 {
     if (state == PlayerState.LedgeHang)
     {
         m_velocity = 0;
         player.SetPlayerState(PlayerState.LedgeHang);
         m_body.constraints = RigidbodyConstraints.FreezeAll;
         m_jumpState        = JumpState.Landed;
     }
 }
Esempio n. 3
0
    //called if a collidable object triggers the volume
    void OnTriggerEnter(Collider collider)
    {
        Rigidbody rBody = collider.gameObject.GetComponent <Rigidbody>();

        rBody.AddForce(ForceToApply);
        CEntityPlayer player = collider.gameObject.GetComponent <CEntityPlayer>();

        if (player)
        {
            player.SetPlayerState(PlayerState.Jumping);
        }
    }
 void OnTriggerEnter()
 {
     if (!m_active)
     {
         CEntityPlayer player = CEntityPlayer.GetInstance();
         if (player == null)
         {
             return;
         }
         player.SetPlayerState(PlayerState.InCutScene);
         m_active = true;
         //m_animation.Play();
         this.transform.rotation.SetLookRotation(this.transform.position - player.transform.position);
     }
 }
Esempio n. 5
0
    // Something entered the trigger area
    void OnTriggerEnter(Collider other)
    {
        if (!enabled)
        {
            return;
        }

        if (m_animation == null || m_animation.GetClipCount() == 0)
        {
            Debug.LogWarning("Cutscene '" + name + "' is missing an animation!");
            return;
        }

        if (other.name != "Player Spawn")
        {
            return;
        }

        m_player = CEntityPlayer.GetInstance();
        if (m_player == null)
        {
            return;
        }

        m_camera = CCamera.GetInstance();
        if (m_camera == null)
        {
            return;
        }

        m_player.SetPlayerState(PlayerState.InCutScene);
        if (GruntObject != null)
        {
            GruntObject.GetComponent <CEntityGrunt>().SetGruntState(GruntState.Standing);
        }

        m_camera.ClearFrames();
        m_initialDistanceFromPlayer = m_camera.DistanceFromPlayer;
        m_maxPositionsStored        = m_camera.MaxPositionsStored;
        m_camera.MaxPositionsStored = NumberOfLerpKeys;

        m_animation.Play();
        m_active = true;
    }
Esempio n. 6
0
    // Called once the cutscene has ended
    void OnCutSceneEnd()
    {
        if (!m_pingPongFlag)
        {
            if (GruntObject != null)
            {
                CEntityGrunt grunt = GruntObject.GetComponent <CEntityGrunt>();
                if (grunt != null)
                {
                    grunt.SetGruntState(GruntState.Walking);
                }
            }

            if (m_camera == null)
            {
                Debug.LogError("Camera is null on a cutscene: " + name);
            }

            m_camera.ResetLookAtTransform();
            m_player.SetPlayerState(PlayerState.Standing);
            m_camera.DistanceFromPlayer = m_initialDistanceFromPlayer;
            m_camera.MaxPositionsStored = m_maxPositionsStored;
            m_active = false;
            enabled  = false;
            GameObject.Destroy(this.gameObject);

            if (this.gameObject.name == "AirshipTriggerStart")
            {
                m_hasSeenAirshipCutscene = true;
            }

            //only occurs if airship cutscene
            if (CEntityAirship.GetInstance())
            {
                CEntityAirship.GetInstance().EndCutScene();
            }
            if (CEntityCaptain.GetInstance())
            {
                CEntityCaptain.GetInstance().EndCutScene();
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (m_leverState == eLeverState.InUse && m_animation["Take 001"].normalizedTime > 0.9f)
        {
            m_leverState = eLeverState.Reseting;
            m_animation["Take 001"].speed = -1.0f;

            CEntityPlayer player = CEntityPlayer.GetInstance();
            player.SetPlayerState(PlayerState.Standing);
        }

        if (m_leverState == eLeverState.Reseting && m_animation["Take 001"].normalizedTime <= 0.1f)
        {
            m_leverState = eLeverState.ReadyForUse;
            m_animation["Take 001"].speed = 0.0f;
            state = false;
        }

        if (m_triggerEntered)
        {
            bool pulled = CheckContextButton();
            if (pulled && m_leverState == eLeverState.ReadyForUse)
            {
                CEntityPlayer player = CEntityPlayer.GetInstance();
                player.SetPlayerState(PlayerState.PullingWallLeverDown);

                state        = true;
                m_leverState = eLeverState.InUse;
                m_timePulled = Time.time;
                m_animation["Take 001"].speed = 1.0f;

                if (m_audio != null)
                {
                    m_audio.Play();
                }
            }
        }
    }
 public void SetLedgeGrabState(CEntityPlayer player, PlayerState state)
 {
     if (state == PlayerState.LedgeHang)
     {
         m_velocity = 0;
         player.SetPlayerState(PlayerState.LedgeHang);
         m_body.constraints = RigidbodyConstraints.FreezeAll;
         m_jumpState = JumpState.Landed;
     }
 }
    void OnTriggerStay(Collider other)
    {
        if (!enabled || m_active)
            return;

        if (m_animation == null || m_animation.GetClipCount() == 0)
        {
            Debug.LogWarning("Cutscene '" + name + "' is missing an animation!");
            return;
        }

        if (other.name != "Player Spawn")
            return;

        m_player = CEntityPlayer.GetInstance();
        if (m_player == null)
            return;

        m_camera = CCamera.GetInstance();
        if (m_camera == null)
            return;

        m_player.SetPlayerState(PlayerState.InCutScene);

        m_camera.ClearFrames();
        m_initialDistanceFromPlayer = m_camera.DistanceFromPlayer;
        m_maxPositionsStored = m_camera.MaxPositionsStored;
        m_camera.MaxPositionsStored = NumberOfLerpKeys;

        m_animation.Play();
        m_active = true;
    }
Esempio n. 10
0
    public bool CheckLadder(Collider collision)
    {
        if (this.name == "LadderBASE" && collision.name == "Player Spawn")
        {
            GameObject playerObject = collision.gameObject;
            if (playerObject == null)
            {
                return(false);
            }

            CEntityPlayer player = playerObject.GetComponent <CEntityPlayer>();
            if (player == null)
            {
                return(false);
            }

            LadderState currentLadderState = player.Physics.GetLadder.state;

            if (currentLadderState == LadderState.None || currentLadderState == LadderState.OnMiddle || currentLadderState == LadderState.JumpingOff)
            {
                player.Physics.GetLadder.state = LadderState.AtBase;
            }

            return(true);
        }

        if (this.name == "LadderMID" && collision.name == "Player Spawn")
        {
            GameObject playerObject = collision.gameObject;
            if (playerObject == null)
            {
                return(false);
            }

            CEntityPlayer player = playerObject.GetComponent <CEntityPlayer>();
            if (player == null)
            {
                return(false);
            }

            LadderState currentLadderState = player.Physics.GetLadder.state;

            if (player.GetPlayerState() == PlayerState.OnLadder || currentLadderState == LadderState.None)
            {
                player.Physics.GetLadder.state = LadderState.OnMiddle;
                player.SetPlayerState(PlayerState.OnLadder);
                player.Physics.CurrentCollisionState = CollisionState.None;
            }

            return(true);
        }

        if (this.name == "LadderTOP" && collision.name == "Player Spawn")
        {
            GameObject playerObject = collision.gameObject;
            if (playerObject == null)
            {
                return(false);
            }

            CEntityPlayer player = playerObject.GetComponent <CEntityPlayer>();
            if (player == null)
            {
                return(false);
            }

            LadderState currentLadderState = player.Physics.GetLadder.state;

            if (currentLadderState == LadderState.OnMiddle)
            {
                player.Physics.GetLadder.state = LadderState.OnTop;
                player.SetPlayerState(PlayerState.OnLadder);
                player.Physics.CurrentCollisionState = CollisionState.None;
            }

            return(true);
        }

        return(false);
    }
    /*
     * \brief Works out if a value is almost another value (for floating point accuracy)
     */
    public void CallOnCollisionEnter(Collision collision)
    {
        m_collisionState = CollisionState.None;

        foreach (ContactPoint contact in collision)
        {
            m_platform = contact.otherCollider.gameObject.GetComponent <CSceneObjectPlatform>();
            if (m_platform != null)
            {
                m_platform.resetDeltaA();
            }
            if (isNearly(contact.normal.y, 1.0f, 0.2f))
            {
                m_collisionState = CollisionState.OnFloor;

                if (m_player.GetPlayerState() == PlayerState.OnLadder)
                {
                    GetLadder.state = LadderState.AtBase;
                    m_player.SetPlayerState(PlayerState.Standing);
                }

                // are we on a special material?
                m_footMaterial = FootMaterial.Stone;
                if (contact.otherCollider.tag == "Wood Object")
                {
                    m_footMaterial = FootMaterial.Wood;
                }
                else if (contact.otherCollider.tag == "Metal Object")
                {
                    m_footMaterial = FootMaterial.Metal;
                }
            }
            else if (isNearly(contact.normal.y, -1.0f, 0.2f))
            {
                m_collisionState = CollisionState.OnRoof;
                if (contact.otherCollider != null && contact.otherCollider.GetComponent <CSceneObjectPlatform>() != null)
                {
                    m_player.PushPlayerFromTower();
                }
            }
            else
            {
                if (m_player.GetPlayerState() != PlayerState.OnLadder)
                {
                    m_collisionState = CollisionState.OnWall;
                }
            }
        }

        if (m_collisionState == CollisionState.OnFloor)
        {
            if (m_jumpState != JumpState.Landed)
            {
                m_player.GetPlayerAnimation().PlayFootstepAudio(m_footMaterial);
            }

            m_jumpState = JumpState.Landed;

            if (GetLadder.state == LadderState.JumpingOff)
            {
                GetLadder.state = LadderState.None;
            }

            if (m_player.GetPlayerState() != PlayerState.Turning && m_player.GetPlayerState() != PlayerState.OnLadder && !m_player.PullingLever(false))
            {
                m_player.SetPlayerState(PlayerState.Standing);
            }
        }
    }
    // Update is called once per frame
    new void Update()
    {
        if (m_leverState == eLevelState.InUse && LeverType == eLevelType.MultiUse && (Time.time - m_timePulled > (ResetTime + SendSignalDelay)))
        {
            m_leverState = eLevelState.ReadyForUse;
            state        = false;
        }

        if (SendSignalDelay != 0.0f && Time.time - m_timePulled >= SendSignalDelay && !m_sentSignal)
        {
            state        = true;
            m_sentSignal = true;
        }

        if (m_triggerEntered)
        {
            if (m_animation != null && (Time.time - m_timePulled > TimeDelaySecs && m_leverState == eLevelState.InUse))
            {
                m_animation[AnimationName].speed = 1.0f;
            }

            if (m_animation != null && m_leverState == eLevelState.Reseting)
            {
                m_animation[AnimationName].speed = -1.0f;
            }

            bool pulled = CheckContextButton();
            if (pulled && m_leverState == eLevelState.ReadyForUse)
            {
                CEntityPlayer player = CEntityPlayer.GetInstance();

                if (OnWall)
                {
                    player.SetPlayerState(PlayerState.PullingWallLeverDown);
                }
                else
                {
                    if (AnimationName == "KickActivate")
                    {
                        player.SetPlayerState(PlayerState.KickFloorLever);
                    }
                    else
                    {
                        player.SetPlayerState(PlayerState.NormalFloorLever);
                    }
                }

                if (SendSignalDelay == 0.0f)
                {
                    state = true;
                }
                else
                {
                    m_sentSignal = false;
                }

                m_leverState = eLevelState.InUse;
                m_timePulled = Time.time;
            }
            else if (LeverType == eLevelType.Toggle && pulled && m_leverState == eLevelState.Finished)
            {
                CEntityPlayer player = CEntityPlayer.GetInstance();
                player.SetPlayerState(PlayerState.PullingWallLeverUp);

                state        = false;
                m_leverState = eLevelState.Reseting;
                m_timePulled = Time.time;
            }
        }

        if (m_animation == null)
        {
            return;
        }

        if (m_leverState == eLevelState.InUse && m_animation[AnimationName].normalizedTime > 0.9f)
        {
            if (LeverType == eLevelType.InstantReset)
            {
                m_animation[AnimationName].speed = -1.0f;
                m_leverState = eLevelState.Reseting;
            }
            else if (LeverType == eLevelType.Toggle)
            {
                m_animation[AnimationName].speed = 0.0f;
                m_leverState = eLevelState.Finished;
            }
            else if (LeverType == eLevelType.MultiUse)
            {
                m_leverState = eLevelState.Reseting;
                m_animation[AnimationName].speed = -1.0f;
                state = false;
            }

            CEntityPlayer player = CEntityPlayer.GetInstance();
            player.SetPlayerState(PlayerState.Standing);
        }

        if (m_leverState == eLevelState.Reseting && m_animation[AnimationName].normalizedTime < 0.1f)
        {
            m_animation[AnimationName].speed = 0.0f;
            m_leverState = eLevelState.ReadyForUse;

            CEntityPlayer player = CEntityPlayer.GetInstance();
            player.SetPlayerState(PlayerState.Standing);
        }
    }