【战斗】添加战斗拖动上阵功能

main
chenyuqi 2024-01-04 13:45:27 +08:00
parent 86acaea5fc
commit f56e991b3d
7 changed files with 160 additions and 14 deletions

View File

@ -100,6 +100,8 @@
INFIGHT_PLAYER_SKILL_RELEASE, // 释放指挥官技能摊手 使用 EDReleasePlayerSkill
INFIGHT_PLAYER_SKILL_VIEW_TRIGGER, // 指挥官技能view触发事件
PrepareModelDragEnd,
//Level Client Server Interaction
ServerResponseEnterLevel,

View File

@ -184,6 +184,21 @@ public class UIButtonEx: Button
{
_OnDragOut += func;
}
public void AddStartDragListener(OnStartDrag func)
{
_OnStartDrag += func;
}
public void AddOnDragListener(OnDrag func)
{
_OnDrag += func;
}
public void AddEndDragListener(OnEndDrag func)
{
_OnEndDrag += func;
}
public void AddClickListener(OnClick func)
{

View File

@ -1,3 +1,5 @@
using System;
using BehaviorDesigner.Runtime.Tasks;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay.Area;
@ -21,7 +23,7 @@ namespace Gameplay.Level
// 更新地面
Physics.SyncTransforms();
EventManager.Instance.Register(EventManager.EventName.PrepareModelDragEnd, (Action<Vector2>)_OnModelDragEnd);
}
protected override void _OnUpdate(float deltaTime)
@ -30,6 +32,7 @@ namespace Gameplay.Level
protected override void _OnExit()
{
EventManager.Instance.Unregister(EventManager.EventName.PrepareModelDragEnd, (Action<Vector2>)_OnModelDragEnd);
}
protected override void _OnClick(Vector2 screenPosition)
@ -350,6 +353,11 @@ namespace Gameplay.Level
GameUnitManager.instance.MoveUnitToFight(character.GetID(), cellIndex, yaw);
}
private void _OnModelDragEnd(Vector2 screenPos)
{
_OnClick(screenPos);
}
public PrepareState(Level level) : base(level)
{
}

View File

@ -166,10 +166,8 @@ public class TeamManager
if (i < vInfos.Count)
{
SingleTeamCharacterInfo singleInfo;
VehicleInfo v = new VehicleInfo(vInfos[i].nID,
TableManager.Instance.Tables.VehicleConfig.Get((int)vInfos[i].nID), vInfos[i]);
var unit = await GameUnitManager.instance.PrepareVehicle(vInfos[i], ETroopsId.Self);
singleInfo = new SingleTeamCharacterInfo(unit.GetID(), v);
singleInfo = new SingleTeamCharacterInfo(unit.GetID(), vInfos[i]);
selectList.Add(singleInfo);
}
@ -398,17 +396,22 @@ public class TeamManager
var teamCharacterIDs = GetCharacterIDs();
var vehicleIDs = GetVehicleIDs();
var posterL = LevelUIManager.PaintingList;
for (int i = 0; i < teamCharacterIDs.Count; i++)
{
var str = CommonUtils.GetDefaultHeadPathByUid(teamCharacterIDs[i]);
var uid = teamCharacterIDs[i];
var singleData = m_allCharactersMap[uid];
var cfg = singleData.GetConfigInfo();
var str = CommonUtils.GetDefaultHeadPathByUid((uint)cfg.Cfg.RoleID);
var posterStr = CommonUtils.GetCharacterPicPath(cfg.Cfg.RoleID,CommonUtils.ECharacterPicPathType.Poster);
AssetManager.Instance.PostPreload<Sprite>(str);
AssetManager.Instance.PostPreload<Sprite>(posterStr);
}
if (vehicleIDs.Count > 0)
{
var vehicleSpriteStr = CommonUtils.GetDefaultVehicleHeadPath(vehicleIDs[0]);
AssetManager.Instance.PostPreload<Sprite>(vehicleSpriteStr);
var uid = vehicleIDs[0];
var singleData = m_allCharactersMap[uid];
AssetManager.Instance.PostPreload<Sprite>(singleData.GetVehicleInfo().Cfg.UIHeadPath);
}
//预加载状态图片
@ -809,7 +812,7 @@ public class VehicleInfo
public class SingleTeamCharacterInfo
{
private CharacterDataInfo _characterData;
private VehicleInfo _vConfigData;
private VehicleCultivateData _vConfigData;
private float m_leftBlood;
private bool m_isDead;
@ -844,7 +847,7 @@ public class SingleTeamCharacterInfo
}
public SingleTeamCharacterInfo(uint uid,
VehicleInfo configData,
VehicleCultivateData configData,
CharacType type = CharacType.Vehicle)
{
_vConfigData = configData;
@ -856,7 +859,7 @@ public class SingleTeamCharacterInfo
public uint Uid
{
get { return m_uid; } //return m_configData.mID; }
get { return m_uid; }
}
public CharacType Type
@ -879,7 +882,7 @@ public class SingleTeamCharacterInfo
return _characterData;
}
public VehicleInfo GetVehicleInfo()
public VehicleCultivateData GetVehicleInfo()
{
return _vConfigData;
}

