Ejemplo n.º 1
0
        public override List <MobSpawn> ChooseSpawns(IRandom rand)
        {
            List <MobSpawn> chosenSpawns = new List <MobSpawn>();

            if (!TeamSizes.CanPick)
            {
                return(chosenSpawns);
            }
            int teamSize = TeamSizes.Pick(rand);

            bool selectedLeader     = false;
            bool selectedNonSupport = false;

            //pick first team member
            SpawnList <TeamMemberSpawn> eligibleSpawns = new SpawnList <TeamMemberSpawn>();

            for (int ii = 0; ii < Spawns.Count; ii++)
            {
                TeamMemberSpawn spawn = Spawns.GetSpawn(ii);
                bool            add   = false;
                switch (spawn.Role)
                {
                case TeamMemberSpawn.MemberRole.Normal:
                case TeamMemberSpawn.MemberRole.Leader:
                    add = true;
                    break;

                case TeamMemberSpawn.MemberRole.Support:
                    add = (teamSize > 1);
                    break;

                case TeamMemberSpawn.MemberRole.Loner:
                    add = (teamSize == 1);
                    break;
                }
                if (add)
                {
                    eligibleSpawns.Add(spawn, Spawns.GetSpawnRate(ii));
                }
            }

            if (!eligibleSpawns.CanPick)
            {
                return(chosenSpawns);
            }
            TeamMemberSpawn chosenSpawn = eligibleSpawns.Pick(rand);

            if (chosenSpawn.Role == TeamMemberSpawn.MemberRole.Leader)
            {
                selectedLeader = true;
            }
            if (chosenSpawn.Role != TeamMemberSpawn.MemberRole.Support)
            {
                selectedNonSupport = true;
            }

            chosenSpawns.Add(chosenSpawn.Spawn);

            //pick remaining team members
            for (int jj = 1; jj < teamSize; jj++)
            {
                eligibleSpawns.Clear();

                for (int ii = 0; ii < Spawns.Count; ii++)
                {
                    TeamMemberSpawn spawn = Spawns.GetSpawn(ii);
                    bool            add   = false;
                    switch (spawn.Role)
                    {
                    case TeamMemberSpawn.MemberRole.Normal:
                        add = true;
                        break;

                    case TeamMemberSpawn.MemberRole.Leader:
                        add = !selectedLeader;
                        break;

                    case TeamMemberSpawn.MemberRole.Support:
                        add = selectedNonSupport;
                        break;
                    }
                    if (add)
                    {
                        eligibleSpawns.Add(spawn, Spawns.GetSpawnRate(ii));
                    }
                }

                if (!eligibleSpawns.CanPick)
                {
                    return(chosenSpawns);
                }
                chosenSpawn = eligibleSpawns.Pick(rand);
                if (chosenSpawn.Role == TeamMemberSpawn.MemberRole.Leader)
                {
                    selectedLeader = true;
                }
                if (chosenSpawn.Role != TeamMemberSpawn.MemberRole.Support)
                {
                    selectedNonSupport = true;
                }

                chosenSpawns.Add(chosenSpawn.Spawn);
            }

            return(chosenSpawns);
        }
Ejemplo n.º 2
0
 public TeamMemberSpawn(TeamMemberSpawn other)
 {
     Spawn = other.Spawn.Copy();
     Role  = other.Role;
 }