public void ChildRaycastReset(Vector3 direction)  // Check si les enfants d'un cube sont bloqué
        {
            hasChildCubes = true;
            for (int i = 0; i < transform.childCount; i++)
            {
                if (transform.GetChild(i).GetComponent <_MovableCube>() == true) //////// TODO : Peut etre opti
                {
                    hitMouvable = transform.GetChild(i).GetComponent <_MovableCube>();

                    physicCube.Add(hitMouvable);
                }
            }

            foreach (_MovableCube cube in physicCube)
            {
                if (Physics.Raycast(cube.transform.position, direction, 2.0f, cubeFull))
                {
                    cube.transform.parent = mainParent;
                }
                else if (Physics.Raycast(cube.transform.position, direction, out hit, 2.0f, cubeMouvable)) // TODO : CAREFUL WITH THAT
                {
                    cube.transform.parent = mainParent;                                                    ///////// TODO : POTENTIELLE A ETRE DE LA GROSSE MERDE
                }
            }
        }
        public virtual void CheckRaycast(Vector3 dir) // TODO : ce truc se fait en Update et c'est pas ouf
        {
            Debug.Log("-0-");
            if (Physics.Raycast(transform.position, dir, out hit1, 2.0f, cubeEmpty)) // TODO: risque de bugger
            {
                Debug.Log("-1-");
                if (Physics.Raycast(transform.position, dir, out hit2, 2.0f, cubeMouvable))
                {
                    if (cubeIsStillInPlace == false)
                    {
                        Debug.Log("-2-");
                        hitMouvable = hit2.transform.GetComponent <_MovableCube>();
                        pushCube.Add(hitMouvable);
                        MovementRecursive(hitMouvable, hit2, dir);
                    }
                }
                else if (Physics.Raycast(transform.position, dir, 2.0f, cubeFull))
                {
                }

                else
                {
                    Debug.Log("SEXETOUTCOURT");
                    if (Physics.Raycast(transform.position, baseScanDirection, 2.0f, cubeEmpty) && cubeIsStillInPlace == false)
                    {
                        Debug.Log("SEXE---");
                        StartCoroutine(MoveCube(hit1.collider.transform.position, false));
                        if (transform.childCount > 1)
                        {
                            ChildRaycastReset(transform.TransformDirection(dir));
                        }
                    }
                }
            }
        }
        public void CheckSides() // TODO : PEUT ETRE OPTI
        {
            //fixedParent.Clear();
            Debug.Log("CheckSIDE ");
            foreach (Vector3 dir in directions)
            {
                if (Physics.Raycast(transform.position, dir, out stickHit, 2.0f)) // TODO: risque de bugger
                {
                    Debug.Log("NAME-CHANGE ");
                    stickHit.collider.transform.name = "HECOTR-PANZER";
                }
                Debug.Log("-1-");
                if (Physics.Raycast(transform.position, dir, out stickHit, 2.0f, ~cubeEmpty)) // TODO: risque de bugger
                {
                    Debug.Log("-2-");
                    if (Physics.Raycast(transform.position, dir, out stickHit, 2.0f, cubeMouvable))
                    {
                        Debug.Log("-3-");
                        targetCube = stickHit.collider.transform.GetComponent <_MovableCube>();

                        /*if (targetCube.isSticked == false)
                         * {
                         *  Debug.Log("CheckSIDE GOOD");
                         *  targetCube.isSticked = true;
                         *  targetCube.stickyCube = this;
                         *  fixedParent.Add(targetCube);
                         *  targetCube.gameObject.layer = LayerMask.NameToLayer("GridSticky");
                         *  targetCube.transform.parent = transform;
                         * }*/
                    }
                }
            }
        }
        public void MovementRecursive(_MovableCube obj, RaycastHit hitparam, Vector3 dir) // Cette fonction est utiliser pour checker si on peut pousser une file de cube
        {
            if (null == obj)
            {
                return;
            }

            if (Physics.Raycast(obj.transform.position, dir, out hit1, 2.0f, cubeEmpty)) // TODO: risque de bugger
            {
                if (Physics.Raycast(obj.transform.position, dir, out hit2, 2.0f, cubeMouvable))
                {
                    hitMouvable = hit2.transform.GetComponent <_MovableCube>();
                    pushCube.Add(hitMouvable);
                    MovementRecursive(hitMouvable, hitparam, dir);
                }
                else if (Physics.Raycast(obj.transform.position, dir, 2.0f, cubeFull))
                {
                    return;
                }
                else
                {
                    foreach (_MovableCube cube in pushCube) // Tout les cubes qui sont dans la liste sont affecté en enfants
                    {
                        cube.transform.parent = transform;
                    }
                    cubeIsStillInPlace = true;

                    StartCoroutine(MoveCube(hitparam.collider.transform.position, false));
                    if (transform.childCount > 1)
                    {
                        foreach (_MovableCube cube in pushCube)
                        {
                            cube.ChildRaycastReset(cube, transform.TransformDirection(dir));
                        }
                    }
                }
            }
            else
            {
                foreach (_MovableCube cube in pushCube) // Tout les cubes qui sont dans la liste sont affecté en enfants
                {
                    cube.transform.parent = transform;
                }

                StartCoroutine(MoveCube(hitparam.collider.transform.position, false));
                if (transform.childCount > 1)
                {
                    foreach (_MovableCube cube in pushCube)
                    {
                        cube.ChildRaycastReset(cube, transform.TransformDirection(dir));
                    }
                }
            }
        }
Exemple #5
0
        public void MovementRecursive(_MovableCube obj, RaycastHit hitparam, Vector3 dir) // Cette fonction est utiliser pour checker si on peut pousser une file de cube
        {
            if (null == obj)
            {
                return;
            }

            if (Physics.Raycast(obj.transform.position, obj.transform.TransformDirection(dir), out hit1, 2.0f, cubeEmpty)) // TODO: risque de bugger
            {
                if (Physics.Raycast(obj.transform.position, obj.transform.TransformDirection(dir), out hit2, 2.0f, cubeMouvable))
                {
                    hitMouvable = hit2.transform.GetComponent <_MovableCube>();
                    pushCube.Add(hitMouvable);
                    MovementRecursive(hitMouvable, hitparam, dir);
                }
                else if (Physics.Raycast(obj.transform.position, obj.transform.TransformDirection(dir), 2.0f, cubeFull | cubeElevator))
                {
                    return;
                }
                else
                {
                    if (Physics.Raycast(hit1.collider.transform.position, obj.transform.TransformDirection(Vector3Custom.down), out hit3, 2.0f, ~cubeEmpty))
                    {
                        baseCube           = Camera_ZoomScroll.instance.cam.WorldToScreenPoint(transform.position);
                        nextCube           = Camera_ZoomScroll.instance.cam.WorldToScreenPoint(hit1.collider.transform.position);
                        distanceBaseToNext = Vector3.Distance(baseCube, nextCube);

                        if (distanceTouch > (distanceBaseToNext * 0.5f) && isStopMouv == true) // check si le joueur déplace le cube
                        {
                            foreach (_MovableCube cube in pushCube)                            // Tout les cubes qui sont dans la liste sont affecté en enfants
                            {
                                cube.transform.parent = transform;
                            }

                            StartCoroutine(MoveCube(hitparam.collider.transform.position, false, 1));

                            if (transform.childCount > 1)
                            {
                                foreach (_MovableCube cube in pushCube)
                                {
                                    ChildRaycastReset(cube, dir);
                                }
                            }
                        }
                    }
                }
            }
        }