281 lines
10 KiB
C#
281 lines
10 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using IgnoreOPS;
|
|
using Spine.Unity;
|
|
using BallKingdomCrush;
|
|
using UnityEngine;
|
|
|
|
public class CreatAnimalCard : MonoBehaviour
|
|
{
|
|
private GameObject card_item;
|
|
|
|
public static CreatAnimalCard instance;
|
|
private List<Sprite> img_list;
|
|
|
|
public Camera orthoCamera; // 这个变量应该被设置为您想要调整大小的正交相机
|
|
|
|
|
|
private void Awake()
|
|
{
|
|
instance = this;
|
|
card_item = Resources.Load<GameObject>("card/card_item/card_");
|
|
img_list = new List<Sprite>();
|
|
// img_list = Resources.LoadAll<Sprite>("card/card_sprite").ToList();
|
|
// img_list.Sort((x, y) => String.Compare(x.name, y.name));
|
|
for (int i = 0; i < 16; i++)
|
|
{
|
|
img_list.Add(Resources.Load<Sprite>("card/card_sprite/" + i));
|
|
|
|
}
|
|
orthoCamera = GameObject.Find("GameCamera").GetComponent<Camera>();
|
|
|
|
float size = (float)Math.Round(28.125f / ((float)Screen.width / Screen.height), 4);
|
|
string type = SystemInfo.deviceModel.ToLower().Trim();
|
|
// Debug.Log($"type==========={type}");
|
|
if (type.Substring(0, 3) == "ipa")
|
|
{//iPad机型
|
|
size = 49.9f;
|
|
}
|
|
|
|
orthoCamera.orthographicSize = size;
|
|
|
|
}
|
|
|
|
public void SetCameraVisible(bool visible)
|
|
{
|
|
orthoCamera.SetActive(visible);
|
|
GameHelper.ShowSheepPlayUI(visible);
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
|
|
public List<List<Card_item>> card_item_list = new List<List<Card_item>>();
|
|
public List<List<Card_item>> CreatCardNew(int all_card_numbers, int card_type_max, int card_layer, int extra_max, List<List<Vector2>> map_list, List<Vector2> left_extra_list,
|
|
List<Vector2> right_extra_list)
|
|
|
|
{
|
|
|
|
//all_card_numbers *= 3;
|
|
int money_rate = ConfigSystem.GetCommonConf().rewardrate;
|
|
List<int> type_list = new List<int>();
|
|
List<int> this_timetype_list = new List<int>();
|
|
// Debug.Log(card_layer);
|
|
card_item_list.Clear();
|
|
|
|
// ---------- 新增:先从0~15中挑选 card_type_max 个不同的类型 ----------
|
|
List<int> allTypes = Enumerable.Range(0, 15).ToList(); // [0,1,2,...,15]
|
|
List<int> chosenTypes = new List<int>();
|
|
for (int i = 0; i < card_type_max; i++)
|
|
{
|
|
int idx = UnityEngine.Random.Range(0, allTypes.Count);
|
|
chosenTypes.Add(allTypes[idx]);
|
|
allTypes.RemoveAt(idx); // 确保不重复
|
|
}
|
|
// ---------------------------------------------------------------
|
|
|
|
// 打印选出来的类型池
|
|
Debug.Log($"[CreatCardNew] 随机选出的 {card_type_max} 个类型: {string.Join(",", chosenTypes)}");
|
|
|
|
for (int i = 0; i < all_card_numbers; i++)
|
|
{
|
|
int type = 0;
|
|
var randomNum = UnityEngine.Random.Range(0, 100);
|
|
// Debug.Log($"[creat] money_rate------------ {randomNum}==={money_rate}");
|
|
if (GameHelper.IsGiftSwitch() && randomNum < money_rate)
|
|
{
|
|
type = 15; // 金币
|
|
}
|
|
else
|
|
{
|
|
// 在挑选好的类型池里再随机
|
|
type = chosenTypes[UnityEngine.Random.Range(0, chosenTypes.Count)];
|
|
}
|
|
|
|
// if (GameHelper.IsGiftSwitch() && type == 15)
|
|
// {
|
|
// type = UnityEngine.Random.Range(0, card_type_max - 1);
|
|
// }
|
|
#if UNITY_EDITOR
|
|
// type = 1;
|
|
#endif
|
|
Debug.Log($"[CreatCardNew] 随机选出的 类型: {type}");
|
|
|
|
type_list.Add(type);
|
|
type_list.Add(type);
|
|
type_list.Add(type);
|
|
if (!this_timetype_list.Contains(type)) this_timetype_list.Add(type);
|
|
}
|
|
SaveData.GetSaveObject().this_time_cardtype = this_timetype_list.Count;
|
|
|
|
for (int i = 0; i < card_layer; i++)
|
|
{
|
|
card_item_list.Add(new List<Card_item>());
|
|
}
|
|
if (left_extra_list.Count > 0 || right_extra_list.Count > 0)
|
|
{
|
|
for (int i = 0; i < left_extra_list.Count; i++)
|
|
{
|
|
|
|
Card_item _tempObject = new()
|
|
{
|
|
pos_x = left_extra_list[i].x,
|
|
pos_y = left_extra_list[i].y,
|
|
_layer = i
|
|
};
|
|
card_item_list[i].Add(_tempObject);
|
|
|
|
}
|
|
for (int i = 0; i < right_extra_list.Count; i++)
|
|
{
|
|
Card_item _tempObject1 = new()
|
|
{
|
|
pos_x = right_extra_list[i].x,
|
|
pos_y = right_extra_list[i].y,
|
|
_layer = i
|
|
};
|
|
card_item_list[i].Add(_tempObject1);
|
|
}
|
|
}
|
|
|
|
var nums = 0;
|
|
for (int i = 0; i < map_list.Count; i++)
|
|
{
|
|
nums += map_list[i].Count;
|
|
}
|
|
|
|
for (int i = 0; i < nums; i++)
|
|
{
|
|
Card_item _tempObject = new();
|
|
|
|
int layer = getMaplayer(map_list);//确定层数
|
|
int pos = UnityEngine.Random.Range(0, map_list[layer].Count);
|
|
_tempObject.pos_x = map_list[layer][pos].x;
|
|
_tempObject.pos_y = map_list[layer][pos].y;
|
|
_tempObject._layer = layer;
|
|
|
|
card_item_list[layer].Add(_tempObject);
|
|
map_list[layer].RemoveAt(pos);
|
|
|
|
}
|
|
for (int i = 0; i < card_item_list.Count; i++)
|
|
{
|
|
card_item_list[i].Sort((x, y) => y.pos_y.CompareTo(x.pos_y));
|
|
}
|
|
|
|
int index = 0;
|
|
for (int i = 0; i < card_item_list.Count; i++)
|
|
{
|
|
float z_offset = 0;//用来微调每层之间的z值,让下层盖住上层
|
|
float last_posy = 0;
|
|
for (int j = 0; j < card_item_list[i].Count; j++)
|
|
{
|
|
if (last_posy != card_item_list[i][j].pos_y)
|
|
{
|
|
z_offset += 0.05f;
|
|
last_posy = card_item_list[i][j].pos_y;
|
|
}
|
|
GameObject temp = Instantiate(card_item, new Vector3(card_item_list[i][j].pos_x, card_item_list[i][j].pos_y, 400 - card_item_list[i][j]._layer - z_offset), Quaternion.identity, gameObject.transform);
|
|
index = UnityEngine.Random.Range(0, type_list.Count);
|
|
temp.GetComponent<SpriteRenderer>().sprite = img_list[type_list[index]];
|
|
card_item_list[i][j].sheep_card = temp;
|
|
card_item_list[i][j].card_type = type_list[index];
|
|
temp.gameObject.name = i + "-" + j;
|
|
type_list.RemoveAt(index);
|
|
}
|
|
}
|
|
return card_item_list;
|
|
|
|
|
|
}
|
|
public void creatSaveCard(List<List<Card_item>> card_item_list)
|
|
{
|
|
this.card_item_list = card_item_list;
|
|
for (int i = 0; i < card_item_list.Count; i++)
|
|
{
|
|
for (int j = 0; j < card_item_list[i].Count; j++)
|
|
{
|
|
GameObject temp;
|
|
// if (card_item_list[i][j].is_out)
|
|
// {
|
|
// temp = Instantiate(card_item, new Vector3(card_item_list[i][j].pos_x, card_item_list[i][j].pos_y, 400 - card_item_list[i][j].out_layer), Quaternion.identity, gameObject.transform);
|
|
// }
|
|
// else
|
|
temp = Instantiate(card_item, new Vector3(card_item_list[i][j].pos_x, card_item_list[i][j].pos_y, 400 - card_item_list[i][j]._layer), Quaternion.identity, gameObject.transform);
|
|
temp.GetComponent<SpriteRenderer>().sprite = img_list[card_item_list[i][j].card_type];
|
|
card_item_list[i][j].sheep_card = temp;
|
|
if (card_item_list[i][j].in_slot || card_item_list[i][j].is_out) temp.transform.localScale = new Vector3(4.628f, 4.628f, 1);
|
|
temp.gameObject.name = i + "-" + j;
|
|
}
|
|
}
|
|
|
|
}
|
|
private GameObject Popup;
|
|
|
|
|
|
void Update()
|
|
{
|
|
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
|
|
if (Popup == null) Popup = GameObject.Find("Popup");
|
|
if (Popup.transform.childCount != 0) return;
|
|
|
|
Ray ray = orthoCamera.ScreenPointToRay(Input.mousePosition);
|
|
RaycastHit hit;
|
|
int layerMask = 1 << 6; // 只与第8层的碰撞器碰撞
|
|
// 如果射线与layerMask指定层的碰撞器发生碰撞
|
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
|
|
{
|
|
// Debug.Log("Hit " + hit.collider.gameObject.name);
|
|
|
|
GameDispatcher.Instance.Dispatch(GameMsg.card_click, hit.collider.gameObject.name);
|
|
// 在此处添加点击物体后的逻辑
|
|
}
|
|
else
|
|
{
|
|
// Debug.Log("No hit");
|
|
}
|
|
}
|
|
}
|
|
|
|
private GameObject disappear01;
|
|
private GameObject disappear02;
|
|
public void creatSpine(int type, Vector3 vec3)
|
|
{
|
|
if (disappear01 == null) disappear01 = Resources.Load<GameObject>("card/bg_img/fx_disaappear_1");
|
|
if (disappear02 == null) disappear02 = Resources.Load<GameObject>("card/bg_img/fx_disaappear_2");
|
|
if (type == 1)
|
|
{
|
|
SkeletonAnimation temp = Instantiate(disappear01, new Vector3(vec3.x, vec3.y, 110), Quaternion.identity, gameObject.transform).GetComponent<SkeletonAnimation>();
|
|
temp.AnimationState.SetAnimation(0, "disappear01", true);
|
|
temp.AnimationState.Complete += (trackEntry) =>
|
|
{
|
|
Destroy(temp.gameObject);
|
|
};
|
|
}
|
|
if (type == 2)
|
|
{
|
|
SkeletonAnimation temp = Instantiate(disappear02, new Vector3(vec3.x, vec3.y, 110), Quaternion.identity, gameObject.transform).GetComponent<SkeletonAnimation>();
|
|
temp.AnimationState.SetAnimation(0, "disappear02", true);
|
|
temp.AnimationState.Complete += (trackEntry) =>
|
|
{
|
|
Destroy(temp.gameObject);
|
|
};
|
|
}
|
|
// temp.GetComponent<SpriteRenderer>().sprite = img_list[card_item_list[i][j].card_type];
|
|
|
|
}
|
|
|
|
int getMaplayer(List<List<Vector2>> map_list)
|
|
{
|
|
int layer = UnityEngine.Random.Range(0, map_list.Count);//确定层数
|
|
if (map_list[layer].Count == 0)
|
|
{
|
|
layer = getMaplayer(map_list);
|
|
}
|
|
return layer;
|
|
}
|
|
}
|