using SC.XR.Unity;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 单排扇形
///
public class SRSectorLayout : MonoBehaviour
{
///
/// 根据素材数量对物体进行布局组合
/// 忽略文字类型
///
/// 素材
/// 素材父物体
///
public static List CalLayout(MaterialObl materialObls, GameObject par, out MaterialObl newmaterial)
{
newmaterial = materialObls;
BaseTemPlate text = new BaseTemPlate();
MaterialObjValue textmat = null;
List noText = new List();
List objectValues = new List();
for (int i = 0; i < materialObls.materialList.Count; i++)
{
var mat = materialObls.materialList[i];
GameObject go = null;
switch (mat.type)
{
case (int)MaterialType.None:
break;
case (int)MaterialType.Image:
var pImage = ResMgr.Instance.Load("Image");
go = Instantiate(pImage, par.transform);
var imageitem = go.AddComponent();
go.SetActive(true);
imageitem.SetData(mat, materialObls.updateTime);
noText.Add(imageitem);
break;
case (int)MaterialType.Video:
var pVideo = ResMgr.Instance.Load("Video");
go = Instantiate(pVideo, par.transform);
var videoitem = go.AddComponent();
videoitem.autoplay = materialObls.autoplay;
go.SetActive(true);
videoitem.SetData(mat, materialObls.updateTime);
noText.Add(videoitem);
break;
case (int)MaterialType.Text:
textmat = mat;
var pText = ResMgr.Instance.Load("Text");
go = Instantiate(pText, par.transform);
var textitem = go.AddComponent();
go.SetActive(true);
textitem.SetData(mat, materialObls.updateTime);
text = textitem;
go.SetActive(false);
break;
default:
break;
}
if (go != null)
{
go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
go.AddComponent().Type = (MaterialType)(mat.type);
if (materialObls.select)
{
go.transform.localPosition = mat.ObjectTransform.nowPos;
go.transform.localEulerAngles = mat.ObjectTransform.nowRot;
go.transform.localScale = mat.ObjectTransform.nowScale;
}
else
{
go.transform.localEulerAngles = Vector3.zero;
go.transform.localScale = new Vector3(1, 1, 1);
if (mat.type != (int)MaterialType.Text)
{
go.transform.localPosition = Vector3.zero;
}
else
{
//Set text position
if (mat.textPosition == "top")
{
go.transform.localPosition = new Vector3(0, 0.6f, 0);
}
else if (mat.textPosition == "bottom")
{
go.transform.localPosition = new Vector3(0, -0.6f, 0);
}
}
mat.ObjectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
}
ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
objectValues.Add(objectValue);
}
}
#region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回
if (!materialObls.select)
{
var count = noText.Count;
switch (count)
{
case 3:
Column_3(noText, par);
break;
case 4:
Column_4(noText, par);
break;
case 5:
Column_5(noText, par);
break;
case 6:
Column_6(noText, par);
break;
default:
break;
}
//第一次排列后,需调整初始坐标和当前坐标保持一致
for (int i = 0; i < objectValues.Count; i++)
{
objectValues[i].InitTransform();
objectValues[i].Object.SetActive(true);
var go = objectValues[i].Object;
newmaterial.materialList[objectValues[i].ID].ObjectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
}
}
if (textmat != null)
{
text.gameObject.SetActive(true);
}
#endregion
return objectValues;
}
public static IEnumerator CalLayout(ModelList materialObls, GameObject par)
{
BaseTemPlate text = new BaseTemPlate();
ModelItem textmat = null;
List noText = new List();
List objectValues = new List();
for (int i = 0; i < materialObls.materialList.Count; i++)
{
var mat = materialObls.materialList[i];
GameObject go = null;
switch (mat.type)
{
case (int)MaterialType.None:
break;
case (int)MaterialType.Image:
var pImage = ResMgr.Instance.LoadAsync("Image");
yield return pImage;
go = Instantiate(pImage.asset as GameObject, par.transform);
var imageitem = go.AddComponent();
go.SetActive(true);
// imageitem.SetData(mat, materialObls.updateTime);
noText.Add(imageitem);
break;
case (int)MaterialType.Video:
var pVideo = ResMgr.Instance.LoadAsync("Video");
yield return pVideo;
go = Instantiate(pVideo.asset as GameObject, par.transform);
var videoitem = go.AddComponent();
videoitem.autoplay = materialObls.autoplay;
go.SetActive(true);
//videoitem.SetData(mat, materialObls.updateTime);
noText.Add(videoitem);
break;
case (int)MaterialType.Text:
textmat = mat;
var pText = ResMgr.Instance.LoadAsync("Text");
yield return pText;
go = Instantiate(pText.asset as GameObject, par.transform);
var textitem = go.AddComponent();
go.SetActive(true);
// textitem.SetData(mat, materialObls.updateTime);
text = textitem;
go.SetActive(false);
break;
default:
break;
}
if (go != null)
{
go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
go.AddComponent().Type = (MaterialType)(mat.type);
if (materialObls.select)
{
go.transform.localPosition = mat.objectTransform.nowPos;
go.transform.localEulerAngles = mat.objectTransform.nowRot;
go.transform.localScale = mat.objectTransform.nowScale;
}
else
{
go.transform.localEulerAngles = Vector3.zero;
go.transform.localScale = new Vector3(1, 1, 1);
if (mat.type != (int)MaterialType.Text)
{
go.transform.localPosition = Vector3.zero;
}
else
{
//Set text position
if (mat.textPosition == "top")
{
go.transform.localPosition = new Vector3(0, 0.3f, 0);
}
else if (mat.textPosition == "bottom")
{
go.transform.localPosition = new Vector3(0, -0.3f, 0);
}
}
mat.objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
}
ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
objectValues.Add(objectValue);
mat.prefabModel = go;
// mat.initFrist();
}
}
#region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回
if (!materialObls.select)
{
var count = noText.Count;
switch (count)
{
case 3:
Column_3(noText, par);
break;
case 4:
Column_4(noText, par);
break;
case 5:
Column_5(noText, par);
break;
default:
break;
}
//第一次排列后,需调整初始坐标和当前坐标保持一致
for (int i = 0; i < objectValues.Count; i++)
{
objectValues[i].InitTransform();
objectValues[i].Object.SetActive(true);
var go = objectValues[i].Object;
materialObls.materialList[objectValues[i].ID].objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
}
}
if (textmat != null)
{
text.gameObject.SetActive(true);
}
#endregion
}
///
/// 根据数量排列图片或文字
///
/// 图片和视频列表
private static void Column_3(List data, GameObject game)
{
var scgrid = game.AddComponent();
scgrid.IsIgnoreInactiveObj = true;
scgrid.LayoutType = LayoutTypes.Vertical;
scgrid.Rows = 1;
scgrid.SpaceX = 0.7f;
scgrid.RefreshInfo();
Destroy(scgrid);
data[0].transform.localPosition += new Vector3(0, 0, -0.18f);
data[0].transform.localRotation = Quaternion.Euler(0, -30, 0);
data[2].transform.localPosition += new Vector3(0, 0, -0.18f);
data[2].transform.localRotation = Quaternion.Euler(0, 30, 0);
}
///
/// 根据数量排列图片或文字
///
/// 图片和视频列表
private static void Column_4(List data, GameObject game)
{
var scgrid = game.AddComponent();
scgrid.IsIgnoreInactiveObj = true;
scgrid.LayoutType = LayoutTypes.Vertical;
scgrid.Rows = 1;
scgrid.SpaceX = 0.7f;
scgrid.RefreshInfo();
Destroy(scgrid);
data[0].transform.localPosition += new Vector3(0, 0, -0.35f);
data[0].transform.localRotation = Quaternion.Euler(0, -45, 0);
data[3].transform.localPosition += new Vector3(0, 0, -0.35f);
data[3].transform.localRotation = Quaternion.Euler(0, 45, 0);
}
///
/// 根据数量排列图片或文字
///
/// 图片和视频列表
private static void Column_5(List data, GameObject game)
{
var scgrid = game.AddComponent();
scgrid.IsIgnoreInactiveObj = true;
scgrid.LayoutType = LayoutTypes.Vertical;
scgrid.Rows = 1;
scgrid.SpaceX = 0.7f;
scgrid.RefreshInfo();
Destroy(scgrid);
data[0].transform.localPosition += new Vector3(0.15f, 0, -0.65f);
data[0].transform.localRotation = Quaternion.Euler(0, -45, 0);
data[4].transform.localPosition += new Vector3(-0.15f, 0, -0.65f);
data[4].transform.localRotation = Quaternion.Euler(0, 45, 0);
data[1].transform.localPosition += new Vector3(0, 0, -0.22f);
data[1].transform.localRotation = Quaternion.Euler(0, -30, 0);
data[3].transform.localPosition += new Vector3(0, 0, -0.22f);
data[3].transform.localRotation = Quaternion.Euler(0, 30, 0);
}
///
/// 根据数量排列图片或文字
///
/// 图片和视频列表
private static void Column_6(List data, GameObject game)
{
var scgrid = game.AddComponent();
scgrid.IsIgnoreInactiveObj = true;
scgrid.LayoutType = LayoutTypes.Vertical;
scgrid.Rows = 1;
scgrid.SpaceX = 0.7f;
scgrid.RefreshInfo();
Destroy(scgrid);
data[0].transform.localPosition += new Vector3(0.15f, 0, -0.65f);
data[0].transform.localRotation = Quaternion.Euler(0, -45, 0);
data[5].transform.localPosition += new Vector3(-0.15f, 0, -0.65f);
data[5].transform.localRotation = Quaternion.Euler(0, 45, 0);
data[1].transform.localPosition += new Vector3(0, 0, -0.22f);
data[1].transform.localRotation = Quaternion.Euler(0, -30, 0);
data[4].transform.localPosition += new Vector3(0, 0, -0.22f);
data[4].transform.localRotation = Quaternion.Euler(0, 30, 0);
}
}