Passion & UI

This commit is contained in:
SoulliesOfficial
2026-06-12 17:11:39 -04:00
parent 7bc1e1722c
commit 6d7ebc5825
3444 changed files with 865284 additions and 463132 deletions

View File

@@ -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);

View File

@@ -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