208 lines
6.1 KiB
C#
208 lines
6.1 KiB
C#
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<int> CarLevels { get; set; } = new List<int>(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<DuelFishingData> DuelFishingDatas { get; set; } = new List<DuelFishingData>();
|
||
|
||
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<int> 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<DuelFishingData> GetShowDatas()
|
||
{
|
||
List<DuelFishingData> duelFishingDatas = new List<DuelFishingData>();
|
||
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;
|
||
}
|
||
}
|