int SortByMultiple(Fishing_Fish a, Fishing_Fish b)//按倍率从大到小排列 { FishingFishData dataA = Fishing_Data.GetInstance().m_FishData[a.m_nTypeId]; FishingFishData dataB = Fishing_Data.GetInstance().m_FishData[b.m_nTypeId]; return(dataB.m_nMultiple - dataA.m_nMultiple); }
public void Init(CGame_Fishing game, splineMove move, uint index, byte typeId) { AssetBundle ab = game.FishingAssetBundle; m_Animator = GetComponent <Animator>(); m_Animator.speed = 0f; m_SplineMove = move; m_nOnlyId = index; m_nTypeId = typeId; m_Renderers = gameObject.GetComponentsInChildren <Renderer>(); foreach (Renderer child in m_Renderers) { child.enabled = false; } if (m_SplineMove != null) { if (m_SplineMove.loopType != splineMove.LoopType.loop) { m_SplineMove.tween.OnComplete(OnComplete); } m_SplineMove.tween.OnPlay(OnPlay); } else { OnPlay(); } m_LockSitList.Clear(); m_LockPointTfm = transform.parent.Find("Point_LockTarget"); FishingFishData fd = Fishing_Data.GetInstance().m_FishData[m_nTypeId]; if (fd.m_nHitAudio != 0) { m_HitSound = gameObject.AddComponent <AudioSource>(); m_HitSound.clip = ab.LoadAsset <AudioClip>(CustomAudioDataManager.GetInstance().GetSoundName(fd.m_nHitAudio)); } if (fd.m_nDeadAudio != 0) { m_DeadSound = gameObject.AddComponent <AudioSource>(); m_DeadSound.clip = ab.LoadAsset <AudioClip>(CustomAudioDataManager.GetInstance().GetSoundName(fd.m_nDeadAudio)); } if (fd.m_szTalk.Length > 0) { m_TalkObj = (GameObject)ab.LoadAsset("talk_Image_BG"); m_TalkObj = (GameObject)Instantiate(m_TalkObj); m_TalkObj.GetComponentInChildren <Text>().text = fd.m_szTalk; m_TalkObj.transform.SetParent(game.MainUITfm.Find("point_talk"), false); Invoke("ShowTalk", fd.m_nTalkInterval); Invoke("HideTalk", fd.m_nTalkInterval + fd.m_nTalkShowTime); UpdateTalk(); m_TalkObj.SetActive(false); } }
Fishing_Fish[] CreatFish(byte fishTypeId, FishingPathData pd, Transform parent, PathManager pm, uint fishId, int count, float passTime, byte group, byte index) { if (!Fishing_Data.GetInstance().m_FishData.ContainsKey(fishTypeId)) { DebugLog.LogError("fish:" + fishTypeId + " data is error!!"); return(null); } FishingFishData fd = Fishing_Data.GetInstance().m_FishData[fishTypeId]; GameObject prefab = (GameObject)m_GameBase.FishingAssetBundle.LoadAsset(fd.m_szFish); int arrayCount = pd.m_Offsets.Count > 0 ? pd.m_Offsets.Count : 1; Debug.Assert(count != 0 && count <= arrayCount, "create fish count wrong!!"); Fishing_Fish[] fishs = new Fishing_Fish[count]; for (uint j = 0; j < count; j++) { GameObject go = (GameObject)GameMain.instantiate(prefab); go.transform.SetParent(parent, false); splineMove sm = go.AddComponent <splineMove>(); sm.local = true; sm.lookAhead = 0.01f; sm.forwardDir = Vector3.right; sm.pathMode = PathMode.Ignore; sm.offset = index < pd.m_Offsets.Count ? pd.m_Offsets[index] : Vector3.zero; sm.waypointRotation = (fd.m_nRotType == 1) ? splineMove.RotationType.all : splineMove.RotationType.none; if (m_GameBase.IsMirror()) { sm.eulerAngles = (fd.m_nRotType == 1) ? new Vector3(180f, 0f, 0f) : new Vector3(0f, 0f, 180f); } else { sm.eulerAngles = Vector3.zero; } sm.speed = fd.m_GroupSpeed[group]; sm.loopType = pd.m_bLoop ? splineMove.LoopType.loop : splineMove.LoopType.none; sm.SetPath(pm); sm.GoTo(GetPathPassTime(passTime, sm, pd)); if (FishPause) { sm.Pause(); } Fishing_Fish fish = go.transform.Find("skin").gameObject.AddComponent <Fishing_Fish>(); fish.Init(m_GameBase, sm, fishId + j, fishTypeId); fish.OnDeath += RemoveFish; fishs[j] = fish; m_FishDict.Add(fish.m_nOnlyId, fish); } return(fishs); }
IEnumerator PopCoin(Fishing_Fish fish, FishingFishData fd, bool bLocal, long getCoin, Vector3 center, Vector3 targetPos, byte getSkillId) { //DebugLog.Log("num:" + num + " center:" + center + " target:" + targetPos); if (getCoin <= 0) { yield break; } CGame_Fishing game = fish.m_CatchRole.GameBase; AssetBundle ab = game.FishingAssetBundle; Canvas cv = game.GameCanvas; Transform root = cv.transform.Find("Root"); GameObject prefab; GameObject big = null; if (fd.m_nMultiple >= 20) { prefab = (GameObject)ab.LoadAsset("FishCoin_big"); big = ((GameObject)GameMain.instantiate(prefab)); big.transform.SetParent(root, false); big.transform.localPosition = center; game.m_AddItems.Add(big); Camera.main.DOShakePosition(1f, 1f).OnComplete(() => { Camera.main.transform.position = game.CameraSourcePos; }); CustomAudioDataManager.GetInstance().PlayAudio(1004); } else { CustomAudioDataManager.GetInstance().PlayAudio(1003); } yield return(new WaitUntil(() => m_bDeathEnd)); Transform effectTfm = fish.transform.parent.Find("Effect"); if (effectTfm != null) { effectTfm.DOScale(Vector3.zero, 1f); } fish.transform.parent.DOScale(Vector3.zero, 1f); prefab = (GameObject)ab.LoadAsset(bLocal ? "Text_HurtNum" : "Text_HurtNum_other"); GameObject textObj = ((GameObject)GameMain.instantiate(prefab)); textObj.transform.SetParent(root.Find("HurtNum"), false); textObj.transform.localPosition = center; textObj.transform.localScale = Vector3.zero; textObj.transform.GetComponent <Text>().text = GameFunction.FormatCoinText(getCoin, true, false); game.m_AddItems.Add(textObj); textObj.transform.DOScale(new Vector3(1f, 1f, 1f), 0.5f).OnComplete(() => { textObj.transform.DOScale(new Vector3(1f, 1f, 1f), 0.5f).OnComplete(() => { game.m_AddItems.Remove(textObj); Destroy(textObj); }); }); bool bCoin = true; if (getSkillId > 0 && bLocal) { if (getSkillId == RoomInfo.NoSit)//lottery { prefab = (GameObject)ab.LoadAsset("Skill_Ticket"); bCoin = false; } else { prefab = (GameObject)ab.LoadAsset("Skill_" + getSkillId); } if (prefab != null) { GameObject skillObj = Instantiate(prefab); skillObj.transform.SetParent(root, false); skillObj.transform.localPosition = center; game.m_AddItems.Add(skillObj); skillObj.transform.DOLocalMove(center + new Vector3(0, 100f, 0f), 1f).OnComplete(() => { game.m_AddItems.Remove(skillObj); Destroy(skillObj); }); } } if (bCoin) { int num = Mathf.CeilToInt((float)fd.m_nMultiple / 5) + 2; float radius = (num - 1) * 10f; float halfPi = Mathf.PI * 0.5f; float angle; prefab = (GameObject)ab.LoadAsset("FishCoin"); GameObject coin; Vector3 pos; List <GameObject> coinList = new List <GameObject>(); for (int i = 0; i < num; i++) { angle = Random.Range(0f, halfPi) * 4f; coin = ((GameObject)GameMain.instantiate(prefab)); coin.transform.SetParent(root, false); coin.transform.localPosition = center; pos = center + new Vector3(Mathf.Sin(angle), Mathf.Cos(angle)) * Random.Range(0f, radius); coin.transform.DOLocalMove(pos, 0.5f); //DebugLog.Log(i + ": angle:" + angle + " pos:" + pos); coinList.Add(coin); game.m_AddItems.Add(coin); yield return(new WaitForEndOfFrame()); } yield return(new WaitForSecondsRealtime(1f)); CustomAudioDataManager.GetInstance().PlayAudio(1002); float flyTime = 0.5f; foreach (GameObject obj in coinList) { if (obj == null) { continue; } Vector3 dir = targetPos - obj.transform.localPosition; Vector3 speed = new Vector3(dir.x / flyTime, 0f); float a = dir.y * 2f / (flyTime * flyTime); DOTween.To(() => obj.transform.localPosition, r => { obj.transform.localPosition += (speed * Time.unscaledDeltaTime); speed.y = speed.y + a * Time.unscaledDeltaTime; }, targetPos, flyTime); } yield return(new WaitForSecondsRealtime(flyTime)); foreach (GameObject obj in coinList) { if (obj == null) { continue; } game.m_AddItems.Remove(obj); Destroy(obj); } } if (big != null) { game.m_AddItems.Remove(big); Destroy(big); } }
void ReadFishingData() { List <string[]> strList; int j; byte id; ushort pathId; byte temp; CReadCsvBase.ReaderCsvDataFromAB(GameDefine.CsvAssetbundleName, "Fishing_Cannon.txt", out strList); int columnCount = strList.Count; for (int i = 2; i < columnCount; i++) { j = 0; FishingCannonData gamedata = new FishingCannonData(); byte.TryParse(strList[i][j++], out id); gamedata.m_szCannon = strList[i][j++]; gamedata.m_szBullet = strList[i][j++]; float.TryParse(strList[i][j++], out gamedata.m_fBulletSpeed); float.TryParse(strList[i][j++], out gamedata.m_fBulletCD); float.TryParse(strList[i][j++], out gamedata.m_fBulletLifeTime); byte.TryParse(strList[i][j++], out gamedata.m_nBounceTimes); //float.TryParse(strList[i][j++], out gamedata.m_fExplosinRange); j++; gamedata.m_szNet = strList[i][j++]; //int.TryParse(strList[i][j++], out gamedata.m_nBulletCost); j++; //level not read j++; gamedata.m_szBulletPoint = strList[i][j++].Split('|'); gamedata.m_szLvPoint = strList[i][j++]; //gamedata.m_szIcon = strList[i][j++]; j++; int.TryParse(strList[i][j++], out gamedata.m_nAudio); j += 2; gamedata.m_szName = strList[i][j++]; gamedata.m_szDetail = strList[i][j++]; m_CannonData[id] = gamedata; } strList.Clear(); CReadCsvBase.ReaderCsvDataFromAB(GameDefine.CsvAssetbundleName, "Fishing_Path.txt", out strList); columnCount = strList.Count; for (int i = 2; i < columnCount; i++) { j = 0; FishingPathData gamedata = new FishingPathData(); ushort.TryParse(strList[i][j++], out pathId); gamedata.m_szPath = strList[i][j++]; float.TryParse(strList[i][j++], out gamedata.m_fSpeed); float.TryParse(strList[i][j++], out gamedata.m_fTime); byte.TryParse(strList[i][j++], out temp); gamedata.m_bLoop = temp == 0 ? false : true; string str = strList[i][j++]; if (!string.IsNullOrEmpty(str)) { string[] offsets = str.Split('@'); string[] point; foreach (string oft in offsets) { point = oft.Split('|'); Debug.Assert(point.Length == 3, "offset point coordinate wrong(not 3)!!"); Vector3 pos = new Vector3(); float.TryParse(point[0], out pos.x); float.TryParse(point[1], out pos.y); float.TryParse(point[2], out pos.z); gamedata.m_Offsets.Add(pos); } } str = strList[i][j++]; if (!string.IsNullOrEmpty(str)) { string[] speedChange = str.Split('@'); string[] info; foreach (string sc in speedChange) { info = sc.Split('|'); Debug.Assert(info.Length == 3, "point change speed info is wrong(not 3)!!"); byte pointIndex, endIndex; float speed, time; byte.TryParse(info[0], out pointIndex); float.TryParse(info[1], out speed); if (speed == 0f)//pause { float.TryParse(info[2], out time); gamedata.m_ChangePoints[pointIndex] = -time; } else//change speed { byte.TryParse(info[2], out endIndex); gamedata.m_ChangePoints[pointIndex] = speed; gamedata.m_ChangePoints[endIndex] = 1f;//change back } } } m_PathData[pathId] = gamedata; } strList.Clear(); CReadCsvBase.ReaderCsvDataFromAB(GameDefine.CsvAssetbundleName, "Fishing_Fish.txt", out strList); columnCount = strList.Count; for (int i = 2; i < columnCount; i++) { j = 0; FishingFishData gamedata = new FishingFishData(); byte.TryParse(strList[i][j++], out id); gamedata.m_szFish = strList[i][j++]; string[] groupspeed = strList[i][j++].Split('@'); string[] speedStr; foreach (string speed in groupspeed) { speedStr = speed.Split('|'); Debug.Assert(speedStr.Length == 2, "group speed data is wrong(not 2)!!"); gamedata.m_GroupSpeed[byte.Parse(speedStr[0])] = float.Parse(speedStr[1]); } //float.TryParse(strList[i][j++], out gamedata.m_fHitRate); j++; int.TryParse(strList[i][j++], out gamedata.m_nMultiple); j += 5; int.TryParse(strList[i][j++], out gamedata.m_nHitAudio); int.TryParse(strList[i][j++], out gamedata.m_nDeadAudio); string[] strs = strList[i][j++].Split('|'); if (strs.Length == 3) { byte.TryParse(strs[0], out gamedata.m_nTalkInterval); byte.TryParse(strs[1], out gamedata.m_nTalkShowTime); gamedata.m_szTalk = strs[2]; } j += 3; byte.TryParse(strList[i][j++], out temp); gamedata.m_eFishType = (FishType)temp; gamedata.m_szName = strList[i][j++]; gamedata.m_szIcon = strList[i][j++]; byte.TryParse(strList[i][j++], out gamedata.m_nRotType); m_FishData[id] = gamedata; } }