Exemple #1
0
        public bool get_Mover_Utilizar_Ineractivo(ObjetoInteractivo interactivo, Celda celda, int _habilidad)
        {
            if (cuenta.esta_ocupado || interactivo_utilizado != null)
            {
                return(false);
            }

            if (interactivo == null || !interactivo.es_utilizable)
            {
                return(false);
            }

            interactivo_utilizado = interactivo;
            habilidad             = _habilidad;

            switch (cuenta.juego.manejador.movimientos.get_Mover_A_Celda(celda, mapa.celdas_ocupadas(), true, 1))
            {
            case ResultadoMovimientos.EXITO:
            case ResultadoMovimientos.MISMA_CELDA:
                get_Utilizar_Elemento();
                return(true);

            default:
                limpiar();
                return(false);
            }
        }
Exemple #2
0
        public Cell(short prmCellId, bool prmIsActive, CellTypes prmCellType, bool prmIsInLineOfSight, byte _nivel, byte _slope, short prmInteractiveObjectId, short _layer_object_1_num, short _layer_object_2_num, Map prmMap)
        {
            cellId   = prmCellId;
            isActive = prmIsActive;
            cellType = prmCellType;

            layer_object_1_num = _layer_object_1_num;
            layer_object_2_num = _layer_object_2_num;

            isInLineOfSight    = prmIsInLineOfSight;
            layer_ground_nivel = _nivel;
            layer_ground_slope = _slope;

            if (prmInteractiveObjectId != -1)
            {
                interactiveObject = new ObjetoInteractivo(prmInteractiveObjectId, this);
                prmMap.interactives.TryAdd(cellId, interactiveObject);
            }

            byte mapWidth = prmMap.mapWidth;
            int  loc5     = cellId / ((mapWidth * 2) - 1);
            int  loc6     = cellId - (loc5 * ((mapWidth * 2) - 1));
            int  loc7     = loc6 % mapWidth;

            y = loc5 - loc7;
            x = (cellId - ((mapWidth - 1) * y)) / mapWidth;
        }
    void Update()
    {
        if (controller == null)
        {
            Debug.Log("Mando no inicializado");
        }

        if (controller.GetPressDown(triggerButton))                    // Aquí van todas las posibles acciones con el botón Trigger
        {
            float minDistancia = float.MaxValue;
            float distancia;

            foreach (ObjetoInteractivo objeto in objetoscercanos)                          // Calcula distancia de cada objeto al mando y comprueba si es la mínima
            {
                distancia = (objeto.transform.position - transform.position).sqrMagnitude; // Calcula distancia, no vector
                if (distancia < minDistancia)
                {
                    minDistancia     = distancia;
                    objetoMasCercano = objeto;
                }
            }

            objetoAgarrado   = objetoMasCercano;                    // El objeto que se agarrará es el que tenga la menor distancia al mando
            objetoMasCercano = null;                                // Borra el objeto más cercano una vez agarrado

            if (objetoAgarrado)
            {
                if (objetoAgarrado.EstaAgarrando())                 // Si el objeto ya está siendo agarrado (por otro mando) termina agarre con el
                {                                                   // otro mando para comenzar a agarrar con el nuevo
                    objetoAgarrado.FinAgarre(this);
                }
                objetoAgarrado.ComienzoAgarre(this);                // Comienza a agarrar el objeto
            }
        }

        if (controller.GetPressUp(triggerButton) && objetoAgarrado != null)  // Botón trigger no está pulsado y hay un objeto agarrado
        {
            objetoAgarrado.FinAgarre(this);
        }

        if (controller.GetPressDown(gripButton))                 // Aquí van todas las acciones con el botón Grip
        {
            if (objetoPulsable && gripPulsando == false)         // Si hay un objeto pulsable en el collider y Trigger no estaba pulsado antes
            {
                objetoPulsable.CambiaEstado();                   // Cambia el estado del botón
                gripPulsando = true;                             // Se cambia bandera para evitar que encienda y apague mientras se pulsa
            }
        }

        if (controller.GetPressUp(gripButton))
        {
            gripPulsando = false;                                // Se reinicia la bandera
        }

        /*gripButtonPressed = controller.GetPress(gripButton);
         *
         * triggerButtonDown = controller.GetPressDown(triggerButton);
         * triggerButtonUp = controller.GetPressUp(triggerButton);
         * triggerButtonPressed = controller.GetPress(triggerButton);*/
    }
