using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
///
/// 提交面板
///
public class UI_ReportUploadPanel : BasePanel
{
public Button CloseBtn; //关闭按钮
private CanvasGroup canvasGroup; //屏幕显示
public GameObject ReportUpload_Image; //报告图片
public TMP_InputField ReportUpload_Input; //实验报告输入框
// Start is called before the first frame update
protected override void Awake()
{
base.Awake();
OnInit();
}
public void OnInit()
{
CloseBtn = GetControl("关闭按钮");
canvasGroup = GetComponent();
canvasGroup.alpha = 0f; // 默认隐藏
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
}
public override void ShowMe()
{
base.ShowMe();
FadeIn(0.5f);
if (ReportUpload_Image == null)
{
Debug.LogError("ReportUpload_Image组件未赋值!");
return;
}
foreach (Toggle toggle in UI_ExperimentChooesPanel.instance?.SubjectTog)
{
if (toggle == null) continue;
if (toggle.isOn)
{
string toggleName = toggle.name;
string imagePath = string.Empty;
switch (toggleName)
{
case "5-1-1":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例1倍_511.png");
break;
case "5-1-2":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例1倍_522.png");
break;
case "5-2-1":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/1uf积分_521.png");
break;
case "5-2-2":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/1uf积分_522.png");
break;
case "5-3-1":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例积分0.1.png");
break;
case "5-3-2":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例积分1.png");
break;
case "5-4-1":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例微分1.png");
break;
case "5-4-2":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/比例微分2.png");
break;
case "5-5-1":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/惯性环节1.png");
break;
case "5-5-2":
imagePath = Path.Combine(Application.streamingAssetsPath, "实验报告图片/惯性环节2.png");
break;
}
Image ReportUploadImage = ReportUpload_Image.GetComponent();
Sprite targetSprite = LoadSpriteFromStreamingAssets(imagePath, new Vector2(736, 414));
if (targetSprite != null)
{
ReportUploadImage.sprite = targetSprite;
// 固定Image尺寸为736×414
ReportUploadImage.rectTransform.sizeDelta = new Vector2(736, 414);
// 确保Image的显示模式为“填充”(避免自动缩放)
ReportUploadImage.type = Image.Type.Simple;
ReportUploadImage.preserveAspect = false;
}
}
}
}
public override void HideMe()
{
base.HideMe();
FadeOut(0.5f);
}
protected override void OnClick(string btnPath)
{
base.OnClick(btnPath);
switch (btnPath)
{
case "关闭按钮":
FadeOut(0.5f);
break;
case "提交Btn":
StartCoroutine(ReportUploadManager.instance.ReportUpload());
break;
}
}
///
/// 提问渐显
///
public void FadeIn(float time)
{
canvasGroup.DOFade(1f, time);
canvasGroup.interactable = true;
canvasGroup.blocksRaycasts = true;
}
///
/// 提问渐隐
///
public void FadeOut(float time)
{
canvasGroup.DOFade(0f, time);
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
}
///
/// 加载图片并裁剪/缩放为指定尺寸(保持比例)
///
/// 图片路径
/// 目标尺寸736×414
/// 固定尺寸的Sprite
private Sprite LoadSpriteFromStreamingAssets(string filePath, Vector2 targetSize)
{
if (!File.Exists(filePath))
{
Debug.LogError($"图片文件不存在:{filePath}");
return null;
}
try
{
byte[] imageBytes = File.ReadAllBytes(filePath);
Texture2D texture = new Texture2D(2, 2); // 初始尺寸任意,LoadImage会自动调整
if (!texture.LoadImage(imageBytes)) // LoadImage支持PNG/JPG,自动识别格式
{
Debug.LogError($"加载图片失败:{filePath},可能不是有效的PNG/JPG格式");
Destroy(texture); // 释放无效Texture
return null;
}
// 计算目标比例和原始比例
float targetRatio = targetSize.x / targetSize.y; // 736/414 ≈ 1.7778(16:9)
float originalRatio = (float)texture.width / texture.height;
Rect cropRect;
if (originalRatio > targetRatio)
{
// 原始图片更宽,裁剪左右两侧
float cropWidth = texture.height * targetRatio;
float startX = (texture.width - cropWidth) / 2;
cropRect = new Rect(startX, 0, cropWidth, texture.height);
}
else
{
// 原始图片更高,裁剪上下两侧
float cropHeight = texture.width / targetRatio;
float startY = (texture.height - cropHeight) / 2;
cropRect = new Rect(0, startY, texture.width, cropHeight);
}
// 创建固定尺寸的Sprite(居中裁剪)
Sprite sprite = Sprite.Create(
texture,
cropRect, // 裁剪后的区域
new Vector2(0.5f, 0.5f), // 中心锚点
100, // PPI
0,
SpriteMeshType.Tight
);
return sprite;
}
catch (System.Exception e)
{
Debug.LogError($"读取图片异常:{e.Message}");
return null;
}
}
}