/*****************ISelectionnable*****************/
    public override void onClick()
    {
        Joueur joueurLocal = JoueurUtils.getJoueurLocal();

        if (null != joueurLocal)
        {
            TourJeuSystem systemTour = TourJeuSystem.getTourSystem();

            //Si un joueur clique sur une carte capable d'attaquer puis sur une carte ennemie cela lance une attaque
            EventTask eventTask = EventTaskUtils.getEventTaskEnCours();
            if (systemTour.getPhase(joueurLocal.netId) == TourJeuSystem.PHASE_ATTAQUE &&
                null != joueurLocal.CarteSelectionne && joueurLocal.CarteSelectionne.JoueurProprietaire != JoueurProprietaire &&
                joueurLocal.CarteSelectionne is IAttaquer && ((IAttaquer)joueurLocal.CarteSelectionne).isCapableAttaquer() &&
                !(null != eventTask && eventTask is EventTaskChoixCible))                     //On ne peut attaquer si choix de defense en cours

            //TODO vérifier l'emplacement sol
            {
                JoueurUtils.getJoueurLocal().CmdCreateTask(joueurLocal.CarteSelectionne.netId, joueurLocal.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_ATTAQUE, NetworkInstanceId.Invalid, false);
            }
            else
            {
                base.onClick();
            }
        }
        else
        {
            base.onClick();
        }
    }
Beispiel #2
0
    public void deplacerCarte(IConteneurCarte nouveauEmplacement, NetworkInstanceId netIdNouveauPossesseur, NetworkInstanceId netIdTaskEvent)
    {
        //TODO que faire pour deplacement vers la mains
        if (isDeplacable())
        {
            if (nouveauEmplacement is EmplacementMetierAbstract)
            {
                ((EmplacementMetierAbstract)nouveauEmplacement).putCard(this, this.getConteneur() is Mains, netIdTaskEvent);
            }
            else if (nouveauEmplacement is ISelectionnable)
            {
                JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, ((ISelectionnable)nouveauEmplacement).IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_STANDART, NetworkInstanceId.Invalid, false);
            }
            else if (!isServer)
            {
                //TODO bon comportement si emplacement pa sselectionnable?
                nouveauEmplacement.putCard(this);
            }

            if (netIdNouveauPossesseur != NetworkInstanceId.Invalid && netIdNouveauPossesseur != idJoueurProprietaire)
            {
                this.idJoueurProprietaire = netIdNouveauPossesseur;
            }
        }
    }
Beispiel #3
0
    public override void onClick()
    {
        Joueur joueurLocal = JoueurUtils.getJoueurLocal();

        //Selection de la defense lors de la phase attaque adverse
        if (SelectionnableDefense && null != joueurLocal)
        {
            TourJeuSystem systemTour = TourJeuSystem.getTourSystem();

            if (systemTour.getPhase() == TourJeuSystem.PHASE_ATTAQUE &&
                systemTour.getPhase(joueurLocal.netId) == TourJeuSystem.EN_ATTENTE)
            {
                defenseSelectionne = true;
                defenduCeTour      = true;
            }
            else
            {
                base.onClick();
            }
        }
        else
        {
            base.onClick();
        }
    }
Beispiel #4
0
 public void RpcSetEtatSelectionPlayer(NetworkInstanceId netIdPlayer, int etat)
 {
     if (netIdPlayer == NetworkInstanceId.Invalid || JoueurUtils.getJoueurLocal().netId == netIdPlayer)
     {
         EtatSelectionnable = etat;
     }
 }
Beispiel #5
0
    public void sacrificeCarte()
    {
        CartePlaneteMetier cartePlanete = CartePlaneteMetier.getPlaneteEnnemie(idJoueurProprietaire);

        //TODO point de degat ou cout carte?
        cartePlanete.recevoirDegat(getPointDegat(), this, NetworkInstanceId.Invalid);
        JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, cartePlanete.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DESTRUCTION_CARTE, NetworkInstanceId.Invalid, false);           //TODO idEventTask provenance?
    }
    /***********************IVulnerable*****************/

    //Retourne PV restant
    public void recevoirAttaque(CarteMetierAbstract sourceDegat, NetworkInstanceId netdTaskEvent, bool attaqueSimultane)
    {
        bool invulnerable = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_INVULNERABLE);

        if (!invulnerable)           //TODO calcul degat
        {
            JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, sourceDegat.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netdTaskEvent, attaqueSimultane);
        }
    }
Beispiel #7
0
    /*************************Methode IDefendre********************/

    public void preDefense(CarteVaisseauMetier vaisseauAttaquant, NetworkInstanceId netIdTaskEvent)
    {
        JoueurUtils.getJoueurLocal().CmdCreateTask(vaisseauAttaquant.netId, vaisseauAttaquant.idJoueurProprietaire, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netIdTaskEvent, false);

        defenduCeTour = true;

        if (!isCapableDefendre())
        {
            this.JoueurProprietaire.CarteSelectionne = null;
            this.EtatSelectionnable = SelectionnableUtils.ETAT_NON_SELECTION;
        }
    }
