This commit is contained in:
SoulliesOfficial
2026-05-27 15:15:28 -04:00
parent 76f498ae2b
commit 72756712f7
669 changed files with 5361 additions and 12268 deletions

View File

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

View File

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

View File

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

View File

@@ -280,6 +280,7 @@ namespace Cielonos.MainGame.Characters
/// <param name="newDuration"></param>
public override void Reset(float newDuration = -1f)
{
isCompleted = false;
currentTime = 0f;
duration = newDuration >= 0f ? newDuration : originalDuration;
}

View File

@@ -27,9 +27,8 @@ namespace Cielonos.MainGame.Characters
backpackSm ??= new BackpackSubmodule(this);
equipmentSm ??= new EquipmentSubmodule(this);
backpackSm.ObtainItem<Polychrome>();
//backpackSm.ObtainItem<DualHarmony>();
backpackSm.ObtainItem<Polychrome>();
backpackSm.ObtainItem<FutureWand>();
backpackSm.ObtainItem<Ascension>();
backpackSm.ObtainItem<BlackHoleDisplacer>();
@@ -37,6 +36,8 @@ namespace Cielonos.MainGame.Characters
backpackSm.ObtainItem<DecayAccelerationCoil>();
backpackSm.ObtainItem<FusionInjector>();
backpackSm.ObtainItem<MissileSeparationMembrane>();
backpackSm.ObtainItem<PhotonPolarizer>();
backpackSm.ObtainItem<PhotonDissociator>();
foreach (MainWeaponBase mainWeapon in backpackSm.mainWeapons)
{