CutePet/Assets/Scripts/GameScene/GameMgr.cs

469 lines
13 KiB
C#
Raw Permalink Normal View History

2024-10-25 11:10:04 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameMgr : SingletonAutoMono<GameMgr>
{
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴμ<CFB4><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵļ<DAB5>
private string LastDayKey;
// <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD>
private string OnlineTimeKey;
//<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ȳ<EFBFBD>
public List<PetObject> petList;
//<2F>ȴ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>
private List<PetObject> delList;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>
private List<PetObject> hightLightList;
//<2F><><EFBFBD><EFBFBD>
private int score=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
public float timeAll = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private float saveTime = 0;
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>ۼ<EFBFBD>
public int skillOne = 0;
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>ۼ<EFBFBD>
public int skillTwo = 0;
public void init()
{
petList = new List<PetObject>();
delList = new List<PetObject>();
hightLightList = new List<PetObject>();
LastDayKey = GameDataMgr.Instance.player.openId;
OnlineTimeKey = GameDataMgr.Instance.player.openId + "_online";
GameDataMgr.Instance.commonMsg.openId=GameDataMgr.Instance.player.openId;
StartCoroutine(MailGet());
}
// Э<>̣<EFBFBD>ÿ10<31><EFBFBD><EBB7A2>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IEnumerator MailGet()
{
while (true)
{
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
StartCoroutine(NetMgr.Instance.MailPost(GameDataMgr.Instance.commonMsg));
// <20>ȴ<EFBFBD>10<31><30><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
yield return new WaitForSeconds(10f);
}
}
void Start()
{
if (IsNewDay())
{
timeAll = 0;
}
else
{
// <20><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
LoadOnlineTime();
}
}
void Update()
{
timeAll += Time.deltaTime;
saveTime += Time.deltaTime;
if (saveTime>=5f)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
SaveOnlineTime();
saveTime = 0f;
}
if (timeAll>=3600f)
{
timeAll = 3600f;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD><EFBFBD><EFBFBD>
private void SaveOnlineTime()
{
PlayerPrefs.SetFloat(OnlineTimeKey, timeAll);
PlayerPrefs.Save();
}
// <20>ӱ<EFBFBD><D3B1>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
private void LoadOnlineTime()
{
timeAll = PlayerPrefs.GetFloat(OnlineTimeKey, 0f);
}
/// <summary>
/// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB>
/// </summary>
/// <returns></returns>
private bool IsNewDay()
{
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ڣ<EFBFBD>ֻ<EFBFBD><D6BB>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>
string nowDay = DateTime.Now.ToString("yyyy-MM-dd");
// <20><> PlayerPrefs <20><><EFBFBD><EFBFBD><EFBFBD>ϴα<CFB4><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string lastDay = PlayerPrefs.GetString(LastDayKey, string.Empty);
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴα<CFB4><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB>
if (string.IsNullOrEmpty(lastDay) || lastDay != nowDay)
{
// <20><><EFBFBD><EFBFBD> PlayerPrefs <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
PlayerPrefs.SetString(LastDayKey, nowDay);
PlayerPrefs.Save();
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < GameDataMgr.Instance.player.onlineGiftOpen.Count; i++)
{
GameDataMgr.Instance.player.onlineGiftOpen[i] = false;
}
StartCoroutine(NetMgr.Instance.ChangeDataPost(GameDataMgr.Instance.player));
return true; // <20><><EFBFBD><EFBFBD> true<75><65><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB>
}
return false; // <20><><EFBFBD><EFBFBD> false<73><65><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>
}
/// <summary>
/// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
/// </summary>
/// <param name="pet"></param>
public void IsHightLight(PetObject pet)
{
pet.CreatHightLight();
hightLightList.Add(pet);
delList.Add(pet);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ɫ<EFBFBD><C9AB><EFBFBD>Ҿ<EFBFBD><D2BE><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < petList.Count; i++)
{
if (petList[i] != null && petList[i].petSprite.sprite == pet.petSprite.sprite && DistancePet(pet, petList[i]) && !petList[i].isHightLight)
{
IsHightLight(petList[i]);
}
}
}
/// <summary>
/// <20><>ɾ<EFBFBD><C9BE><EFBFBD>ȳ谴<C8B3><E8B0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void DelListSort()
{
Dictionary<PetObject, float> dic = new Dictionary<PetObject, float>();
List<KeyValuePair<PetObject, float>> li = new List<KeyValuePair<PetObject, float>>();
float f;
for (int i = 0; i < delList.Count; i++)
{
f = Vector2.Distance(delList[0].transform.position, delList[i].transform.position);
dic.Add(delList[i], f);
}
foreach (KeyValuePair<PetObject, float> kvp in dic)
{
li.Add(kvp);
}
li.Sort((a, b) =>
{
return a.Value > b.Value ? 1 : -1;
});
delList.Clear();
for (int i = 0; i < li.Count; i++)
{
delList.Add(li[i].Key);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ȳ<EFBFBD>
/// </summary>
public void SkillOneDelPet()
{
skillOne = 0;
PetObject pet = petList[UnityEngine.Random.Range(0, petList.Count)];
pet.CreatHightLight();
delList.Add(pet);
List<PetObject> listPet = new List<PetObject>();
int index;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ裬<C8B3>Ҿ<EFBFBD><D2BE><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < petList.Count; i++)
{
if (petList[i] != null && DistancePet(pet, petList[i]) && petList[i].isHightLight == false)
{
if (!delList.Contains(petList[i]))
{
listPet.Add(petList[i]);
}
}
}
if (listPet.Count > 2)
{
for (int j = 0; j < 2; j++)
{
index = UnityEngine.Random.Range(0, listPet.Count);
delList.Add(listPet[index]);
listPet.Remove(listPet[index]);
}
}
else
{
switch (listPet.Count)
{
case 0:
break;
case 1:
delList.Add(listPet[0]);
listPet[0].CreatHightLight();
break;
case 2:
delList.Add(listPet[0]);
listPet[0].CreatHightLight();
delList.Add(listPet[1]);
listPet[0].CreatHightLight();
break;
}
}
listPet.Clear();
DelHightLight();
}
List<PetObject> li = new List<PetObject>();
/// <summary>
/// <20><><EFBFBD><EFBFBD>2ѡ<32><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>ɾ<EFBFBD><C9BE>
/// </summary>
public void SkillTwoDelPet(PetObject pet)
{
if (delList.Count==0)
{
pet.CreatHightLight();
delList.Add(pet);
}
li.Add(pet);
if (delList.Count>0)
{
for (int i = 0; i < delList.Count; i++)
{
if (DistancePet(delList[i], li[0]))
{
if (!delList.Contains(li[0]))
{
li[0].CreatHightLight();
delList.Add(li[0]);
}
}
//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ3<CEAA><33>
if (delList.Count == 3)
{
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
skillTwo = 0;
StartCoroutine(DelPet());
PlayerMain.Instance.isSkillTwoStart = false;
li.Clear();
break;
}
}
}
li.Clear();
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
public void DelHightLight()
{
DelListSort();
StartCoroutine(DelPet());
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private IEnumerator DelPet()
{
//ȡ<><C8A1><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
PlayerMain.Instance.isStart = false;
for (int i = 0; i < delList.Count; i++)
{
petList.Remove(delList[i]);
yield return null;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < delList.Count; i++)
{
//ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
delList[i].CloseSpirte();
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PoolMgr.Instance.GetObj("Music/SoundMusic").GetComponent<SoundMusic>().PlaySoundMusic();
delList[i].DeleteHightLight();
//<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ч
delList[i].CreatDelEff();
if (i<delList.Count-1)
{
yield return new WaitForSeconds(0.2f);
}
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < delList.Count; i++)
{
if (delList[i]!=null)
{
Destroy(delList[i].gameObject);
yield return null;
}
}
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UIManager.Instance.GetPanel<GamePanel>().UpdateScore(AddScore());
//<2F>ı䰴ť<E4B0B4><C5A5>ɫ
UIManager.Instance.GetPanel<GamePanel>().UpdateButon(skillOne,skillTwo);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
ClearDicInfo();
//ͨ<><CDA8>
if (petList.Count == 0)
{
GamePanel gamePanel = UIManager.Instance.GetPanel<GamePanel>();
PlayerData player = GameDataMgr.Instance.player;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if (gamePanel.levInt == GameDataMgr.Instance.levList.Count)
{
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>һ<EFBFBD>ص<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UIManager.Instance.ShowPanel<Pass1Panel>();
//ͨ<>غ󣬹ؿ<F3A3ACB9><D8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>С<EFBFBD><D0A1> ͨ<><CDA8><EFBFBD>ĵڼ<C4B5><DABC><EFBFBD>
if (player.customLev < gamePanel.levInt)
{
player.customLev = gamePanel.levInt;
StartCoroutine(NetMgr.Instance.ChangeDataPost(player));
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
else
{
UIManager.Instance.ShowPanel<Pass2Panel>();
//ͨ<>غ󣬹ؿ<F3A3ACB9><D8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>С<EFBFBD><D0A1> ͨ<><CDA8><EFBFBD>ĵڼ<C4B5><DABC><EFBFBD>
if (player.customLev < gamePanel.levInt)
{
player.customLev = gamePanel.levInt;
StartCoroutine(NetMgr.Instance.ChangeDataPost(player));
}
}
petList.Clear();
}
PlayerMain.Instance.isStart = true;
}
//<2F><><EFBFBD><EFBFBD>list
public void ClearDicInfo()
{
hightLightList.Clear();
delList.Clear();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
public bool DistancePet(PetObject pet, PetObject pet2)
{
if (pet.gameObject == null || pet2.gameObject == null)
{
return false;
}
else if (Vector2.Distance(pet.transform.position, pet2.transform.position) < 2f)
{
return true;
}
return false;
}
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
public void CancelHightLight()
{
for (int i = 0; i < hightLightList.Count; i++)
{
hightLightList[i].DeleteHightLight();
}
ClearDicInfo();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
private int AddScore()
{
if (delList.Count > 0)
{
if (delList.Count >= 5)
{
skillOne += 5 * 5;
if (skillOne>=100)
{
skillOne = 100;
}
skillTwo += 5 * 5;
if (skillTwo >= 200)
{
skillTwo = 200;
}
return score += 5 * 5;
}
else
{
skillOne += delList.Count * delList.Count;
if (skillOne >= 100)
{
skillOne = 100;
}
skillTwo += delList.Count * delList.Count;
if (skillTwo >= 200)
{
skillTwo = 200;
}
return score += delList.Count * delList.Count;
}
}
return score;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>Э<EFBFBD>̺<EFBFBD><CCBA><EFBFBD>
public void CreatePet()
{
StartCoroutine(CreatePetObj());
}
GameObject obj;
private List<GameObject> objs = new List<GameObject>();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>
public IEnumerator CreatePetObj()
{
List<PetInfo> pets = GameDataMgr.Instance.levData.petInfoList;
Transform target = GameObject.Find("GamePos").transform;
if (objs.Count!=0)
{
for (int i = 0; i < objs.Count; i++)
{
Destroy(objs[i].gameObject);
}
objs.Clear();
petList.Clear();
}
for (int i = 0; i < pets.Count; i++)
{
obj = Instantiate(Resources.Load<GameObject>(pets[i].res));
obj.transform.position = new Vector2(pets[i].post_x, pets[i].post_y);
obj.transform.SetParent(target, false);
obj.GetComponent<Rigidbody2D>().simulated = false;
petList.Add(obj.GetComponent<PetObject>());
objs.Add(obj);
}
for (int i = 0; i < objs.Count; i++)
{
objs[i].GetComponent<Rigidbody2D>().simulated = true;
}
yield return null;
}
}