View File

@ -428,11 +428,17 @@ public class UIHeadItemNode : UINode
}
public virtual void BindItemDrag()
public virtual void BindItemStartDrag<T>(Action<T> action, T param)
{
}
public virtual void BindItemOnDrag()
public virtual void BindItemEndDrag<T>(Action<T> action, T param)
{
}
public virtual void BindItemOnDrag<T>(Action<T> action, T param)
{
}

View File

@ -167,6 +167,29 @@ public class UIHerosHeadItemNode : UIHeadItemNodeBase
});
}
public override void BindItemStartDrag<T>(Action<T> action, T param)
{
ButtonEx_CharacterPicRect.AddStartDragListener(() =>
{
action?.Invoke(param);
});
}
public override void BindItemOnDrag<T>(Action<T> action, T param)
{
ButtonEx_CharacterPicRect.AddOnDragListener(() =>
{
action?.Invoke(param);
});
}
public override void BindItemEndDrag<T>(Action<T> action, T param)
{
ButtonEx_CharacterPicRect.AddEndDragListener(() =>
{
action?.Invoke(param);
});
}
public override void RemoveClickListener()
{
RemoveAllClickListener(ButtonEx_CharacterPicRect);

View File

@ -11,6 +11,7 @@ using DG.Tweening;
using Framework.Wrapper;
using Gameplay;
using Gameplay.Area;
using Gameplay.Area.Ready;
using Gameplay.Character;
using Gameplay.Common;
using Gameplay.Level;
@ -57,6 +58,10 @@ public class UITeamFightController : UIWindow
private uint _changeId = 0;
private float _originalSpeed = -1f;
private uint _dragingUid = 0;
private enum SkillPutState
{
None,
@ -109,6 +114,10 @@ public class UITeamFightController : UIWindow
EventManager.Instance.Register(EventManager.EventName.LevelUnitUnSelect, (Action<GameUnit>) OnUnSelectUnit);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_REBORN_UNIT, (Action<GameUnit>)OnUnitReborn);
InputManager.Instance.OnFingerMove += OnItemDrag;
InputManager.Instance.OnFingerMoveUI += OnItemDrag;
InputManager.Instance.OnFingerUp += OnItemEndDrag;
Refresh();
// #if UNITY_EDITOR
// //打印选择信息
@ -137,6 +146,10 @@ public class UITeamFightController : UIWindow
m_fightItemList.Clear();
m_waitItemList.Clear();
InputManager.Instance.OnFingerMove -= OnItemDrag;
InputManager.Instance.OnFingerUp -= OnItemEndDrag;
InputManager.Instance.OnFingerMoveUI -= OnItemDrag;
EventManager.Instance.Unregister(EventManager.EventName.LevelUnitBorn, (Action<GameUnit>)OnListenToFight);
EventManager.Instance.Unregister(EventManager.EventName.LevelBattleBegin, OnListenToFightStateChange);
EventManager.Instance.Unregister(EventManager.EventName.LevelUnitSelect, (Action<GameUnit>)OnLevelCharacterSelect);
@ -212,6 +225,10 @@ public class UITeamFightController : UIWindow
nodeComp.RefreshHeadItem(waitIDList[i]);
nodeComp.BindItemClick(OnClickSelectWaitItem, waitIDList[i]);
nodeComp.BindItemStartDrag(OnItemStartDrag, waitIDList[i]);
//nodeComp.BindItemOnDrag(OnItemDrag, waitIDList[i]);
//nodeComp.BindItemEndDrag(OnItemEndDrag, waitIDList[i]);
var rectTransform = go.GetComponent<RectTransform>();
rectTransform.SetParent(content);
rectTransform.localPosition = new UnityEngine.Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0);
@ -1261,6 +1278,78 @@ public class UITeamFightController : UIWindow
}
private void OnItemStartDrag(uint uid)
{
_dragingUid = uid;
_LoadSelectModel(_dragingUid);
if (LevelManager.Instance.CurrentLevel.IsPreparing())
{
LevelManager.Instance.CurrentLevel.Map.ShowInfo(Map.InfoMask.ShowCells, true);
AreaManager.instance.readyAreaManager.ShowReadyArea();
}
// if (LevelManager.Instance.CurrentLevel.IsPreparing())
// {
// if (GameUnitManager.instance.infightUnits.Contains(uid))
// {
// // 在战斗中
// AreaManager.instance.readyAreaManager.ShowReadyArea(EReadyAreaStatus.AroundVehicle);
// }
// else if (GameUnitManager.instance.prepareUnits.Contains(uid))
// {
// // 备战席
// AreaManager.instance.readyAreaManager.ShowReadyArea();
// }
// }
TeamManager.Instance.SetSelectID(uid);
}
private void OnItemDrag(Vector2 pos)
{
if (_dragingUid == 0) return;
var unit = GameUnitManager.instance.totalUnits.Search(_dragingUid);
var mousePos = InputManager.Instance.GetTouchPosition();
var raycastHits = new RaycastHit[10];
var ray = CameraManager.Instance.MainCamera.ScreenPointToRay(mousePos);
var layerMask = LayerMask.GetMask("Ground");
var raycast = Physics.RaycastNonAlloc(ray, raycastHits, 1000, layerMask);
if (raycast <= 0) return;
var firstHit = raycastHits[0];
var hitPoint = firstHit.point;
unit.Node.transform.position = hitPoint;
//unit.transData.pos = hitPoint;
}
private void OnItemEndDrag(Vector2 pos)
{
var mousePos = InputManager.Instance.GetTouchPosition();
EventManager.Instance.Send(EventManager.EventName.PrepareModelDragEnd, mousePos);
_dragingUid = 0;
}
void _LoadSelectModel(uint uid)
{
var unit = GameUnitManager.instance.totalUnits.Search(uid);
var mousePos = InputManager.Instance.GetTouchPosition();
var raycastHits = new RaycastHit[10];
var ray = CameraManager.Instance.MainCamera.ScreenPointToRay(mousePos);
var layerMask = LayerMask.GetMask("Ground");
var raycast = Physics.RaycastNonAlloc(ray, raycastHits, 1000, layerMask);
if (raycast <= 0) return;
var firstHit = raycastHits[0];
var hitPoint = firstHit.point;
unit.Node.transform.position = hitPoint;
//unit.transData.pos = hitPoint;
unit.Node.GameObject.SetActive(true);
}
#endregion
void ClearSelectFight()