125 lines
3.7 KiB
C#
125 lines
3.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using UnityEngine.Networking;
|
|
|
|
public class ScreenShot : MonoBehaviour
|
|
{
|
|
[Header("API Settings")]
|
|
[SerializeField] private string apiUrl = "http://my.xroomapp.com:8000/uploadImage/";
|
|
[SerializeField] private string screenshotName = "Screenshot";
|
|
|
|
[Header("Cooldown Settings")]
|
|
[SerializeField] private float screenshotCooldown = 5f;
|
|
private bool canTakeScreenshot = true;
|
|
|
|
[Header("Camera Setup")]
|
|
[SerializeField] private Camera BackCamera;
|
|
[SerializeField] private Camera selfieCamera;
|
|
[SerializeField] private RenderTexture tr;
|
|
private Camera activeCamera;
|
|
|
|
void Start()
|
|
{
|
|
SetActiveCamera(BackCamera); // Start with back camera by default
|
|
}
|
|
|
|
public void ToggleCamera()
|
|
{
|
|
if (activeCamera == BackCamera)
|
|
{
|
|
SetActiveCamera(selfieCamera);
|
|
}
|
|
else
|
|
{
|
|
SetActiveCamera(BackCamera);
|
|
}
|
|
}
|
|
|
|
private void SetActiveCamera(Camera cameraToActivate)
|
|
{
|
|
BackCamera.gameObject.SetActive(cameraToActivate == BackCamera);
|
|
selfieCamera.gameObject.SetActive(cameraToActivate == selfieCamera);
|
|
activeCamera = cameraToActivate;
|
|
}
|
|
|
|
public void TakeAndUploadScreenshot()
|
|
{
|
|
if (canTakeScreenshot)
|
|
{
|
|
StartCoroutine(CaptureAndUploadScreenshot());
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Screenshot on cooldown. Please wait.");
|
|
}
|
|
}
|
|
|
|
private IEnumerator CaptureAndUploadScreenshot()
|
|
{
|
|
canTakeScreenshot = false;
|
|
|
|
// Store currently active camera
|
|
Camera previousCamera = activeCamera;
|
|
|
|
yield return new WaitForEndOfFrame();
|
|
|
|
// Store the original active RenderTexture
|
|
RenderTexture originalRT = RenderTexture.active;
|
|
|
|
// Create temporary RenderTexture
|
|
RenderTexture tempRT = new RenderTexture(Screen.width, Screen.height, 24);
|
|
|
|
// Render camera to the temporary RenderTexture
|
|
activeCamera.targetTexture = tempRT;
|
|
activeCamera.Render();
|
|
|
|
RenderTexture.active = tempRT;
|
|
|
|
// Read pixels into a Texture2D
|
|
Texture2D screenshot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
|
|
screenshot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
|
screenshot.Apply();
|
|
|
|
// Cleanup: restore original targets
|
|
//activeCamera.targetTexture = null;
|
|
RenderTexture.active = originalRT;
|
|
|
|
tempRT.Release();
|
|
Destroy(tempRT);
|
|
|
|
// Convert screenshot to PNG
|
|
byte[] imageBytes = screenshot.EncodeToPNG();
|
|
Destroy(screenshot);
|
|
|
|
// Upload to server
|
|
WWWForm form = new WWWForm();
|
|
form.AddField("name", screenshotName);
|
|
form.AddBinaryData("image", imageBytes, "screenshot.png", "image/png");
|
|
|
|
using (UnityWebRequest www = UnityWebRequest.Post(apiUrl, form))
|
|
{
|
|
string token = EN.instance.Me.token;
|
|
www.SetRequestHeader("Authorization", "token " + token);
|
|
yield return www.SendWebRequest();
|
|
|
|
if (www.result == UnityWebRequest.Result.Success)
|
|
{
|
|
Debug.Log("Screenshot uploaded successfully!");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("Error uploading screenshot: " + www.error);
|
|
EN.instance.showError("Upload Failed", www.error);
|
|
}
|
|
}
|
|
|
|
// Restore active camera state
|
|
SetActiveCamera(previousCamera);
|
|
BackCamera.targetTexture=tr;
|
|
selfieCamera.targetTexture=tr;
|
|
|
|
yield return new WaitForSeconds(screenshotCooldown);
|
|
canTakeScreenshot = true;
|
|
}
|
|
}
|