From c11b51d10bee2e6bfdf816ac124fd7aa8f58664f Mon Sep 17 00:00:00 2001 From: "Konstantin V. Krupovich" Date: Sun, 11 Jun 2023 21:40:24 +0300 Subject: [PATCH] #88 battle effect casting fixes (revenge) --- .../Systems/Battle/BattleAssignAttackerSystem.cs | 4 ++-- .../Battle/BattleAssignRelationEffectsSystem.cs | 4 ++-- .../ECS/Systems/Battle/BattleCompleteTurnSystem.cs | 3 ++- .../Battle/BattlePrepareRevengeEffectSystem.cs | 6 ++++++ .../Battle/BattlePrepareRevengeTurnsSystem.cs | 13 ++++++++++++- .../Loaders/HeroRelationEffectsLibraryLoader.cs | 3 ++- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/ECS/Systems/Battle/BattleAssignAttackerSystem.cs b/Assets/Scripts/ECS/Systems/Battle/BattleAssignAttackerSystem.cs index 369b952..69a1b7f 100644 --- a/Assets/Scripts/ECS/Systems/Battle/BattleAssignAttackerSystem.cs +++ b/Assets/Scripts/ECS/Systems/Battle/BattleAssignAttackerSystem.cs @@ -27,7 +27,7 @@ public void Run(IEcsSystems systems) internal void AssignAttacker(int turnEntity) { - if (!battleService.Value.RoundEntity.Unpack(out var world, out var roundEntity)) + if (!battleService.Value.RoundEntity.Unpack(out _, out var roundEntity)) throw new Exception("No Round"); ref var roundInfo = ref roundPool.Value.Get(roundEntity); @@ -52,7 +52,7 @@ internal void AssignAttacker(int turnEntity) turnInfo.Attacker = roundSlot.HeroInstancePackedEntity; ref var attackerRef = ref attackerRefPool.Value.Add(turnEntity); - attackerRef.HeroInstancePackedEntity = world.PackEntityWithWorld(attackerInstanceEntity); + attackerRef.HeroInstancePackedEntity = roundSlot.HeroInstancePackedEntity; } } } diff --git a/Assets/Scripts/ECS/Systems/Battle/BattleAssignRelationEffectsSystem.cs b/Assets/Scripts/ECS/Systems/Battle/BattleAssignRelationEffectsSystem.cs index 4b376f6..2c5cb81 100644 --- a/Assets/Scripts/ECS/Systems/Battle/BattleAssignRelationEffectsSystem.cs +++ b/Assets/Scripts/ECS/Systems/Battle/BattleAssignRelationEffectsSystem.cs @@ -53,8 +53,8 @@ public void Run(IEcsSystems systems) var relEffectProbeEntity = ecsWorld.Value.NewEntity(); ref var probeComp = ref relEffectProbePool.Value.Add(relEffectProbeEntity); - probeComp.SourceOrigPacked = item.Key.Item1; - probeComp.TargetOrigPacked = item.Key.Item2; + probeComp.TargetOrigPacked = item.Key.Item1; + probeComp.SourceOrigPacked = item.Key.Item2; probeComp.TargetConfigRefPacked = heroConfigRef.Packed; probeComp.P2PEntityPacked = item.Value; probeComp.SubjectState = SubjectState; diff --git a/Assets/Scripts/ECS/Systems/Battle/BattleCompleteTurnSystem.cs b/Assets/Scripts/ECS/Systems/Battle/BattleCompleteTurnSystem.cs index b9091af..e3dc5ad 100644 --- a/Assets/Scripts/ECS/Systems/Battle/BattleCompleteTurnSystem.cs +++ b/Assets/Scripts/ECS/Systems/Battle/BattleCompleteTurnSystem.cs @@ -67,7 +67,8 @@ private bool MarkDeadHero(int turnEntity) where T : struct, IPackedWithWorldR if (hpComp.Value > 0) return false; - deadTagPool.Value.Add(heroInstanceEntity); + if (!deadTagPool.Value.Has(heroInstanceEntity)) + deadTagPool.Value.Add(heroInstanceEntity); return true; } diff --git a/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeEffectSystem.cs b/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeEffectSystem.cs index d51e1fe..519a5e4 100644 --- a/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeEffectSystem.cs +++ b/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeEffectSystem.cs @@ -4,6 +4,7 @@ using Leopotam.EcsLite; using Leopotam.EcsLite.Di; using System; +using UnityEngine; namespace Assets.Scripts.ECS.Systems { @@ -46,6 +47,11 @@ public void Run(IEcsSystems systems) // registering effect for the hero affected (in the battle world, to make it handy when needed) ref var attackerRef = ref attackerRefPool.Value.Get(turnEntity); + if (attackerRef.Packed.Unpack(out var world, out var attackerEntity)) + { + var np = world.ReadValue, string>(attackerEntity); + Debug.Log($"Atatcker is {np}"); + } effect.EffectFocus = attackerRef.Packed; var revengeEntity = ecsWorld.Value.NewEntity(); diff --git a/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeTurnsSystem.cs b/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeTurnsSystem.cs index 146e011..cb8d1d4 100644 --- a/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeTurnsSystem.cs +++ b/Assets/Scripts/ECS/Systems/Battle/BattlePrepareRevengeTurnsSystem.cs @@ -4,6 +4,7 @@ using Assets.Scripts.Services; using Leopotam.EcsLite; using Leopotam.EcsLite.Di; +using UnityEngine; namespace Assets.Scripts.ECS.Systems { @@ -44,13 +45,23 @@ public void Run(IEcsSystems systems) { ref var revengeComp = ref revengePool.Value.Get(entity); var packedRevenger = revengeComp.RevengeBy; - if (!revengeComp.RevengeBy.Unpack(out _, out var revengerEntity)) + if (!revengeComp.RevengeBy.Unpack(out _, out var revengerEntity) || + !revengeComp.RevengeFor.Unpack(out _, out var revengedEntity) ) throw new Exception($"Stale revenger entity"); + Debug.Log( + $"Revenger: {world.ReadValue, string>(revengerEntity)}" + + $"For: {world.ReadValue, string>(revengedEntity)}"); + if (retiredTagPool.Value.Has(revengerEntity)) continue; // died hero can't revenge var idx = buffer.FindIndex(x => x.HeroInstancePackedEntity.EqualsTo(packedRevenger)); + if (idx != 0) + Debug.Log("Reordering the round queue for the revenge"); + else + Debug.Log("No need to reorder the round queue"); + if (idx < 0) { RoundSlotInfo slotInfo = new () diff --git a/Assets/Scripts/Services/ConfigDataManagement/Loaders/HeroRelationEffectsLibraryLoader.cs b/Assets/Scripts/Services/ConfigDataManagement/Loaders/HeroRelationEffectsLibraryLoader.cs index 1534fdd..e9559d6 100644 --- a/Assets/Scripts/Services/ConfigDataManagement/Loaders/HeroRelationEffectsLibraryLoader.cs +++ b/Assets/Scripts/Services/ConfigDataManagement/Loaders/HeroRelationEffectsLibraryLoader.cs @@ -55,7 +55,7 @@ object val(int row, int cell) for (int i = 0; i < heroCount; i++) { var heroId = i; - var row = i + 2; + var heroRow = i * 2 + 2; for (int j = 0; j < stateCount; j++) { var subjectState = j switch @@ -63,6 +63,7 @@ object val(int row, int cell) 0 => RelationSubjectState.Attacking, _ => RelationSubjectState.BeingAttacked }; + var row = heroRow + j; for (int k = 1; k < relationStateCount * 2; k += 2) {