468 lines
19 KiB
C#
468 lines
19 KiB
C#
|
||||
|
|
using System.Collections.Generic;
|
|||
|
|
using IgnoreOPS;
|
|||
|
|
using Spine.Unity;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using TowerClimberChronicles;
|
|||
|
|
using FairyGUI;
|
|||
|
|
using UnityEngine.UI;
|
|||
|
|
using System.Collections;
|
|||
|
|
using DG.Tweening;
|
|||
|
|
|
|||
|
|
public class CreatPuzzle : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public static CreatPuzzle instance;
|
|||
|
|
private List<Sprite> img_list;
|
|||
|
|
private List<Sprite> line_list;
|
|||
|
|
private void Awake()
|
|||
|
|
{
|
|||
|
|
instance = this;
|
|||
|
|
img_list = new List<Sprite>();
|
|||
|
|
line_list = new List<Sprite>();
|
|||
|
|
puzzle_parent = GameObject.Find("puzzle_parent");
|
|||
|
|
GameDispatcher.Instance.AddListener(GameMsg.PuzzleIn, PuzzlenInFunc);
|
|||
|
|
GameDispatcher.Instance.AddListener(GameMsg.PuzzleReset, PuzzlenResetFunc);
|
|||
|
|
puzzle_list = new List<GameObject>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private int rows = 6;
|
|||
|
|
private int cols = 4;
|
|||
|
|
|
|||
|
|
List<List<float>> offsetList_x = new List<List<float>>()
|
|||
|
|
{
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-229, -83, 87, 233
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-255f, -137f, -1.2f, 133.6f, 251.6f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-250f, -86f, 81f, 243.3f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-260f, -130.6f, 3.3f, 136f, 264.5f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-225f, -119.3f, 82.4f, 223.9f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-248f, -151.6f, -0.2f, 151.5f, 249f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-223f, -89.9f, 80.2f, 217.1f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-242f, -132.9f, 3.3f, 139f, 245.7f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-225f, -84.5f, 83.8f, 224.3f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
-246f, -133.8f, 1.5f, 135.8f, 248f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
List<List<float>> offsetList_y = new List<List<float>>()
|
|||
|
|
{
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
391, 250.9f, 82.5f, -89.5f, -259, -404.6f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
421f, 310.7f, 184.2f, 57.1f, -69.5f, -195.9f, -322.2f, -433.3f
|
|||
|
|
},
|
|||
|
|
new List<float>()//2
|
|||
|
|
{
|
|||
|
|
391, 228.1f, 60.3f, -108f, -274.5f, -438.2f
|
|||
|
|
},
|
|||
|
|
new List<float>()//3
|
|||
|
|
{
|
|||
|
|
421f, 299.4f, 175.2f, 50f, -75.6f, -200.7f, -326f, -447.6f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
413f, 271.5f, 87.2f, -97.6f, -281.8f, -421.3f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
428f, 324.3f, 190.2f, 56.4f, -77.3f, -211.4f, -344.9f, -451.3f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
381f, 244.3f, 74.6f, -95.7f, -265.5f, -398.2f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
413f, 312.6f, 185f, 57.7f, -69.8f, -197.2f, -324.4f, -425.4f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<float>()//8
|
|||
|
|
{
|
|||
|
|
391, 250.5f, 81.8f, -87.1f, -255.8f, -396.2f
|
|||
|
|
},
|
|||
|
|
new List<float>()
|
|||
|
|
{
|
|||
|
|
415f, 310f, 183.1f, 56.1f, -70.7f, -197.3f, -324f, -429.3f
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
List<List<Vector2>> image_offset_list = new List<List<Vector2>>()
|
|||
|
|
{
|
|||
|
|
new List<Vector2>()//0
|
|||
|
|
{
|
|||
|
|
new Vector2(1051, -1806), new Vector2(386, -1806), new Vector2(-386, -1806), new Vector2(-1051, -1806),
|
|||
|
|
new Vector2(1051, -1169), new Vector2(386, -1169), new Vector2(-386, -1169), new Vector2(-1051, -1169),
|
|||
|
|
new Vector2(1051, -401.2f), new Vector2(386, -401.2f), new Vector2(-386, -401.2f), new Vector2(-1051, -401.2f),
|
|||
|
|
new Vector2(1051, 380), new Vector2(386, 380), new Vector2(-386, 380), new Vector2(-1051, 380),
|
|||
|
|
new Vector2(1051, 1150.5f), new Vector2(386, 1150.5f), new Vector2(-386, 1150.5f), new Vector2(-1051, 1150.5f),
|
|||
|
|
new Vector2(1051, 1810.5f), new Vector2(386, 1810.5f), new Vector2(-386, 1810.5f), new Vector2(-1051, 1810.5f),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//1
|
|||
|
|
{
|
|||
|
|
new Vector2(1151, -1940), new Vector2(615, -1940), new Vector2(-3, -1940), new Vector2(-616.3f, -1940), new Vector2(-1153, -1940),
|
|||
|
|
new Vector2(1151, -1439), new Vector2(615, -1439), new Vector2(-3, -1439), new Vector2(-616.3f, -1439), new Vector2(-1153, -1439),
|
|||
|
|
new Vector2(1151, -864), new Vector2(615, -864), new Vector2(-3, -864), new Vector2(-616.3f, -864), new Vector2(-1153, -864),
|
|||
|
|
new Vector2(1151, -287), new Vector2(615, -287), new Vector2(-3, -287), new Vector2(-616.3f, -287), new Vector2(-1153, -287),
|
|||
|
|
new Vector2(1151, 288), new Vector2(615, 288), new Vector2(-3, 288), new Vector2(-616.3f, 288), new Vector2(-1153, 288),
|
|||
|
|
new Vector2(1151, 862), new Vector2(615, 862), new Vector2(-3, 862), new Vector2(-616.3f, 862), new Vector2(-1153, 862),
|
|||
|
|
new Vector2(1151, 1437), new Vector2(615,1437), new Vector2(-3, 1437), new Vector2(-616.3f, 1437), new Vector2(-1153,1437),
|
|||
|
|
new Vector2(1151, 1941), new Vector2(615, 1941), new Vector2(-3, 1941), new Vector2(-616.3f, 1941), new Vector2(-1153, 1941),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//2
|
|||
|
|
{
|
|||
|
|
new Vector2(1117, -1888), new Vector2(371, -1888), new Vector2(-389.5f, -1888), new Vector2(-1125, -1888),
|
|||
|
|
new Vector2(1117, -1149), new Vector2(371, -1149), new Vector2(-389.5f, -1149), new Vector2(-1125, -1149),
|
|||
|
|
new Vector2(1117, -386), new Vector2(371, -386), new Vector2(-389.5f, -386), new Vector2(-1125, -386),
|
|||
|
|
new Vector2(1117, 378), new Vector2(371, 378), new Vector2(-389.5f, 378), new Vector2(-1125, 378),
|
|||
|
|
new Vector2(1117, 1136), new Vector2(371, 1136), new Vector2(-389.5f, 1136), new Vector2(-1125, 1136),
|
|||
|
|
new Vector2(1117, 1881), new Vector2(371, 1881), new Vector2(-389.5f, 1881), new Vector2(-1125, 1881),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//3
|
|||
|
|
{
|
|||
|
|
new Vector2(1194, -1976), new Vector2(606.3f, -1976), new Vector2(-3, -1976), new Vector2(-606.5f, -1976), new Vector2(-1188, -1976),
|
|||
|
|
new Vector2(1194, -1423), new Vector2(606.3f, -1423), new Vector2(-3, -1423), new Vector2(-606.5f, -1423), new Vector2(-1188, -1423),
|
|||
|
|
new Vector2(1194, -858.4f), new Vector2(606.3f, -858.4f), new Vector2(-3, -858.4f), new Vector2(-606.5f, -858.4f), new Vector2(-1188, -858.4f),
|
|||
|
|
new Vector2(1194, -291.9f), new Vector2(606.3f, -291.9f), new Vector2(-3, -291.9f), new Vector2(-606.5f, -291.9f), new Vector2(-1188, -291.9f),
|
|||
|
|
new Vector2(1194, 280.8f), new Vector2(606.3f, 280.8f), new Vector2(-3, 280.8f), new Vector2(-606.5f, 280.8f), new Vector2(-1188, 280.8f),
|
|||
|
|
new Vector2(1194, 848), new Vector2(606.3f, 848), new Vector2(-3, 848), new Vector2(-606.5f, 848), new Vector2(-1188, 848),
|
|||
|
|
new Vector2(1194, 1419), new Vector2(606.3f,1419), new Vector2(-3, 1419), new Vector2(-606.5f, 1419), new Vector2(-1188,1419),
|
|||
|
|
new Vector2(1194, 1971), new Vector2(606.3f, 1971), new Vector2(-3, 1971), new Vector2(-606.5f, 1971), new Vector2(-1188, 1971),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//4
|
|||
|
|
{
|
|||
|
|
new Vector2(1020, -1890), new Vector2(539, -1890), new Vector2(-377.6f, -1890), new Vector2(-1018.6f, -1890),
|
|||
|
|
new Vector2(1020, -1245), new Vector2(539, -1245), new Vector2(-377.6f, -1245), new Vector2(-1018.6f, -1245),
|
|||
|
|
new Vector2(1020, -409), new Vector2(539, -409), new Vector2(-377.6f, -409), new Vector2(-1018.6f, -409),
|
|||
|
|
new Vector2(1020, 430.7f), new Vector2(539, 430.7f), new Vector2(-377.6f, 430.7f), new Vector2(-1018.6f, 430.7f),
|
|||
|
|
new Vector2(1020, 1267.9f), new Vector2(539, 1267.9f), new Vector2(-377.6f, 1267.9f), new Vector2(-1018.6f, 1267.9f),
|
|||
|
|
new Vector2(1020, 1903), new Vector2(539, 1903), new Vector2(-377.6f, 1903), new Vector2(-1018.6f, 1903),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//5
|
|||
|
|
{
|
|||
|
|
new Vector2(1132, -2006), new Vector2(693.7f, -2006), new Vector2(4.3f, -2006), new Vector2(-686.7f, -2006), new Vector2(-1127.6f, -2006),
|
|||
|
|
new Vector2(1132, -1535), new Vector2(693.7f, -1535), new Vector2(4.3f, -1535), new Vector2(-686.7f, -1535), new Vector2(-1127.6f, -1535),
|
|||
|
|
new Vector2(1132, -926), new Vector2(693.7f, -926), new Vector2(4.3f, -926), new Vector2(-686.7f, -926), new Vector2(-1127.6f, -926),
|
|||
|
|
new Vector2(1132, -316.5f), new Vector2(693.7f, -316.5f), new Vector2(4.3f, -316.5f), new Vector2(-686.7f, -316.5f), new Vector2(-1127.6f, -316.5f),
|
|||
|
|
new Vector2(1132, 290.5f), new Vector2(693.7f, 290.5f), new Vector2(4.3f, 290.5f), new Vector2(-686.7f, 290.5f), new Vector2(-1127.6f, 290.5f),
|
|||
|
|
new Vector2(1132, 899.8f), new Vector2(693.7f, 899.8f), new Vector2(4.3f, 899.8f), new Vector2(-686.7f, 899.8f), new Vector2(-1127.6f, 899.8f),
|
|||
|
|
new Vector2(1132, 1508), new Vector2(693.7f,1508), new Vector2(4.3f, 1508), new Vector2(-686.7f, 1508), new Vector2(-1127.6f,1508),
|
|||
|
|
new Vector2(1132, 1990), new Vector2(693.7f, 1990), new Vector2(4.3f, 1990), new Vector2(-686.7f, 1990), new Vector2(-1127.6f, 1990),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//6
|
|||
|
|
{
|
|||
|
|
new Vector2(1007, -1761), new Vector2(402, -1761), new Vector2(-370f, -1761), new Vector2(-991.3f, -1761),
|
|||
|
|
new Vector2(1007, -1138), new Vector2(402, -1138), new Vector2(-370f, -1138), new Vector2(-991.3f, -1138),
|
|||
|
|
new Vector2(1007, -369), new Vector2(402, -369), new Vector2(-370f, -369), new Vector2(-991.3f, -369),
|
|||
|
|
new Vector2(1007, 405), new Vector2(402, 405), new Vector2(-370f, 405), new Vector2(-991.3f, 405),
|
|||
|
|
new Vector2(1007, 1179), new Vector2(402, 1179), new Vector2(-370f, 1179), new Vector2(-991.3f, 1179),
|
|||
|
|
new Vector2(1007, 1781), new Vector2(402, 1781), new Vector2(-370f, 1781), new Vector2(-991.3f, 1781),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()//7
|
|||
|
|
{
|
|||
|
|
new Vector2(1104, -1905), new Vector2(610, -1905), new Vector2(-3, -1905), new Vector2(-616, -1905), new Vector2(-1111.9f, -1905),
|
|||
|
|
new Vector2(1104, -1451), new Vector2(610, -1451), new Vector2(-3, -1451), new Vector2(-616, -1451), new Vector2(-1111.9f, -1451),
|
|||
|
|
new Vector2(1104, -871.3f), new Vector2(610, -871.3f), new Vector2(-3, -871.3f), new Vector2(-616, -871.3f), new Vector2(-1111.9f, -871.3f),
|
|||
|
|
new Vector2(1104, -292.9f), new Vector2(610, -292.9f), new Vector2(-3, -292.9f), new Vector2(-616, -292.9f), new Vector2(-1111.9f, -292.9f),
|
|||
|
|
new Vector2(1104, 288), new Vector2(610, 288), new Vector2(-3, 288), new Vector2(-616, 288), new Vector2(-1111.9f, 288),
|
|||
|
|
new Vector2(1104, 866), new Vector2(610, 866), new Vector2(-3, 866), new Vector2(-616, 866), new Vector2(-1111.9f, 866),
|
|||
|
|
new Vector2(1104, 1445), new Vector2(610, 1445), new Vector2(-3, 1445), new Vector2(-616, 1445), new Vector2(-1111.9f, 1445),
|
|||
|
|
new Vector2(1104, 1904), new Vector2(610, 1904), new Vector2(-3, 1904), new Vector2(-616, 1904), new Vector2(-1111.9f, 1904),
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
new List<Vector2>()//8
|
|||
|
|
{
|
|||
|
|
new Vector2(1019, -1791), new Vector2(377.8f, -1791), new Vector2(-386f, -1791), new Vector2(-1026, -1791),
|
|||
|
|
new Vector2(1019, -1153.4f), new Vector2(377.8f, -1153.4f), new Vector2(-386f, -1153.4f), new Vector2(-1026,-1153.4f),
|
|||
|
|
new Vector2(1019, -386), new Vector2(377.8f, -386), new Vector2(-386f, -386), new Vector2(-1026, -386),
|
|||
|
|
new Vector2(1019, 381.6f), new Vector2(377.8f, 381.6f), new Vector2(-386f, 381.6f), new Vector2(-1026, 381.6f),
|
|||
|
|
new Vector2(1019, 1149), new Vector2(377.8f, 1149), new Vector2(-386f, 1149), new Vector2(-1026, 1149),
|
|||
|
|
new Vector2(1019, 1787), new Vector2(377.8f, 1787), new Vector2(-386f, 1787), new Vector2(-1026, 1787),
|
|||
|
|
},
|
|||
|
|
new List<Vector2>()
|
|||
|
|
{
|
|||
|
|
new Vector2(1121, -1917), new Vector2(612, -1917), new Vector2(-3, -1917), new Vector2(-615, -1917), new Vector2(-1126, -1917),
|
|||
|
|
new Vector2(1121, -1440), new Vector2(612, -1440), new Vector2(-3, -1440), new Vector2(-615, -1440), new Vector2(-1126, -1440),
|
|||
|
|
new Vector2(1121, -863), new Vector2(612, -863), new Vector2(-3, -863), new Vector2(-615, -863), new Vector2(-1126, -863),
|
|||
|
|
new Vector2(1121, -286), new Vector2(612, -286), new Vector2(-3, -286), new Vector2(-615, -286), new Vector2(-1126, -286),
|
|||
|
|
new Vector2(1121, 292.8f), new Vector2(612, 292.8f), new Vector2(-3, 292.8f), new Vector2(-615, 292.8f), new Vector2(-1126, 292.8f),
|
|||
|
|
new Vector2(1121, 868.5f), new Vector2(612, 868.5f), new Vector2(-3, 868.5f), new Vector2(-615, 868.5f), new Vector2(-1126, 868.5f),
|
|||
|
|
new Vector2(1121, 1442), new Vector2(612, 1442), new Vector2(-3, 1442), new Vector2(-615, 1442), new Vector2(-1126, 1442),
|
|||
|
|
new Vector2(1121, 1922), new Vector2(612, 1922), new Vector2(-3, 1922), new Vector2(-615, 1922), new Vector2(-1126, 1922),
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
private List<GameObject> puzzle_list;
|
|||
|
|
public void PuzzlenResetFunc(object a = null)
|
|||
|
|
{
|
|||
|
|
Debug.Log("脚本里的reset");
|
|||
|
|
for (int i = 0; i < puzzle_list.Count; i++)
|
|||
|
|
{
|
|||
|
|
GameObject.Destroy(puzzle_list[i]);
|
|||
|
|
}
|
|||
|
|
puzzle_list.Clear();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
private void PuzzlenInFunc(object a = null)
|
|||
|
|
{
|
|||
|
|
remain_puzzle_numbers -= 1;
|
|||
|
|
if (remain_puzzle_numbers <= 0)
|
|||
|
|
{
|
|||
|
|
// for (int i = 0; i < puzzle_list.Count; i++)
|
|||
|
|
// {
|
|||
|
|
// GameObject.Destroy(puzzle_list[i]);
|
|||
|
|
// }
|
|||
|
|
// puzzle_list.Clear();
|
|||
|
|
GameDispatcher.Instance.Dispatch(GameMsg.PuzzleSuccess);
|
|||
|
|
AudioManager.Instance.PlayDynamicEffect(AudioConst.puzzle_success);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private GameObject puzzle_parent;
|
|||
|
|
private int remain_puzzle_numbers;
|
|||
|
|
public void CreatPuzzleItem(int type, string imageName, int puzzleNumbers, int puzzle_level)
|
|||
|
|
{
|
|||
|
|
GameObject prefab = Resources.Load<GameObject>("puzzle/item/item");
|
|||
|
|
if (prefab == null) return;
|
|||
|
|
|
|||
|
|
GameObject canvas = GameObject.Find("Canvas");
|
|||
|
|
if (canvas == null) return;
|
|||
|
|
int all_puzzle_numbers = 0;
|
|||
|
|
|
|||
|
|
if (type % 2 == 0)
|
|||
|
|
{
|
|||
|
|
rows = 6;
|
|||
|
|
cols = 4;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
rows = 8;
|
|||
|
|
cols = 5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
all_puzzle_numbers = rows * cols;
|
|||
|
|
img_list.Clear();
|
|||
|
|
line_list.Clear();
|
|||
|
|
for (int i = 1; i <= all_puzzle_numbers; i++)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
img_list.Add(Resources.Load<Sprite>("puzzle/mask/" + type + "/" + i));
|
|||
|
|
line_list.Add(Resources.Load<Sprite>("puzzle/line/" + type + "/" + i + "-line"));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int index = 0;
|
|||
|
|
// puzzleNumbers=1;
|
|||
|
|
remain_puzzle_numbers = puzzleNumbers;
|
|||
|
|
Debug.Log(type);
|
|||
|
|
List<int> random_list = GetRandomNumbers(puzzleNumbers, 0, all_puzzle_numbers - 1);
|
|||
|
|
List<UnityEngine.UI.Image> image_list = new List<UnityEngine.UI.Image>();
|
|||
|
|
for (int r = 0; r < rows; r++)
|
|||
|
|
{
|
|||
|
|
for (int c = 0; c < cols; c++)
|
|||
|
|
{
|
|||
|
|
GameObject piece = Instantiate(prefab, canvas.transform);
|
|||
|
|
RectTransform rt = piece.GetComponent<RectTransform>();
|
|||
|
|
puzzle_list.Add(piece);
|
|||
|
|
|
|||
|
|
|
|||
|
|
float x = offsetList_x[type][c];
|
|||
|
|
float y = offsetList_y[type][r];
|
|||
|
|
Vector2 basePos = new Vector2(x, y);
|
|||
|
|
|
|||
|
|
rt.anchoredPosition = basePos;
|
|||
|
|
|
|||
|
|
// 转换到根 Canvas 的局部坐标
|
|||
|
|
Canvas rootCanvas = GameObject.Find("Canvas").GetComponent<Canvas>();
|
|||
|
|
RectTransform canvasRect = rootCanvas.transform as RectTransform;
|
|||
|
|
Vector3 worldPos = rt.position;
|
|||
|
|
Vector2 canvasLocalPos = canvasRect.InverseTransformPoint(worldPos);
|
|||
|
|
|
|||
|
|
DragPuzzle dp = piece.GetComponent<DragPuzzle>();
|
|||
|
|
dp.snapTarget = canvasLocalPos; // ✅ 用根 Canvas 的局部坐标
|
|||
|
|
|
|||
|
|
dp.snapDistance = 80f;
|
|||
|
|
|
|||
|
|
if (random_list.Contains(index))
|
|||
|
|
{
|
|||
|
|
piece.SetParent(puzzle_parent);
|
|||
|
|
dp.locked = false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 设置图片
|
|||
|
|
Transform mask = piece.transform.Find("mask_obj");
|
|||
|
|
|
|||
|
|
UnityEngine.UI.Image img = mask.GetComponent<UnityEngine.UI.Image>();
|
|||
|
|
|
|||
|
|
img.sprite = img_list[index];
|
|||
|
|
img.SetNativeSize();
|
|||
|
|
|
|||
|
|
Transform image_obj = mask.transform.Find("image_obj");
|
|||
|
|
UnityEngine.UI.Image img_1 = image_obj.GetComponent<UnityEngine.UI.Image>();
|
|||
|
|
|
|||
|
|
UnityEngine.UI.Image line_image = piece.transform.Find("line_obj").GetComponent<UnityEngine.UI.Image>();
|
|||
|
|
line_image.sprite = line_list[index];
|
|||
|
|
line_image.SetNativeSize();
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Sprite source = Resources.Load<Sprite>("puzzle/image/test_img1");
|
|||
|
|
// img_1.sprite = source;
|
|||
|
|
|
|||
|
|
// img_1.SetNativeSize();
|
|||
|
|
// img_1.rectTransform.anchoredPosition = image_offset_list[type][index];
|
|||
|
|
|
|||
|
|
|
|||
|
|
image_list.Add(img_1);
|
|||
|
|
index++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
Shuffle();
|
|||
|
|
TextureHelper.setPuzzle(imageName, image_list, image_offset_list[type]);
|
|||
|
|
RefereshList();
|
|||
|
|
}
|
|||
|
|
private ManualHorizontalList manualHorizontalList;
|
|||
|
|
private void RefereshList()
|
|||
|
|
{
|
|||
|
|
if (manualHorizontalList == null) manualHorizontalList = GameObject.Find("puzzle_parent").GetComponent<ManualHorizontalList>();
|
|||
|
|
Debug.Log("refreshhhhhhhhhhhhhh");
|
|||
|
|
manualHorizontalList.hasSortedOnce = false;
|
|||
|
|
DOVirtual.DelayedCall(0, () =>
|
|||
|
|
{
|
|||
|
|
manualHorizontalList.Refresh();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
public void Shuffle()
|
|||
|
|
{
|
|||
|
|
if (puzzle_parent == null) return;
|
|||
|
|
|
|||
|
|
int count = puzzle_parent.transform.childCount;
|
|||
|
|
// 把所有子物体存到数组里
|
|||
|
|
Transform[] children = new Transform[count];
|
|||
|
|
for (int i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
children[i] = puzzle_parent.transform.GetChild(i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 随机打乱数组
|
|||
|
|
for (int i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
int randIndex = Random.Range(i, count);
|
|||
|
|
Transform temp = children[i];
|
|||
|
|
children[i] = children[randIndex];
|
|||
|
|
children[randIndex] = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 重新设置 sibling 顺序
|
|||
|
|
for (int i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
children[i].SetSiblingIndex(i);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
List<int> GetRandomNumbers(int count, int min, int maxInclusive)
|
|||
|
|
{
|
|||
|
|
// 生成完整区间
|
|||
|
|
List<int> numbers = new List<int>();
|
|||
|
|
for (int i = min; i <= maxInclusive; i++)
|
|||
|
|
{
|
|||
|
|
numbers.Add(i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Fisher-Yates 洗牌
|
|||
|
|
for (int i = numbers.Count - 1; i > 0; i--)
|
|||
|
|
{
|
|||
|
|
int j = Random.Range(0, i + 1);
|
|||
|
|
int temp = numbers[i];
|
|||
|
|
numbers[i] = numbers[j];
|
|||
|
|
numbers[j] = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 取前 count 个
|
|||
|
|
return numbers.GetRange(0, count);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public ScrollRect scrollRect; // 指向你的 ScrollView
|
|||
|
|
private float interval = 0.5f; // 每个拼图之间的间隔
|
|||
|
|
private float flyDuration = 0.4f; // 每个拼图的飞行时长
|
|||
|
|
|
|||
|
|
// 倒数 n 个依次飞向各自的吸附点(调用各自 DragPuzzle.FlyAndSnap)
|
|||
|
|
public void FlyLastN(int n)
|
|||
|
|
{
|
|||
|
|
StartCoroutine(FlyLastNCoroutine(n));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private IEnumerator FlyLastNCoroutine(int n)
|
|||
|
|
{
|
|||
|
|
if (scrollRect == null) scrollRect = GameObject.Find("ScrollView").GetComponent<ScrollRect>();
|
|||
|
|
RectTransform content = scrollRect.content;
|
|||
|
|
int count = content.childCount;
|
|||
|
|
if (count == 0 || n <= 0) yield break;
|
|||
|
|
|
|||
|
|
// 从后往前选 n 个
|
|||
|
|
for (int i = 0; i < n; i++)
|
|||
|
|
{
|
|||
|
|
int index = count - 1 - i;
|
|||
|
|
if (index < 0) break;
|
|||
|
|
|
|||
|
|
DragPuzzle piece = content.GetChild(index).GetComponent<DragPuzzle>();
|
|||
|
|
if (piece != null)
|
|||
|
|
{
|
|||
|
|
piece.FlyAndSnap(flyDuration); // 调用“每个脚本自身”的飞方法
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (i < n - 1) // 最后一个不再等待
|
|||
|
|
{
|
|||
|
|
yield return new WaitForSeconds(interval);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|