Example #1
0
    /**
     * carteCibleCapacite : Carte vers laquelle la capacite va aller
     * capaciteImmediate : capacite applicable immediatement
     * carteOrigine : carte d'ou provient la capacite
     * carteCibleAction : carte cibler lors de l'appel de l'event
     * */
    private static void traitementCapaciteImmediateCarte(CarteMetierAbstract carteCibleCapacite, CapaciteDTO capaciteReference, Joueur joueur, NetworkInstanceId netIdTaskEvent)
    {
        if (capaciteReference.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_EMPLACEMENT_CARTE)
        {
            //TODO
        }
        else if (capaciteReference.Capacite == ConstanteIdObjet.ID_CAPACITE_VOLE_CARTE)
        {
            //TODO Definir le conteneur mains, deck, emplacement
            carteCibleCapacite.deplacerCarte(joueur.Main, joueur.netId, netIdTaskEvent);
        }
        else if (capaciteReference.Capacite == ConstanteIdObjet.ID_CAPACITE_DESTRUCTION_CARTE)
        {
            //TODO que faire si pas IVulnerable?
            if (carteCibleCapacite is IVulnerable)
            {
                ((IVulnerable)carteCibleCapacite).destruction(netIdTaskEvent);
            }
        }
        else if (capaciteReference.Capacite == ConstanteIdObjet.ID_CAPACITE_INVOQUE_CARTE && null != capaciteReference.CarteInvocation)
        {
            GameObject carteGO = CarteUtils.convertCarteDTOToGameobject(capaciteReference.CarteInvocation, true);

            //TODO ne prends pas en compte l'emplacement cible ou l invocation chez l ennemie
            CarteUtils.invoquerCarteServer(carteGO, capaciteReference.NiveauInvocation, joueur.Main, joueur);
        }
        else if (capaciteReference.Capacite == ConstanteIdObjet.ID_CAPACITE_REVELE_CARTE)
        {
            //TODO RPC carteCibleCapacite.generateVisualCard ();
        }
    }
Example #2
0
    private GameObject convertDataToGO(CarteConstructionAbstractData carteConstructionData, bool isServer)
    {
        CarteConstructionDTO carteDTO = ConvertDataAndDTOUtils.convertCarteConstructionDataToDTO(carteConstructionData);

        GameObject carteConstructionGO = CarteUtils.convertCarteDTOToGameobject(carteDTO, isServer);

        carteConstructionGO.SetActive(false);

        return(carteConstructionGO);
    }
Example #3
0
 public IConteneurCarte getConteneur()
 {
     if (CarteUtils.checkCarteActive(this))
     {
         return(transform.GetComponentInParent <IConteneurCarte> ());
     }
     else
     {
         return(null);
     }
 }
    public void usePoseConstructionCapacity(NetworkInstanceId netIdJoueur, CarteMetierAbstract carteSourceAction, ISelectionnable cible, NetworkInstanceId netIdTaskEvent)
    {
        if (CarteUtils.checkCarteActive(this) &&
            (this.getConteneur() is EmplacementMetierAbstract || carteSourceAction.netId == this.netId))
        {
            List <CapaciteDTO> capacitePoseConstruction = getListCapaciteToCall(netIdJoueur, carteSourceAction.netId, ConstanteIdObjet.ID_CONDITION_ACTION_POSE_CONSTRUCTION);

            foreach (CapaciteDTO capacite in capacitePoseConstruction)
            {
                CapaciteUtils.callCapacite(this, carteSourceAction, cible, capacite, netIdJoueur, ConstanteIdObjet.ID_CONDITION_ACTION_POSE_CONSTRUCTION, netIdTaskEvent);
            }
        }
    }
