public void AddToRadar(RadarVisibleObject sourceObject, ScreensEffectManager.RadarObjectDisplay icon)
 {
     myObject              = sourceObject;
     SpriteRenderer        = GetComponent <SpriteRenderer>();
     SpriteRenderer.color  = icon.color;
     SpriteRenderer.sprite = icon.icon;
 }
    bool ShouldBeVisible(RadarVisibleObject item)
    {
        float mul = radarIcons[item.kind].detectionDistanceMultiplier;

        return(Mathf.Abs(item.lastRelativePosition.x) < visibilitySpanHorizontal * mul &&
               Mathf.Abs(item.lastRelativePosition.y) < visibilitySpanHorizontal * mul &&
               item.lastRelativePosition.z < visibilityDistanceAhead * mul &&
               item.lastRelativePosition.z > 0f);
    }
    void RemoveObjectGraphic(RadarVisibleObject item)
    {
        RadarBlip blip;

        if (maintainedGraphics.TryGetValue(item, out blip))
        {
            Destroy(blip.gameObject);
            maintainedGraphics.Remove(item);
        }
    }
    void AddOrUpdateObjectGraphic(RadarVisibleObject radarVisibleObject)
    {
        if (radarVisibleObject == null)
        {
            return;
        }
        RadarBlip blip;

        if (!maintainedGraphics.TryGetValue(radarVisibleObject, out blip))
        {
            var go = Instantiate(ObjectManager.Instance.Prefabs.radarImage);
            go.transform.parent = radarScreen.transform;
            blip = go.GetComponent <RadarBlip>();
            maintainedGraphics[radarVisibleObject] = blip;
            blip.AddToRadar(radarVisibleObject, radarIcons[radarVisibleObject.kind]);
        }

        float mul = radarIcons[radarVisibleObject.kind].detectionDistanceMultiplier;
        var   relativePosition = ObjectManager.Instance.ShipController.GameObject.transform.InverseTransformPoint(radarVisibleObject.transform.position);

        relativePosition /= mul;
        radarVisibleObject.lastRelativePosition = relativePosition;

        blip.transform.localScale = Vector3.one;
        var enabled = ShouldBeVisible(radarVisibleObject);

        blip.SpriteRenderer.enabled = enabled;
        if (enabled)
        {
            var   data    = radarIcons[radarVisibleObject.kind];
            float xFactor = 4f;
            // simulate enlargement through distance
            var dist = relativePosition.z;
            xFactor *= Utility.ProjectNumbers(0, visibilityDistanceAhead * mul, 1.2f, 0.2f, dist);
            blip.transform.localPosition = new Vector3(relativePosition.x, relativePosition.y, 0f) * xFactor / visibilitySpanHorizontal;
            var scale = Vector3.one * data.scale;
            if (!data.fixedScale)
            {
                scale *= 1f - relativePosition.z / visibilityDistanceAhead;
            }
            blip.transform.localScale = scale;
        }
    }