private List <CapaciteDTO> getListCapaciteToCall(NetworkInstanceId netIdJoueur, NetworkInstanceId netCarteSource, int idTypActionCapacite)
    {
        List <CapaciteDTO> capaciteToCall = new List <CapaciteDTO> ();

        int valeurIncapacite = 0;

        if (null != listEffetCapacite)
        {
            foreach (CapaciteMetier capaciteCourante in listEffetCapacite)
            {
                if (capaciteCourante.isActif() && capaciteCourante.IdTypeCapacite.Equals(ConstanteIdObjet.ID_CAPACITE_ETAT_SANS_EFFET))
                {
                    valeurIncapacite = capaciteCourante.getNewValue(valeurIncapacite);
                }
            }
        }

        if (valeurIncapacite == 0)
        {
            for (int nivCapacity = 1; nivCapacity <= this.NiveauActuel; nivCapacity++)
            {
                foreach (CapaciteDTO capacite in carteRef.ListNiveau[nivCapacity - 1].Capacite)
                {
                    if (CapaciteUtils.isCapaciteCall(capacite, idTypActionCapacite, netIdJoueur == this.idJoueurProprietaire, this.netId == netCarteSource))
                    {
                        capaciteToCall.Add(capacite);
                    }
                }
            }
        }

        return(capaciteToCall);
    }
 public void destruction(NetworkInstanceId netdTaskEvent)
 {
     if (JoueurProprietaire.isServer)
     {
         CapaciteUtils.deleteEffectCapacityOfCard(this.netId);
         NetworkUtils.unassignObjectFromPlayer(GetComponent <NetworkIdentity> (), JoueurProprietaire.GetComponent <NetworkIdentity> (), -1);
         JoueurProprietaire.CimetiereConstruction.addCarte(this);
     }
 }
    /***********************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 #4
0
    public bool isCapableDefendre()
    {
        IConteneurCarte conteneur = getConteneur();
        bool            result    = conteneur is EmplacementSolMetier && 0 <= CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_DESARME);

        if (defenduCeTour)
        {
            result = false;
        }
        return(result);
    }
    public void useEndTurnCapacity(NetworkInstanceId netIdJoueur, NetworkInstanceId netIdTaskEvent)
    {
        if (this.getConteneur() is EmplacementMetierAbstract)
        {
            List <CapaciteDTO> capaciteEndTurn = getListCapaciteToCall(netIdJoueur, netId, ConstanteIdObjet.ID_CONDITION_ACTION_FIN_TOUR);

            foreach (CapaciteDTO capacite in capaciteEndTurn)
            {
                CapaciteUtils.callCapacite(this, null, null, capacite, netIdJoueur, ConstanteIdObjet.ID_CONDITION_ACTION_FIN_TOUR, netIdTaskEvent);
            }
        }
    }
    public void useRecoitDegatCapacity(NetworkInstanceId netIdJoueur, CarteMetierAbstract carteSourceAction, ISelectionnable cible, NetworkInstanceId netIdTaskEvent)
    {
        if (this.getConteneur() is EmplacementMetierAbstract)
        {
            List <CapaciteDTO> capaciteDegatRecu = getListCapaciteToCall(netIdJoueur, carteSourceAction.netId, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT);

            foreach (CapaciteDTO capacite in capaciteDegatRecu)
            {
                CapaciteUtils.callCapacite(this, carteSourceAction, cible, capacite, netIdJoueur, ConstanteIdObjet.ID_CONDITION_ACTION_RECOIT_DEGAT, netIdTaskEvent);
            }
        }
    }
Beispiel #7
0
    public bool isCapableAttaquer()
    {
        bool capableDAttaquer = false;

        if (!AttaqueCeTour)
        {
            //TODO de verification de la position
            capableDAttaquer = 0 >= CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_DESARME);
        }

        return(capableDAttaquer);
    }
    public int getCoutMetal(int numLvl)
    {
        int coutMetal = 0;

        //La construction n'est pas au niveau maximum
        if (numLvl < carteRef.ListNiveau.Count)
        {
            //cout du prochain niveau
            coutMetal = CapaciteUtils.valeurAvecCapacite(carteRef.ListNiveau [numLvl].Cout, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_MODIF_COUT_CONSTRUCTION);
        }

        return(coutMetal);
    }
Beispiel #9
0
    public void CmdExecuteCapacity(int[] listCibleProbable, NetworkInstanceId netIdEventTask)
    {
        EventTaskChoixCible eventSource = ConvertUtils.convertNetIdToScript <EventTaskChoixCible>(netIdEventTask, false);

        eventSource.SelectionCibles.ListIdCiblesProbables.Clear();
        eventSource.SelectionCibles.ListIdCiblesProbables.AddRange(listCibleProbable);

        //TODO modifier
        CapaciteUtils.executeCapacity(eventSource.SelectionCibles, netIdEventTask);
        //TODO display capa

        eventSource.endOfTask();
    }
    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);
            }
        }
    }
    //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);
    }
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 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);
                }
            }
        }
    }
    public void useDeplacementCapacity(NetworkInstanceId netIdJoueur, CarteMetierAbstract carteSourceAction, ISelectionnable cible, NetworkInstanceId netIdTaskEvent)
    {
        if (cible is EmplacementAttaque && this.getConteneur() is EmplacementMetierAbstract)
        {
            List <CapaciteDTO> capaciteDeplacementAttaque = getListCapaciteToCall(netIdJoueur, carteSourceAction.netId, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_LIGNE_ATTAQUE);

            foreach (CapaciteDTO capacite in capaciteDeplacementAttaque)
            {
                CapaciteUtils.callCapacite(this, carteSourceAction, cible, capacite, netIdJoueur, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_LIGNE_ATTAQUE, netIdTaskEvent);
            }
        }
        else if (cible is EmplacementMetierAbstract)
        {
            List <CapaciteDTO> capaciteDeplacementAttaque = getListCapaciteToCall(netIdJoueur, carteSourceAction.netId, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_STANDART);

            foreach (CapaciteDTO capacite in capaciteDeplacementAttaque)
            {
                CapaciteUtils.callCapacite(this, carteSourceAction, cible, capacite, netIdJoueur, ConstanteIdObjet.ID_CONDITION_ACTION_DEPLACEMENT_STANDART, netIdTaskEvent);
            }
        }
    }
Beispiel #15
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 #16
0
    public void finTour(Joueur joueurTour)
    {
        GameObject goBtnLastPlayer = NetworkServer.FindLocalObject(listJoueurs [indexPlayerPlaying].netIdBtnTour);

        if (null != goBtnLastPlayer && null != goBtnLastPlayer.GetComponent <BoutonTour> ())
        {
            BoutonTour boutonTour = goBtnLastPlayer.GetComponent <BoutonTour> ();

            if (boutonTour.getEtatBouton() == BoutonTour.enumEtatBouton.terminerTour)
            {
                boutonTour.setEtatBoutonServer(BoutonTour.enumEtatBouton.enAttente);

                CapaciteUtils.endOfTurnOfCapacityPlayer(listJoueurs [indexPlayerPlaying].netIdJoueur);

                bool tourSupJoueur = 0 < CapaciteUtils.valeurAvecCapacite(0, joueurTour.CartePlaneteJoueur.containCapacityOfType(ConstanteIdObjet.ID_CAPACITE_PERTE_TOUR_JEU), ConstanteIdObjet.ID_CAPACITE_PERTE_TOUR_JEU);

                if (!tourSupJoueur)                   //Pas de tour supplementaire

                {
                    if (indexPlayerPlaying < listJoueurs.Count - 1)
                    {
                        indexPlayerPlaying++;
                    }
                    else
                    {
                        indexPlayerPlaying = 0;
                        nbTurn++;
                    }

                    this.idJoueurTour = listJoueurs [indexPlayerPlaying].netIdJoueur;
                    joueurTour        = JoueurUtils.getJoueur(listJoueurs [indexPlayerPlaying].netIdJoueur);
                }

                RpcAffichagePseudo(listJoueurs [indexPlayerPlaying].Pseudo);

                ActionEventManager.EventActionManager.CreateTask(NetworkInstanceId.Invalid, joueurTour.netId, -1, ConstanteIdObjet.ID_CONDITION_ACTION_DEBUT_TOUR, NetworkInstanceId.Invalid, false);
            }
        }
    }
Beispiel #17
0
    public void debutTour(Joueur joueurTour)
    {
        bool perteTour = 0 > CapaciteUtils.valeurAvecCapacite(0, joueurTour.CartePlaneteJoueur.containCapacityOfType(ConstanteIdObjet.ID_CAPACITE_PERTE_TOUR_JEU), ConstanteIdObjet.ID_CAPACITE_PERTE_TOUR_JEU);

        initTour(joueurTour);

        if (perteTour)          //Perte de tour
        {
            progressStepServer(FIN_TOUR);
        }
        else
        {
            phase++;
            GameObject goBtnNewPlayer = NetworkServer.FindLocalObject(listJoueurs [indexPlayerPlaying].netIdBtnTour);

            if (null != goBtnNewPlayer && null != goBtnNewPlayer.GetComponent <BoutonTour> ())
            {
                BoutonTour boutonTour = goBtnNewPlayer.GetComponent <BoutonTour> ();
                boutonTour.setEtatBoutonServer(BoutonTour.enumEtatBouton.terminerTour);
            }
        }
    }
 public int getPVMax()
 {
     return(CapaciteUtils.valeurAvecCapacite(carteRef.PointVieMax, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_MODIF_PV_MAX));
 }
Beispiel #19
0
 public bool isDeplacable()
 {
     return(0 >= CapaciteUtils.valeurAvecCapacite(0, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_ETAT_IMMOBILE));
 }
Beispiel #20
0
 public int getPointAttaque()
 {
     return(CapaciteUtils.valeurAvecCapacite(carteRef.PointAttaque, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_MODIF_POINT_ATTAQUE));
 }
Beispiel #21
0
 public int getConsomationCarburant()
 {
     return(CapaciteUtils.valeurAvecCapacite(carteRef.ConsommationCarburant, listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_MODIF_CONSOMATION_CARBURANT));
 }
Beispiel #22
0
 public int getPointDegat()
 {
     return(CapaciteUtils.valeurAvecCapacite(getPointAttaque(), listEffetCapacite, ConstanteIdObjet.ID_CAPACITE_MODIF_DEGAT_INFLIGE));;
 }