Compare commits

...

2 Commits

Author SHA1 Message Date
9b76b90527 Merge branch 'main' of http://10.27.16.144:3000/kawagiri/TH1 into main 2025-07-25 22:57:28 +08:00
71039c7ddf 一些bug修改 2025-07-25 22:57:26 +08:00
12 changed files with 69 additions and 20 deletions

View File

@ -312,10 +312,8 @@ namespace RuntimeData
RemoveUnitData(unitData.Id);
if (GetGridIdByUnitId(unitData.Id, out var gridId))
_gridToUnitDict.Remove(gridId);
UnitMap.UnitMapRenderMark = true;
}
//改变小兵到城市的所属关系

View File

@ -232,10 +232,6 @@ namespace RuntimeData
set
{
PlayerWealth2 = value;
if (PlayerWealth2 < 0)
{
Debug.Log(111);
}
}
}

View File

@ -1762,6 +1762,7 @@ namespace Logic.AI
public CommonActionParams Param;
public ActionLogicBase ActionLogic;
public bool IsInSight;
public float Duration;
public AIActionBase(CommonActionParams param, ActionLogicBase action)
@ -1769,12 +1770,17 @@ namespace Logic.AI
Param = param;
ActionLogic = action;
IsInSight = false;
Duration = 0;
}
public void CheckIsActionInPlayerSight()
{
IsInSight = true;
if (ActionLogic.ActionId.ActionType == CommonActionType.UnitAttack) return;
if (ActionLogic.ActionId.ActionType == CommonActionType.UnitAttack)
{
Duration = ActionLogic.Duration;
return;
}
var player = Param.MapData.PlayerMap.SelfPlayerData;
if (Param.MapData.GridMap.GetGridDataByGid(Param.GridId, out var grid)
&& player.Sight.CheckIsInSight(grid.Id)) return;

View File

@ -153,7 +153,11 @@ namespace Logic.AI
else
{
if (_data.MaxAiAction.IsInSight)
_excuteTime = Time.time + Table.Instance.AnimDataAssets.AIBeforeAnimWaitTime;
{
if (_data.MaxAiAction.Duration == 0)
_excuteTime = Time.time + Table.Instance.AnimDataAssets.AIBeforeAnimWaitTime;
else _excuteTime = Time.time + _data.MaxAiAction.Duration;
}
else _excuteTime = Time.time;
AILogicState = AILogicState.PrePlay;
}

View File

@ -634,10 +634,17 @@ namespace Logic.Action
{
protected CommonActionId _actionId;
public CommonActionId ActionId => _actionId;
protected float _duration;
public float Duration
{
get => _duration;
set => _duration = value;
}
public ActionLogicBase(CommonActionId id)
{
_actionId = id;
_duration = 0;
}
public bool CheckEqualActionId(CommonActionId actionId)
@ -2546,7 +2553,7 @@ namespace Logic.Action
public override bool Execute(CommonActionParams actionParams)
{
Main.UnitLogic.Attack(actionParams.MapData, actionParams.UnitData, actionParams.TargetUnitData);
Main.UnitLogic.Attack(actionParams.MapData, actionParams.UnitData, actionParams.TargetUnitData, out _duration);
return true;
}

View File

@ -187,6 +187,7 @@ namespace Logic
// Update is called once per frame
void Update()
{
TimelineManager.Instance.Update();
MainEditor.Instance.Update();
GameLogic.Update();
PlayerLogic.Update(MapData);
@ -196,9 +197,7 @@ namespace Logic
UIManager.Instance.Update(MapData);
Timer.Instance.Update();
AudioManager.Instance.Update();
TimelineManager.Instance.Update();
ConfigManager.Instance.Update();
}
public bool HasArchive()

View File

@ -87,7 +87,7 @@ namespace Logic
else if (roUnit.IsAttackHighlight)
{
CancelAllHighlight();
Main.UnitLogic.Attack(Main.MapData, MapRenderer.Instance.SelectUnitData, unitData);
Main.UnitLogic.Attack(Main.MapData, MapRenderer.Instance.SelectUnitData, unitData, out _);
UIManager.Instance.BottomInfoUI.UIBottomInfoStatus = false;
}
//如果是选择角色

View File

@ -46,6 +46,12 @@ namespace Logic.Timeline
main.MapInteractionLogic.CheckContinuousAction(Map, OriginPlayer, Origin, TargetGrid);
}
public override void Excute()
{
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
Main.UnitLogic.MoveTo(Map, Origin, TargetGrid, MoveType.AttackMove);
}
public override void OnUpdate(float progressTime)
{
@ -77,6 +83,11 @@ namespace Logic.Timeline
{
}
public override void Excute()
{
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
}
public override void OnUpdate(float progressTime)
{
@ -140,6 +151,12 @@ namespace Logic.Timeline
}
public override void Excute()
{
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg1, DamageType.ActiveAttack);
Main.UnitLogic.DamageSettlement(Map, Target, Origin, Dmg2, DamageType.CounterAttack);
}
public override void OnUpdate(float progressTime)
{
if (Target == null)
@ -174,6 +191,7 @@ namespace Logic.Timeline
{
CounterAttackWait = float.MaxValue;
var settlement = Main.UnitLogic.DamageSettlement(Map, Target, Origin, Dmg2, DamageType.CounterAttack);
if (settlement.IsKill)
{
OriginGrid.VFXRenderMarkHurt = true;

View File

@ -29,5 +29,9 @@ namespace Logic.Timeline
public abstract void OnFinished();
public abstract void OnUpdate(float progressTime);
public virtual void Excute()
{
}
}
}

View File

@ -23,6 +23,7 @@ namespace Logic.Timeline
public void AddFragment(FragmentBase fragment)
{
_fragments.Add(fragment);
Update();
}
public void Update()

View File

@ -14,7 +14,7 @@ namespace Logic
{
bool MoveTo(MapData mapData, UnitData unitData, GridData gridData, MoveType moveType);
//unit[uid]移动到grid[pos]
bool Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB);
bool Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB, out float duration);
//unit[A]攻击unit[B]
void Upgrade(MapData mapData, UnitData unitData);
//unit[uid]升级

View File

@ -204,8 +204,9 @@ namespace Logic
return counterAttackBack;
}
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2)
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2, out float duration)
{
duration = 0;
if (!mapData.GetPlayerDataByUnitId(unit1.Id, out var player1)) return false;
if (!mapData.GetPlayerDataByUnitId(unit2.Id, out var player2)) return false;
if (!mapData.GetCityDataByUnitId(unit1.Id, out var city1)) return false;
@ -271,7 +272,9 @@ namespace Logic
fragment.TargetGrid = grid2;
fragment.OriginPlayer = player1;
fragment.TargetPlayer = player2;
TimelineManager.Instance.AddFragment(fragment);
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
}
else
{
@ -287,7 +290,9 @@ namespace Logic
fragment.TargetPlayer = player2;
fragment.AttackTime = attackWait;
fragment.AttackBackTime = attackBack;
TimelineManager.Instance.AddFragment(fragment);
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
}
}
//如果杀不死对方
@ -309,7 +314,9 @@ namespace Logic
fragment.CounterAttackStart = counterAttackStart;
fragment.CounterAttackWait = counterAttackWait;
fragment.CounterAttackBack = counterAttackBack;
TimelineManager.Instance.AddFragment(fragment);
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
}
return true;
}
@ -319,13 +326,24 @@ namespace Logic
// TODO 死亡动画标记移除了,最好用新系统实现
public SettlementInfo DamageSettlement(MapData mapData, UnitData origin, UnitData target, int dmg, DamageType type)
{
if (origin == null || target == null)
{
LogSystem.LogError($"DamageSettlement origin:{origin} target{target}");
return null;
}
if (!mapData.GetGridDataByUnitId(target.Id, out var targetGrid))
{
LogSystem.LogError($"WULI Target Grid is null target.id:{target.Id}");
return null;
}
if (!target.CanBeDamaged(mapData, dmg)) return null;
var settlement = new SettlementInfo();
settlement.DamageType = type;
settlement.DamageOrigin = origin;
settlement.DamageTarget = target;
mapData.GetGridDataByUnitId(target.Id, out settlement.DamageTargetGrid);
settlement.DamageValue = dmg;
settlement.DamageTargetGrid = targetGrid;
target.Health -= dmg;
if (type == DamageType.KillSelf)
@ -335,7 +353,6 @@ namespace Logic
}
else if (target.CanBeKilled(mapData) && target.Health <= 0)
{
if (Main.MapData == mapData) AchievementDataManager.Instance.OnKillUnit(mapData, origin, target);
UnitDie(mapData, target, dmg);
settlement.IsKill = true;
@ -363,7 +380,6 @@ namespace Logic
if(map == Main.MapData)
DieAnimRenderMarkUpadate(targetGrid, unit, dmg,true);
Main.UnitLogic.Die(map, unit);
}
public void DieAnimRenderMarkUpadate(GridData grid2,UnitData unit2,int dmg,bool needRandomWait = false)