Exemplo n.º 1
0
    public void RefreshTrackedPos(bool update = true)
    {
        Vector2 originPos = Origin.ServerState.Position;

        //Refreshing positions of every item
        var entryArray = Entries;

        for (var i = 0; i < entryArray.Length; i++)
        {
            var item = entryArray[i] as RadarEntry;
            if (!item)
            {
                continue;
            }

            item.RefreshTrackedPos(originPos);
            //If item is out of range, stop showing it and place into "out of range" list
            if (item.Position == TransformState.HiddenPos || ProjectionMagnitude(item.Position) > Range)
            {
//				Logger.Log( $"Hiding {item} as it's out of range" );
                OutOfRangeEntries.Add(item);

//				fixme: Old manual (de)activation conflicts with reuse pool, entries still fill up on server
                item.gameObject.SetActive(false);
            }
        }
        //Check if any item in "out of range" list should be shown again
        for (var i = 0; i < OutOfRangeEntries.Count; i++)
        {
            RadarEntry item = OutOfRangeEntries[i];
            item.RefreshTrackedPos(originPos);
            if (item.Position != TransformState.HiddenPos && ProjectionMagnitude(item.Position) <= Range)
            {
//				Logger.Log( $"Unhiding {item} as it's in range again" );
                ToRestore.Add(item);
                item.gameObject.SetActive(true);
                shuttleControl.PlayRadarDetectionSound();
            }
        }

        for (var i = 0; i < ToRestore.Count; i++)
        {
            var item = ToRestore[i];
            OutOfRangeEntries.Remove(item);
        }

        ToRestore.Clear();

        if (update)
        {
            UpdatePeepers();
        }
    }