Esempio n. 1
0
    private GameObject MakeTile(TileType type, int index)
    {
        GameObject prefab = m_factory.GetPrefabForType(type);
        GameObject newObj = Instantiate(prefab, transform);

        m_grid[index] = newObj;

        int row;
        int column;

        GetRowAndColumnFromIndex(index, out row, out column);

        var buffer = new StringBuilder();

        buffer.Append(row);
        buffer.Append("_");
        buffer.Append(column);
        newObj.name = buffer.ToString();

        Node.Make(newObj, this, index, type);
        ReplaceNode.Make(newObj, this);
        GridPosition.Make(newObj, this, row, column);

        return(newObj);
    }
Esempio n. 2
0
 private void Awake()
 {
     m_replaceTile = target as ReplaceNode;
 }
Esempio n. 3
0
        public static PossibleSwap Create(String membreId)
        {
            PossibleSwap cp = new PossibleSwap();

            //On recupere complètement les données nécessaires
            cp.Member = KTContext.Db.Members.Where(m => m.Id == membreId)
                        .Include(m => m.Team)
                        .Include(m => m.MemberWarGearOptions)
                        .Include(m => m.MemberWeapons)
                        .Include(m => m.ModelProfile.CostOverrides)
                        .Include(m => m.ModelProfile.WarGearOptions)
                        .Include(m => m.ModelProfile.Model.WarGearOptions)
                        .Include(m => m.ModelProfile.Model.ModelWeapons)
                        .ThenInclude(sn => sn.Weapon)
                        .Include(m => m.ModelProfile.ModelProfileWeapons)
                        .ThenInclude(sn => sn.Weapon)
                        .AsNoTracking()
                        .First();

            List <CostOverride> costOverrides = cp.Member.ModelProfile.CostOverrides.ToList();
            List <Weapon>       baseWeapon    = cp.Member.GetDefaultWeapons();

            //Configuration de base
            WarGearCombination combination = new WarGearCombination()
            {
                Weapons = baseWeapon
            };

            cp.WarGearCombinations.Add(combination);


            //On passe toutes les modifs sans exclusions
            ICollection <WarGearOption> remplPossibles = cp.Member.ModelProfile.GetAllWarGearOptions();

            foreach (WarGearOption remplacement in remplPossibles.Where(r => String.IsNullOrWhiteSpace(r.Exclusion)))
            {
                //Remplacement limité en nombre
                if (remplacement.MaximumPerTeam > 0 && !cp.Member.Team.Roster)
                {
                    int nbUsed = KTContext.Db.MemberWarGearOptions.Count(mr => mr.Member.TeamId == cp.Member.TeamId && mr.MemberId != cp.Member.Id && mr.WarGearOptionId == remplacement.Id);
                    if (nbUsed >= remplacement.MaximumPerTeam)
                    {
                        continue;
                    }
                }

                if (remplacement.IsOption())
                {
                    List <WarGearCombination> lc = new List <WarGearCombination>();
                    lc.Add(new WarGearCombination());
                    Weapon             arme = new ReplaceNode().Evaluate(lc, remplacement.Operation).First().Weapons.First();
                    WarGearCombination cf   = new WarGearCombination();
                    cf.CostOverrides = costOverrides;
                    cf.Weapons.Add(arme);
                    cf.WarGearOption.Add(remplacement);
                    cf.Selected = cp.Member.MemberWarGearOptions.Any(mr => mr.WarGearOptionId == remplacement.Id);
                    cp.OptionalWeapons.Add(cf);
                }
                else
                {
                    List <WarGearCombination> confs = new ReplaceNode().Evaluate(cp.WarGearCombinations, remplacement.Operation);
                    confs.ForEach(c => c.Weapons = c.Weapons.Where(a => a != null).ToList());
                    AddRemplacement(confs, remplacement);
                    cp.WarGearCombinations.AddRange(confs);
                }
            }

            //On copie les configurations simples
            List <WarGearCombination> confSimples = new List <WarGearCombination>();

            confSimples.AddRange(cp.WarGearCombinations);

            //puis on passe tous ceux avec exclusion l'un après l'autre
            foreach (WarGearOption remplacement in remplPossibles.Where(r => !String.IsNullOrWhiteSpace(r.Exclusion)))
            {
                //Remplacement limité en nombre
                if (remplacement.MaximumPerTeam > 0 && !cp.Member.Team.Roster)
                {
                    int nbUsed = KTContext.Db.MemberWarGearOptions.Count(mr => mr.Member.TeamId == cp.Member.TeamId && mr.MemberId != cp.Member.Id && mr.WarGearOptionId == remplacement.Id);
                    if (nbUsed >= remplacement.MaximumPerTeam)
                    {
                        continue;
                    }
                }

                List <WarGearCombination> confs = new ReplaceNode().Evaluate(confSimples, remplacement.Operation);
                AddRemplacement(confs, remplacement);
                cp.WarGearCombinations.AddRange(confs);
            }

            cp.ExtractArmesCommunes();

            //Marque les remplacements utilisés précédement
            foreach (WarGearCombination configuration in cp.WarGearCombinations)
            {
                //C'est la bonne configuration si toutes les armes et tous les remplacements sont présents
                configuration.Selected = true;
                foreach (WarGearOption remplacement in configuration.WarGearOption)
                {
                    configuration.Selected      = configuration.Selected && cp.Member.MemberWarGearOptions.Any(mr => mr.WarGearOptionId == remplacement.Id);
                    configuration.CostOverrides = costOverrides;
                }
                foreach (Weapon arme in configuration.Weapons)
                {
                    configuration.Selected      = configuration.Selected && cp.Member.MemberWeapons.Any(mr => mr.WeaponId == arme.Id);
                    configuration.CostOverrides = costOverrides;
                }
            }
            List <WarGearCombination> configurations = new List <WarGearCombination>();

            configurations.AddRange(cp.WarGearCombinations);
            foreach (WarGearCombination configuration in configurations)
            {
                var configs = cp.WarGearCombinations.Where(c => c.Weapons.Select(a => a.Id).OrderBy(id => id).SequenceEqual(configuration.Weapons.Select(a => a.Id).OrderBy(id => id))).Skip(1).ToList();
                foreach (WarGearCombination c in configs)
                {
                    cp.WarGearCombinations.Remove(c);
                }
            }

            var configSelected = cp.WarGearCombinations.Where(c => c.Selected);

            if (configSelected.Count() > 1 && configSelected.SelectMany(c => c.Weapons).Select(a => a.Id).Distinct().Count() == 1)
            {
                configSelected.OrderByDescending(c => c.Weapons.Count()).Skip(1).ForEach(c => c.Selected = false);
            }

            if (configSelected.Count() > 1)
            {
                configSelected.Where(c => c.Weapons.Count != c.Weapons.Select(a => a.Id).Distinct().Count()).ForEach(c => c.Selected = false);
                configSelected.OrderByDescending(c => c.Weapons.Count).Skip(1).ForEach(c => c.Selected = false);
            }

            return(cp);
        }