2025-03-17 21:56:02 +08:00
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class MapDot : MonoBehaviour
|
|
|
|
|
{
|
2025-03-18 22:32:00 +08:00
|
|
|
|
|
|
|
|
|
public GameObject DotPrefab;
|
|
|
|
|
public GameObject SuperDotPrefab;
|
|
|
|
|
|
|
|
|
|
public int SuperDotNum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
2025-03-17 21:56:02 +08:00
|
|
|
|
public LayerMask ObstadeLayer;
|
|
|
|
|
|
|
|
|
|
public GameObject startPosGameObject;
|
|
|
|
|
public GameObject endPosGameObject;
|
|
|
|
|
public Vector2 startPos;
|
|
|
|
|
public Vector2 endPos;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
|
{
|
|
|
|
|
startPos = startPosGameObject.transform.position;
|
|
|
|
|
endPos = endPosGameObject.transform.position;
|
|
|
|
|
GeneratePellets();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GeneratePellets()
|
|
|
|
|
{
|
|
|
|
|
/*int minX = Mathf.FloorToInt(Mathf.Min(startPos.x, endPos.x));
|
|
|
|
|
int maxX = Mathf.CeilToInt(Mathf.Max(startPos.x, endPos.x));
|
|
|
|
|
int minY = Mathf.FloorToInt(Mathf.Min(startPos.y, endPos.y));
|
|
|
|
|
int maxY = Mathf.CeilToInt(Mathf.Max(startPos.y, endPos.y));*/
|
|
|
|
|
float minX = Mathf.Min(startPos.x, endPos.x);
|
|
|
|
|
float maxX = Mathf.Max(startPos.x, endPos.x);
|
|
|
|
|
float minY = Mathf.Min(startPos.y, endPos.y);
|
|
|
|
|
float maxY = Mathf.Max(startPos.y, endPos.y);
|
|
|
|
|
|
2025-03-18 22:32:00 +08:00
|
|
|
|
List<Vector2> validPositions = new List<Vector2>();//<2F>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
2025-03-17 21:56:02 +08:00
|
|
|
|
for (float x = minX; x <= maxX; x++)
|
|
|
|
|
{
|
2025-03-18 22:32:00 +08:00
|
|
|
|
// int ram = Random.Range(0, 101);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-03-17 21:56:02 +08:00
|
|
|
|
for (float y = minY; y <= maxY; y++)
|
|
|
|
|
{
|
|
|
|
|
Vector2 checkPos = new Vector2(x, y);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Wall<6C><6C><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>
|
|
|
|
|
Collider2D hit = Physics2D.OverlapBox(checkPos, Vector2.one * 0.1f, 0, ObstadeLayer);
|
2025-03-18 22:32:00 +08:00
|
|
|
|
if (!hit)
|
2025-03-17 21:56:02 +08:00
|
|
|
|
{
|
2025-03-18 22:32:00 +08:00
|
|
|
|
validPositions.Add(checkPos);
|
2025-03-17 21:56:02 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-18 22:32:00 +08:00
|
|
|
|
|
|
|
|
|
// <20>ڶ<EFBFBD><DAB6>Σ<D7B6><CEA3><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><F1B3ACBC><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
List<Vector2> superDotPositions = new List<Vector2>();
|
|
|
|
|
int superDotCount = Mathf.Min(SuperDotNum, validPositions.Count);//<2F><><EFBFBD>ᳬ<EFBFBD><E1B3AC><EFBFBD><EFBFBD>Χ
|
|
|
|
|
|
|
|
|
|
// ʹ<><CAB9>Fisher-Yatesϴ<73><CFB4><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
for (int i = 0; i < superDotCount; i++)
|
|
|
|
|
{
|
|
|
|
|
int randomIndex = Random.Range(i, validPositions.Count);//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Vector2 temp = validPositions[i];
|
|
|
|
|
validPositions[i] = validPositions[randomIndex];
|
|
|
|
|
validPositions[randomIndex] = temp;
|
|
|
|
|
|
|
|
|
|
superDotPositions.Add(validPositions[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Σ<D7B6>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
|
|
|
|
foreach (Vector2 pos in validPositions)
|
|
|
|
|
{
|
|
|
|
|
bool isSuperDot = superDotPositions.Contains(pos);//ѭ<><D1AD><EFBFBD><EFBFBD>ǰֵ<C7B0>Dz<EFBFBD><C7B2>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
GameObject prefab = isSuperDot ? SuperDotPrefab : DotPrefab;//<2F><>Ŀ
|
|
|
|
|
Instantiate(prefab, pos, Quaternion.identity, transform);
|
|
|
|
|
GameManager.instance.AddDotNum(1);
|
|
|
|
|
}
|
2025-03-17 21:56:02 +08:00
|
|
|
|
}
|
2025-03-18 22:32:00 +08:00
|
|
|
|
|
2025-03-17 21:56:02 +08:00
|
|
|
|
}
|
2025-03-18 22:32:00 +08:00
|
|
|
|
|