using asap.core; using System.Collections.Generic; using UnityEngine; public class DuelFishingEvent { public int RoleID; public int index; public FishInfoData data; public bool isEnd; public int ItemID; public DuelFishingEvent(int RoleID, int itemID) { ItemID = itemID; this.RoleID = RoleID; } public DuelFishingEvent(int RoleID, int index, FishInfoData data, bool isEnd) { this.RoleID = RoleID; this.index = index; this.data = data; this.isEnd = isEnd; } } public class DuelModel : IDuelPlayerModel { public int RoleID { get; set; } public string PlayerID { get; set; } public int SetRodTime { get; set; } //设置鱼竿时间 public string PlayerName { get; set; } public List CarLevels { get; set; } = new List(6); public string PlayerAvatar { get; set; } public int RankScore { get; set; } public int Mag { get; set; } = 1; public int RodId { get; set; } public int RodLevel { get; set; } public int RodStar { get; set; } public int CurrentPTS { set; get; } //当前分数 public List DuelFishingDatas { get; set; } = new List(); public int CurrentFailNum { get; set; } //失败次数 int MaxFailNum = 3; protected DuelFishingData CurrentState; public int index; public void Init(string playerID, string playerName, string playerAvatar, int randScore, int mag, int maxFail) { PlayerID = playerID; PlayerName = playerName; PlayerAvatar = playerAvatar; RankScore = randScore; Mag = mag; CurrentPTS = 0; CurrentFailNum = 0; MaxFailNum = maxFail; } public void Init(List carLevels) { CarLevels = carLevels; } public void SetRodData(DuelRodData rodData) { RodId = rodData.rodId; RodLevel = rodData.rodLevel; RodStar = rodData.rodStar; } public virtual void Start() { CurrentState = NewDuelFishingData(); } public virtual void StartLastRecordedTime() { } //public virtual void StartFishing() //{ //} public virtual bool StopFishing(FishInfoData data) { if (CurrentState == null) { Debug.LogError("CurrentState is null, please call Start() first."); return false; } CurrentState.fishItemId = data.fishItemId; bool isWin = data.point > 0; CurrentState.isWin = isWin; CurrentState.point = data.point; CurrentPTS += data.point; int stateIndex = 0; if (isWin) { CurrentFailNum = 0; CurrentState.fishCardAdd = data.fishCardAdd; CurrentState.fishRodAdd = data.fishRodAdd; index++; stateIndex = index; } else { CurrentFailNum++; CurrentState.failNum = CurrentFailNum; if (CurrentFailNum >= MaxFailNum) { index++; stateIndex = index; CurrentFailNum = 0; } } bool isEnd = index >= CarLevels.Count; GContext.Publish(new DuelFishingEvent(RoleID, stateIndex, data, isEnd)); CurrentState = NewDuelFishingData(); return isEnd; } public bool IsLastFish() { return index >= CarLevels.Count - 1; } public virtual void CastRod(int fishID) { CurrentState.fishItemId = fishID; GContext.Publish(new DuelFishingEvent(RoleID, fishID)); } public List GetShowDatas() { List duelFishingDatas = new List(); foreach (var data in DuelFishingDatas) { if (data.isWin || data.failNum >= 3) { DuelFishingData showData = new DuelFishingData { slienceTime = data.slienceTime, //castingTime = data.castingTime, fishingTime = data.fishingTime, isWin = data.isWin, fishItemId = data.fishItemId, point = data.point, failNum = data.failNum, fishCardAdd = data.fishCardAdd, fishRodAdd = data.fishRodAdd }; duelFishingDatas.Add(showData); } } return duelFishingDatas; } public FishInfoData GetDuelFishingData(int index, int fishID, int point, float fishCardAdd, float fishingRodAdd) { FishInfoData infoData = new FishInfoData() { fishItemId = fishID, point = point, fishCardAdd = fishCardAdd, fishRodAdd = fishingRodAdd, higher = true, higherCard = true, higherRod = true }; int count = DuelFishingDatas.Count; if (index < 0 || index >= count) { return infoData; } count = 0; for (int i = 0; i < DuelFishingDatas.Count; i++) { DuelFishingData data = DuelFishingDatas[i]; if (data.isWin || data.failNum >= 3) { if (count == index) { if (data.isWin) //设置对手数据 { infoData.higher = data.point < point; infoData.higherCard = data.fishCardAdd < fishCardAdd; infoData.higherRod = data.fishRodAdd < fishingRodAdd; } else break; } count++; } } return infoData; //如果没有找到对应的成功数据,则返回null } public DuelFishingData NewDuelFishingData() { DuelFishingData duelFishingData = new DuelFishingData(); duelFishingData.isWin = false; duelFishingData.slienceTime = 0; duelFishingData.fishingTime = 0; DuelFishingDatas.Add(duelFishingData); return duelFishingData; } }