Esempio n. 1
0
        public MyMwcObjectBuilder_FactionEnum ChooseFaction(MyMwcObjectBuilder_FactionEnum preferredFaction = MyMwcObjectBuilder_FactionEnum.None)
        {
            if (IsStory())
            {
                Debug.Assert(IsHost);
                return(MySession.Static.Player.Faction);
            }
            else
            {
                m_factions.Clear();

                foreach (var k in m_respawnPoints)
                {
                    m_factions[k.Key] = 0;
                }

                foreach (var p in Peers.Players)
                {
                    if (m_factions.ContainsKey((int)p.Faction))
                    {
                        m_factions[(int)p.Faction]++;
                    }
                }
                if (m_factions.ContainsKey((int)MySession.Static.Player.Faction))
                {
                    m_factions[(int)MySession.Static.Player.Faction]++;
                }

                m_possibleFactionCache.Clear();

                int minFactionCount = int.MaxValue;
                foreach (var f in m_factions)
                {
                    if (f.Value < minFactionCount)
                    {
                        m_possibleFactionCache.Clear();
                        m_possibleFactionCache.Add(f.Key);
                        minFactionCount = f.Value;
                    }
                    else if (f.Value == minFactionCount)
                    {
                        m_possibleFactionCache.Add(f.Key);
                    }
                }

                if (m_possibleFactionCache.Contains((int)preferredFaction))
                {
                    return(preferredFaction);
                }
                else if (m_possibleFactionCache.Count > 0)
                {
                    return((MyMwcObjectBuilder_FactionEnum)MyMwcUtils.GetRandomItem(m_possibleFactionCache));
                }
                else
                {
                    return(MyMwcObjectBuilder_FactionEnum.Euroamerican); // Default faction
                }
            }
        }