Beispiel #1
0
        //Modificar Terrestre
        public ActionResult ModificarTerrestre(string id)
        {
            DAOTerrestre data = DAOTerrestre.getInstance();
            Terrestre    terrestreEncontrado = data.buscarTerrestre(id);

            return(View(terrestreEncontrado));
        }
Beispiel #2
0
        public ActionResult AgregarTerrestre(Terrestre model, string modeloVeh, string sucursal)
        {
            string name    = TempData["username"].ToString();
            string nameRol = TempData["rol"].ToString();
            int    codUser = Int32.Parse(TempData["codUser"].ToString());

            ViewBag.name         = name;
            ViewBag.rol          = nameRol;
            TempData["username"] = name;
            TempData["rol"]      = nameRol;
            TempData["codUser"]  = codUser;

            DAOUsuario dataU  = DAOUsuario.getInstance();
            string     today  = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss tt");
            string     accion = "Registro Vehiculo Terrestre " + model.placa;

            dataU.insertarAccion(codUser, 1, today, accion);

            int          fkModelo   = Int32.Parse(modeloVeh);
            int          fkSucursal = Int32.Parse(sucursal);
            DAOTerrestre data       = DAOTerrestre.getInstance();

            data.insertarTerrestres(model.placa, model.serialMotor, model.capacidad, model.peso,
                                    model.descripcion, model.serialCarroceria, model.fechaCreacion, model.tipo, fkSucursal, fkModelo);
            List <Terrestre> terrestres = data.obtenerTerrestres();

            return(View("~/Views/Vehiculo/IndexVehiculo.cshtml", terrestres));
        }
Beispiel #3
0
        public ActionResult EliminarTerrestre(Terrestre model)
        {
            string name    = TempData["username"].ToString();
            string nameRol = TempData["rol"].ToString();
            int    codUser = Int32.Parse(TempData["codUser"].ToString());

            ViewBag.name         = name;
            ViewBag.rol          = nameRol;
            TempData["username"] = name;
            TempData["rol"]      = nameRol;
            TempData["codUser"]  = codUser;

            DAOUsuario dataU  = DAOUsuario.getInstance();
            string     today  = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss tt");
            string     accion = "Elimino Vehiculo Terrestre " + model.placa;

            dataU.insertarAccion(codUser, 4, today, accion);

            //int cod = Int32.Parse(model.cod);
            DAOTerrestre data = DAOTerrestre.getInstance();

            data.eliminarTerrestre(model.placa);
            List <Terrestre> terrestres = data.obtenerTerrestres();

            return(View("~/Views/Vehiculo/IndexVehiculo.cshtml", terrestres));
        }
        public lEnvios buscarTransporte(JToken _TransporteSolicitado)
        {
            lEnvios Transporte         = null;
            string  cMedio             = (string)_TransporteSolicitado["Medio"];
            int     cVelocidad         = (int)_TransporteSolicitado["Velocidad"];
            int     cCostoPorKilometro = (int)_TransporteSolicitado["CostoPorKilometro"];

            if (cMedio == "Marítimo")
            {
                Transporte = new Maritimo()
                {
                    cNombre = "Maritimo"
                };
            }
            else if (cMedio == "Terrestre")
            {
                Transporte = new Terrestre()
                {
                    cNombre = "Terrestre"
                };
            }
            else
            {
                Transporte = new Aereo()
                {
                    cNombre = "Aereo"
                };
            }

            Transporte.dCostoEnvio       = cCostoPorKilometro;
            Transporte.dVelocidadEntrega = cVelocidad;


            return(Transporte);
        }
        public IMedioTransporte Create(string _medioTransporte)
        {
            var dto = lstMediosTransporteDTO.FirstOrDefault(f => f.Medio == _medioTransporte);
            var _nombreMedioTransporteEnum = (MedioTransporteEnum)System.Enum.Parse(typeof(MedioTransporteEnum), dto.Medio);

            IMedioTransporte factory;

            switch (_nombreMedioTransporteEnum)
            {
            case MedioTransporteEnum.Terrestre:
                factory = new Terrestre(dto.CostoPorKilometro, new TerrestreAjusteTiempo(lstTemporadas, dto.RetrasoPorDiaPorTemporada.TiemposRetraso), dto.Medio, dto.Velocidad);
                break;

            case MedioTransporteEnum.Marítimo:
                factory = new Maritimo(dto.CostoPorKilometro, new MaritimoAjusteCosto(lstTemporadas, dto.CostoAdicionalPorTemporada.Variaciones), new MaritimoAjusteTiempo(lstTemporadas, dto.VelocidadPorTemporada.Variaciones), dto.Medio, dto.Velocidad);
                break;

            case MedioTransporteEnum.Aéreo:
                factory = new Aereo(dto.CostoPorKilometro, dto.Medio, dto.Velocidad);
                break;

            default:
                throw new NotImplementedException($"No existe una implementación para el medio de transporte {_nombreMedioTransporteEnum.ToString()}.");
            }
            return(factory);
        }
Beispiel #6
0
        public void ObtenerRecargo_General_Cero()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Terrestre(8000, DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerRecargo();

            Assert.AreEqual(0, Resultado);
        }