Example #5
0
    public void defenseSimultanee(CarteVaisseauMetier vaisseauAttaquant, NetworkInstanceId netIdTaskEvent)
    {
        bool attaqueEvite = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_EVITE_ATTAQUE);

        if (!attaqueEvite)
        {
            bool attaqueReoriente = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_REORIENTE_ATTAQUE);
            if (attaqueReoriente)
            {
                List <CarteMetierAbstract> listCartes = CarteUtils.getListCarteCibleReorientation(vaisseauAttaquant, this);
                CarteMetierAbstract        cible      = listCartes [Random.Range(0, listCartes.Count)];

                if (cible is CarteConstructionMetierAbstract)
                {
                    vaisseauAttaquant.attaqueCarte((CarteConstructionMetierAbstract)cible, netIdTaskEvent);
                }
                else if (cible is CartePlaneteMetier)
                {
                    vaisseauAttaquant.attaquePlanete((CartePlaneteMetier)cible, netIdTaskEvent);
                }
            }
            else
            {
                bool attaquePriorite = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ATTAQUE_OPPORTUNITE);
                int  degatInfliger   = getPointDegat();
                int  degatRecu       = vaisseauAttaquant.getPointDegat();

                if (attaquePriorite)
                {
                    this.recevoirAttaque(vaisseauAttaquant, netIdTaskEvent, false);

                    if (this.PV > 0)
                    {
                        vaisseauAttaquant.recevoirAttaque(this, netIdTaskEvent, false);
                    }
                }
                else
                {
                    vaisseauAttaquant.recevoirAttaque(this, netIdTaskEvent, true);
                    this.recevoirAttaque(vaisseauAttaquant, netIdTaskEvent, true);
                }
            }
        }
    }
Example #6
0
    /***************************Methode IAttaquer*************************/

    public void attaqueCarte(CarteConstructionMetierAbstract cible, NetworkInstanceId netIdEventTask)
    {
        bool attaqueReoriente = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_REORIENTE_ATTAQUE);
        bool attaqueEvite     = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_EVITE_ATTAQUE);

        if (!attaqueEvite)
        {
            if (attaqueReoriente && netIdEventTask == NetworkInstanceId.Invalid)               //Si netIdEventTask est invalid alors ce n'est pas une action appeler diretement mais une action rappelé par
            {
                List <CarteMetierAbstract> listCartes     = CarteUtils.getListCarteCibleReorientation(this, cible);
                CarteMetierAbstract        cibleReoriente = listCartes [Random.Range(0, listCartes.Count)];

                if (cibleReoriente is CartePlaneteMetier)
                {
                    attaquePlanete((CartePlaneteMetier)cibleReoriente, netIdEventTask);
                }
                else if (cibleReoriente is CarteConstructionMetierAbstract)
                {
                    cible = (CarteConstructionMetierAbstract)cibleReoriente;
                }
            }

            if (cible is IDefendre)
            {
                JoueurUtils.getJoueurLocal().CmdCreateTask(cible.netId, JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DEFEND, netIdEventTask, false);
                AttaqueCeTour = true;
            }
            else if (cible is IVulnerable)
            {
                ((IVulnerable)cible).recevoirAttaque(this, netIdEventTask, false);

                AttaqueCeTour = true;
            }
        }
        else
        {
            //TODO anim evite
        }

        if (!isCapableAttaquer())
        {
            this.JoueurProprietaire.CarteSelectionne = null;
        }
    }
Example #7
0
    public void CmdChangeParent(NetworkInstanceId netIdParent, string pathParent)
    {
        NetworkBehaviour scriptParent = ConvertUtils.convertNetIdToScript <NetworkBehaviour> (netIdParent, false);

        Transform trfParent;

        if (null != scriptParent && null != pathParent)
        {
            trfParent = scriptParent.transform.Find(pathParent);
        }
        else
        {
            trfParent = null;
        }

        transform.parent = trfParent;
        //transform.localScale = Vector3.one;
        transform.localScale = Vector3.Scale(ConstanteInGame.tailleCarte, CarteUtils.inverseVector(CarteUtils.getParentScale(transform)));
        RpcChangeParentOtherClient(netIdParent, pathParent);
    }
Example #8
0
    public void progressStepServer(int actionPlayer)
    {
        if (isServer)
        {
            if (actionPlayer == PHASE_ATTAQUE)
            {
                phase = PHASE_ATTAQUE;

                GameObject goBtnLastPlayer = NetworkServer.FindLocalObject(listJoueurs [indexPlayerPlaying].netIdBtnTour);
                if (null != goBtnLastPlayer && null != goBtnLastPlayer.GetComponent <BoutonTour> ())
                {
                    BoutonTour boutonTour = goBtnLastPlayer.GetComponent <BoutonTour> ();
                    boutonTour.setEtatBoutonServer(BoutonTour.enumEtatBouton.terminerTour);
                }

                List <CarteConstructionMetierAbstract> listAttaquant = CarteUtils.getListCarteCapableAttaque(listJoueurs [indexPlayerPlaying].netIdJoueur);
                foreach (CarteConstructionMetierAbstract attaquant in listAttaquant)
                {
                    attaquant.RpcSetEtatSelectionPlayer(listJoueurs [indexPlayerPlaying].netIdJoueur, SelectionnableUtils.ETAT_HIGH_LIGHT);
                }
            }
            else if (actionPlayer == FIN_TOUR)
            {
                Joueur joueurTour = JoueurUtils.getJoueur(listJoueurs [indexPlayerPlaying].netIdJoueur);

                int phasePrecedente = phase;

                phase = FIN_TOUR;

                if (phasePrecedente == PHASE_ATTAQUE)
                {
                    ActionEventManager.EventActionManager.CreateTask(NetworkInstanceId.Invalid, joueurTour.netId, -1, ConstanteIdObjet.ID_CONDITION_ACTION_FIN_ATTAQUE, NetworkInstanceId.Invalid, false);
                }
                else
                {
                    ActionEventManager.EventActionManager.CreateTask(NetworkInstanceId.Invalid, joueurTour.netId, -1, ConstanteIdObjet.ID_CONDITION_ACTION_FIN_TOUR, NetworkInstanceId.Invalid, false);
                }
            }
        }
    }
