2023-10-19 15:00:19 +08:00
|
|
|
|
using cfg.LevelCfg;
|
|
|
|
|
|
using System.Collections.Generic;
|
2023-11-17 13:14:55 +08:00
|
|
|
|
using Code.Scripts.Gameplay.Utils;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using Framework;
|
|
|
|
|
|
using Gameplay.AI;
|
2023-12-14 14:42:27 +08:00
|
|
|
|
using Gameplay.Area;
|
2024-07-12 13:51:06 +08:00
|
|
|
|
using Gameplay.BT.Variables;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Buff;
|
|
|
|
|
|
using Gameplay.Character;
|
|
|
|
|
|
using Gameplay.Effect;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using Gameplay.Emoji;
|
2024-05-30 19:41:10 +08:00
|
|
|
|
using Gameplay.Fight.Capture;
|
|
|
|
|
|
using Gameplay.Fight.Flag;
|
2024-02-20 15:17:22 +08:00
|
|
|
|
using Gameplay.Pause;
|
2024-04-30 16:00:13 +08:00
|
|
|
|
using Gameplay.Performance;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using Gameplay.Pool;
|
2024-07-10 18:07:00 +08:00
|
|
|
|
using Gameplay.PostProcess.BlackArea;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Skill;
|
2023-11-20 14:10:18 +08:00
|
|
|
|
using Gameplay.SubSystems;
|
2023-12-13 16:20:41 +08:00
|
|
|
|
using Gameplay.Unit;
|
2024-07-12 13:51:06 +08:00
|
|
|
|
using Gameplay.Unit.Data;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Vehicle;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using PhxhSDK;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using UnityEngine;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using Constants = Framework.Constants;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Gameplay.Level
|
|
|
|
|
|
{
|
|
|
|
|
|
public partial class Level : IUpdatable, ILoadable
|
|
|
|
|
|
{
|
2024-07-12 13:51:06 +08:00
|
|
|
|
private const string AIBehavior = "AIBehavior";
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private int _id;
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
private LevelData _levelData;
|
2023-11-20 14:10:18 +08:00
|
|
|
|
private LevelInfo _currLevelInfo;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
private Map _map;
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private StateMachine _stateMachine = new StateMachine();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
public bool isInBattle = false;
|
2023-12-26 18:19:05 +08:00
|
|
|
|
private object _param;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
public int ID => _id;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
public Map Map => _map;
|
2023-10-26 16:04:03 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
public float LevelTime { set; get; }
|
|
|
|
|
|
|
2023-12-26 18:19:05 +08:00
|
|
|
|
public bool IsPvPLevel => _id == TableManager.Instance.Tables.GlobalConfig.PVPLevelID;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2024-06-03 14:40:28 +08:00
|
|
|
|
public Level(int leveId,
|
|
|
|
|
|
object param = null)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
_id = leveId;
|
2023-12-26 18:19:05 +08:00
|
|
|
|
_param = param;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
Init();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private Dictionary<string, DataLevel> _configLevelDic = new Dictionary<string, DataLevel>();
|
|
|
|
|
|
public Dictionary<string, DataLevel> ConfigLevelDic => _configLevelDic;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private void LoadConfigLevel()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2023-11-20 14:10:18 +08:00
|
|
|
|
_currLevelInfo = LevelManager.Instance.GetLevelInfoByID(_id);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-20 14:10:18 +08:00
|
|
|
|
private async UniTask LoadScene()
|
|
|
|
|
|
{
|
|
|
|
|
|
await GameSceneManager.Instance.LoadSceneAsync(_currLevelInfo.LevelScene);
|
2024-07-04 14:10:17 +08:00
|
|
|
|
await AssetManager.Instance.LoadAndInstAsync(CmpAreaColorSettings.ASSET_PATH);
|
2023-11-20 14:10:18 +08:00
|
|
|
|
}
|
2023-12-26 18:19:05 +08:00
|
|
|
|
|
2023-11-21 15:04:56 +08:00
|
|
|
|
private async UniTask UnLoadScene()
|
|
|
|
|
|
{
|
|
|
|
|
|
await GameSceneManager.Instance.UnLoadSceneAsync(_currLevelInfo.LevelScene);
|
2024-07-04 14:10:17 +08:00
|
|
|
|
AssetManager.Instance.Unload(CmpAreaColorSettings.ASSET_PATH);
|
2023-11-21 15:04:56 +08:00
|
|
|
|
}
|
2023-12-26 18:19:05 +08:00
|
|
|
|
|
2024-06-05 19:08:49 +08:00
|
|
|
|
private void LoadData()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-01-17 16:49:32 +08:00
|
|
|
|
_levelData = _currLevelInfo.LevelData;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async UniTask LoadMap()
|
|
|
|
|
|
{
|
2023-11-20 14:10:18 +08:00
|
|
|
|
// if (_levelData != null)
|
|
|
|
|
|
// {
|
2023-12-26 18:19:05 +08:00
|
|
|
|
// if (_map != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// MapUtils.RemoveCameraController(CameraManager.Instance.MainCamera);
|
|
|
|
|
|
// MapUtils.UnLoadMap(_map);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
2024-01-17 16:49:32 +08:00
|
|
|
|
_map = await MapUtils.LoadMap(_currLevelInfo.MapData);
|
2024-01-15 14:20:22 +08:00
|
|
|
|
//NLDSceneManager.Instance.SceneCamera.gameObject.SetActive(false);
|
2024-02-21 17:54:08 +08:00
|
|
|
|
var sceneCamera = NLDSceneManager.Instance.SceneCamera;
|
2024-02-23 14:24:08 +08:00
|
|
|
|
// Debug.LogError(sceneCamera.scene + " " + sceneCamera.name);
|
2024-02-21 17:54:08 +08:00
|
|
|
|
CameraManager.Instance.SwitchMainCamera(sceneCamera);
|
2024-01-15 14:20:22 +08:00
|
|
|
|
MapUtils.BindCameraController(NLDSceneManager.Instance.SceneCamera, _map);
|
|
|
|
|
|
//MapUtils.BindCameraController(CameraManager.Instance.MainCamera, _map);
|
2023-11-20 14:10:18 +08:00
|
|
|
|
//}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-03 14:40:28 +08:00
|
|
|
|
private async UniTask _LoadNpc()
|
2023-12-26 18:19:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!IsPvPLevel)
|
2024-06-03 14:40:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
await _LoadEnemyFromLevelData();
|
|
|
|
|
|
await _LoadBeProtectFromLevelData();
|
|
|
|
|
|
}
|
2023-12-26 18:19:05 +08:00
|
|
|
|
else
|
2024-06-03 14:40:28 +08:00
|
|
|
|
{
|
2024-05-17 12:24:55 +08:00
|
|
|
|
await _LoadNPCFromPVPData();
|
2024-06-03 14:40:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async UniTask _LoadBeProtectFromLevelData()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_levelData == null) return;
|
2024-06-04 18:12:20 +08:00
|
|
|
|
var infos = _levelData.protectUnitInfos;
|
|
|
|
|
|
for (int i = 0; i < infos.Count; i++)
|
2024-06-03 14:40:28 +08:00
|
|
|
|
{
|
2024-06-04 18:12:20 +08:00
|
|
|
|
var info = infos[i];
|
|
|
|
|
|
var createUnit = await GameUnitManager.instance.PrepareBeProtectUnit(info.id);
|
|
|
|
|
|
if (createUnit == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("创建护送对象失败");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-06-04 18:12:20 +08:00
|
|
|
|
createUnit.transData.bornCellIndex = info.protectStartPoint;
|
|
|
|
|
|
GameUnitManager.instance.MoveUnitToFight(createUnit.GetID(), info.protectStartPoint, 0);
|
2024-06-12 18:14:56 +08:00
|
|
|
|
createUnit.CreateTargetPoint(info.protectTargetPoint);
|
2024-06-03 14:40:28 +08:00
|
|
|
|
}
|
2023-12-26 18:19:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-03 14:40:28 +08:00
|
|
|
|
private async UniTask _LoadEnemyFromLevelData()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-06-03 14:40:28 +08:00
|
|
|
|
if (_levelData == null) return;
|
|
|
|
|
|
if (_map == null) return;
|
|
|
|
|
|
for (var i = 0; i < _levelData.npcInfos.Count; i++)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-06-03 14:40:28 +08:00
|
|
|
|
var npcInfo = _levelData.npcInfos[i];
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: LT:临时处理,后续需要根据配置来
|
|
|
|
|
|
var teamId = ETroopsId.Enemy1;
|
|
|
|
|
|
var cellIndex = _map.BlockPosition2TGSCellIndex(npcInfo.position);
|
|
|
|
|
|
var yaw = LevelUtils.SetCharaterToward(npcInfo.npcToward);
|
|
|
|
|
|
var npcCharacter =
|
|
|
|
|
|
await GameUnitManager.instance.PrepareNpc(npcInfo, teamId);
|
|
|
|
|
|
if (npcCharacter == null)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-06-03 14:40:28 +08:00
|
|
|
|
DebugUtil.LogError("创建npc失败");
|
|
|
|
|
|
continue;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
|
|
|
|
|
npcCharacter.runtimeData.characterLevelData = new CharacterLevelData()
|
|
|
|
|
|
{
|
|
|
|
|
|
AttachAIName = npcInfo.attachAIType,
|
|
|
|
|
|
AIName = npcInfo.aIType,
|
|
|
|
|
|
BornPosition = npcInfo.position,
|
|
|
|
|
|
NpcToward = npcInfo.npcToward,
|
2024-07-22 14:46:20 +08:00
|
|
|
|
PatrolInfos = npcInfo.patrolInfos,
|
|
|
|
|
|
GroupInfos = npcInfo.groups,
|
2024-06-03 14:40:28 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
npcCharacter.transData.bornCellIndex = cellIndex;
|
|
|
|
|
|
GameUnitManager.instance.MoveUnitToFight(npcCharacter.GetID(), cellIndex, yaw);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-17 12:24:55 +08:00
|
|
|
|
private async UniTask _LoadNPCFromPVPData()
|
2023-12-26 18:19:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
var pvpDefenderData = _param as PVPDefenderData;
|
|
|
|
|
|
if (pvpDefenderData == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("pvp参数不合法!");
|
2024-01-03 16:40:57 +08:00
|
|
|
|
return;
|
2023-12-26 18:19:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-12-27 13:57:32 +08:00
|
|
|
|
for (var i = 0; i < pvpDefenderData.pvpRuntimeUnitInfos.Count; i++)
|
2023-12-26 18:19:05 +08:00
|
|
|
|
{
|
2023-12-27 13:57:32 +08:00
|
|
|
|
var pvpUnitData = pvpDefenderData.pvpRuntimeUnitInfos[i];
|
|
|
|
|
|
//var id = (uint)pvpUnitData.unitID;
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2023-12-27 13:57:32 +08:00
|
|
|
|
var position = _map.TGSCellIndex2BlockPosition(pvpUnitData.cellIndex);
|
2023-12-26 18:19:05 +08:00
|
|
|
|
var teamId = ETroopsId.Enemy1;
|
|
|
|
|
|
GameUnit unit = null;
|
|
|
|
|
|
switch (pvpUnitData.type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case Framework.Wrapper.Unit.UnitType.Charactor:
|
2023-12-27 13:57:32 +08:00
|
|
|
|
var cInfo = new CharacterDataInfo();
|
|
|
|
|
|
cInfo.Refresh(pvpUnitData.characterInfo);
|
2023-12-26 18:19:05 +08:00
|
|
|
|
unit = await GameUnitManager.instance.PrepareCharacter(cInfo, teamId);
|
|
|
|
|
|
var character = (Character.Character)unit;
|
|
|
|
|
|
character.runtimeData.characterLevelData = new CharacterLevelData()
|
|
|
|
|
|
{
|
|
|
|
|
|
AttachAIName = pvpUnitData.attachAIType,
|
|
|
|
|
|
AIName = pvpUnitData.aiType,
|
2023-12-27 13:57:32 +08:00
|
|
|
|
BornPosition = position,
|
2023-12-26 18:19:05 +08:00
|
|
|
|
NpcToward = _levelData.pvpDefendToward,
|
|
|
|
|
|
PatrolInfos = new(),
|
2024-07-22 14:46:20 +08:00
|
|
|
|
GroupInfos = new (),
|
2023-12-26 18:19:05 +08:00
|
|
|
|
};
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Framework.Wrapper.Unit.UnitType.Vehicle:
|
2023-12-27 13:57:32 +08:00
|
|
|
|
//todo VehicleCultivateData第二个参数
|
|
|
|
|
|
var vInfo = new VehicleCultivateData();
|
|
|
|
|
|
vInfo.Refresh(pvpUnitData.vehicleInfo);
|
2023-12-26 18:19:05 +08:00
|
|
|
|
unit = await GameUnitManager.instance.PrepareVehicle(vInfo, teamId);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (unit == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("创建pvp unit失败");
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2023-12-26 18:19:05 +08:00
|
|
|
|
var yaw = LevelUtils.SetCharaterToward(_levelData.pvpDefendToward);
|
2023-12-27 13:57:32 +08:00
|
|
|
|
GameUnitManager.instance.MoveUnitToFight(unit.GetID(), pvpUnitData.cellIndex, yaw);
|
2023-12-26 18:19:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-15 16:24:53 +08:00
|
|
|
|
// public void BindMap(Map map)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (map != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// _map = map;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (_map.MapData.name.Equals(_levelData.mapName))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// DebugUtil.LogError("{0}.{1} Error:map name not match", GetType(),
|
|
|
|
|
|
// System.Reflection.MethodBase.GetCurrentMethod()?.Name);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
|
|
|
|
|
public void Update(float deltaTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_isPause)
|
|
|
|
|
|
{
|
|
|
|
|
|
_stateMachine.Update(deltaTime * _speed);
|
2023-12-26 18:26:00 +08:00
|
|
|
|
// GameUnitManager.instance.LogicUpdate(deltaTime * _speed);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
AIManager.Instance.Update(deltaTime * _speed);
|
|
|
|
|
|
SelecterView.Instance.Update(deltaTime * _speed);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 这里是 level system的初始化,不是 level 场景的初始化
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
AIManager.Instance.Init();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
|
GameUnitManager.CreateInstance();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
SkillManager.CreateInstance();
|
|
|
|
|
|
BuffManager.CreateInstance();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
EmojiManager.CreateInstance();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Release()
|
|
|
|
|
|
{
|
2023-12-27 13:04:02 +08:00
|
|
|
|
AreaManager.instance.Dispose();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
EmojiManager.inst.Dispose();
|
|
|
|
|
|
|
|
|
|
|
|
SkillManager.instance.Dispose();
|
|
|
|
|
|
BuffManager.instance.Dispose();
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
_stateMachine?.ChangeState(null);
|
|
|
|
|
|
|
|
|
|
|
|
AIManager.Instance.Release();
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-05-30 19:41:10 +08:00
|
|
|
|
CaptureManager.instance.Dispose();
|
|
|
|
|
|
FlagManager.instance.Dispose();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2024-02-20 14:33:52 +08:00
|
|
|
|
// 在这里释放所有单位
|
|
|
|
|
|
GameUnitManager.instance.Dispose();
|
2024-02-20 15:17:22 +08:00
|
|
|
|
|
|
|
|
|
|
if (PauseManager.instance != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
PauseManager.instance.Dispose();
|
|
|
|
|
|
}
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-02-20 15:17:22 +08:00
|
|
|
|
EffectManager.instance.ClearPool();
|
|
|
|
|
|
ObjPoolManager.instance.Clear();
|
2024-07-12 18:23:00 +08:00
|
|
|
|
BlackAreaManager.instance.Dispose();
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-03-21 12:19:23 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.TIREMARK_UNIT_PATH);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.TIREMARK_MAT_PATH);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.CHARACTER_SELECT_GROUND_GFX);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.EMOJI_HEAD_MAT);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SUMMON_BOTTOM_PATH_SELF);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SUMMON_BOTTOM_PATH_ENEMY);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SKILL_GORUND_HIGH_LIGHT);
|
2024-04-30 16:00:13 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.CHARACTER_TARGET_GFX);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.ROAD_LINE_PATH);
|
2024-05-30 18:58:13 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.CAPTURE_POINT_PATH);
|
2024-06-12 18:14:56 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.CAPTURE_FINISHED_POINT_PATH);
|
2024-05-31 16:46:35 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.FLAG_GROUND_PATH);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.FLAG_PICK_PATH);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.FLAG_RETURN_PATH);
|
2024-06-12 18:14:56 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.PROTECT_TARGET_POINT_PATH);
|
2024-07-10 19:51:24 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.FIGHT_LIGHT_AREA_PATH);
|
2024-07-12 18:23:00 +08:00
|
|
|
|
AssetManager.Instance.Unload(Constants.FIGHT_CELL_COLLIDER_PATH);
|
2024-04-30 16:00:13 +08:00
|
|
|
|
|
|
|
|
|
|
_UnloadOutlinePost();
|
2024-03-21 14:44:09 +08:00
|
|
|
|
|
|
|
|
|
|
_UnLoadWeather();
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-04-11 13:23:29 +08:00
|
|
|
|
// 卸载关卡时强制隐藏技能相机
|
|
|
|
|
|
CameraManager.Instance.SkillCamera.gameObject.SetActive(false);
|
2024-03-21 14:44:09 +08:00
|
|
|
|
}
|
2024-04-30 16:00:13 +08:00
|
|
|
|
|
|
|
|
|
|
private void _UnloadOutlinePost()
|
|
|
|
|
|
{
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SHADER_OUTLINE_PATH1);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SHADER_OUTLINE_PATH1_1);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SHADER_OUTLINE_PATH2);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.SHADER_OUTLINE_PATH3);
|
|
|
|
|
|
AssetManager.Instance.Unload(Constants.OUTLINE_POSTPROCESS_PATH);
|
|
|
|
|
|
}
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-03-21 14:44:09 +08:00
|
|
|
|
private void _UnLoadWeather()
|
|
|
|
|
|
{
|
|
|
|
|
|
var weatherType = (int)_currLevelInfo.WeatherType;
|
2024-07-19 13:52:08 +08:00
|
|
|
|
var groundType = (int)_currLevelInfo.EnvironmentType;
|
|
|
|
|
|
var weatherEffectConfig = TableManager.Instance.Tables.WeatherEffectConfig.Get(weatherType, groundType);
|
|
|
|
|
|
if (weatherEffectConfig == null)
|
2024-03-21 14:44:09 +08:00
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-07-19 13:52:08 +08:00
|
|
|
|
var cameraPrefab = weatherEffectConfig.CameraPrefab;
|
2024-03-21 14:44:09 +08:00
|
|
|
|
if (string.IsNullOrEmpty(cameraPrefab))
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-03-21 14:44:09 +08:00
|
|
|
|
AssetManager.Instance.Unload(cameraPrefab);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async UniTask Load()
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
LoadConfigLevel();
|
2023-12-26 18:19:05 +08:00
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
|
// GameUnitManager.instance.PrepareUnits();
|
2024-04-10 17:21:24 +08:00
|
|
|
|
//UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_Loading); // 打开加载界面时已经移除
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
2023-11-20 14:10:18 +08:00
|
|
|
|
await LoadScene();
|
2024-06-05 19:08:49 +08:00
|
|
|
|
LoadData();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
await LoadMap();
|
2024-03-21 14:44:09 +08:00
|
|
|
|
await _LoadWeather();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
|
|
|
|
|
await _InitAfterLoadMap();
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
await _LoadOthers();
|
|
|
|
|
|
|
2024-06-03 14:40:28 +08:00
|
|
|
|
await _LoadNpc();
|
2024-05-30 19:41:10 +08:00
|
|
|
|
_CreateCapturePoints();
|
|
|
|
|
|
_CreateFlags();
|
2023-12-14 14:42:27 +08:00
|
|
|
|
|
2023-11-17 13:14:55 +08:00
|
|
|
|
_SetShadows();
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
RegisterAllEvent();
|
2023-11-06 18:20:55 +08:00
|
|
|
|
InitRules();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
_stateMachine.ChangeState(new PrepareState(this));
|
|
|
|
|
|
SelecterView.Instance.Init();
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-07-11 15:55:53 +08:00
|
|
|
|
BlackAreaManager.instance.Init(_currLevelInfo.DayNightType == LevelData.DayNightType.Night);
|
2024-07-12 13:51:06 +08:00
|
|
|
|
InitAIStart();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async void InitAIStart()
|
|
|
|
|
|
{
|
|
|
|
|
|
var units = GameUnitManager.instance.infightUnits.unitList;
|
|
|
|
|
|
foreach (var unit in units)
|
|
|
|
|
|
{
|
|
|
|
|
|
var character = unit as Character.Character;
|
|
|
|
|
|
if (character == null) continue;
|
|
|
|
|
|
if (character.troopId == ETroopsId.Self)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 玩家默认激活
|
|
|
|
|
|
character.statusData.isAttackActive = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// AI 默认非激活
|
|
|
|
|
|
character.statusData.isAttackActive = false;
|
|
|
|
|
|
|
|
|
|
|
|
var bt = await AIManager.Instance.RegisterAI(character.Node.GameObject, AIBehavior);
|
|
|
|
|
|
bt.SetVariable("battleInfo", new SharedBattleInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
Value = new BattleInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
ownerId = character.GetID(),
|
|
|
|
|
|
AIName = character.runtimeData.characterLevelData.AIName,
|
|
|
|
|
|
AttachAIName = character.runtimeData.characterLevelData.AttachAIName,
|
|
|
|
|
|
PatrolInfos = character.runtimeData.characterLevelData.PatrolInfos,
|
2024-07-22 14:46:20 +08:00
|
|
|
|
groupInfo = character.runtimeData.characterLevelData.GroupInfos,
|
2024-07-12 13:51:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
character.statusData.isAIControll = true;
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-30 19:41:10 +08:00
|
|
|
|
private void _CreateCapturePoints()
|
|
|
|
|
|
{
|
|
|
|
|
|
CaptureManager.CreateInstance();
|
|
|
|
|
|
CaptureManager.instance.Init();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _CreateFlags()
|
|
|
|
|
|
{
|
|
|
|
|
|
FlagManager.CreateInstance();
|
|
|
|
|
|
FlagManager.instance.Init();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-21 14:44:09 +08:00
|
|
|
|
private async UniTask _LoadWeather()
|
|
|
|
|
|
{
|
|
|
|
|
|
var weatherType = (int)_currLevelInfo.WeatherType;
|
2024-07-19 13:52:08 +08:00
|
|
|
|
var groundType = (int)_currLevelInfo.EnvironmentType;
|
|
|
|
|
|
var weatherEffectConfig = TableManager.Instance.Tables.WeatherEffectConfig.Get(weatherType, groundType);
|
|
|
|
|
|
if (weatherEffectConfig == null)
|
2024-03-21 14:44:09 +08:00
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-07-19 13:52:08 +08:00
|
|
|
|
var cameraPrefab = weatherEffectConfig.CameraPrefab;
|
2024-03-21 14:44:09 +08:00
|
|
|
|
if (string.IsNullOrEmpty(cameraPrefab))
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-06-03 14:40:28 +08:00
|
|
|
|
|
2024-03-21 14:44:09 +08:00
|
|
|
|
var loadObj = await AssetManager.Instance.LoadAssetAsync<GameObject>(cameraPrefab);
|
|
|
|
|
|
if (loadObj == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("加载天气特效失败:{0}", cameraPrefab);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-03-21 14:44:09 +08:00
|
|
|
|
var cameraObj = CameraManager.Instance.MainCamera.gameObject;
|
|
|
|
|
|
var weatherCamera = Object.Instantiate(loadObj, cameraObj.transform);
|
|
|
|
|
|
weatherCamera.transform.localPosition = Vector3.zero;
|
|
|
|
|
|
weatherCamera.transform.localRotation = Quaternion.identity;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-17 13:14:55 +08:00
|
|
|
|
private void _SetShadows()
|
|
|
|
|
|
{
|
2023-11-20 14:10:18 +08:00
|
|
|
|
var setDistance = _currLevelInfo.ShadowDistance;
|
2023-11-17 13:14:55 +08:00
|
|
|
|
ShadowEx.SetShadowDistance(setDistance);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private async UniTask _LoadOthers()
|
|
|
|
|
|
{
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.TIREMARK_UNIT_PATH);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.TIREMARK_MAT_PATH);
|
2023-10-25 13:59:08 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.CHARACTER_SELECT_GROUND_GFX);
|
2023-10-27 13:59:26 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.EMOJI_HEAD_MAT);
|
2024-01-19 18:06:00 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SUMMON_BOTTOM_PATH_SELF);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SUMMON_BOTTOM_PATH_ENEMY);
|
2024-03-21 12:19:23 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SKILL_GORUND_HIGH_LIGHT);
|
2024-04-30 16:00:13 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.CHARACTER_TARGET_GFX);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.ROAD_LINE_PATH);
|
2024-05-30 18:58:13 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.CAPTURE_POINT_PATH);
|
2024-06-12 18:14:56 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.CAPTURE_FINISHED_POINT_PATH);
|
2024-05-31 16:46:35 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.FLAG_GROUND_PATH);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.FLAG_PICK_PATH);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.FLAG_RETURN_PATH);
|
2024-06-12 18:14:56 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.PROTECT_TARGET_POINT_PATH);
|
2024-07-10 19:51:24 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.FIGHT_LIGHT_AREA_PATH);
|
2024-07-12 18:23:00 +08:00
|
|
|
|
AssetManager.Instance.PostPreload(Constants.FIGHT_CELL_COLLIDER_PATH);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
await AssetManager.Instance.WaitAllPreloads();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
private async UniTask _InitAfterLoadMap()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 加载后处理
|
2024-04-30 16:00:13 +08:00
|
|
|
|
await _LoadOutlinePost();
|
2023-12-26 18:19:05 +08:00
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
|
AreaManager.CreateInstance();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
// 表情相关
|
2024-04-30 16:00:13 +08:00
|
|
|
|
// AssetManager.Instance.PostPreload(Constants.EMOJI_PREFAB_PATH);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
await AssetManager.Instance.WaitAllPreloads();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-30 16:00:13 +08:00
|
|
|
|
private async UniTask _LoadOutlinePost()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-04-30 16:00:13 +08:00
|
|
|
|
// todo: 因为逻辑上有使用outlinemanager.instance 所以这里需要先加载
|
|
|
|
|
|
// if (!PerformanceManager.instance.data.enablePostOutline) return;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
// 加载shader
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SHADER_OUTLINE_PATH1);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SHADER_OUTLINE_PATH1_1);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SHADER_OUTLINE_PATH2);
|
|
|
|
|
|
AssetManager.Instance.PostPreload(Constants.SHADER_OUTLINE_PATH3);
|
|
|
|
|
|
await AssetManager.Instance.WaitAllPreloads();
|
|
|
|
|
|
var loadObj =
|
|
|
|
|
|
await AssetManager.Instance.LoadAssetAsync<GameObject>(Constants.OUTLINE_POSTPROCESS_PATH);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
if (loadObj != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
Object.Instantiate(loadObj);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void BeginBattle()
|
|
|
|
|
|
{
|
|
|
|
|
|
_stateMachine.ChangeState(new BattleState(this));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public bool IsPreparing()
|
|
|
|
|
|
{
|
|
|
|
|
|
return _stateMachine.GetCurrentState() is PrepareState;
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
public bool IsInBattle()
|
|
|
|
|
|
{
|
|
|
|
|
|
return isInBattle;
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
public bool IsEnd()
|
|
|
|
|
|
{
|
|
|
|
|
|
return _stateMachine.GetCurrentState() is EndState;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-21 15:04:56 +08:00
|
|
|
|
public async UniTask Unload()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2024-07-12 13:51:06 +08:00
|
|
|
|
|
2024-01-15 14:20:22 +08:00
|
|
|
|
//MapUtils.RemoveCameraController(CameraManager.Instance.MainCamera);
|
|
|
|
|
|
CameraManager.Instance.RevertMainCamera();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
MapUtils.UnLoadMap(_map);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
UnRegisterAllEvent();
|
2023-11-06 18:20:55 +08:00
|
|
|
|
ReleaseRules();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
SelecterView.Instance.Release();
|
2024-02-20 14:33:52 +08:00
|
|
|
|
|
2023-11-21 15:04:56 +08:00
|
|
|
|
await UnLoadScene();
|
|
|
|
|
|
await UniTask.NextFrame();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public LevelData GetLevelData()
|
|
|
|
|
|
{
|
|
|
|
|
|
return _levelData;
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2024-07-19 13:52:08 +08:00
|
|
|
|
public LevelInfo GetLevelInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
return _currLevelInfo;
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
private const string DescKey = "LevelDesc{0}";
|
|
|
|
|
|
private const string NameKey = "LevelName{0}";
|
|
|
|
|
|
|
|
|
|
|
|
public string GetLevelName()
|
|
|
|
|
|
{
|
|
|
|
|
|
return StringManager.Instance.GetLocalizeTextByKey(string.Format(NameKey, _id));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetLevelDesc(LevelData levelData)
|
|
|
|
|
|
{
|
|
|
|
|
|
return StringManager.Instance.GetLocalizeTextByKey(string.Format(DescKey, _id));
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
2024-07-12 13:51:06 +08:00
|
|
|
|
}
|