Beispiel #7
0
        public void ObtenerTiempoEntregaMinutos_OchocientosInvierno_SieteMilNovecientosVeinte()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Terrestre(8000, DateTime.ParseExact("02/01/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerTiempoEntregaMinutos();

            Assert.AreEqual(7920, Resultado);
        }
Beispiel #8
0
        public void ObtenerVelocidad_Ochenta_Ochenta()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Terrestre(8000, DateTime.ParseExact("02/03/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerVelocidad();

            Assert.AreEqual(80, Resultado);
        }
Beispiel #9
0
        public void ObtenerTiempoEntregaMinutos_OchocientosPrimavera_SeisMilNovecientosSesenta()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Terrestre(8000, DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerTiempoEntregaMinutos();

            Assert.AreEqual(6960, Resultado);
        }
    /// <summary>
    /// Indique si les unités sélectionnées peuvent attaquer ensemble. Pour cela, elles doivent être
    /// </summary>
    /// <returns>bool true si les unités sont compatibles, false autrement.</returns>
    protected bool CanAttackTogether(Territoire toAttack)
    {
        if (this.GetType().Name == "Infanterie" || this.GetType().Name == "Tank")
        {
            // On vérifie pour chaque unité si elle est d'un type compatible (Tank ou Infanterie) et stationnée à la
            // frontière de la cible
            foreach (Unite unit in selectedList)
            {
                if (unit.GetType().Name == "Infanterie" || unit.GetType().Name == "Tank")
                {
                    Terrestre terrestre = unit as Terrestre;

                    // Une des unités sélectionnées n'est pas stationnée à la frontière de la cible
                    // Si une route maritime qui ne soit pas bloquée ne connecte pas la cible à la base de l'unité
                    // Elle ne peut attaquer
                    if (!toAttack.GetVoisinsNDegree(1, true, false).Contains(terrestre.territoire))
                    {
                        return(false);
                    }
                }
                else // Si l'unité n'est pas une infanterie ou un tank, le groupe ne peut attaquer de façon coordonnées
                {
                    return(false);
                }
            }
        }
        else if (this.GetType().Name == "Artillerie")
        {
            if (toAttack.unites.Count > 1)
            {
                // On vérifie pour chaque unité si elle est du même type et stationnée à portée de tire de la cible.
                foreach (Unite unit in selectedList)
                {
                    if (unit.GetType().Name != "Artillerie")
                    {
                        return(false);
                    }

                    Artillerie artie = unit as Artillerie;

                    // Si la cible n'est pas à moins de 3 territoires d'écart l'unité ne peut ouvrir le feu.
                    if (!toAttack.GetVoisinsNDegree(2, false, true).Contains(artie.territoire))
                    {
                        return(false);
                    }
                }
            }
        }
        else // Une DCA ne peut pas attaquer
        {
            return(false);
        }

        return(true);
    }
Beispiel #11
0
        public void ObtenerCostoEnvio_Cuarenta_Seiscientos()
        {
            IFormatProvider culture    = new CultureInfo("ES-MX", true);
            DateTime        FechaEnvio = DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture);

            var Sut = new Terrestre(40, FechaEnvio, configuraciones);

            decimal Resultado = Sut.ObtenerCostoEnvio();

            Assert.AreEqual(600, Resultado);
        }
Beispiel #12
0
        public void ObtenerCostoxDistancia_DoscientosCincuenta_Ocho()
        {
            IFormatProvider culture    = new CultureInfo("ES-MX", true);
            DateTime        FechaEnvio = DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture);

            var Sut = new Terrestre(250, FechaEnvio, configuraciones);

            decimal Resultado = Sut.ObtenerCostoxDistancia();

            Assert.AreEqual(8, Resultado);
        }
Beispiel #13
0
        public void ObtenerFechaEnvio_General_FechaEnviada()
        {
            IFormatProvider culture    = new CultureInfo("ES-MX", true);
            DateTime        FechaEnvio = DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture);

            var Sut = new Terrestre(8000, FechaEnvio, configuraciones);

            DateTime Resultado = Sut.ObtenerFechaEnvio();

            Assert.AreEqual(FechaEnvio, Resultado);
        }
Beispiel #14
0
        public void ObtieneTiempoTransporte_22Febrero11592_192()
        {
            //Arrange
            ParametroCalculoMedioTransporteDTO param = new ParametroCalculoMedioTransporteDTO()
            {
                FechaCompra = new DateTime(2020, 2, 22), Distancia = 11520
            };
            List <RangoCosto> lstCostos = new List <RangoCosto>()
            {
                new RangoCosto(1m, 50m, 15m), new RangoCosto(51m, 200m, 10m), new RangoCosto(201m, 300, 8m), new RangoCosto(301m, null, 7m)
            };
            var DOCajusteTiempo = new Mock <IAjusteExtra>();

            DOCajusteTiempo.Setup(doc => doc.ObtieneAjustePorEstacion(param.FechaCompra)).Returns(8);
            var SUT = new Terrestre(lstCostos, DOCajusteTiempo.Object);
            //ACT
            var costo = SUT.ObtieneTiempoTransporte(param);

            //Assert
            Assert.AreEqual(192m, costo);
        }
