private void HacerVecino( Transform enlace, SeccionPista nuevoVecino, Transform enlaceVecino ) { transform.parent = nuevoVecino.transform.parent; if( enlace == enlace1 ) { vecino1 = nuevoVecino; } else { vecino2 = nuevoVecino; } if( enlaceVecino == nuevoVecino.enlace1 ) { nuevoVecino.vecino1 = this; } else { nuevoVecino.vecino2 = this; } Vector3 direccion = -enlaceVecino.forward; float anguloFinal = Mathf.Atan2( direccion.z, direccion.x ) * Mathf.Rad2Deg; float anguloInicial = Mathf.Atan2( enlace.forward.z, enlace.forward.x ) * Mathf.Rad2Deg; float deltaAngulo = anguloFinal - anguloInicial; //rotamos para dejar el delta angulo en 0 transform.Rotate( new Vector3( 0f, -deltaAngulo, 0f ) ); Vector3 deltaPos = transform.position - enlace.position; transform.position = enlaceVecino.position + deltaPos; }
private void HacerVecino(Transform enlace, SeccionPista nuevoVecino, Transform enlaceVecino) { transform.parent = nuevoVecino.transform.parent; if (enlace == enlace1) { vecino1 = nuevoVecino; } else { vecino2 = nuevoVecino; } if (enlaceVecino == nuevoVecino.enlace1) { nuevoVecino.vecino1 = this; } else { nuevoVecino.vecino2 = this; } Vector3 direccion = -enlaceVecino.forward; float anguloFinal = Mathf.Atan2(direccion.z, direccion.x) * Mathf.Rad2Deg; float anguloInicial = Mathf.Atan2(enlace.forward.z, enlace.forward.x) * Mathf.Rad2Deg; float deltaAngulo = anguloFinal - anguloInicial; //rotamos para dejar el delta angulo en 0 transform.Rotate(new Vector3(0f, -deltaAngulo, 0f)); Vector3 deltaPos = transform.position - enlace.position; transform.position = enlaceVecino.position + deltaPos; }
public SeccionPista ObtenerUltimaSeccion() { if (seccionInicial == null) { return(null); } SeccionPista ultimaSeccion = seccionInicial; SeccionPista seccionAnterior = null; bool continuarIterando = true; do { continuarIterando = false; if (ultimaSeccion.vecino1 != seccionAnterior && ultimaSeccion.vecino1 != null) { seccionAnterior = ultimaSeccion; ultimaSeccion = ultimaSeccion.vecino1; continuarIterando = true; continue; } if (ultimaSeccion.vecino2 != seccionAnterior && ultimaSeccion.vecino2 != null) { seccionAnterior = ultimaSeccion; ultimaSeccion = ultimaSeccion.vecino2; continuarIterando = true; continue; } } while(continuarIterando); return(ultimaSeccion); }
public bool RotarUltimaSeccion() { SeccionPista ultimaSeccion = ObtenerUltimaSeccion(); if (ultimaSeccion == null) { return(false); } if (ultimaSeccion == seccionInicial) { ultimaSeccion.transform.Rotate(new Vector3(0f, 90f, 0f)); } else { if (ultimaSeccion.vecino1 != null) { SeccionPista vecino = ultimaSeccion.vecino1; Transform enlaceVecino = vecino.vecino1 == ultimaSeccion ? vecino.enlace1 : vecino.enlace2; ultimaSeccion.EliminarVecino(vecino); ultimaSeccion.HacerVecino2(vecino, enlaceVecino); //TODO: validar que esto es posible } else { SeccionPista vecino = ultimaSeccion.vecino2; Transform enlaceVecino = vecino.vecino1 == ultimaSeccion ? vecino.enlace1 : vecino.enlace2; ultimaSeccion.EliminarVecino(vecino); ultimaSeccion.HacerVecino1(vecino, enlaceVecino); //TODO: validar que esto es posible } } return(true); }
public bool AgregarSeccion( SeccionPista seccionPista ) { if( seccionPista == null ) { return false; } if( seccionInicial == null ){ seccionPista.transform.parent = transform; seccionPista.transform.localPosition = Vector3.zero; seccionInicial = seccionPista; } else { SeccionPista ultimaSeccion = ObtenerUltimaSeccion(); Transform ultimoEnlace = ultimaSeccion.vecino1 == null ? ultimaSeccion.enlace1 : ultimaSeccion.enlace2; //TODO: revisar superposicion de secciones caso 1 //por ahora asumimos enlace 1 seccionPista.HacerVecino1( ultimaSeccion, ultimoEnlace ); //TODO: en caso de falla, revisar superposicion de secciones caso 2 } return true; }
public bool AgregarSeccion(SeccionPista seccionPista) { if (seccionPista == null) { return(false); } if (seccionInicial == null) { seccionPista.transform.parent = transform; seccionPista.transform.localPosition = Vector3.zero; seccionInicial = seccionPista; } else { SeccionPista ultimaSeccion = ObtenerUltimaSeccion(); Transform ultimoEnlace = ultimaSeccion.vecino1 == null ? ultimaSeccion.enlace1 : ultimaSeccion.enlace2; //TODO: revisar superposicion de secciones caso 1 //por ahora asumimos enlace 1 seccionPista.HacerVecino1(ultimaSeccion, ultimoEnlace); //TODO: en caso de falla, revisar superposicion de secciones caso 2 } return(true); }
public void BorrarUltimaSeccion() { pista.BorrarUltimaSeccion(); contadorSecciones--; SeccionPista ultimaSeccion = pista.ObtenerUltimaSeccion(); MoveCamera(ultimaSeccion == null ? Vector3.zero : ultimaSeccion.transform.position); }
Vector3 AgregarSeccion ( SeccionPista prefabSeccion ) { SeccionPista nuevaSeccion = Instantiate<SeccionPista>( prefabSeccion ); nuevaSeccion.gameObject.name = "seccion_" + contadorSecciones; contadorSecciones++; if( !pista.AgregarSeccion( nuevaSeccion ) ) { Destroy( nuevaSeccion.gameObject ); } SeccionPista ultimaSeccion = pista.ObtenerUltimaSeccion(); if( ultimaSeccion == null ) { return Vector3.zero; } return ultimaSeccion.transform.position; }
public void EliminarVecino( SeccionPista vecino ) { if( vecino.vecino1 == this ) { vecino.vecino1 = null; } else if( vecino.vecino2 == this ) { vecino.vecino2 = null; } if( vecino1 == vecino ) { vecino1 = null; } else if( vecino2 == vecino ) { vecino2 = null; } }
Vector3 AgregarSeccion(SeccionPista prefabSeccion) { SeccionPista nuevaSeccion = Instantiate <SeccionPista>(prefabSeccion); nuevaSeccion.gameObject.name = "seccion_" + contadorSecciones; contadorSecciones++; if (!pista.AgregarSeccion(nuevaSeccion)) { Destroy(nuevaSeccion.gameObject); } SeccionPista ultimaSeccion = pista.ObtenerUltimaSeccion(); if (ultimaSeccion == null) { return(Vector3.zero); } return(ultimaSeccion.transform.position); }
public void EliminarVecino(SeccionPista vecino) { if (vecino.vecino1 == this) { vecino.vecino1 = null; } else if (vecino.vecino2 == this) { vecino.vecino2 = null; } if (vecino1 == vecino) { vecino1 = null; } else if (vecino2 == vecino) { vecino2 = null; } }
public void BorrarUltimaSeccion() { SeccionPista ultimaSeccion = ObtenerUltimaSeccion(); if (ultimaSeccion == null || ultimaSeccion == seccionInicial) { return; } if (ultimaSeccion.vecino1 != null) { ultimaSeccion.EliminarVecino(ultimaSeccion.vecino1); Destroy(ultimaSeccion.gameObject); } else { ultimaSeccion.EliminarVecino(ultimaSeccion.vecino2); Destroy(ultimaSeccion.gameObject); } }
public void Configurar(SeccionPista _prefabSeccion, System.Action <SeccionPista> _accionTap) { prefabSeccion = _prefabSeccion; accionTap = _accionTap; nombre.text = prefabSeccion.name; }
public void HacerVecino2(SeccionPista nuevoVecino, Transform enlaceVecino) { HacerVecino(enlace2, nuevoVecino, enlaceVecino); }
public void HacerVecino2( SeccionPista nuevoVecino, Transform enlaceVecino ) { HacerVecino( enlace2, nuevoVecino, enlaceVecino ); }
void TapSeccionNueva(SeccionPista prefabSeccion) { MoveCamera(AgregarSeccion(prefabSeccion)); }
public void Configurar( SeccionPista _prefabSeccion, System.Action<SeccionPista> _accionTap ){ prefabSeccion = _prefabSeccion; accionTap = _accionTap; nombre.text = prefabSeccion.name; }
void TapSeccionNueva ( SeccionPista prefabSeccion ) { MoveCamera( AgregarSeccion( prefabSeccion ) ); }