UI调整
This commit is contained in:
@@ -18,13 +18,21 @@ namespace Cielonos.MainGame.Characters
|
||||
[ShowInInspector]
|
||||
public bool isPerfectBlocking => blockSources.Any(source => source.hasPerfectBlock && source.isDuringPerfectBlock);
|
||||
|
||||
public float afterPerfectBlockTimer;
|
||||
public float afterNormalBlockTimer;
|
||||
public Timer afterPerfectBlockTimer;
|
||||
public CharacterBase perfectBlockedTarget;
|
||||
|
||||
public Timer afterNormalBlockTimer;
|
||||
public CharacterBase normalBlockedTarget;
|
||||
|
||||
public BlockSubmodule(ReactionSubcontroller owner) : base(owner)
|
||||
{
|
||||
blockSources = new List<BlockSource>();
|
||||
canBlock = true;
|
||||
|
||||
this.afterPerfectBlockTimer = new Timer(1);
|
||||
this.afterPerfectBlockTimer.onComplete.Add(new PrioritizedAction(() => perfectBlockedTarget = null));
|
||||
this.afterNormalBlockTimer = new Timer(1);
|
||||
this.afterPerfectBlockTimer.onComplete.Add(new PrioritizedAction(() => normalBlockedTarget = null));
|
||||
}
|
||||
|
||||
public void ApplyBlock(BlockSource source, bool refreshPerfect = false)
|
||||
@@ -99,8 +107,8 @@ namespace Cielonos.MainGame.Characters
|
||||
blockSources.RemoveAll(source => source.blockTime <= 0);
|
||||
}
|
||||
|
||||
afterPerfectBlockTimer -= owner.owner.selfTimeSm.DeltaTime;
|
||||
afterNormalBlockTimer -= owner.owner.selfTimeSm.DeltaTime;
|
||||
afterPerfectBlockTimer.Update(owner.owner.selfTimeSm.DeltaTime);
|
||||
afterNormalBlockTimer.Update(owner.owner.selfTimeSm.DeltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,11 +129,13 @@ namespace Cielonos.MainGame.Characters
|
||||
public GameObject perfectBlockEffect;
|
||||
public uint perfectBlockSound;
|
||||
public Action<AttackAreaBase> onPerfectBlock;
|
||||
|
||||
|
||||
public Breakthrough.Type normalBlockType;
|
||||
public GameObject normalBlockEffect;
|
||||
public uint normalBlockSound;
|
||||
public Action<AttackAreaBase> onNormalBlock;
|
||||
|
||||
|
||||
public float triggerTime;
|
||||
|
||||
@@ -173,11 +183,11 @@ namespace Cielonos.MainGame.Characters
|
||||
}
|
||||
|
||||
VFXObject.Spawn(perfectBlockEffect, sourceCharacter, blockEffectPosition, Quaternion.identity);
|
||||
//pObj.GetComponent<ParticleSystem>().Simulate(0.1f, true, true);
|
||||
//pObj.GetComponent<ParticleSystem>().Play();//TODO: 增加起点时间参数
|
||||
|
||||
sourceCharacter.reactionSc.blockSm.afterPerfectBlockTimer = blockBufferTime + 0.25f;
|
||||
onPerfectBlock?.Invoke(attackArea);
|
||||
|
||||
BlockSubmodule blockSm = sourceCharacter.reactionSc.blockSm;
|
||||
blockSm.perfectBlockedTarget = attackArea.creator;
|
||||
blockSm.afterPerfectBlockTimer.Reset(blockBufferTime + 0.25f);
|
||||
}
|
||||
|
||||
public void NormalBlock(AttackAreaBase attackArea, Vector3 blockEffectPosition)
|
||||
@@ -192,8 +202,11 @@ namespace Cielonos.MainGame.Characters
|
||||
}
|
||||
|
||||
VFXObject.Spawn(normalBlockEffect, sourceCharacter, blockEffectPosition, Quaternion.identity);
|
||||
sourceCharacter.reactionSc.blockSm.afterNormalBlockTimer = blockBufferTime + 0.25f;
|
||||
onNormalBlock?.Invoke(attackArea);
|
||||
|
||||
BlockSubmodule blockSm = sourceCharacter.reactionSc.blockSm;
|
||||
blockSm.normalBlockedTarget = attackArea.creator;
|
||||
blockSm.afterPerfectBlockTimer.Reset(blockBufferTime + 0.25f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,18 +12,25 @@ namespace Cielonos.MainGame.Characters
|
||||
{
|
||||
public List<DodgeSource> dodgeSources;
|
||||
public bool canDodge;
|
||||
|
||||
[ShowInInspector]
|
||||
public bool isDodging => dodgeSources.Count > 0;
|
||||
public Timer afterNormalDodgeTimer;
|
||||
public CharacterBase normalDodgedTarget;
|
||||
|
||||
[ShowInInspector]
|
||||
public bool isPerfectDodging => dodgeSources.Any(source => source.hasPerfectDodge && source.isDuringPerfectDodge);
|
||||
|
||||
public float afterPerfectDodgeTimer;
|
||||
public float afterNormalDodgeTimer;
|
||||
public Timer afterPerfectDodgeTimer;
|
||||
public CharacterBase perfectDodgedTarget;
|
||||
|
||||
public DodgeSubmodule(ReactionSubcontroller owner) : base(owner)
|
||||
{
|
||||
dodgeSources = new List<DodgeSource>();
|
||||
canDodge = true;
|
||||
this.afterNormalDodgeTimer = new Timer(1f);
|
||||
this.afterNormalDodgeTimer.onComplete.Add(new PrioritizedAction(() => normalDodgedTarget = null));
|
||||
this.afterPerfectDodgeTimer = new Timer(1f);
|
||||
this.afterPerfectDodgeTimer.onComplete.Add(new PrioritizedAction(() => perfectDodgedTarget = null));
|
||||
}
|
||||
|
||||
public void ApplyDodge(DodgeSource source, bool refreshPerfect = false)
|
||||
@@ -92,8 +99,8 @@ namespace Cielonos.MainGame.Characters
|
||||
dodgeSources.RemoveAll(source => source.dodgeTime <= 0);
|
||||
}
|
||||
|
||||
afterPerfectDodgeTimer -= owner.owner.selfTimeSm.DeltaTime;
|
||||
afterNormalDodgeTimer -= owner.owner.selfTimeSm.DeltaTime;
|
||||
afterPerfectDodgeTimer.Update(owner.owner.selfTimeSm.DeltaTime);
|
||||
afterNormalDodgeTimer.Update(owner.owner.selfTimeSm.DeltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,8 +116,10 @@ namespace Cielonos.MainGame.Characters
|
||||
public bool isDuringPerfectDodge;
|
||||
public float perfectTime;
|
||||
public float dodgeTime;
|
||||
|
||||
public string perfectEffectName;
|
||||
public Action onPerfectDodge;
|
||||
|
||||
public string normalEffectName;
|
||||
public Action onNormalDodge;
|
||||
|
||||
@@ -144,6 +153,7 @@ namespace Cielonos.MainGame.Characters
|
||||
this.perfectTime = perfectTime;
|
||||
this.hasPerfectDodge = true;
|
||||
this.isDuringPerfectDodge = true;
|
||||
|
||||
|
||||
this._isTriggered = false;
|
||||
}
|
||||
@@ -164,7 +174,7 @@ namespace Cielonos.MainGame.Characters
|
||||
return defaultDodge;
|
||||
}
|
||||
|
||||
public void PerfectDodge()
|
||||
public void PerfectDodge(AttackAreaBase attackArea)
|
||||
{
|
||||
if(_isTriggered) return;
|
||||
_isTriggered = true;
|
||||
@@ -176,10 +186,13 @@ namespace Cielonos.MainGame.Characters
|
||||
sourceCharacter.feedbackSc.PlayFeedback("PerfectDodge");
|
||||
}
|
||||
|
||||
sourceCharacter.reactionSc.dodgeSm.afterPerfectDodgeTimer = dodgeBufferTime + 0.25f;
|
||||
DodgeSubmodule dodgeSm = sourceCharacter.reactionSc.dodgeSm;
|
||||
dodgeSm.perfectDodgedTarget = attackArea?.creator;
|
||||
dodgeSm.afterPerfectDodgeTimer.Reset(dodgeBufferTime + 0.5f);
|
||||
Debug.Log($"Perfect Dodge triggered by {sourceCharacter.name} against {attackArea?.creator?.name}");
|
||||
}
|
||||
|
||||
public void NormalDodge()
|
||||
public void NormalDodge(AttackAreaBase attackArea)
|
||||
{
|
||||
if(_isTriggered) return;
|
||||
_isTriggered = true;
|
||||
@@ -191,7 +204,9 @@ namespace Cielonos.MainGame.Characters
|
||||
sourceCharacter.feedbackSc.PlayFeedback("NormalDodge");
|
||||
}
|
||||
|
||||
sourceCharacter.reactionSc.dodgeSm.afterNormalDodgeTimer = dodgeBufferTime + 0.25f;
|
||||
DodgeSubmodule dodgeSm = sourceCharacter.reactionSc.dodgeSm;
|
||||
dodgeSm.normalDodgedTarget = attackArea?.creator;
|
||||
dodgeSm.afterNormalDodgeTimer.Reset(dodgeBufferTime + 0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,6 +166,8 @@ namespace Cielonos.MainGame.Characters
|
||||
|
||||
public void SpawnShatters(Breakthrough.Type type, Vector3 direction)
|
||||
{
|
||||
if(particleEffects["Shatters"] == null) return;
|
||||
|
||||
Color shatterColor = MainGameManager.BaseCollection.outlineColorCollection[type] * Mathf.Pow(2, 4);
|
||||
var main = particleEffects["Shatters"].main;
|
||||
main.startColor = shatterColor;
|
||||
|
||||
Reference in New Issue
Block a user