Beispiel #15
0
        public void ObtieneCostoTransporte_10Julio25_375()//Verano
        {
            //Arrange
            ParametroCalculoMedioTransporteDTO param = new ParametroCalculoMedioTransporteDTO()
            {
                FechaCompra = new DateTime(2020, 7, 10), Distancia = 25
            };
            List <RangoCosto> lstCostos = new List <RangoCosto>()
            {
                new RangoCosto(1m, 50m, 15m), new RangoCosto(51m, 200m, 10m), new RangoCosto(201m, 300, 8m), new RangoCosto(301m, null, 7m)
            };
            var DOCajusteTiempo = new Mock <IAjusteExtra>();

            DOCajusteTiempo.Setup(doc => doc.ObtieneAjustePorEstacion(param.FechaCompra)).Returns(0);
            var SUT = new Terrestre(lstCostos, DOCajusteTiempo.Object);
            //ACT
            var costo = SUT.ObtieneCostoTransporte(param);

            //Assert
            Assert.AreEqual(375m, costo);
        }
        public void CalculaCostoEnvio_EstacionDistancia500_3500()
        {
            //Arrange
            var           DOCcalculadorCostoPorDistancia = new Mock <ICalculadorCostoEnvio>();
            var           DOCcalculadorTiempoTraslado    = new Mock <ICalculadorTiempoTraslado>();
            ParametrosDTO parametros    = new ParametrosDTO();
            DateTime      dtFechaPedido = new DateTime(2020, 02, 22);
            double        dDistancia    = 1200;

            parametros.dtFechaPedido = dtFechaPedido;
            parametros.dDistacia     = dDistancia;
            DOCcalculadorCostoPorDistancia.Setup(doc => doc.CalcularCostoEnvio(dtFechaPedido, parametros.dDistacia)).Returns(3500);

            var SUT = new Terrestre(DOCcalculadorCostoPorDistancia.Object, DOCcalculadorTiempoTraslado.Object);

            //ACT
            var regreso = SUT.CalculaCostoEnvio(parametros);

            //ASSERT
            Assert.AreEqual(3500, regreso);
        }
        List <IEmpresa> ICrearInstanciaPaqueteriaFactory.CrearInstancia(string cClave)
        {
            List <IEmpresa>   empresa         = null;
            IMediosTransporte medioTransporte = null;

            switch (cClave)
            {
            case "MARITIMO":
                medioTransporte = new Maritimo(new CalculadorVelocidadMaritimo(new List <DTO.EstacionesDTO>(), new Estacion()), new CalculadorCostoEnvioMaritimo(new List <DTO.EstacionesDTO>(), new List <DTO.RangosDTO>(), new Estacion()));
                empresa         = new List <IEmpresa>();
                ParametrosDTO parametros = new ParametrosDTO();
                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                empresa.Add(new Estafeta(medioTransporte, new CalculadorMargenUtilidadCostoEstafeta(new List <RangosMargenDTO>()), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                break;

            case "TERRESTRE":
                medioTransporte = new Terrestre(new CalculadorCostoEnvioTerrestre(new List <RangosDTO>()), new CalculadorTiempoTrasladoTerrestre(new Estacion(), new List <EstacionesDTO>()));
                empresa         = new List <IEmpresa>();

                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                empresa.Add(new Estafeta(medioTransporte, new CalculadorMargenUtilidadCostoEstafeta(new List <RangosMargenDTO>()), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                break;

            case "AEREO":
                medioTransporte = new Aereo(new CalculadorEscalas());
                empresa         = new List <IEmpresa>();
                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(), new List <TiempoRepartoDTO>(), new ParametrosDTO()));
                break;
                //default:
                //    empresa.Add(new Fedex(null, new CalculadorMargenUtilidadCostoFedex(), new List<TiempoRepartoDTO>(), new ParametrosDTO()));
                //    empresa.Add(new DHL(null, new CalculadorMargenUtilidadCostoDHL(), new List<TiempoRepartoDTO>(), new ParametrosDTO()));
                //    empresa.Add(new Estafeta(null, new CalculadorMargenUtilidadCostoEstafeta(new List<RangosMargenDTO>()), new List<TiempoRepartoDTO>(), new ParametrosDTO()));
                //    break;
            }
            return(empresa);
        }
    /// <summary>
    /// Affiche le résumé d'une attaque.
    /// </summary>
    /// <param name="diceAtt">int[] Valeurs des dés de l'attaquant.</param>
    /// <param name="diceDef">int[] Valeurs des dés du défenseur.</param>
    /// <param name="unitesDetruitesAtt">int[] Le nombre de chaque unité de l'attaquant détruites durant l'assaut.</param>
    /// <param name="unitesDetruitesDef">int[] Le nombre de chaque unité du défenseur détruites durant l'assaut.</param>
    /// <param name="unitAtt">List(Unite) Les unités restantes de l'attaquant.</param>
    /// <param name="unitDef">List(Unite) Les unités restantes du défenseur.</param>
    public IEnumerator ShowAssaultResult(int[] diceAtt, int[] diceDef, int[] unitesDetruitesAtt, int[] unitesDetruitesDef, List <Unite> unitAtt, List <Unite> unitDef)
    {
        //Debug.Log("Et ça, c'est l'donjon ?");
        GameObject diceGroupAtt;
        GameObject diceGroupDef;

        if (diceAtt.Length == 3)
        {
            diceGroupAtt = assaultResultPanel.transform.FindChild("Attaque").FindChild("Three dice").gameObject;
        }
        else if (diceAtt.Length == 2)
        {
            diceGroupAtt = assaultResultPanel.transform.FindChild("Attaque").FindChild("Two dice").gameObject;
        }
        else
        {
            diceGroupAtt = assaultResultPanel.transform.FindChild("Attaque").FindChild("One die").gameObject;
        }

        if (diceDef.Length == 2)
        {
            diceGroupDef = assaultResultPanel.transform.FindChild("Défense").FindChild("Two dice").gameObject;
        }
        else
        {
            diceGroupDef = assaultResultPanel.transform.FindChild("Défense").FindChild("One die").gameObject;
        }

        diceGroupAtt.SetActive(true);
        diceGroupDef.SetActive(true);

        // Tri dans l'ordre croissant
        Array.Sort(diceAtt);
        Array.Sort(diceDef);

        // Assignation des sprites pour chaque dé de l'attaque
        for (int i = 0; i < diceAtt.Length; i++)
        {
            GameObject die = diceGroupAtt.transform.GetChild(i).gameObject;
            die.GetComponent <Image>().sprite = redDice[diceAtt[i] - 1];
        }

        // Assignation des sprites pour chaque dé de la défense
        for (int i = 0; i < diceDef.Length; i++)
        {
            GameObject die = diceGroupDef.transform.GetChild(i).gameObject;
            die.GetComponent <Image>().sprite = whiteDice[diceDef[i] - 1];
        }

        // Listes d'unités de chaque joueur
        GameObject listeAtt = assaultResultPanel.transform.FindChild("Attaque").FindChild("Liste").gameObject;
        GameObject listeDef = assaultResultPanel.transform.FindChild("Défense").FindChild("Liste").gameObject;

        // Compte les unités ayant participer à la bataille pour les listes d'unités.
        int[] unitsToAtt = new int[7];
        int[] unitsToDef = new int[7];

        // Inclusion des unités détruites dans la liste des unités ayant participé à la bataille.
        unitesDetruitesAtt.CopyTo(unitsToAtt, 0);
        unitesDetruitesDef.CopyTo(unitsToDef, 0);

        /*
         * Territoire territoireAtt = null, territoireDef = null;
         * Route routeAtt = null, routeDef = null;
         */

        foreach (Unite unit in unitAtt)
        {
            if (unit.GetType().Name == "Infanterie")
            {
                unitsToAtt[(int)Utils.unitCode.Infanterie]++;
            }

            if (unit.GetType().Name == "Tank")
            {
                unitsToAtt[(int)Utils.unitCode.Tank]++;
            }

            if (unit.GetType().Name == "Artillerie")
            {
                unitsToAtt[(int)Utils.unitCode.Artillerie]++;
            }

            if (unit.GetType().Name == "Dca")
            {
                unitsToAtt[(int)Utils.unitCode.DCA]++;
            }

            if (unit.GetType().Name == "Croiseur")
            {
                unitsToAtt[(int)Utils.unitCode.Croiseur]++;
            }

            if (unit.GetType().Name == "Submarin")
            {
                unitsToAtt[(int)Utils.unitCode.Submarin]++;
            }

            if (unit.GetType().Name == "Bombardier")
            {
                unitsToAtt[(int)Utils.unitCode.Bombardier]++;
            }

            /*
             * if (unit.GetType().Name == "Croiseur" && unit.GetType().Name == "Submarin")
             * {
             *  Maritime maritime = unit as Maritime;
             *  routeAtt = maritime.route;
             * }
             * else if (unit.GetType().Name == "Bombardier")
             * {
             *  Bombardier bombardier = unit as Bombardier;
             *  territoireAtt = bombardier.territoire;
             * }
             * else
             * {
             *  Terrestre terrestre = unit as Terrestre;
             *  territoireAtt = terrestre.territoire;
             * }
             */
        }

        foreach (Unite unit in unitDef)
        {
            if (unit.GetType().Name == "Infanterie")
            {
                unitsToDef[(int)Utils.unitCode.Infanterie]++;
            }

            if (unit.GetType().Name == "Tank")
            {
                unitsToDef[(int)Utils.unitCode.Tank]++;
            }

            if (unit.GetType().Name == "Artillerie")
            {
                unitsToDef[(int)Utils.unitCode.Artillerie]++;
            }

            if (unit.GetType().Name == "Dca")
            {
                unitsToDef[(int)Utils.unitCode.DCA]++;
            }

            if (unit.GetType().Name == "Croiseur")
            {
                unitsToDef[(int)Utils.unitCode.Croiseur]++;
            }

            if (unit.GetType().Name == "Submarin")
            {
                unitsToDef[(int)Utils.unitCode.Submarin]++;
            }

            if (unit.GetType().Name == "Bombardier")
            {
                unitsToDef[(int)Utils.unitCode.Bombardier]++;
            }

            /*
             * if (unit.GetType().Name == "Croiseur" && unit.GetType().Name == "Submarin")
             * {
             *  Maritime maritime = unit as Maritime;
             *  routeDef = maritime.route;
             * }
             * else if (unit.GetType().Name == "Bombardier")
             * {
             *  Bombardier bombardier = unit as Bombardier;
             *  territoireDef = bombardier.territoire;
             * }
             * else
             * {
             *  Terrestre terrestre = unit as Terrestre;
             *  territoireDef = terrestre.territoire;
             * }
             */
        }

        int attEntries      = 0;
        int defEntries      = 0;
        int attNbrDetruites = 0;
        int defNbrDetruites = 0;

        // Ajout de chaque entrée à la liste
        for (int i = 0; i < 7; i++)
        {
            if (unitsToAtt[i] > 0)
            {
                Instantiate(listOfUnitsPrefabs[i], listeAtt.transform);

                GameObject newEntry = listeAtt.transform.GetChild(listeAtt.transform.childCount - 1).gameObject;

                newEntry.transform.localPosition = new Vector3(50, 130 - (20 * attEntries), 0);
                newEntry.transform.rotation      = new Quaternion();
                newEntry.transform.localScale    = new Vector3(1, 1, 1);
                newEntry.transform.FindChild("Nombre").GetComponent <Text>().text = unitsToAtt[i].ToString();

                ++attEntries;
            }

            if (unitsToDef[i] > 0)
            {
                Instantiate(listOfUnitsPrefabs[i], listeDef.transform);

                GameObject newEntry = listeDef.transform.GetChild(listeDef.transform.childCount - 1).gameObject;

                newEntry.transform.localPosition = new Vector3(50, 130 - (20 * defEntries), 0);
                newEntry.transform.rotation      = new Quaternion();
                newEntry.transform.localScale    = new Vector3(1, 1, 1);
                newEntry.transform.FindChild("Nombre").GetComponent <Text>().text = unitsToDef[i].ToString();

                ++defEntries;
            }
        }

        Text   resume = assaultResultPanel.transform.FindChild("Résumé").GetComponent <Text>();
        bool   attHasLostUnits = false, defHasLostUnits = false;
        string attUnitsLost = "", defUnitsLost = "";

        for (int i = 0; i < unitesDetruitesAtt.Length; i++)
        {
            if (unitesDetruitesAtt[i] > 0)
            {
                attHasLostUnits = true;
                string toWrite = unitesDetruitesAtt[i] + " " + Utils.GetUnitsNameByCode(i);

                attUnitsLost    += attUnitsLost.Equals("") ? "" + toWrite : "," + toWrite;
                attNbrDetruites += unitesDetruitesAtt[i];
            }

            if (unitesDetruitesDef[i] > 0)
            {
                defHasLostUnits = true;
                string toWrite = unitesDetruitesDef[i] + " " + Utils.GetUnitsNameByCode(i);

                defUnitsLost    += defUnitsLost.Equals("") ? "" + toWrite : "," + toWrite;
                defNbrDetruites += unitesDetruitesDef[i];
            }
        }

        List <Unite> .Enumerator unitAttEnum = unitAtt.GetEnumerator();

        if (unitAttEnum.MoveNext() || unitesDetruitesAtt[(int)Utils.unitCode.Bombardier] > 0)
        {
            // Si l'attaque est lancée par des bombardiers ajoute en soutien les DCA à proximité
            if ((unitAttEnum.Current != null && unitAttEnum.Current.GetType().Name == "Bombardier") || unitesDetruitesAtt[(int)Utils.unitCode.Bombardier] > 0)
            {
                Terrestre  terrestre   = unitDef[0] as Terrestre;
                List <Dca> dcasInRange = terrestre.territoire.GetDcaInRange();

                if (dcasInRange.Count > 0)
                {
                    Transform soutiens = assaultResultPanel.transform.FindChild("Défense").FindChild("Soutiens").FindChild("Liste");

                    Instantiate(listOfUnitsPrefabs[(int)Utils.unitCode.DCA], soutiens.transform);

                    GameObject newEntry = soutiens.transform.GetChild(listeDef.transform.childCount - 1).gameObject;

                    newEntry.transform.localPosition = new Vector3(-3, -30, 0);
                    newEntry.transform.rotation      = new Quaternion();
                    newEntry.transform.localScale    = new Vector3(1, 1, 1);
                    newEntry.transform.FindChild("Nombre").GetComponent <Text>().text = "" + dcasInRange.Count;
                }
            }
        }
        else
        {
            assaultResultPanel.transform.FindChild("Défense").FindChild("Soutiens").gameObject.SetActive(false);
        }

        resume.text  = attHasLostUnits ? "L'attaquant a perdu " + attUnitsLost + ". " : "L'attaquant n'a perdu aucune unité. ";
        resume.text += defHasLostUnits ? "Le défenseur a perdu " + defUnitsLost + ". " : "Le défenseur n'a perdu aucune unité. ";

        if (attNbrDetruites > defNbrDetruites)
        {
            resume.text += "Le défenseur remporte une victoire ";
            resume.text += defNbrDetruites == 0 ? "majeure." : "mineure.";
        }
        else if (attNbrDetruites == defNbrDetruites)
        {
            resume.text += "Les pertes sont égales.";
        }
        else
        {
            resume.text += "L'attaquant remporte une victoire ";
            resume.text += attNbrDetruites == 0 ? "majeure" : "mineure";
            resume.text += unitDef.Count > 0 ? "." : " et le territoire.";
        }

        //Debug.Log("Effectivement, c'est le donjon de Naheulbeuk.");

        OpenDialog(assaultResultPanel);

        while (dialogOpened)
        {
            //Debug.Log("dialogOpened : " + dialogOpened);

            yield return(null);
        }

        //Debug.Log("Il a pas l'air terrible ! "+ assaultResumeOpened);
    }
Beispiel #19
0
    /// <summary>
    /// Active le changement de phase/tour
    /// </summary>
    public void PasserButton()
    {
        if (!GetComponent <GUIController>().dialogOpened) // S'il n'y a pas de fenêtre de dialogue d'ouverte
        {
            if (phaseActive == phases.Deploiement)
            {
                List <Unite> .Enumerator unitsEnum = joueurs[joueurActif].Unites.GetEnumerator();
                bool canPass = true;

                while (canPass && unitsEnum.MoveNext())
                {
                    if (unitsEnum.Current is Terrestre)
                    {
                        Terrestre unit = unitsEnum.Current as Terrestre;

                        if (unit.territoire == null)
                        {
                            canPass = false;
                        }
                    }
                    else if (unitsEnum.Current is Aerienne)
                    {
                        Aerienne unit = unitsEnum.Current as Aerienne;

                        if (unit.territoire == null)
                        {
                            canPass = false;
                        }
                    }
                    else
                    {
                        Maritime unit = unitsEnum.Current as Maritime;

                        if (unit.route == null)
                        {
                            canPass = false;
                        }
                    }
                }

                if (canPass)
                {
                    phaseActive = phases.Attaque;

                    if (!joueurs[joueurActif].Humain)
                    {
                        IAEasy joueurIA = joueurs[joueurActif] as IAEasy;

                        joueurIA.IAPlay();
                    }
                }
                else
                {
                    InvalidAction("Vous ne pouvez passer votre tour sans déployer toutes les unités nouvellement achetées.");
                }
            }
            else if (phaseActive == phases.Attaque)
            {
                phaseActive = phases.Mouvement;

                if (!joueurs[joueurActif].Humain)
                {
                    IAEasy joueurIA = joueurs[joueurActif] as IAEasy;

                    joueurIA.IAPlay();
                }
                else
                {
                    button.transform.GetChild(0).GetComponent <Text>().text = "Fin du tour";
                }
            }
            else if (phaseActive == phases.Mouvement)
            {
                ChangeActivePlayer();
            }
        }
    }
Beispiel #20
0
    /// <summary>
    /// Lance l'attaque sur le territoire cible.
    /// </summary>
    /// <param name="unitAttacking">List(Unite) Les unités donnant l'assaut.</param>
    /// <param name="cible">Territoire Le territoire cible.</param>
    public IEnumerator LaunchAttack(List <Unite> unitAttacking, Territoire cible)
    {
        unitAtt = new List <Unite>();

        foreach (Unite unite in unitAttacking)
        {
            unitAtt.Add(unite);
        }

        //Debug.Log("unitAtt.Count : " + unitAtt.Count);

        territoireCible = cible;
        joueurAtt       = unitAtt[0].Joueur;
        joueurDef       = territoireCible.joueur;
        bool ranged = false;

        if (unitAtt[0].GetType().Name == "Artillerie" || unitAtt[0].GetType().Name == "Bombardier")
        {
            ranged = true;
        }

        // Récupération des unités présentes sur la cible
        foreach (Unite unit in cible.joueur.Unites)
        {
            if (unit.GetType().BaseType.Name == "Terrestre")
            {
                Terrestre terrestre = unit as Terrestre;

                if (terrestre.territoire.Equals(cible))
                {
                    unitDef.Add(terrestre);
                }
            }
            else if (unit.GetType().BaseType.Name == "Aerienne")
            {
                Aerienne aerienne = unit as Aerienne;

                if (aerienne.territoire.Equals(cible))
                {
                    unitDef.Add(aerienne);
                }
            }
        }

        int[]         diceAtt = new int[Math.Min(3, unitAtt.Count)], diceDef = new int[Math.Min(2, unitDef.Count)];
        System.Random rand    = new System.Random();

        // Jets de dés
        for (int i = 0; i < 3; i++)
        {
            if (i < Math.Min(3, unitAtt.Count))
            {
                diceAtt[i] = rand.Next(1, 7); // Tire un chiffre entre 1 et 7 non inclus
            }
            if (i < Math.Min(2, unitDef.Count))
            {
                diceDef[i] = rand.Next(1, 7);
            }
        }

        DestroyUnits(diceAtt, diceDef, ranged);

        // Si toutes les unités de la défense sont détruites, le territoire est conquit
        if (unitAtt.Count > 0 && unitDef.Count == 0)
        {
            territoireCible.joueur.Territoires.Remove(territoireCible.Num);
            territoireCible.joueur = joueurAtt;
            joueurAtt.Territoires.Add(territoireCible.Num, territoireCible);
            territoireCible.unites.Clear();

            if (!ranged)
            {
                foreach (Unite unit in unitAtt)
                {
                    if (unit.GetType().Name == "Infanterie" || unit.GetType().Name == "Tank")
                    {
                        Terrestre terrestre = unit as Terrestre;

                        terrestre.territoire.unites.Remove(terrestre);
                        terrestre.territoire = territoireCible;
                        territoireCible.unites.Add(unit);

                        if (joueurAtt.GetType().Name.Equals("IAEasy") || joueurAtt.GetType().Name.Equals("IAMedium") || joueurAtt.GetType().Name.Equals("IAHard"))
                        {
                            terrestre.transform.localPosition = territoireCible.Position;
                        }
                    }
                }
            }
        }
        else
        {
            foreach (Unite unit in unitAtt)
            {
                unit.ResetPosition();
            }

            if (ranged)
            {
                foreach (Unite unit in unitAtt)
                {
                    unit.Disable();
                }
            }
        }

        ////Debug.Log("Ça se voit.");

        // Affichage du résultat de l'assaut.
        yield return(StartCoroutine(GameObject.Find("GUIManager").GetComponent <GUIController>().ShowAssaultResult(diceAtt, diceDef, unitesDetruitesAtt, unitesDetruitesDef, unitAtt, unitDef)));

        //Debug.Log("Eh bien, je frappe pour qu'on vienne nous ouvrir.");

        // Réinitialisation des variables pour éviter toute erreur.
        Reset();
    }
Beispiel #21
0
        List <IEmpresa> ICrearInstanciaPaqueteriaFactory.CrearInstancia(string cClave, List <Configuracion> configuracion)
        {
            List <IEmpresa>   empresa         = null;
            IMediosTransporte medioTransporte = null;
            MediosTransporte  Mediotransporte = null;

            Mediotransporte = configuracion[0].mediosTransporte.Where(x => x.Medio.ToUpper() == cClave.ToUpper()).FirstOrDefault();
            switch (cClave)
            {
            case "MARITIMO":

                medioTransporte = new Maritimo(new CalculadorVelocidadMaritimo(Mediotransporte.VelocidadPorTemporada, new Estacion(configuracion[0].temporadas)), new CalculadorCostoEnvioMaritimo(Mediotransporte.CostoAdicionalPorTemporada, Mediotransporte.CostoPorKilometro, new Estacion(configuracion[0].temporadas)));
                empresa         = new List <IEmpresa>();
                ParametrosDTO parametros = new ParametrosDTO();

                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(configuracion[1].Periodos,
                                                                                              configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                      configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.Medios).FirstOrDefault(),
                                      new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(configuracion[1].Periodos,
                                                                                          configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                    configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.Medios).FirstOrDefault(),
                                    new ParametrosDTO()));
                empresa.Add(new Estafeta(medioTransporte, new CalculadorMargenUtilidadCostoEstafeta(configuracion[1].Periodos,
                                                                                                    configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "ESTAFETA").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                         configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "ESTAFETA").Select(X => X.Medios).FirstOrDefault(),
                                         new ParametrosDTO()));
                break;

            case "TERRESTRE":
                medioTransporte = new Terrestre(new CalculadorCostoEnvioTerrestre(Mediotransporte.CostoPorKilometro), new CalculadorTiempoTrasladoTerrestre(new Estacion(configuracion[0].temporadas), Mediotransporte.RetrasoPorDiaPorTemporada));
                empresa         = new List <IEmpresa>();
                ParametrosDTO parametrosT = new ParametrosDTO();
                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(configuracion[1].Periodos,
                                                                                              configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                      configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.Medios).FirstOrDefault(),
                                      new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(configuracion[1].Periodos,
                                                                                          configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                    configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.Medios).FirstOrDefault(),
                                    new ParametrosDTO()));
                empresa.Add(new Estafeta(medioTransporte, new CalculadorMargenUtilidadCostoEstafeta(configuracion[1].Periodos,
                                                                                                    configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "ESTAFETA").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                         configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "ESTAFETA").Select(X => X.Medios).FirstOrDefault(),
                                         new ParametrosDTO()));
                break;

            case "AEREO":
                medioTransporte = new Aereo(new CalculadorEscalas());
                empresa         = new List <IEmpresa>();
                empresa.Add(new Fedex(medioTransporte, new CalculadorMargenUtilidadCostoFedex(configuracion[1].Periodos,
                                                                                              configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                      configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "FEDEX").Select(X => X.Medios).FirstOrDefault(),
                                      new ParametrosDTO()));
                empresa.Add(new DHL(medioTransporte, new CalculadorMargenUtilidadCostoDHL(configuracion[1].Periodos,
                                                                                          configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.MargenUtilidad).FirstOrDefault()),
                                    configuracion[2].paqueterias.Where(c => c.Paqueteria.ToUpper() == "DHL").Select(X => X.Medios).FirstOrDefault(),
                                    new ParametrosDTO()));
                break;
            }
            return(empresa);
        }
