public void RandomizeAreaSpriteGroups(SpriteGroupCollection spriteGroups)
        {
            // TODO: this needs to be updated???

            foreach (var a in OverworldAreas.Where(x => OverworldAreaConstants.DoNotRandomizeAreas.Contains(x.AreaId) == false))
            {
                List <SpriteRequirement> doNotUpdateSprites = spriteRequirementCollection
                                                              .DoNotRandomizeSprites
                                                              .Where(x => //x.CanSpawnInRoom(a)
                                                                          //&&
                                                                     a.Sprites.Select(y => y.SpriteId).ToList().Contains(x.SpriteId)
                                                                     )
                                                              .ToList();

                var possibleSpriteGroups = spriteGroups.GetPossibleOverworldSpriteGroups(doNotUpdateSprites).ToList();

                //Debug.Assert(possibleSpriteGroups.Count > 0);

                a.GraphicsBlockId = (byte)possibleSpriteGroups[rand.Next(possibleSpriteGroups.Count)].GroupId;
            }

            OverworldGroupRequirementCollection owReqs = new OverworldGroupRequirementCollection();

            // force any areas we need to
            foreach (var sg in owReqs.OverworldRequirements)
            {
                foreach (var forcedR in OverworldAreas.Where(x => sg.Areas.Contains(x.AreaId)))
                {
                    forcedR.GraphicsBlockId = (byte)sg.GroupId;
                }
            }
        }
Ejemplo n.º 2
0
        public void SetupRequiredOverworldGroups()
        {
            OverworldGroupRequirementCollection owReqs = new OverworldGroupRequirementCollection();

            var rGroup = owReqs.OverworldRequirements.Where(x => x.GroupId != null);

            foreach (var g in rGroup)
            {
                UsableOverworldSpriteGroups.Where(x => g.GroupId == x.GroupId).ToList()
                .ForEach((x) =>
                {
                    if (g.Subgroup0 == null && g.Subgroup1 == null && g.Subgroup2 == null && g.Subgroup3 == null)
                    {
                        // lazy
                        x.PreserveSubGroup0 = true;
                        x.PreserveSubGroup1 = true;
                        x.PreserveSubGroup2 = true;
                        x.PreserveSubGroup3 = true;
                    }

                    if (g.Subgroup0 != null)
                    {
                        x.SubGroup0         = (int)(g.Subgroup0 ?? x.SubGroup0);
                        x.PreserveSubGroup0 = true;
                    }
                    if (g.Subgroup1 != null)
                    {
                        x.SubGroup1         = (int)(g.Subgroup1 ?? x.SubGroup1);
                        x.PreserveSubGroup1 = true;
                    }
                    if (g.Subgroup2 != null)
                    {
                        x.SubGroup2         = (int)(g.Subgroup2 ?? x.SubGroup2);
                        x.PreserveSubGroup2 = true;
                    }
                    if (g.Subgroup3 != null)
                    {
                        x.SubGroup3         = (int)(g.Subgroup3 ?? x.SubGroup3);
                        x.PreserveSubGroup3 = true;
                    }
                    //if (g.GroupId != null)
                    //{
                    //    x.ForceRoomsToGroup.AddRange(g.Rooms);
                    //}
                });
            }
        }