Пример #1
0
    //new
    protected void Move()
    {
        if (m_direction.sqrMagnitude > m_stopDistance * m_stopDistance)
        {
            //Debug.Log("Move");
            if (HasWalAnim)
            {
                m_animationcomponent.IsWalking = true;
            }


            //Move
            float increment = Trajectories.UniformAccelerateMovement(m_groundSpeed, m_accel, Time.deltaTime);
            //m_direction.y = 0f;
            if (m_groundSpeed < m_MaxVelocity)
            {
                m_groundSpeed = Trajectories.UniformAccelerateVelocity(m_groundSpeed, m_accel, Time.deltaTime);
            }
            Vector3 fordward = transform.forward;
            fordward.y = 0f;
            this.GetComponent <Rigidbody>().MovePosition(GetComponent <Rigidbody>().position + fordward * increment);
            //transform.position = new Vector3(transform.position.x, YPlane, transform.position.z);
            //transform.position += transform.forward*increment;
            //m_state = TState.MOVE;
        }
    }
Пример #2
0
    void FixedUpdate()
    {
        bool lightActive = GameMgr.GetInstance().GetStorageMgr().Get <bool>("settings", "light_active");

        m_lantern.gameObject.SetActive(lightActive);
        if (m_state != TState.ATTACK_BLOCK)
        {
            if (m_state == TState.MOVE)
            {
                m_attackComponent.ToAttack(false);
            }
            m_isGrouned     = IsGrounded();
            m_targetPoint.y = transform.position.y;
            Debug.DrawLine(transform.position, transform.position + transform.forward * 2f, Color.red);
            Vector3 direction   = m_targetPoint - transform.position;
            float   sqrDistance = direction.sqrMagnitude;
            Rotation(Time.fixedDeltaTime);
            m_move = Vector3.zero;
            if (sqrDistance > m_distanceToStop * m_distanceToStop)
            {
                direction = direction.normalized;
                float distanceInc = Trajectories.UniformAccelerateMovement(m_speed, m_accel, Time.fixedDeltaTime);
                if (m_speed < m_maxGroundSpeed)
                {
                    m_speed = Trajectories.UniformAccelerateVelocity(m_speed, m_accel, Time.fixedDeltaTime);
                }
                direction *= distanceInc;
                m_animationComponent.IsRunning = true;
                m_animationComponent.IsWalking = true;

                m_move.x = direction.x;
                m_move.z = direction.z;
                m_state  = m_state == TState.GO_TO_ATTACK ? m_state: TState.MOVE;
            }
            else
            {
                if (m_state != TState.ATTACK_NO_BLOCK)
                {
                    m_animationComponent.IsRunning = false;
                    m_animationComponent.IsWalking = false;
                    m_speed = m_initialSpeed;
                }
            }

            if (!m_isGrouned)
            {
                float distanceGravityInc = Trajectories.UniformAccelerateMovement(m_gravityVelocity, m_gravity, Time.fixedDeltaTime);
                if (m_gravityVelocity < m_maxAirSpeed)
                {
                    m_gravityVelocity = Trajectories.UniformAccelerateVelocity(m_gravityVelocity, m_gravity, Time.fixedDeltaTime);
                }
                m_move.y = -distanceGravityInc;
                m_state  = TState.MOVE;
            }
            else
            {
                m_gravityVelocity = 0f;
            }

            if (m_state == TState.MOVE || m_state == TState.GO_TO_ATTACK)
            {
                m_characterController.Move(m_move);
            }

            if (m_state == TState.GO_TO_ATTACK)
            {
                if (m_attackComponent.CheckCanAttack())
                {
                    m_state             = TState.ATTACK_BLOCK;
                    m_preparingToAttack = true;
                    ThrowAttack();
                }
                else
                {
                    m_attackComponent.ToAttack(false);
                }
            }
        }
        else
        {
            if (m_preparingToAttack)
            {
                //orientamos el personaje para atacar...
                if (Rotation(Time.fixedDeltaTime))
                {
                    ThrowAttack();
                }
            }
        }
    }