Exemple #4
0
        public Celda(short _id, bool esta_activa, TipoCelda _tipo, bool _es_linea_vision, byte _nivel, byte _slope, short _objeto_interactivo_id, short _layer_object_1_num, short _layer_object_2_num, Map map)
        {
            id     = _id;
            activa = esta_activa;
            tipo   = _tipo;

            layer_object_1_num = _layer_object_1_num;
            layer_object_2_num = _layer_object_2_num;

            es_linea_vision    = _es_linea_vision;
            layer_ground_nivel = _nivel;
            layer_ground_slope = _slope;

            if (_objeto_interactivo_id != -1)
            {
                objeto_interactivo = new ObjetoInteractivo(_objeto_interactivo_id, this);
                map.interactivos.TryAdd(id, objeto_interactivo);
            }

            byte mapa_anchura = map.anchura;
            int  _loc5        = id / ((mapa_anchura * 2) - 1);
            int  _loc6        = id - (_loc5 * ((mapa_anchura * 2) - 1));
            int  _loc7        = _loc6 % mapa_anchura;

            y = _loc5 - _loc7;
            x = (id - ((mapa_anchura - 1) * y)) / mapa_anchura;
        }
 public void evento_Recoleccion_Acabada(RecoleccionResultado resultado)
 {
     robado = false;
     interactivo_recolectando = null;
     cuenta.Estado_Cuenta     = EstadoCuenta.CONECTADO_INACTIVO;
     recoleccion_acabada?.Invoke(resultado);
 }
Exemple #6
0
        private bool get_Intentar_Mover_Interactivo(KeyValuePair <short, ObjetoInteractivo> interactivo)
        {
            interactivo_recolectando = interactivo.Value;
            byte distancia_detener = 1;
            ObjetosInventario arma = cuenta.juego.personaje.inventario.get_Objeto_en_Posicion(InventarioPosiciones.ARMA);

            if (arma != null)
            {
                distancia_detener = get_Distancia_herramienta(arma.id_modelo);
            }

            ResultadoMovimientos resultado_movimiento = cuenta.juego.manejador.movimientos.get_Mover_A_Celda(interactivo_recolectando.celda, mapa.celdas_ocupadas(), true, distancia_detener);

            switch (resultado_movimiento)
            {
            case ResultadoMovimientos.EXITO:
            case ResultadoMovimientos.MISMA_CELDA:
                get_Intentar_Recolectar_Interactivo();
                return(true);

            default:
                get_Cancelar_Interactivo();
                return(false);
            }
        }
Exemple #7
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                interactivo_utilizado = null;
                cuenta = null;

                disposed = true;
            }
        }
Exemple #8
0
        public bool get_Utilizar_Interactivo(int _celda_id, int _habilidad = -1)
        {
            ObjetoInteractivo interactivo = mapa.get_Interactivo(_celda_id);

            if (interactivo == null || !interactivo.es_utilizable)
            {
                return(false);
            }

            return(get_Mover_Utilizar_Ineractivo(interactivo, interactivo.celda, _habilidad));
        }
Exemple #9
0
        public bool utilizarInteractivo(int celda_id, int habilidad = -1)
        {
            ObjetoInteractivo interactive = cuenta.juego.mapa.get_Interactivo(celda_id);

            if (interactive?.es_utilizable == false)
            {
                return(false);
            }

            manejador_acciones.enqueue_Accion(new UtilizarInteractivoAccion(celda_id, habilidad), true);
            return(true);
        }
Exemple #10
0
        public void evento_Recoleccion_Acabada(RecoleccionResultado resultado, short celda_id)
        {
            if (interactivo_recolectando == null || interactivo_recolectando.celda.cellId != celda_id)
            {
                return;
            }

            robado = false;
            interactivo_recolectando = null;
            cuenta.AccountState      = AccountStates.CONNECTED_INACTIVE;
            recoleccion_acabada?.Invoke(resultado);
        }
        public void evento_Recoleccion_Acabada(RecoleccionResultado resultado, short celda_id)
        {
            if (interactivo_recolectando == null || interactivo_recolectando.celda.id != celda_id)
            {
                return;
            }

            robado = false;
            interactivo_recolectando = null;
            cuenta.AccountStatus     = AccountStatus.ConnectedInactive;
            recoleccion_acabada?.Invoke(resultado);
        }
        public void evento_Recoleccion_Acabada(RecoleccionResultado resultado, short celda_id)
        {
            if (interactivo_recolectando == null || interactivo_recolectando.celda.id != celda_id)
            {
                return;
            }

            robado = false;
            interactivo_recolectando = null;
            cuenta.Estado_Cuenta     = EstadoCuenta.CONECTADO_INACTIVO;
            recoleccion_acabada?.Invoke(resultado);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    pathfinder.Dispose();
                }

                interactivos_no_utilizables.Clear();
                interactivos_no_utilizables = null;
                interactivo_recolectando    = null;
                pathfinder = null;
                cuenta     = null;
                disposed   = true;
            }
        }
    private void OnTriggerExit(Collider other)
    {
        ObjetoInteractivo objetoInteractuando = other.GetComponent <ObjetoInteractivo>(); // Un objeto que ha salido del collider del mando

        if (objetoInteractuando)                                                          // Si el objeto que ha salido es un ObjetoInteractivo
        {
            objetoscercanos.Remove(objetoInteractuando);                                  // Quita del HashSet ese objeto
        }
        //***HAY QUE PROBAR ESTO***//
        ObjetoPulsable esObjetoPulsable = other.GetComponent <ObjetoPulsable>();         // Se comprueba si el objeto que ha salido es pulsable

        if (esObjetoPulsable != null)                                                    // Si es pulsable, se pone objetoPulsable = null y se
        {                                                                                // reinicializa la variable de comprobacion esObjetoPulsable
            objetoPulsable   = null;
            esObjetoPulsable = null;
        }
        //***HAY QUE PROBAR ESTO***//
    }