Beispiel #22
0
    /// <summary>
    /// Permet à l'IA d'acheter des unités selon les conditions.
    /// </summary>
    public void IAUniteAchat()
    {
        step = 1;
        // Le plus bas score et l'index du territoire correspondant.
        // 1000 nécessiterait par exemple 100 tanks sur le territoire, c'est donc une valeur à priori impossible à atteindre.
        int worstScore = 1000, worstIndex = 0;

        int[] worstCount = new int[] { 0, 0, 0, 0, 0 };

        foreach (KeyValuePair <int, Territoire> keyValue in territoires)
        {
            int   score       = 0;
            int[] unitesCount = new int[] { 0, 0, 0, 0, 0 };

            foreach (Unite unit in keyValue.Value.unites)
            {
                if (unit.GetType().Name == "Infanterie")
                {
                    score += 4;
                    unitesCount[(int)Utils.unitCode.Infanterie]++;
                }
                else if (unit.GetType().Name == "Tank")
                {
                    score += 10;
                    unitesCount[(int)Utils.unitCode.Tank]++;
                }
                else if (unit.GetType().Name == "Artillerie")
                {
                    score += 7;
                    unitesCount[(int)Utils.unitCode.Artillerie]++;
                }
                else if (unit.GetType().Name == "Dca")
                {
                    score += 4;
                    unitesCount[(int)Utils.unitCode.DCA]++;
                }
                else
                {
                    score += 5;
                    unitesCount[4]++;
                }
            }

            if (worstScore > score)
            {
                worstScore = score;
                worstIndex = keyValue.Value.Num;
                worstCount = unitesCount;
            }
        }

        Terrestre newUnit = null;

        if (worstCount[(int)Utils.unitCode.Tank] == 0)
        {
            if (credits >= Tank.COUT)
            {
                newUnit = boutique.CreateUnit(
                    (int)Utils.unitCode.Tank,
                    GameObject.Find("Unites").transform,
                    territoires[worstIndex].position,
                    this
                    ).gameObject.GetComponent <Tank>();
            }
            else if (worstCount[(int)Utils.unitCode.Infanterie] < 5 && credits >= Infanterie.COUT)
            {
                newUnit = boutique.CreateUnit(
                    (int)Utils.unitCode.Infanterie,
                    GameObject.Find("Unites").transform,
                    territoires[worstIndex].position,
                    this
                    ).gameObject.GetComponent <Infanterie>();
            }
        }
        else if (worstCount[(int)Utils.unitCode.Artillerie] == 0 && credits >= Artillerie.COUT)
        {
            newUnit = boutique.CreateUnit(
                (int)Utils.unitCode.Artillerie,
                GameObject.Find("Unites").transform,
                territoires[worstIndex].position,
                this
                ).gameObject.GetComponent <Artillerie>();
        }
        else if (credits >= Bombardier.COUT)
        {
            Aerienne newAerien = boutique.CreateUnit(
                (int)Utils.unitCode.Bombardier,
                GameObject.Find("Unites").transform,
                territoires[worstIndex].position,
                this
                ).gameObject.GetComponent <Bombardier>();

            newAerien.territoire = territoires[worstIndex];
            territoires[worstIndex].unites.Add(newAerien);
        }

        if (newUnit != null)
        {
            newUnit.territoire = territoires[worstIndex];
            territoires[worstIndex].unites.Add(newUnit);
        }

        if (credits >= Dca.COUT)
        {
            List <Territoire> .Enumerator voisins3DegreEnum = territoires[worstIndex].GetVoisinsNDegree(3, true, true).GetEnumerator();
            bool bombardierAPortee = false;

            while (!bombardierAPortee && voisins3DegreEnum.MoveNext())
            {
                List <Unite> .Enumerator unitesEnum = voisins3DegreEnum.Current.unites.GetEnumerator();

                while (!bombardierAPortee && unitesEnum.MoveNext())
                {
                    if (unitesEnum.Current.GetType().Name == "Bombardier")
                    {
                        bombardierAPortee = true;
                    }
                }
            }

            if (bombardierAPortee)
            {
                newUnit = boutique.CreateUnit(
                    (int)Utils.unitCode.DCA,
                    GameObject.Find("Unite").transform,
                    territoires[worstIndex].position,
                    this
                    ).gameObject.GetComponent <Dca>();

                newUnit.territoire = territoires[worstIndex];
                territoires[worstIndex].unites.Add(newUnit);
            }
        }

        step = 2;
        //Si la route en question est coller au territoire du joueur

        /*	if (routes) {
         *      GameObject subMarinPrefab = boutique.GetRightPrefab ((int)Utils.unitCode.Submarin, true);
         *      Transform newUnitSubMarin = boutique.CreateUnit ((int)Utils.unitCode.Submarin, GameObject.Find ("Unite").transform, newTerritoire.position, rotation);
         *  }	*/
    }