2024-01-04 15:32:00 +08:00
|
|
|
|
using System;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using System.Collections.Generic;
|
2024-01-04 15:32:00 +08:00
|
|
|
|
using BehaviorDesigner.Runtime.Tasks;
|
2023-10-26 16:04:03 +08:00
|
|
|
|
using Code.Scripts.Gameplay.Enviorment;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Framework;
|
|
|
|
|
|
using Gameplay.Area;
|
|
|
|
|
|
using Gameplay.Buff;
|
|
|
|
|
|
using Gameplay.Bullet;
|
|
|
|
|
|
using Gameplay.Character;
|
2024-05-30 13:07:39 +08:00
|
|
|
|
using Gameplay.Fight.Capture;
|
2024-05-30 19:23:59 +08:00
|
|
|
|
using Gameplay.Fight.Flag;
|
2024-07-01 13:08:37 +08:00
|
|
|
|
using Gameplay.Guide;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Pause;
|
2024-07-10 18:07:00 +08:00
|
|
|
|
using Gameplay.PostProcess.BlackArea;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Skill;
|
|
|
|
|
|
using Gameplay.Summon;
|
2023-12-13 16:20:41 +08:00
|
|
|
|
using Gameplay.Unit;
|
|
|
|
|
|
using Gameplay.Unit.Data;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using Gameplay.Vehicle;
|
|
|
|
|
|
using Gameplay.Vehicle.Impl;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using Gameplay.Vehicle.TireMark;
|
2024-08-09 18:08:27 +08:00
|
|
|
|
using PhxhSDK;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using TGS;
|
|
|
|
|
|
using UnityEngine;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
using Utils.Bounds;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Gameplay.Level
|
|
|
|
|
|
{
|
|
|
|
|
|
public class BattleState : LevelBaseState
|
|
|
|
|
|
{
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private bool _canUpdate;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
2024-07-10 12:27:56 +08:00
|
|
|
|
protected override void _OnEnter()
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
|
|
|
|
|
_canUpdate = false;
|
2023-12-14 14:42:27 +08:00
|
|
|
|
|
2023-12-14 16:30:55 +08:00
|
|
|
|
AreaManager.instance.Init();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
TireMarkManager.CreateInstance();
|
|
|
|
|
|
TireMarkManager.instance.Init();
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
BulletManager.CreateInstance();
|
|
|
|
|
|
BuffManager.instance.Init();
|
2024-07-10 12:27:56 +08:00
|
|
|
|
SkillManager.instance.Init();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
BulletManager.instance.Init();
|
2023-12-15 16:05:57 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
PauseManager.CreateInstance();
|
|
|
|
|
|
PauseManager.instance.Init();
|
2023-10-26 16:04:03 +08:00
|
|
|
|
|
|
|
|
|
|
EnviormentManager.CreateInstance();
|
|
|
|
|
|
EnviormentManager.instance.Init();
|
2023-12-14 14:42:27 +08:00
|
|
|
|
|
|
|
|
|
|
GameUnitManager.instance.EnterBattle();
|
2023-12-15 16:05:57 +08:00
|
|
|
|
|
|
|
|
|
|
// 这个必须在GameUnitManager.instance.EnterBattle()之后
|
|
|
|
|
|
// 因为他会给unit增加buff
|
|
|
|
|
|
BoundsManager.instance.Init();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
_level.LevelTime = 0;
|
|
|
|
|
|
_level.isInBattle = true;
|
|
|
|
|
|
|
|
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.LevelBattleBegin);
|
2024-01-04 15:32:00 +08:00
|
|
|
|
|
|
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.ToFightModelDragEnd, (Action<Vector2>)_OnModelDragEnd);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
_canUpdate = true;
|
2024-08-09 18:08:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
2024-08-12 13:05:22 +08:00
|
|
|
|
var cameraInfo = _level.Map.MapData.cameraMarginInfo;
|
2024-08-09 18:08:27 +08:00
|
|
|
|
CameraManager.Instance.MainCamera.GetComponent<CameraController>().rightMargin = cameraInfo.rightMarginInFight;
|
|
|
|
|
|
CameraManager.Instance.MainCamera.GetComponent<CameraController>().leftMargin = cameraInfo.leftMarginInFight;
|
|
|
|
|
|
CameraManager.Instance.MainCamera.GetComponent<CameraController>().topMargin = cameraInfo.topMarginInFight;
|
|
|
|
|
|
CameraManager.Instance.MainCamera.GetComponent<CameraController>().bottomMargin = cameraInfo.bottomMarginInFight;
|
2024-08-15 18:18:12 +08:00
|
|
|
|
|
|
|
|
|
|
CameraManager.Instance.MainCamera.GetComponent<CameraController>().AdjustSelf();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void _OnUpdate(float deltaTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_canUpdate) return;
|
|
|
|
|
|
_level.LevelTime += deltaTime;
|
|
|
|
|
|
SkillManager.instance.LogicUpdate(deltaTime);
|
|
|
|
|
|
BulletManager.instance.LogicUpdate(deltaTime);
|
2023-12-14 15:31:46 +08:00
|
|
|
|
GameUnitManager.instance.LogicUpdate(deltaTime);
|
2024-07-09 15:03:48 +08:00
|
|
|
|
BuffManager.instance.LogicUpdate(deltaTime);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
AreaManager.instance.LogicUpdate(deltaTime);
|
|
|
|
|
|
PauseManager.instance.LogicUpdate(deltaTime);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
TireMarkManager.instance.LogicUpdate(deltaTime);
|
2024-05-30 13:07:39 +08:00
|
|
|
|
CaptureManager.instance.LogicUpdate(deltaTime);
|
2024-07-10 19:51:24 +08:00
|
|
|
|
BlackAreaManager.instance.LogicUpdate(deltaTime);
|
2023-11-08 12:59:16 +08:00
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.LevelTimeIncrease,deltaTime);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void _OnExit()
|
|
|
|
|
|
{
|
|
|
|
|
|
_level.isInBattle = false;
|
|
|
|
|
|
|
|
|
|
|
|
BulletManager.instance.Dispose();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
BoundsManager.instance.Dispose();
|
|
|
|
|
|
TireMarkManager.instance.Dispose();
|
2023-10-26 16:04:03 +08:00
|
|
|
|
EnviormentManager.instance.Dispose();
|
2024-01-05 15:09:21 +08:00
|
|
|
|
|
|
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.ToFightModelDragEnd, (Action<Vector2>)_OnModelDragEnd);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public BattleState(Level level) : base(level)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void _OnClick(Vector2 screenPosition)
|
|
|
|
|
|
{
|
2023-12-29 15:07:04 +08:00
|
|
|
|
var clickCellIndex = GroundHitHelper.CalcHitCellIndex(screenPosition,_level.Map.TerrainGridSystem);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
if (clickCellIndex < 0)
|
|
|
|
|
|
{
|
2024-07-03 14:07:54 +08:00
|
|
|
|
if (GuideManager.Instance.IsGuiding && GuideManager.Instance.IsControlFloor)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
2024-01-04 15:32:00 +08:00
|
|
|
|
_SendDragCancelEvent();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-07-01 13:08:37 +08:00
|
|
|
|
|
|
|
|
|
|
CheckCellClick(_level.Map.TerrainGridSystem, clickCellIndex, 0);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void _OnCellClick(TerrainGridSystem tgs,
|
|
|
|
|
|
int cellIndex,
|
|
|
|
|
|
int buttonIndex)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (InputManager.Instance.HandledThisFrame())
|
|
|
|
|
|
{
|
2024-01-04 15:32:00 +08:00
|
|
|
|
_SendDragCancelEvent();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var map = _level.Map;
|
|
|
|
|
|
if (map == null) return;
|
|
|
|
|
|
var unitList = AreaManager.instance.GetUnitsByCellIndex(cellIndex);
|
|
|
|
|
|
OnHit(unitList, cellIndex);
|
2024-03-28 16:13:10 +08:00
|
|
|
|
//_SendDragSuccess();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnHit(List<GameUnit> units,
|
|
|
|
|
|
int cellIndex)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (units.Count <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var map = _level.Map;
|
|
|
|
|
|
var worldPosition = map.TerrainGridSystem.CellGetPosition(cellIndex);
|
|
|
|
|
|
var teamSelectID = TeamManager.Instance.SelectID;
|
2023-12-19 13:48:39 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
if (ValueValidator.IsIdValid(teamSelectID))
|
|
|
|
|
|
{
|
2023-12-19 13:48:39 +08:00
|
|
|
|
var unit = GameUnitManager.instance.totalUnits.Search(teamSelectID);
|
|
|
|
|
|
// if (TeamManager.Instance.IsInLevel(teamSelectID))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (unit.gameunitType == EGameUnitType.Character)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (unit.statusData.isOnVehicle)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //下车
|
|
|
|
|
|
// _GetOutVehicle(teamSelectID, cellIndex);
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// _FightInBattle(map, cellIndex, worldPosition);
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
if (GameUnitManager.instance.prepareUnits.Contains(teamSelectID))
|
|
|
|
|
|
{
|
|
|
|
|
|
//在车上不算在准备席,只是UI在备战席
|
|
|
|
|
|
_FightInBattle(map, cellIndex, worldPosition);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (GameUnitManager.instance.infightUnits.Contains(teamSelectID))
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (unit.gameunitType == EGameUnitType.Character)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (unit.statusData.isOnVehicle)
|
|
|
|
|
|
{
|
|
|
|
|
|
//下车
|
|
|
|
|
|
_GetOutVehicle(teamSelectID, cellIndex);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
var selectUnit = _level.selectUnit;
|
|
|
|
|
|
if (selectUnit == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 进行选中
|
|
|
|
|
|
for (int i = 0; i < units.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var unit = units[i];
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (unit.commonData.canSelect)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 只选中可控制单位
|
|
|
|
|
|
_level.SelectUnit(unit);
|
2024-06-12 19:09:10 +08:00
|
|
|
|
if (unit.debugShowInfo.cacheConfigId != 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_AUDIO_SELECT_UNIT, unit.debugShowInfo.cacheConfigId);
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-07-11 14:42:13 +08:00
|
|
|
|
var isLightUp = BlackAreaManager.instance.CheckIsInLightArea(cellIndex);
|
|
|
|
|
|
if (units.Count <= 0 || !isLightUp)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 进行移动
|
|
|
|
|
|
selectUnit.MoveTo(cellIndex, true);
|
2024-06-12 19:09:10 +08:00
|
|
|
|
if (selectUnit.debugShowInfo.cacheConfigId != 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_AUDIO_CLICK_MOVE, selectUnit.debugShowInfo.cacheConfigId);
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// 如果当前选择目标是己方英雄
|
|
|
|
|
|
switch (selectUnit.gameunitType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case EGameUnitType.Character:
|
|
|
|
|
|
_HandleCharacterSelect(units, selectUnit as Character.Character);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case EGameUnitType.Vehicle:
|
|
|
|
|
|
_HandleVehicleSelect(units, selectUnit as NormalVehicle);
|
|
|
|
|
|
break;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
default:
|
|
|
|
|
|
break;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2024-03-28 16:13:10 +08:00
|
|
|
|
|
|
|
|
|
|
_SendDragCancelEvent();
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _HandleVehicleSelect(List<GameUnit> units,
|
|
|
|
|
|
NormalVehicle vehicle)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 设置目标
|
|
|
|
|
|
for (int i = 0; i < units.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var unit = units[i];
|
|
|
|
|
|
|
|
|
|
|
|
// 如果是敌人,则设置目标
|
|
|
|
|
|
if (Level.IsEnemy(vehicle, unit))
|
|
|
|
|
|
{
|
|
|
|
|
|
vehicle.MoveTo(unit);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果是己方单位,则选中
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (unit.commonData.canSelect)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 只选中可控制单位
|
|
|
|
|
|
_level.SelectUnit(unit);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
// 如果走到这里,只能进行移动操作
|
|
|
|
|
|
vehicle.MoveTo(units[0].transData.cellIndex, true);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _HandleCharacterSelect(List<GameUnit> units,
|
|
|
|
|
|
Character.Character character)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < units.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var unit = units[i];
|
|
|
|
|
|
|
|
|
|
|
|
// 如果是敌人,则设置目标
|
|
|
|
|
|
if (Level.IsEnemy(character, unit))
|
|
|
|
|
|
{
|
|
|
|
|
|
character.MoveTo(unit);
|
2024-06-12 19:09:10 +08:00
|
|
|
|
|
|
|
|
|
|
if (character.debugShowInfo.cacheConfigId != 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_AUDIO_CLICK_ATTACK, character.debugShowInfo.cacheConfigId);
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 目前不需要该段逻辑
|
|
|
|
|
|
// 如果是载具,则向载具移动
|
|
|
|
|
|
if (unit.gameunitType == EGameUnitType.Vehicle)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 需要紧挨着载具
|
|
|
|
|
|
var vehicle = unit as NormalVehicle;
|
|
|
|
|
|
if (vehicle == null) continue;
|
|
|
|
|
|
var vehicleCellIndex = vehicle.transData.cellIndex;
|
|
|
|
|
|
var characterCellIndex = character.transData.cellIndex;
|
|
|
|
|
|
var distance = _level.Map.TerrainGridSystem.CellGetHexagonDistance(vehicleCellIndex, characterCellIndex);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (distance <= 1)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
// 在附近,则移动到载具
|
|
|
|
|
|
if (vehicle.CheckCanUp(character))
|
|
|
|
|
|
{
|
2024-07-09 15:53:50 +08:00
|
|
|
|
if (GuideManager.Instance.IsGuiding)
|
|
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.Guide_JoinVehicle);
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
character.UpVehicle(vehicle);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
character.MoveTo(vehicle.transData.cellIndex, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果是己方单位,则选中
|
|
|
|
|
|
if (unit.commonData.canSelect)
|
|
|
|
|
|
{
|
|
|
|
|
|
_level.SelectUnit(unit);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果走到这里,只能进行移动操作
|
|
|
|
|
|
character.MoveTo(units[0].transData.cellIndex, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//战斗中上阵
|
|
|
|
|
|
private void _PutUnitInLevel(Map map,
|
|
|
|
|
|
int cellIndex,
|
|
|
|
|
|
Vector3 worldPosition)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (map == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var teamSelectID = TeamManager.Instance.SelectID;
|
|
|
|
|
|
if (ValueValidator.IsIdValid(teamSelectID))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (TeamManager.Instance.IsInLevel(teamSelectID))
|
|
|
|
|
|
{
|
2023-12-14 18:25:52 +08:00
|
|
|
|
var unit = GameUnitManager.instance.infightUnits.Search(teamSelectID);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (unit.gameunitType == EGameUnitType.Character)
|
2023-08-22 19:08:45 +08:00
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (unit.statusData.isOnVehicle)
|
|
|
|
|
|
{
|
|
|
|
|
|
//下车
|
|
|
|
|
|
_GetOutVehicle(teamSelectID, cellIndex);
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
_FightInBattle(map, cellIndex, worldPosition);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _FightInBattle(Map map,
|
|
|
|
|
|
int cellIndex,
|
|
|
|
|
|
Vector3 worldPosition)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (TeamManager.Instance.IsFightListLimit(TeamManager.Instance.SelectID))
|
|
|
|
|
|
{
|
|
|
|
|
|
//TODO chenyq 需要添加到stringconfig
|
2024-01-05 15:09:21 +08:00
|
|
|
|
_SendDragCancelEvent();
|
2024-04-15 19:11:56 +08:00
|
|
|
|
LevelManager.Instance.CurrentLevel.UnSelectUnit();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
UITipsManager.ShowTips("上阵人数达到上限!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-10-25 14:09:09 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
// 不是准备区域
|
2023-12-18 16:14:18 +08:00
|
|
|
|
if (!AreaManager.instance.readyAreaManager.CheckIsInReadyArea(cellIndex))
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
2024-01-05 15:09:21 +08:00
|
|
|
|
_SendDragCancelEvent();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var crossLevel = 0;
|
|
|
|
|
|
var unitType = TeamManager.Instance.GetUnitType(TeamManager.Instance.SelectID);
|
|
|
|
|
|
|
|
|
|
|
|
switch (unitType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case SingleTeamCharacterInfo.CharacType.Hero:
|
|
|
|
|
|
var characterDataInfo = TeamManager.Instance.GetCharacterDataInfo(TeamManager.Instance.SelectID)
|
|
|
|
|
|
.GetConfigInfo();
|
|
|
|
|
|
crossLevel = characterDataInfo.Cfg.MoveCrossLevel;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case SingleTeamCharacterInfo.CharacType.Vehicle:
|
|
|
|
|
|
var vehicleInfo = TeamManager.Instance.GetCharacterDataInfo(TeamManager.Instance.SelectID)
|
|
|
|
|
|
.GetVehicleInfo();
|
|
|
|
|
|
crossLevel = vehicleInfo.Cfg.MoveCrossLevel;
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
DebugUtil.LogError("暂未处理的类型:{0}", unitType);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 检查通行级别是否可以放置
|
2023-12-14 18:25:52 +08:00
|
|
|
|
var blockData = map.GetBlockData(cellIndex);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
if (!MapUtils.CanPass(crossLevel, blockData.GetTerrainTypeProperty()))
|
|
|
|
|
|
{
|
2024-01-05 15:09:21 +08:00
|
|
|
|
_SendDragCancelEvent();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var yaw = LevelUtils.SetCharaterToward(_level.GetLevelData().preparingRegionToward);
|
|
|
|
|
|
|
|
|
|
|
|
switch (unitType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case SingleTeamCharacterInfo.CharacType.Hero:
|
|
|
|
|
|
_CreateCharacter(TeamManager.Instance.SelectID, worldPosition, yaw);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case SingleTeamCharacterInfo.CharacType.Vehicle:
|
|
|
|
|
|
_CreateVehicle(TeamManager.Instance.SelectID, worldPosition, yaw);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2024-03-28 16:13:10 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
_level.SelectUnit(TeamManager.Instance.SelectID);
|
2024-03-28 16:13:10 +08:00
|
|
|
|
_SendDragSuccess();
|
2024-01-09 17:08:19 +08:00
|
|
|
|
//_level.SetSpeed(ELevelSpeed.Normal);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async void _CreateCharacter(uint id,
|
|
|
|
|
|
Vector3 position,
|
|
|
|
|
|
float yaw)
|
|
|
|
|
|
{
|
|
|
|
|
|
var map = _level.Map;
|
|
|
|
|
|
if (map == null) return;
|
|
|
|
|
|
|
2023-12-14 19:19:49 +08:00
|
|
|
|
// var characterInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(TeamManager.Instance.SelectID);
|
|
|
|
|
|
// if (characterInfo == null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// var character = await GameUnitManager.instance.PrepareCharacter(characterInfo, ETroopsId.Self);
|
|
|
|
|
|
// if (character == null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// DebugUtil.LogError("创建角色失败");
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
2023-12-14 14:42:27 +08:00
|
|
|
|
if (!map.WorldPosition2TGSCellIndex(position, out var cellIndex))
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("无法获取到单元格索引");
|
|
|
|
|
|
return;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
2023-12-14 19:19:49 +08:00
|
|
|
|
GameUnitManager.instance.MoveUnitToFight(id, cellIndex, yaw);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async void _CreateVehicle(uint id,
|
|
|
|
|
|
Vector3 pos,
|
|
|
|
|
|
float yaw)
|
|
|
|
|
|
{
|
2023-12-14 19:19:49 +08:00
|
|
|
|
// var vInfo = VehicleCultivateDataManager.Instance.GetVehicleCultivateData(id);
|
|
|
|
|
|
// var vehicle = await GameUnitManager.instance.PrepareVehicle(vInfo, ETroopsId.Self);
|
|
|
|
|
|
// if (vehicle == null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// DebugUtil.LogError("创建载具失败");
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
2023-12-14 14:58:07 +08:00
|
|
|
|
if (!_level.Map.WorldPosition2TGSCellIndex(pos, out var cellIndex))
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("无法获取到cellIndex: {0}", pos);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-12-14 19:19:49 +08:00
|
|
|
|
GameUnitManager.instance.MoveUnitToFight(id, cellIndex, yaw);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _GetOutVehicle(uint uid,
|
|
|
|
|
|
int cellIndex)
|
|
|
|
|
|
{
|
2023-12-18 16:14:18 +08:00
|
|
|
|
if (GameUnitManager.instance.infightUnits.Search(uid) is Character.Character gameUnit)
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
2023-12-18 16:14:18 +08:00
|
|
|
|
var character = gameUnit;
|
2024-04-12 20:36:22 +08:00
|
|
|
|
if (character.fullFSM.currentState.id != EFullState.OnVehicle)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-12-18 16:14:18 +08:00
|
|
|
|
if (AreaManager.instance.readyAreaManager.CheckIsInReadyArea(cellIndex))
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
character.transData.disableEvent = true;
|
|
|
|
|
|
character.transData.pos =
|
|
|
|
|
|
LevelManager.Instance.CurrentLevel.Map.TGSCellIndex2WorldPosition(cellIndex);
|
|
|
|
|
|
character.transData.disableEvent = false;
|
|
|
|
|
|
character.DownVehicle();
|
2024-03-28 16:13:10 +08:00
|
|
|
|
_SendDragSuccess();
|
2024-03-28 16:53:57 +08:00
|
|
|
|
return;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
2024-03-28 16:53:57 +08:00
|
|
|
|
|
|
|
|
|
|
_SendDragCancelEvent();
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-01-04 15:32:00 +08:00
|
|
|
|
|
|
|
|
|
|
private void _OnModelDragEnd(Vector2 screenPos)
|
|
|
|
|
|
{
|
|
|
|
|
|
_OnClick(screenPos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _SendDragCancelEvent()
|
|
|
|
|
|
{
|
2024-01-10 15:21:05 +08:00
|
|
|
|
if (TeamManager.IsHideAllUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
TeamManager.IsHideAllUI = false;
|
2024-03-20 19:58:18 +08:00
|
|
|
|
TeamManager.Instance.CloseFightPosterUI();
|
2024-01-10 15:21:05 +08:00
|
|
|
|
}
|
2024-01-04 15:32:00 +08:00
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.ToFightModelDragSuc, false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void _SendDragSuccess()
|
|
|
|
|
|
{
|
2024-01-10 15:21:05 +08:00
|
|
|
|
if (TeamManager.IsHideAllUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
TeamManager.IsHideAllUI = false;
|
2024-03-20 19:58:18 +08:00
|
|
|
|
TeamManager.Instance.CloseFightPosterUI();
|
2024-01-10 15:21:05 +08:00
|
|
|
|
}
|
2024-01-04 15:32:00 +08:00
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.ToFightModelDragSuc, true);
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|