public List <NetworkPlayer> GetDirtiesPlayers()
    {
        List <NetworkPlayer> awarded = new List <NetworkPlayer>();
        float dirtValue = 0;

        for (int i = 0; i < Segments.Length; i++)
        {
            TableSegment  current = Segments[i];
            NetworkPlayer player  = _slotter.GetPlayer(current);

            if (player == null)
            {
                continue;
            }

            float value = current.GetDisgustingValue();

            if (value > dirtValue)
            {
                dirtValue = value;
                awarded.Clear();

                awarded.Add(player);
            }
            else if (value == dirtValue)
            {
                awarded.Add(player);
            }
        }

        return(awarded);
    }
    public TableSegment GetDirtiestSegment(bool playerRequired)
    {
        int   _dirtIndex = -1;
        float _dirt      = 0;

        for (int i = 0; i < Segments.Length; i++)
        {
            TableSegment current = Segments[i];

            NetworkPlayer player = _slotter.GetPlayer(current.GetSlot());
            if (playerRequired && player == null)
            {
                continue;
            }

            float disgustingValue = current.GetDisgustingValue();
            if (disgustingValue > 0)
            {
                _dirt = disgustingValue;
                _dirt = i;
            }
        }

        if (_dirtIndex < 0)
        {
            return(null);
        }

        return(Segments[_dirtIndex]);
    }
    public TableSegment GetSegment(NetworkPlayer player)
    {
        for (int i = 0; i < Segments.Length; i++)
        {
            TableSegment current = Segments[i];

            PlayerSlot currentSlot = current.GetSlot();

            if (_slotter == null)
            {
                _slotter = PlayerSlotter.Singleton();
            }

            NetworkPlayer currentPlayer = _slotter.GetPlayer(currentSlot);

            if (currentPlayer == null)
            {
                continue;
            }

            if (currentPlayer == player)
            {
                return(current);
            }
        }

        return(null);
    }
        private void DeserializeProperty(EndianBinaryReader reader, object declaringObj, PropertyInfo property)
        {
            var    propertyType  = property.PropertyType;
            object propertyValue = null;

            if (propertyType == typeof(TableSegment))
            {
                propertyValue = new TableSegment(((MemoryStream)reader.BaseStream).ToArray());
            }
            else if (propertyType.IsArray)
            {
                var fixedLengthAttrib = property.GetCustomAttribute <FixedArrayLengthAttribute>();
                if (fixedLengthAttrib == null)
                {
                    throw new Exception();
                }

                if (propertyType == typeof(string[]))
                {
                    var fixedStrLengthAttrib = property.GetCustomAttribute <FixedStringLengthAttribute>();
                    if (fixedStrLengthAttrib == null)
                    {
                        throw new Exception();
                    }

                    string[] strings = new string[fixedLengthAttrib.Length];

                    for (int i = 0; i < strings.Length; i++)
                    {
                        unsafe
                        {
                            fixed(sbyte *pBytes = (sbyte[])DeserializeArray(reader, fixedStrLengthAttrib.Length, typeof(sbyte)))
                            {
                                strings[i] = new string(pBytes);
                            }
                        }
                    }

                    propertyValue = strings;
                }
                else
                {
                    propertyValue = DeserializeArray(reader, fixedLengthAttrib.Length, propertyType.GetElementType());
                }
            }
            else
            {
                propertyValue = DeserializeType(reader, propertyType);
            }

            property.SetValue(declaringObj, propertyValue);
        }
    void ResetAwards()
    {
        for (int i = 0; i < _segmentCollection.Count; i++)
        {
            TableSegment current = _segmentCollection[i];

            NetworkPlayer player = _slotter.GetPlayer(current);

            if (player != null)
            {
                player.ResetAwards();
            }
        }
    }
    List <NetworkPlayer> GetMostEatenPlayers()
    {
        List <NetworkPlayer> awarded = new List <NetworkPlayer>();

        int mostAmount = 0;

        for (int i = 0; i < _objectives.Count; i++)
        {
            TableSegment segment = _segmentCollection[i];
            Objective    current = _objectives[segment];

            if (!current.HasEaten())
            {
                continue;
            }

            if (current.Progress > mostAmount)
            {
                mostAmount = current.Progress;
                awarded.Clear();

                NetworkPlayer player = _slotter.GetPlayer(segment);

                if (player != null)
                {
                    awarded.Add(player);
                }
            }
            else if (current.Progress == mostAmount)
            {
                NetworkPlayer player = _slotter.GetPlayer(segment);

                if (player != null)
                {
                    awarded.Add(player);
                }
            }
        }

        return(awarded);
    }
    void CheckSegments()
    {
        //Debug.Log("Checking Segments");

        for (int i = 0; i < _tableSegments.Length; i++)
        {
            TableSegment current = _tableSegments[i];
            if (current.GetDisgustingValue() > _distgustThreshold)
            {
                NetworkPlayer player = _slotter.GetPlayer(current.GetSlot());

                if (player == null)
                {
                    continue;
                }

                player.PunishPlayer();
                // TODO: Punish player connected to segment
            }
        }
    }
    public void OnAteEdible(NetworkPlayer player)
    {
        if (_segmentCollection == null)
        {
            return;
        }

        if (player == null)
        {
            return;
        }

        TableSegment segment = _segmentCollection.GetSegment(player);

        if (segment == null)
        {
            return;
        }

        Objective objective = _objectives[segment];

        objective.Progress++;
    }
    void SpawnObjects()
    {
        int amount = Random.Range((int)_spawnRange.x, (int)_spawnRange.y);

        for (int i = 0; i < _segmentCollection.Count; i++)
        {
            TableSegment current = _segmentCollection[i];
            SpawnSphere  spawner = current.SpawnLocation;

            Vector3    pos;
            Quaternion rot;

            for (int j = 0; j < amount; j++)
            {
                spawner.GetSpawn(out pos, out rot);
                GameObject newObject = Instantiate(GetRandomEdiblePrefab(), pos, rot, _objectContainer);
                _edibles.Add(newObject);

                // IObjective stuff

                NetworkServer.Spawn(newObject);
            }
        }
    }
Beispiel #10
0
 public NetworkPlayer GetPlayer(TableSegment segment)
 {
     return(GetPlayer(segment.GetSlot()));
 }