示例#1
0
	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;
	}
示例#2
0
    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;
    }
示例#3
0
    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);
    }
示例#4
0
    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);
    }
示例#5
0
	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;

	}
示例#6
0
    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);
    }
示例#7
0
    public void BorrarUltimaSeccion()
    {
        pista.BorrarUltimaSeccion();
        contadorSecciones--;
        SeccionPista ultimaSeccion = pista.ObtenerUltimaSeccion();

        MoveCamera(ultimaSeccion == null ? Vector3.zero : ultimaSeccion.transform.position);
    }
示例#8
0
	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;
	}
示例#9
0
	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;
		}
	}
示例#10
0
    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);
    }
示例#11
0
    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;
        }
    }
示例#12
0
    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);
        }
    }
示例#13
0
 public void Configurar(SeccionPista _prefabSeccion, System.Action <SeccionPista> _accionTap)
 {
     prefabSeccion = _prefabSeccion;
     accionTap     = _accionTap;
     nombre.text   = prefabSeccion.name;
 }
示例#14
0
 public void HacerVecino2(SeccionPista nuevoVecino, Transform enlaceVecino)
 {
     HacerVecino(enlace2, nuevoVecino, enlaceVecino);
 }
示例#15
0
	public void HacerVecino2( SeccionPista nuevoVecino, Transform enlaceVecino ) {
		HacerVecino( enlace2, nuevoVecino, enlaceVecino );
	}
示例#16
0
 void TapSeccionNueva(SeccionPista prefabSeccion)
 {
     MoveCamera(AgregarSeccion(prefabSeccion));
 }
示例#17
0
	public void Configurar( SeccionPista _prefabSeccion, System.Action<SeccionPista> _accionTap ){
		prefabSeccion = _prefabSeccion;
		accionTap = _accionTap;
		nombre.text = prefabSeccion.name;
	}
示例#18
0
	void TapSeccionNueva ( SeccionPista prefabSeccion ) {
		MoveCamera( AgregarSeccion( prefabSeccion ) );
	}