Example #1
0
 public float GetBackgroundHeight()
 {
     if (m_backgroundHeight <= 0)
     {
         return(m_screenshotManager.GetBackgroundHeight());
     }
     return(m_backgroundHeight);
 }
    void Render()
    {
        SampleContainer sample       = m_samples[m_currentSampleIndex];
        int             renderWidth  = sample.m_width;
        int             renderHeight = sample.m_height + 1;


        float pixelSize = m_screenshotManager.GetBackgroundHeight() * m_screenshotManager.GetCaptureWidth() / m_screenshotManager.GetCaptureHeight() / renderWidth;
        int   height    = (int)(m_screenshotManager.GetPlayerHeight() / pixelSize);

        if (m_screenshotManager.GetPlayerHeight() != pixelSize)
        {
            height += 1;
        }
        int playerLength = renderWidth * height;


        //m_rect = new Rect(0, 0, renderWidth, renderHeight);
        //m_renderTexture = new RenderTexture(renderWidth, renderHeight, 24);
        //m_screenshotTexture = m_image.texture as Texture2D;// new Texture2D(renderWidth, renderHeight, TextureFormat.RGB24, false);
        Destroy(m_image.texture);
        Destroy(m_screenshotTexture);
        m_screenshotTexture            = new Texture2D(renderWidth, renderHeight, TextureFormat.RGB24, false);
        m_screenshotTexture.filterMode = FilterMode.Point;

        // input
        for (int h = 0; h < sample.m_height; h++)
        {
            for (int w = 0; w < sample.m_width; w++)
            {
                int index = w + h * sample.m_width;

                float obstacleInput = Mathf.Clamp01(sample.m_input[index]);
                int   playerIndex   = index + sample.m_width * sample.m_height;
                float playerInput   = playerIndex >= sample.m_input.Length ? 0f : Mathf.Clamp01(sample.m_input[playerIndex]);
                if (index < playerLength && playerInput > 0)
                {
                    m_screenshotTexture.SetPixel(w, h, new Color(0, playerInput, 0));
                }
                else if (obstacleInput > 0)
                {
                    m_screenshotTexture.SetPixel(w, h, new Color(obstacleInput, 0, 0));
                }
                else
                {
                    m_screenshotTexture.SetPixel(w, h, new Color(0, 0, 0));
                }
            }
        }

        // desired output
        for (int i = 0; i < sample.m_desiredOutput.Length; i++)
        {
            int startIndex = (int)((float)sample.m_width * i / (sample.m_desiredOutput.Length));
            int endIndex   = (int)Mathf.Min(startIndex + (float)sample.m_width / sample.m_desiredOutput.Length, sample.m_width - 1);


            for (int j = startIndex; j <= endIndex; j++)
            {
                Color c = new Color();
                if (i == 0)
                {
                    c.g = sample.m_desiredOutput[0];
                }
                if (i == 1)
                {
                    c.r = sample.m_desiredOutput[2];
                }
                if (i == 2)
                {
                    c.b = sample.m_desiredOutput[1];
                }
                m_screenshotTexture.SetPixel(j, renderHeight - 1, c);// new Color(sample.m_desiredOutput[0] * 255, sample.m_desiredOutput[1] * 255, sample.m_desiredOutput[2] * 255));
            }
        }


        // apply
        m_screenshotTexture.Apply();
        m_image.texture = m_screenshotTexture;
    }