Ejemplo n.º 1
0
        public CubeController DoPush(Vector3 dir)
        {
            CubeController didPush = null;

            Vector3 origin = m_Cube.transform.position;

            RaycastHit outHit = new RaycastHit();

            if (Physics.Linecast(origin, origin + dir, out outHit))
            {
                //if has any collision object, look for a CubeController its parent object, and then try to move it
                CubeController cube = outHit.collider.transform.GetComponentInParent <CubeController>();

                if (cube != null)
                {
                    if (cube.m_CanBePushed)
                    {
                        didPush = cube.DoMove(dir);
                    }
                    else if (!cube.m_PushCubeType.Equals(PushType.DontPushCubes))
                    {
                        cube.DoPush(dir);
                    }

                    //if is not possible to move, then try to shake it
                    if (!didPush)
                    {
                        cube.DoShake();
                    }
                }
            }

            return(didPush);
        }
Ejemplo n.º 2
0
        public void Move(Vector3 direction)
        {
            //If there is no cube interaction, can move
            if (m_CubeMoving.Count == 0)
            {
                int countMovingCubes = 0;

                foreach (CubeController controller in m_CubeControllers)
                {
                    if (controller.m_CanControl)
                    {
                        CubeController moved = controller.DoMove(direction);

                        if (moved != null)
                        {
                            countMovingCubes++;
                        }
                    }
                }

                if (countMovingCubes > 0)
                {
                    m_NumberOfMoves++;
                    //Debug.Log("Number of moves: " + m_NumberOfMoves);
                }
            }
        }
Ejemplo n.º 3
0
        //Remove the CubeController (that is Moving or Rolling) from the moving list
        public void UnregisterMove(CubeController controller)
        {
            m_CubeMoving.Remove(controller);

            //When the cube moving list count is zero, means there is no cubes moving
            if (m_CubeMoving.Count == 0)
            {
                InputManager.Instance.UnlockControls();
                
                GameManager.Instance.CheckLevelCompletion();
            }
        }
Ejemplo n.º 4
0
        //Remove the CubeController (that is Moving or Rolling) from the moving list
        public void UnregisterMove(CubeController controller)
        {
            m_CubeMoving.Remove(controller);

            //When the cube moving list count is zero, means there is no cubes moving
            if (m_CubeMoving.Count == 0)
            {
                InputManager.Instance.UnlockControls();

                GameManager.Instance.CheckLevelCompletion();
            }
        }
Ejemplo n.º 5
0
        public void DoPush(Vector3 dir)
        {
            if (m_CanPush)
            {
                Vector3 origin = m_Cube.transform.position;

                RaycastHit outHit = new RaycastHit();

                if (Physics.Linecast(origin, origin + dir, out outHit))
                {
                    //if has any collision object, look for a CubeController its parent object, and then try to move it
                    CubeController cube = outHit.collider.transform.GetComponentInParent <CubeController>();

                    if (cube != null)
                    {
                        cube.DoMove(dir);
                    }
                }
            }
        }
Ejemplo n.º 6
0
        public CubeController DoMove(Vector3 dir)
        {
            //If there is a neighbor cube in this direction (CheckCollisionRecursive != null)
            //and this neighbor was pushed (DoPush != null)
            //then this cube can move too
            if (CheckCollisionRecursive(m_Cube.transform, dir) != null)
            {
                bool didPush = false;

                if (m_PushCubeType.Equals(PushType.PushCubesWhenMove))
                {
                    CubeController pushedCube = DoPush(dir);

                    didPush = pushedCube != null;
                }

                if (!didPush)
                {
                    return(null);
                }
            }

            ResetPosition();

            CubeManager.Instance.RegisterMove(this);

            switch (m_MoveType)
            {
            case MovementType.Roll:
                DoRoll(dir);
                break;

            case MovementType.Slide:
                DoSlide(dir);
                break;
            }

            return(this);
        }
Ejemplo n.º 7
0
        Collider CheckCollisionRecursive(Transform cubeTransform, Vector3 dir)
        {
            Vector3 origin = cubeTransform.position;

            RaycastHit outHit;

            if (Physics.Linecast(origin, origin + dir, out outHit))
            {
                CubeController cubeCollider = outHit.transform.gameObject.GetComponent <CubeController>();

                if (cubeCollider != null && cubeCollider.m_CanBePushed)
                {
                    return(CheckCollisionRecursive(cubeCollider.m_Cube.transform, dir));
                }
                else
                {
                    return(outHit.collider);
                }
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 8
0
        //Add the CubeController (that is Moving or Rolling) into the moving list
        public void RegisterMove(CubeController controller)
        {
            InputManager.Instance.LockControls();

            m_CubeMoving.Add(controller);
        }
Ejemplo n.º 9
0
        //Add the CubeController into the general list. The Cubes never are removed from the list.
        public void Register(CubeController controller)
        {
            controller.m_Cube.GetComponent<RubberEffect>().enabled = m_JellyEffectEnabled;

            m_CubeControllers.Add(controller);
        }
Ejemplo n.º 10
0
        //Add the CubeController (that is Moving or Rolling) into the moving list
        public void RegisterMove(CubeController controller)
        {
            InputManager.Instance.LockControls();

            m_CubeMoving.Add(controller);
        }
Ejemplo n.º 11
0
        //Add the CubeController into the general list. The Cubes never are removed from the list.
        public void Register(CubeController controller)
        {
            controller.m_Cube.GetComponent <RubberEffect>().enabled = m_JellyEffectEnabled;

            m_CubeControllers.Add(controller);
        }