예제 #1
0
    public void createTaskChooseTarget(SelectionCiblesExecutionCapacite selectionCibles, NetworkInstanceId netIdSourceAction, NetworkInstanceId netIdJoueurSourceAction, int idSelectionCible, int typeAction, NetworkInstanceId netIdParentTask)
    {
        if (isServer)
        {
            GameObject eventTaskChooseTargetGO = Instantiate <GameObject> (ConstanteInGame.eventTaskChooseTargetPrefab);

            GameObject eventParnetTaskGO;
            if (netIdParentTask == NetworkInstanceId.Invalid)
            {
                eventParnetTaskGO = GameObject.Find(ConstanteInGame.strSystemActionEvent);
            }
            else
            {
                eventParnetTaskGO = NetworkServer.FindLocalObject(netIdParentTask);
            }

            eventTaskChooseTargetGO.transform.SetParent(eventParnetTaskGO.transform);

            EventTaskChoixCible eventTask = eventTaskChooseTargetGO.GetComponent <EventTaskChoixCible> ();
            eventTask.initVariable(netIdSourceAction, netIdJoueurSourceAction, idSelectionCible, typeAction, false);

            NetworkServer.Spawn(eventTaskChooseTargetGO);

            eventTask.SelectionCibles = selectionCibles;
        }
        else
        {
            print("Create TaskChooseTarget call on client");
        }
    }
예제 #2
0
    public static void callCapacite(CarteMetierAbstract carteSourceCapacite, CarteMetierAbstract carteSourceAction, ISelectionnable cible, CapaciteDTO capaciteSource, NetworkInstanceId netIdJoueur, int actionAppelante, NetworkInstanceId netIdEventTaskAction)
    {
        SelectionCiblesExecutionCapacite selectionCiblesResult = getCiblesOfCapacity(carteSourceCapacite, carteSourceAction, cible, capaciteSource, netIdJoueur, actionAppelante);
        int idSelection = null != cible ? cible.IdISelectionnable : -1;

        ActionEventManager.EventActionManager.createTaskChooseTarget(selectionCiblesResult, carteSourceAction.netId, netIdJoueur, idSelection, actionAppelante, netIdEventTaskAction);
    }
예제 #3
0
    private static SelectionCiblesExecutionCapacite getCiblesOfCapacity(CarteMetierAbstract carteSourceCapacite, CarteMetierAbstract carteSourceAction, ISelectionnable cible, CapaciteDTO capaciteSource, NetworkInstanceId netIdJoueur, int actionAppelante)
    {
        SelectionCiblesExecutionCapacite selectionCiblesResult;

        CapaciteDTO capacite = capaciteSource.Clone();

        if (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_ACTION_HASARD)
        {
            capacite.Capacite = Random.Range(1, 40);
        }


        if (ConditionCarteUtils.listIdCapacitePourCarte.Contains(capacite.Capacite) && (null == cible || cible is CarteMetierAbstract))
        {
            List <CarteMetierAbstract> cartesCible = getCartesCible(carteSourceCapacite, (CarteMetierAbstract)cible, capacite, netIdJoueur);
            //TODO use ConstanteIdObjet.ID_CAPACITE_CONDITION
            selectionCiblesResult = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);

            foreach (CarteMetierAbstract cibleProbable in cartesCible)
            {
                selectionCiblesResult.ListIdCiblesProbables.Add(cibleProbable.IdISelectionnable);
            }
        }
        else
        {
            selectionCiblesResult = findCiblesHorsCarte(capacite, carteSourceCapacite, carteSourceAction, netIdJoueur, NetworkInstanceId.Invalid /*TODO cible.netIdJoueurCible*/, actionAppelante);
        }

        return(selectionCiblesResult);
    }