Exemple #15
0
        private bool get_Intentar_Mover_Interactivo(KeyValuePair <short, ObjetoInteractivo> interactivo)
        {
            interactivo_recolectando = interactivo.Value;

            ResultadoMovimientos resultado = cuenta.juego.manejador.movimientos.get_Mover_A_Celda(interactivo_recolectando.celda, mapa.celdas_ocupadas, true);

            switch (resultado)
            {
            case ResultadoMovimientos.EXITO:
            case ResultadoMovimientos.MISMA_CELDA:
                get_Intentar_Recolectar_Interactivo();
                return(true);

            default:
                get_Cancelar_Interactivo();
                return(false);
            }
        }
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("trigger");
        ObjetoInteractivo objetoInteractuando = other.GetComponent <ObjetoInteractivo>(); // Un objeto que simplemente ha entrado en el collider del mando

        if (objetoInteractuando)                                                          // Si el objeto que ha entrado es un ObjetoInteractivo
        {
            objetoscercanos.Add(objetoInteractuando);                                     // Añade al HashSet ese objeto
        }
        //***HAY QUE PROBAR ESTO***//
        ObjetoPulsable esObjetoPulsable = other.GetComponent <ObjetoPulsable>();         // esObjetoPulsable es la variable donde se comprueba si es

        if (esObjetoPulsable != null)                                                    // pulsable y objetoPulsable donde se guarda la referencia
        {                                                                                // del objeto que ha entrado y es pulsable
            Debug.Log("esObjetoPulsable");

            objetoPulsable = esObjetoPulsable;
        }
        //***HAY QUE PROBAR ESTO***//
    }
Exemple #17
0
        private bool get_Intentar_Mover_Interactivo(KeyValuePair <short, ObjetoInteractivo> interactivo)
        {
            interactivo_recolectando = interactivo.Value;
            byte            distancia_detener = 1;
            InventoryObject arma = cuenta.game.character.inventario.get_Objeto_en_Posicion(InventorySlots.WEAPON);

            if (arma != null)
            {
                distancia_detener = get_Distancia_herramienta(arma.id_modelo);
            }

            switch (cuenta.game.manager.movimientos.get_Mover_A_Celda(interactivo_recolectando.celda, mapa.celdas_ocupadas(), true, distancia_detener))
            {
            case ResultadoMovimientos.EXITO:
            case ResultadoMovimientos.SameCell:
                get_Intentar_Recolectar_Interactivo();
                return(true);

            default:
                get_Cancelar_Interactivo();
                return(false);
            }
        }
    private void OnTriggerExit(Collider other)
    {
        Rigidbody         rigidbodyAnterior = discoAnterior.GetComponent <Rigidbody>();
        ObjetoInteractivo objetoInteractivo = discoAnterior.GetComponent <ObjetoInteractivo>();

        // Solo cuando el anuladorTriggerSalida lo permita (sea false)
        if (anuladorTriggerSalida == false)
        {
            // Si sale un disco del LectorDiscos
            if (other.tag == "Disco")
            {
                // Se activa la gravedad del discoAnterior
                rigidbodyAnterior.isKinematic = false;
                rigidbodyAnterior.useGravity  = true;

                // Ya no se está reproduciendo música
                hayDiscoPuesto = false;
            }
        }

        // Se vuelve a permitir el trigger de salida
        anuladorTriggerSalida = false;

        // Si sale el mando del lector de discos se vuelve a poder coger el disco que está puesto
        if ((other.tag == "Mando") && anuladorTriggerMando == false)
        {
            // Si hay disco puesto se vuelve a activar el component ObjetoInteractivo del disco para poder volver a cogerlo
            if (hayDiscoPuesto)
            {
                objetoInteractivo.enabled     = true;
                rigidbodyAnterior.useGravity  = false;
                rigidbodyAnterior.isKinematic = false;
            }

            anuladorTriggerMando = true;
        }
    }
