Files
back_cantanBuilding/Assets/Scripts/Duel/DuelModel.cs
2026-05-26 16:15:54 +08:00

208 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}