using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class UI_Star : MonoBehaviour
{
private GameObject mPrefab;
///
/// 行数
///
public int mRow;
///
/// 列数
///
public int mColum;
///
///
///
public int mRowSpace;
///
///
///
public int mColumnSpace;
///
/// 对其方式
///
public StarDirection mDirection = StarDirection.RightAndUp;
///
/// 设置好星星的显示规则
/// 几行几列 行间距 对其方式啊什么的
///
public void Init(int row, int col, int rspace, int colSpace, StarDirection direction)
{
mRow = row;
mColum = col;
mRowSpace = rspace;
mColumnSpace = colSpace;
mDirection = direction;
mPrefab = this.transform.Find("prefab").gameObject;
mPrefab.SetActive(false);
}
///
///
///
private int _curStarNum = 0;
///
/// 设置
///
public int StarNum
{
get
{
return _curStarNum;
}
set
{
if (_curStarNum != value)
{
_curStarNum = value;
onStarNumChanged();
}
}
}
private List elements = new List();
///
/// 显示星星啦啦啦
///
private void onStarNumChanged()
{
foreach (GameObject ele in elements)
{
Destroy(ele);
}
elements.Clear();
RectTransform rect = mPrefab.GetComponent();
float prefabWidth = rect.sizeDelta.x;
float prefabHeight = rect.sizeDelta.y;
for (int i = 0; i < StarNum; i++)
{
GameObject card = (GameObject)Instantiate(mPrefab);
card.name = i.ToString();
card.SetActive(true);
card.transform.SetParent(this.transform);
card.transform.localScale = Vector3.one;
Vector3 destPos = Vector3.zero;
switch (mDirection)
{
case StarDirection.RightAndUp:
destPos.x = (i % mColum) * (prefabWidth + mColumnSpace);
destPos.y = -(i / mColum) * (prefabHeight + mRowSpace);
break;
case StarDirection.RightAndDown:
destPos.x = (i % mColum) * prefabWidth + i * mColumnSpace;
destPos.y = (i / mColum) * (prefabHeight + mRowSpace);
break;
case StarDirection.LeftAndDown:
destPos.x = -(i % mColum) * (prefabWidth + mColumnSpace);
destPos.y = -(i / mColum) * (prefabHeight + mRowSpace);
break;
case StarDirection.LeftAndUP:
destPos.x = -(i % mColum) * prefabWidth + i * mColumnSpace;
destPos.y = (i / mColum) * (prefabHeight + mRowSpace);
break;
}
card.transform.localPosition = destPos;
elements.Add(card);
}
}
public Vector2 GetSizeDelta()
{
RectTransform rect = mPrefab.GetComponent();
float prefabWidth = rect.sizeDelta.x;
float prefabHeight = rect.sizeDelta.y;
float x = 0, y = 0;
if (StarNum % mColum == 0)
{
x = mColum * (prefabWidth + mColumnSpace);
}
else
{
x = (StarNum % mColum) * (prefabWidth + mColumnSpace);
}
y = Mathf.CeilToInt(StarNum / mColum) * (prefabHeight + mRowSpace);
return new Vector2(x, y);
}
}
public enum StarDirection
{
///
/// 左下角对齐,向右向上发展
///
RightAndUp,
///
/// 左上角对齐,向右向下发展
///
RightAndDown,
///
/// 右上角角对齐,向左向下发展
///
LeftAndDown,
///
/// 右下角角对齐,向左向上发展
///
LeftAndUP,
}