예제 #4
0
    public static void executeCapacity(SelectionCiblesExecutionCapacite selectionCiblesResult, NetworkInstanceId netIdTaskEvent)
    {
        Joueur      joueurSource = JoueurUtils.getJoueur(selectionCiblesResult.IdJoueurCarteSource);
        CapaciteDTO capacite;

        if (ActionEventManager.capacityInUse.TryGetValue(selectionCiblesResult.IdCapaciteSource, out capacite))
        {
            foreach (int idCible in selectionCiblesResult.ListIdCiblesProbables)
            {
                ISelectionnable cibleSelectionne = SelectionnableUtils.getSelectiobleById(idCible);

                if (listIdCapaciteEffetImmediat.Contains(selectionCiblesResult.IdTypeCapacite))
                {
                    if (cibleSelectionne is CarteMetierAbstract)
                    {
                        traitementCapaciteImmediateCarte((CarteMetierAbstract)cibleSelectionne, capacite, joueurSource, netIdTaskEvent);
                    }
                    else
                    {
                        //TODO traitement capacite immediate autre
                    }
                }
                else if (null != selectionCiblesResult.ListIdRessouceCible && cibleSelectionne is IAvecCapacite)
                {
                    List <RessourceMetier> listRessouceCible = new List <RessourceMetier> ();

                    foreach (int idRessourceCible in selectionCiblesResult.ListIdRessouceCible)
                    {
                        ISelectionnable ressourceCible = SelectionnableUtils.getSelectiobleById(idRessourceCible);
                        if (null != ressourceCible && ressourceCible is RessourceMetier)
                        {
                            listRessouceCible.Add((RessourceMetier)ressourceCible);
                        }
                    }
                    //TODO faire le trie ressource ou non
                    traitementCapaciteRessource(capacite, listRessouceCible, (IAvecCapacite)cibleSelectionne, joueurSource, selectionCiblesResult.IdCarteSource);
                    foreach (RessourceMetier ressourceCible in listRessouceCible)
                    {
                        ressourceCible.synchroniseListCapacite();
                    }
                }
                else if (cibleSelectionne is IAvecCapacite)
                {
                    //TODO faire le trie ressource ou non
                    traitementAutreCible((IAvecCapacite)cibleSelectionne, capacite, selectionCiblesResult.IdCarteSource);
                    ((IAvecCapacite)cibleSelectionne).synchroniseListCapacite();
                }
            }

            //Fin d'utilisation de la capacite
            ActionEventManager.capacityInUse.Remove(selectionCiblesResult.IdCapaciteSource);
        }
        else
        {
            //TODO capacite not found
        }
    }
예제 #5
0
    private static SelectionCiblesExecutionCapacite findCiblesHorsCarte(CapaciteDTO capacite, CarteMetierAbstract carteSourceCapacite, CarteMetierAbstract carteSourceAction, NetworkInstanceId netIdJoueurAction, NetworkInstanceId netIdJoueurCible, int actionAppelante)
    {
        SelectionCiblesExecutionCapacite selectionCible;

        if (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_PRODUCTION_RESSOURCE ||
            capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_PRODUCTION_RESSOURCE ||
            (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_VOL_RESSOURCE && null != carteSourceCapacite && null != carteSourceCapacite.JoueurProprietaire) ||
            capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_TYPE_RESSOURCE)
        {
            selectionCible = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);

            List <RessourceMetier> ressourcesCible = getRessourceMetierCible(capacite.ConditionsEmplacement, netIdJoueurAction, netIdJoueurCible, carteSourceCapacite);
            selectionCible.initModeRessourceCapa(ressourcesCible);

            if (capacite.NbCible == 1 && !capacite.ChoixCible &&
                (actionAppelante == ConstanteIdObjet.ID_CONDITION_ACTION_DESTRUCTION_CARTE || actionAppelante == ConstanteIdObjet.ID_CONDITION_ACTION_INVOCATION) &&
                isCardCibleCapacity(carteSourceAction, capacite.ConditionsCible, netIdJoueurAction))
            {
                selectionCible.ListIdCiblesProbables.Add(carteSourceAction.IdISelectionnable);
                //TODO prise en compte appel unique
            }
            else
            {
                HashSet <ISelectionnable> provenanceRessource = getRessourceProvenanceCible(capacite, netIdJoueurAction, netIdJoueurCible, carteSourceCapacite);
                foreach (ISelectionnable cibleProbable in provenanceRessource)
                {
                    selectionCible.ListIdCiblesProbables.Add(cibleProbable.IdISelectionnable);
                }
            }
        }
        else if (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_NB_CARTE_PIOCHE)
        {
            selectionCible = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);

            List <DeckMetierAbstract> decksCible = getDecksCibles(capacite, netIdJoueurAction, netIdJoueurCible, carteSourceCapacite);
            foreach (DeckMetierAbstract cibleProbable in decksCible)
            {
                selectionCible.ListIdCiblesProbables.Add(cibleProbable.IdISelectionnable);
            }
        }
        else if (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_PERTE_TOUR_JEU || capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_DISSIMULER_PLATEAU)
        {
            HashSet <Joueur> joueursCible = new HashSet <Joueur> ();
            selectionCible = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);

            foreach (string conditionCible in capacite.ConditionsCible)
            {
                joueursCible.UnionWith(getJoueursCible(conditionCible, netIdJoueurAction, netIdJoueurCible, carteSourceCapacite));
            }

            foreach (Joueur joueurCible in joueursCible)
            {
                if (!(capacite.AppelUnique && joueurCible.CartePlaneteJoueur.containCapacityWithId(capacite.Id)))
                {
                    selectionCible.ListIdCiblesProbables.Add(joueurCible.CartePlaneteJoueur.IdISelectionnable);
                }
            }
        }
        else if (capacite.Capacite == ConstanteIdObjet.ID_CAPACITE_MODIF_NB_PLACE_PLATEAU)
        {
            //TODO a modifier quelle est la cible (emplacement, plateau, ?)
            selectionCible = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);
        }
        else
        {
            //TODO a modifier
            selectionCible = new SelectionCiblesExecutionCapacite(capacite, carteSourceCapacite, actionAppelante);
        }

        return(selectionCible);
    }
예제 #6
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();
        }
    }