Exemple #19
0
        public Celda(short _id, TipoCelda _tipo, bool _es_linea_vision, byte _nivel, byte _slope, short _objeto_interactivo_id, short layer_object_1_num, short layer_object_2_num, Mapa _mapa)
        {
            id = _id;

            if (texturas_teleport.Contains(layer_object_1_num) || texturas_teleport.Contains(layer_object_2_num))
            {
                tipo = TipoCelda.CELDA_TELEPORT;
            }
            else if (_tipo == TipoCelda.CELDA_TELEPORT)
            {
                tipo = TipoCelda.CELDA_CAMINABLE;
            }
            else
            {
                tipo = _tipo;
            }

            es_linea_vision       = _es_linea_vision;
            layer_ground_nivel    = _nivel;
            layer_ground_slope    = _slope;
            objeto_interactivo_id = _objeto_interactivo_id;
            mapa = _mapa;

            if (objeto_interactivo_id != -1)
            {
                objeto_interactivo = new ObjetoInteractivo(objeto_interactivo_id, id);
            }

            byte mapa_anchura = mapa.anchura;
            int  _loc5        = id / ((mapa_anchura * 2) - 1);
            int  _loc6        = id - (_loc5 * ((mapa_anchura * 2) - 1));
            int  _loc7        = _loc6 % mapa_anchura;

            y = _loc5 - _loc7;
            x = (id - ((mapa_anchura - 1) * y)) / mapa_anchura;
        }
 public void get_Cancelar_Interactivo() => interactivo_recolectando = null;
 public void limpiar()
 {
     interactivo_recolectando = null;
     interactivos_no_utilizables.Clear();
     robado = false;
 }
    // Cuando un objeto ha entrado en el collider de LectorDiscos
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("Ha entrado algo");

        if ((other.tag == "Disco") && (other.GetComponent <ObjetoInteractivo>().EstaAgarrando()))
        {
            // El disco que ha entrado es el actual
            Disco discoActual = other.GetComponent <Disco>();
            objetoInteractivo = discoActual.GetComponent <ObjetoInteractivo>();
            Rigidbody rigidbody = discoActual.GetComponent <Rigidbody>();

            // Almacena la anterior música a la asignación
            compruebaCambio = musicaDiscoActual;

            // Se almacena la música correspondiente al disco que ha entrado
            musicaDiscoActual = discoActual.musica;

            // Comprueba si ha habido algún cambio
            if (musicaDiscoActual != compruebaCambio)
            {
                hazCambio = true;
            }

            else
            {
                audioSource.Play();
            }

            if (hayDiscoPuesto)
            {
                // Desactivo el trigger para evitar que al sacar el disco detecte la salida del mismo
                anuladorTriggerSalida = true;

                // Se pone el discoAnterior en su posición inicial
                discoAnterior.transform.localPosition = posicionInicialJazz;
                discoAnterior.transform.rotation      = rotacionInicialJazz;

                // Se activa la gravedad del discoAnterior
                Rigidbody rigidbodyAnterior = discoAnterior.GetComponent <Rigidbody>();
                rigidbodyAnterior.useGravity  = true;
                rigidbodyAnterior.isKinematic = false;
            }

            rigidbody.isKinematic = true;

            // Se coloca el disco que ha entrado en la posición de reproducción
            discoActual.transform.position = posicionReproduciendo;
            discoActual.transform.rotation = rotacionReproduciendo;
            anuladorTriggerMando           = false;

            // Se desactiva objetoInteractivo del disco para evitar que se siga cogiendo. Se activa en OnTriggerExit
            objetoInteractivo.enabled = false;

            // Ahora se sabe que hay disco puesto para las siguientes reproducciones
            hayDiscoPuesto = true;

            // Se almacena la anterior música para la próxima vez que se meta un disco
            musicaDiscoAnterior = musicaDiscoActual;

            // Se almacena la referencia en discoAnterior para el siguiente cambio de disco
            discoAnterior = discoActual;
        }
    }
Exemple #23
0
 public void limpiar()
 {
     interactivo_utilizado = null;
     habilidad             = 0;
 }