Beispiel #8
0
 public void Start()
 {
     if (isServer)
     {
         idSelectionnable = ++SelectionnableUtils.sequenceSelectionnable;
         RpcInitIdSelectionnable(idSelectionnable);
     }
     else if (null == idSelectionnable || idSelectionnable <= 0)
     {
         JoueurUtils.getJoueurLocal().CmdSyncIdSelectionnableCarte(netId);
     }
 }
Beispiel #9
0
    public int recevoirDegat(int nbDegat, CarteMetierAbstract sourceDegat, NetworkInstanceId netIdEventTask)
    {
        if (null != sourceDegat && (!(sourceDegat is CarteConstructionMetierAbstract) || ((CarteConstructionMetierAbstract)sourceDegat).OnBoard))
        {
            pointVie -= nbDegat;

            if (pointVie <= 0)
            {
                JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, sourceDegat.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DESTRUCTION_CARTE, netIdEventTask, false);
            }
        }
        return(pointVie);
    }
    //Retourne PV restant
    public int recevoirDegat(int nbDegat, CarteMetierAbstract sourceDegat, NetworkInstanceId netdTaskEvent)
    {
        bool invulnerable = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_INVULNERABLE);

        if (!invulnerable && nbDegat > 0)
        {
            PV -= nbDegat;
            if (PV <= 0)
            {
                JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, sourceDegat.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DESTRUCTION_CARTE, netdTaskEvent, false);
            }
        }

        return(PV);
    }
 public void putCard(CarteMetierAbstract cartePoser, bool isNewCard, NetworkInstanceId netIdTaskEvent)
 {
     //Si c'est une nouvelle carte, on lance les capacités pour les cartes posées
     if (isNewCard)
     {
         JoueurUtils.getJoueurLocal().CmdCreateTask(cartePoser.netId, cartePoser.JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_POSE_CONSTRUCTION, netIdTaskEvent, false);
     }
     else if (this is EmplacementAttaque)
     {
         JoueurUtils.getJoueurLocal().CmdCreateTask(cartePoser.netId, cartePoser.JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_LIGNE_ATTAQUE, netIdTaskEvent, false);
     }
     else
     {
         JoueurUtils.getJoueurLocal().CmdCreateTask(cartePoser.netId, cartePoser.JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_STANDART, netIdTaskEvent, false);
     }
 }
Beispiel #12
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;
        }
    }
Beispiel #13
0
    public void attaquePlanete(CartePlaneteMetier cible, NetworkInstanceId netIdTaskEvent)
    {
        //TODO
        bool modeFurtif = 0 < CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_FURTIF);

        //Mode furtif permet d'attaquer sans déclancher de réponse
        if (modeFurtif)
        {
            JoueurUtils.getJoueurLocal().CmdCreateTask(cible.netId, JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netIdTaskEvent, false);
        }
        else
        {
            JoueurUtils.getJoueurLocal().CmdCreateTask(cible.netId, JoueurProprietaire.netId, this.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_DEFEND, netIdTaskEvent, false);
        }
        AttaqueCeTour = true;

        if (!isCapableAttaquer())
        {
            this.JoueurProprietaire.CarteSelectionne = null;
        }
    }
Beispiel #14
0
    private void RpcDisplayCapacityChoice()
    {
        if (null != JoueurUtils.getJoueurLocal() && JoueurUtils.getJoueurLocal().netId == joueur)
        {
            List <ISelectionnable> listCibleSelectionnable = new List <ISelectionnable> ();
            foreach (int idCible in selectionCibles.ListIdCiblesProbables)
            {
                ISelectionnable cible = SelectionnableUtils.getSelectiobleById(idCible);
                if (null != cible)
                {
                    cible.EtatSelectionnable = SelectionnableUtils.ETAT_SELECTIONNABLE;
                    listCibleSelectionnable.Add(cible);
                }
            }

            StartCoroutine(phaseChoixCible(listCibleSelectionnable));
        }
        else
        {
            StartCoroutine(waitOtherPlayer());
        }
    }
Beispiel #15
0
 /****************** IVulnerable **********************/
 public void recevoirAttaque(CarteMetierAbstract sourceDegat, NetworkInstanceId netIdEventTask, bool attaqueSimultane)
 {
     JoueurUtils.getJoueurLocal().CmdCreateTask(this.netId, this.idJoueurProprietaire, sourceDegat.IdISelectionnable, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netIdEventTask, attaqueSimultane);
 }
Beispiel #16
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);
                        }
                    }
                }
            }
        }
    }