Example #9
0
    public void RpcRemiseEnPlaceCarte(NetworkInstanceId netIdJoueur)
    {
        if (JoueurUtils.getJoueurLocal().netId == netIdJoueur)
        {
            List <CarteMetierAbstract> listCarteJoueur = CarteUtils.getListCarteJoueur(netIdJoueur);

            foreach (CarteMetierAbstract carteJoueur in listCarteJoueur)
            {
                if (carteJoueur is IAttaquer)
                {
                    ((IAttaquer)carteJoueur).AttaqueCeTour = false;
                }

                if (carteJoueur is IDefendre)
                {
                    ((IDefendre)carteJoueur).reinitDefenseSelectTour();
                }
            }

            List <EmplacementAttaque> listEmplacementAttaqueOccuper = EmplacementUtils.getListEmplacementOccuperJoueur <EmplacementAttaque> (netIdJoueur);

            if (listEmplacementAttaqueOccuper.Count > 0)
            {
                List <EmplacementAtomsphereMetier> listEmplacementAtmosJoueurLibre = EmplacementUtils.getListEmplacementLibreJoueur <EmplacementAtomsphereMetier> (netIdJoueur);

                //On essaye d'abord de replacer les vaisseaux au bonne endroit
                if (listEmplacementAtmosJoueurLibre.Count > 0)
                {
                    List <EmplacementAttaque>          listEmplacementAttaqueToujoursOccuper = new List <EmplacementAttaque> (listEmplacementAttaqueOccuper);
                    List <EmplacementAtomsphereMetier> listEmplacementAtmosToujoursLibre     = new List <EmplacementAtomsphereMetier> (listEmplacementAtmosJoueurLibre);

                    foreach (EmplacementAttaque emplacementAttaqueJoueur in listEmplacementAttaqueOccuper)
                    {
                        foreach (EmplacementAtomsphereMetier emplacementAtmosJoueur in listEmplacementAtmosJoueurLibre)
                        {
                            if (emplacementAttaqueJoueur.NumColonne == emplacementAtmosJoueur.NumColonne)
                            {
                                CarteConstructionMetierAbstract carteADeplacer = emplacementAttaqueJoueur.gameObject.GetComponentInChildren <CarteConstructionMetierAbstract> ();
                                emplacementAtmosJoueur.putCard(carteADeplacer);
                                listEmplacementAttaqueToujoursOccuper.Remove(emplacementAttaqueJoueur);
                                listEmplacementAtmosToujoursLibre.Remove(emplacementAtmosJoueur);
                                break;
                            }
                        }
                    }


                    listEmplacementAttaqueToujoursOccuper.Sort((p1, p2) => p1.NumColonne.CompareTo(p2.NumColonne));
                    listEmplacementAtmosToujoursLibre.Sort((p1, p2) => p1.NumColonne.CompareTo(p2.NumColonne));
                    while (0 < listEmplacementAttaqueToujoursOccuper.Count && 0 < listEmplacementAtmosToujoursLibre.Count)
                    {
                        CarteConstructionMetierAbstract carteADeplacer = listEmplacementAttaqueToujoursOccuper [0].gameObject.GetComponentInChildren <CarteConstructionMetierAbstract> ();
                        listEmplacementAtmosToujoursLibre [0].putCard(carteADeplacer);
                        listEmplacementAttaqueToujoursOccuper.RemoveAt(0);
                        listEmplacementAtmosToujoursLibre.RemoveAt(0);
                    }

                    if (listEmplacementAttaqueToujoursOccuper.Count > 0)
                    {
                        foreach (EmplacementAttaque emplacementAVider   in listEmplacementAttaqueToujoursOccuper)
                        {
                            CarteConstructionMetierAbstract carteADeplacer = emplacementAVider.gameObject.GetComponentInChildren <CarteConstructionMetierAbstract> ();

                            if (carteADeplacer is CarteVaisseauMetier)
                            {
                                ((CarteVaisseauMetier)carteADeplacer).sacrificeCarte();
                            }
                            else
                            {
                                //TODO
                            }
                        }
                    }

                    //On fait de même avec les emplacement de sol
                    if (listEmplacementAtmosToujoursLibre.Count > 0)
                    {
                        List <EmplacementSolMetier> listEmplacementSolJoueur = EmplacementUtils.getListEmplacementOccuperJoueur <EmplacementSolMetier> (netIdJoueur);


                        List <EmplacementSolMetier>        listEmplacementSolAvecCarteVaisseau = new List <EmplacementSolMetier> (listEmplacementSolJoueur);
                        List <EmplacementAtomsphereMetier> listEmplacementAtmosToujoursLibre2  = new List <EmplacementAtomsphereMetier> (listEmplacementAtmosJoueurLibre);

                        foreach (EmplacementSolMetier emplacementSolJoueur in listEmplacementSolJoueur)
                        {
                            foreach (EmplacementAtomsphereMetier emplacementAtmosJoueur in listEmplacementAtmosJoueurLibre)
                            {
                                if (emplacementSolJoueur.NumColonne == emplacementAtmosJoueur.NumColonne)
                                {
                                    CarteConstructionMetierAbstract carteADeplacer = emplacementSolJoueur.gameObject.GetComponentInChildren <CarteConstructionMetierAbstract> ();
                                    if (null != carteADeplacer && carteADeplacer is CarteVaisseauMetier)
                                    {
                                        emplacementAtmosJoueur.putCard(carteADeplacer);
                                        listEmplacementSolAvecCarteVaisseau.Remove(emplacementSolJoueur);
                                        listEmplacementAtmosToujoursLibre2.Remove(emplacementAtmosJoueur);
                                    }
                                    else
                                    {
                                        listEmplacementSolAvecCarteVaisseau.Remove(emplacementSolJoueur);
                                    }
                                    break;
                                }
                            }
                        }


                        listEmplacementSolAvecCarteVaisseau.Sort((p1, p2) => p1.NumColonne.CompareTo(p2.NumColonne));
                        listEmplacementAtmosToujoursLibre.Sort((p1, p2) => p1.NumColonne.CompareTo(p2.NumColonne));
                        while (0 < listEmplacementSolAvecCarteVaisseau.Count && 0 < listEmplacementAtmosToujoursLibre.Count)
                        {
                            CarteConstructionMetierAbstract carteADeplacer = listEmplacementSolAvecCarteVaisseau [0].gameObject.GetComponentInChildren <CarteConstructionMetierAbstract> ();
                            listEmplacementAtmosToujoursLibre [0].putCard(carteADeplacer);
                            listEmplacementSolAvecCarteVaisseau.RemoveAt(0);
                            listEmplacementAtmosToujoursLibre.RemoveAt(0);
                        }
                    }
                }
            }
        }
    }
