Passion & UI
This commit is contained in:
@@ -59,15 +59,8 @@ namespace Cielonos.MainGame
|
||||
|
||||
if (characterBlockSm.isBlocking)
|
||||
{
|
||||
/*if (canBeBlocked)
|
||||
{
|
||||
|
||||
}*/
|
||||
|
||||
BlockSource firstBlockSource;
|
||||
|
||||
if (hasPerfectBlock && (!hasPerfectWindowTime || owner.timeSm.enablingTimer <= 0.2f)
|
||||
&& characterBlockSm.isPerfectBlocking)
|
||||
if (hasPerfectBlock && (!hasPerfectWindowTime || owner.timeSm.enablingTimer <= 0.2f) && characterBlockSm.isPerfectBlocking)
|
||||
{
|
||||
firstBlockSource = characterBlockSm.blockSources.Find(source =>
|
||||
source.perfectBlockType >= attackArea.attackSm.attackValue.breakthroughType && source.isDuringPerfectBlock);
|
||||
@@ -79,12 +72,13 @@ namespace Cielonos.MainGame
|
||||
perfectBlockAction?.Invoke(blocker);
|
||||
blocker.eventSm.onBlockSuccess.Invoke(attackArea, firstBlockSource);
|
||||
blocker.eventSm.onPerfectBlockSuccess.Invoke(attackArea, firstBlockSource);
|
||||
Debug.Log($"[ReactionSubmodule] Perfect block successful! Blocker: {blocker.name}, Attack: {attackArea.name}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
firstBlockSource = characterBlockSm.blockSources.Find(source =>
|
||||
firstBlockSource = characterBlockSm.blockSources.Find(source =>
|
||||
source.normalBlockType >= attackArea.attackSm.attackValue.breakthroughType);
|
||||
if (firstBlockSource != null)
|
||||
{
|
||||
@@ -93,6 +87,7 @@ namespace Cielonos.MainGame
|
||||
normalBlockAction?.Invoke(blocker);
|
||||
blocker.eventSm.onBlockSuccess.Invoke(attackArea, firstBlockSource);
|
||||
blocker.eventSm.onNormalBlockSuccess.Invoke(attackArea, firstBlockSource);
|
||||
Debug.Log($"[ReactionSubmodule] Normal block successful! Blocker: {blocker.name}, Attack: {attackArea.name}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -143,7 +138,7 @@ namespace Cielonos.MainGame
|
||||
{
|
||||
DodgeSource firstDodgeSource;
|
||||
|
||||
if (hasPerfectDodge && owner.timeSm.enablingTimer <= 0.2f && characterDodgeSm.isPerfectDodging)
|
||||
if (hasPerfectDodge && owner.timeSm.enablingTimer <= 0.15f && characterDodgeSm.isPerfectDodging)
|
||||
{
|
||||
firstDodgeSource = characterDodgeSm.dodgeSources.Find(source => source.isDuringPerfectDodge);
|
||||
firstDodgeSource.PerfectDodge(owner);
|
||||
|
||||
@@ -17,6 +17,11 @@ namespace Cielonos.MainGame
|
||||
public List<ScheduledAction> scheduledActions;
|
||||
private List<ScheduledAction> toBeExecutedScheduledActions = new List<ScheduledAction>();
|
||||
|
||||
/// <summary>
|
||||
/// enable 阶段开始前允许反应的提前量(秒),默认 0 表示无提前 grace window。
|
||||
/// </summary>
|
||||
public float reactionGraceBefore;
|
||||
|
||||
public TimeSubmodule(AttackAreaBase attackArea, float lifeTime, Action timeOutAction = null) : base(attackArea)
|
||||
{
|
||||
this.isEnabling = true;
|
||||
@@ -51,7 +56,14 @@ namespace Cielonos.MainGame
|
||||
});
|
||||
}
|
||||
|
||||
public TimeSubmodule(AttackAreaBase attackArea, float lifeTime, float delayTime, float enableTime, Action enableAction, Action timeOutAction) : base(attackArea)
|
||||
public TimeSubmodule(AttackAreaBase attackArea, float lifeTime, float delayTime, float enableTime,
|
||||
Action enableAction, Action timeOutAction)
|
||||
: this(attackArea, lifeTime, delayTime, enableTime, enableAction, timeOutAction, 0f)
|
||||
{
|
||||
}
|
||||
|
||||
public TimeSubmodule(AttackAreaBase attackArea, float lifeTime, float delayTime, float enableTime,
|
||||
Action enableAction, Action timeOutAction, float graceBefore) : base(attackArea)
|
||||
{
|
||||
this.isEnabling = true;
|
||||
this.lifeTime = lifeTime;
|
||||
@@ -78,6 +90,8 @@ namespace Cielonos.MainGame
|
||||
this.enablingTimer = 0;
|
||||
this.remainingEnableTime = enableTime;
|
||||
this.enableAction = enableAction;
|
||||
|
||||
this.reactionGraceBefore = graceBefore;
|
||||
}
|
||||
|
||||
public TimeSubmodule AddScheduleAction(Action action, float delay)
|
||||
@@ -85,6 +99,28 @@ namespace Cielonos.MainGame
|
||||
scheduledActions.Add(new ScheduledAction(action, delay));
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断当前时刻是否处于反应窗口内(包含 grace 区间和 enable 阶段本身)。
|
||||
/// before grace: delay 阶段末尾的 reactionGraceBefore 秒内。
|
||||
/// after grace: enable 结束后的 reactionGraceAfter 秒内。
|
||||
/// </summary>
|
||||
public bool IsReactionActive()
|
||||
{
|
||||
// 在 enable 阶段本身,反应始终可用
|
||||
if (attackArea.isEnabling)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// before grace: delay 尚未结束,但已进入 grace 窗口
|
||||
if (delayTime > 0f && reactionGraceBefore > 0f && delayTime <= reactionGraceBefore)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class TimeSubmodule
|
||||
|
||||
Reference in New Issue
Block a user