NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Level/LevelInfo.cs

142 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.LevelCfg;
using Gameplay;
using Gameplay.Level;
using Gameplay.Net;
using System.Collections.Generic;
using UnityEngine;
using static Gameplay.Level.LevelData;
using static MapData;
using Debug = DebugUtil;
public class LevelInfo
{
private DataLevel _config;
private LevelData _levelData;
private MapData _mapData;
private Gameplay.Net.LevelInfo _serverData;
#region config
public int ID => _config.Id;
public int Index => _config.Index;
public int ChapterID => _config.ChapterID;
//解锁条件
public int[] UnLockCondition => _config.Unlock;
//消耗
public List<cfg.item.ItemCounts> CostItems => _config.CostItems;
public int[] NomralRewardID => _config.NormalRewardID;
public int[] FirstRewardID => _config.FristRewardID;
//一星奖励
public int[] StarRewardID_1 => _config.StarRewardID1;
//二星奖励
public int[] StarRewardID_2 => _config.StarRewardID2;
//三星奖励
public int[] StarRewardID_3 => _config.StarRewardID3;
public int SettleExp => _config.SettleExp;
public int SettleLikability => _config.SettleLikability;
public string FileName => _config.FileName;
public string Name => StringManager.Instance.GetLocalizeTextByKey(_config.Name);
public string Desc => StringManager.Instance.GetLocalizeTextByKey(_config.Desc);
#endregion
#region Data
public WeatherType WeatherType => _levelData.weatherType;
public DayNightType DayNightType => _levelData.dayNightType;
public EnvironmentType EnvironmentType => _mapData.environmentType;
public bool Lock => IsLock();
public bool CostEnough => IsConstEnough();
public bool CanEnter => !Lock && CostEnough;
#endregion
#region Server Data
public int StarCount => (int)(_serverData == null ? 0 : _serverData.star);
public bool HasPass => _serverData == null ? false : _serverData.isPassed;
#endregion
public LevelInfo(DataLevel config)
{
_config = config;
Load();
}
private async void Load()
{
RefreshServerData();
_levelData = await LevelUtils.LoadLevelData(ID);
_mapData = await MapUtils.LoadMapData(_levelData.mapName);
}
private bool IsLock()
{
if (UnLockCondition == null || UnLockCondition.Length == 0)
{
return false;
}
var allConditionPass = true;
foreach (var unlockID in UnLockCondition)
{
var conditionResult = Actor.Instance.Unlock.IsUnlock((uint)unlockID) == (uint)NLDPB.OpResult.Ok;
allConditionPass = allConditionPass && conditionResult;
if (!allConditionPass)
{
//Debug.Log($"关卡进入条件不满足level id:{ID}");
break;
}
}
return !allConditionPass;
}
private bool IsConstEnough()
{
bool result = true;
if (CostItems == null || CostItems.Count == 0)
return result;
foreach (var costItem in CostItems)
{
var currCount = Actor.Instance.Item.GetItemCount(costItem.Id);
result = result && currCount >= costItem.Count;
if (!result)
{
Debug.LogError($"关卡消耗品不足level id:{ID}");
break;
}
}
return result;
}
public void RefreshServerData()
{
_serverData = Actor.Instance.Level.GetLevelInfo((uint)ID);
}
}