Example #10
0
    public static void launchEventAction(int idActionEvent, NetworkInstanceId netIdSourceAction, NetworkInstanceId netIdJoueurSourceAction, int idSelectionCible, NetworkInstanceId netIdEventTask)
    {
        NetworkBehaviour scriptSource = ConvertUtils.convertNetIdToScript <NetworkBehaviour> (netIdSourceAction, false);

        //TODO remplacer les -1

        if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_PIOCHE_CONSTRUCTION)
        {
            if (scriptSource is CarteConstructionMetierAbstract)
            {
                ((CarteConstructionMetierAbstract)scriptSource).CmdPiocheCard(netIdJoueurSourceAction);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_PIOCHE_AMELIORATION)
        {
            //TODO
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_POSE_CONSTRUCTION ||
                 idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_POSE_AMELIORATION ||
                 idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_STANDART ||
                 idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_LIGNE_ATTAQUE)
        {
            ISelectionnable cible = SelectionnableUtils.getSelectiobleById(idSelectionCible);

            if (null != cible && cible is IConteneurCarte && scriptSource is CarteConstructionMetierAbstract)
            {
                if (((CarteConstructionMetierAbstract)scriptSource).isDeplacable())
                {
                    EmplacementUtils.putCardFromServer((IConteneurCarte)cible, (CarteConstructionMetierAbstract)scriptSource);
                }
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_DEBUT_TOUR)
        {
            Joueur joueur = ConvertUtils.convertNetIdToScript <Joueur> (netIdJoueurSourceAction, false);
            if (null != joueur)
            {
                TourJeuSystem.getTourSystem().debutTour(joueur);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_FIN_TOUR)
        {
            Joueur joueur = ConvertUtils.convertNetIdToScript <Joueur> (netIdJoueurSourceAction, false);
            if (null != joueur)
            {
                TourJeuSystem.getTourSystem().finTour(joueur);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_ATTAQUE && scriptSource is IAttaquer)
        {
            ISelectionnable cible = SelectionnableUtils.getSelectiobleById(idSelectionCible);

            if (null != cible && cible is CarteConstructionMetierAbstract)
            {
                ((IAttaquer)scriptSource).attaqueCarte((CarteConstructionMetierAbstract)cible, netIdEventTask);
            }
            else if (null != cible && cible is CartePlaneteMetier)
            {
                ((IAttaquer)scriptSource).attaquePlanete((CartePlaneteMetier)cible, netIdEventTask);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_DEFEND && scriptSource is CarteMetierAbstract)
        {
            ISelectionnable cible = SelectionnableUtils.getSelectiobleById(idSelectionCible);

            if (null != cible && cible is CarteVaisseauMetier && scriptSource is IDefendre)
            {
                ((IDefendre)scriptSource).defenseSimultanee((CarteVaisseauMetier)cible, netIdEventTask);
            }
            else if (scriptSource is CartePlaneteMetier)
            {
                List <CarteConstructionMetierAbstract> listDefenseur = CarteUtils.getListCarteCapableDefendrePlanete(((CartePlaneteMetier)scriptSource).JoueurProprietaire);

                if (null != listDefenseur && listDefenseur.Count > 0)
                {
                    SelectionCiblesExecutionCapacite selectionCible = new SelectionCiblesExecutionCapacite(1, (CartePlaneteMetier)scriptSource, idActionEvent);

                    foreach (CarteConstructionMetierAbstract defenseur in listDefenseur)
                    {
                        selectionCible.ListIdCiblesProbables.Add(defenseur.IdISelectionnable);
                    }

                    ActionEventManager.EventActionManager.createTaskChooseTarget(selectionCible, scriptSource.netId, ((CartePlaneteMetier)scriptSource).JoueurProprietaire.netId, cible.IdISelectionnable, idActionEvent, netIdEventTask);
                }

                ActionEventManager.EventActionManager.CreateTask(scriptSource.netId, ((CartePlaneteMetier)scriptSource).JoueurProprietaire.netId, cible.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netIdEventTask, false);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_UTILISE)
        {
            //TODO
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_DESTRUCTION_CARTE && scriptSource is IVulnerable)
        {
            ((IVulnerable)scriptSource).destruction(netIdEventTask);
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_FIN_ATTAQUE)
        {
            ActionEventManager.EventActionManager.CreateTask(NetworkInstanceId.Invalid, netIdJoueurSourceAction, -1, ConstanteIdObjet.ID_CONDITION_ACTION_FIN_TOUR, NetworkInstanceId.Invalid, false);
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_GAIN_XP)
        {
            //TODO
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_INVOCATION)
        {
            //TODO
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT && scriptSource is IVulnerable)
        {
            ISelectionnable cible = SelectionnableUtils.getSelectiobleById(idSelectionCible);

            if (null != cible && cible is CarteVaisseauMetier)
            {
                ((IVulnerable)scriptSource).recevoirDegat(((CarteVaisseauMetier)cible).getPointDegat(), (CarteVaisseauMetier)cible, netIdEventTask);
            }
            else if (null != cible && cible is CarteDefenseMetier)
            {
                ((IVulnerable)scriptSource).recevoirDegat(((CarteDefenseMetier)cible).getPointDegat(), (CarteDefenseMetier)cible, netIdEventTask);
            }
            else
            {
                aucuneActionEffectuer();
            }
        }
        else if (idActionEvent == ConstanteIdObjet.ID_CONDITION_ACTION_EVOLUTION_CARTE)
        {
            //TODO
        }
        else
        {
            aucuneActionEffectuer();
        }
    }