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)); } } } }
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); } } } } } } }