Advertisement
Guest User

Untitled

a guest
Jun 17th, 2022
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.30 KB | None | 0 0
  1. public class GameLogicSystemGroup : ComponentSystemGroup
  2.     {
  3.     }
  4.  
  5.     [UpdateInGroup(typeof(GameLogicSystemGroup))]
  6.     public class StatUpdateSystemGroup : ComponentSystemGroup
  7.     {
  8.     }
  9.  
  10.     [UpdateInGroup(typeof(StatUpdateSystemGroup))]
  11.     [UpdateAfter(typeof(SystemCalcStats))]
  12.     public class SkillUpdateSystemGroup: ComponentSystemGroup
  13.     {
  14.     }
  15.  
  16.     [UpdateInGroup(typeof(StatUpdateSystemGroup), OrderFirst = true)]
  17.     public class StatsStartBufferGroup : EntityCommandBufferSystem
  18.     {
  19.     }
  20.     [UpdateInGroup(typeof(StatUpdateSystemGroup), OrderLast = true)]
  21.     public class StatsEndBufferGroup : EntityCommandBufferSystem
  22.     {
  23.     }
  24.  
  25.     public struct StatBlock
  26.     {
  27.         public int Str;
  28.         public int Dex;
  29.         public int Int;
  30.         public int Con;
  31.  
  32.         public static StatBlock operator +(StatBlock a, StatBlock b)
  33.         {
  34.             return new StatBlock()
  35.             {
  36.                 Str = a.Str + b.Str,
  37.                 Dex = a.Dex + b.Dex,
  38.                 Int = a.Int + b.Int,
  39.                 Con = a.Con + b.Con
  40.             };
  41.         }
  42.     }
  43.  
  44.     public struct TagStatsChanged : IComponentData
  45.     {
  46.     }
  47.    
  48.  
  49.     public struct StatsBase : IComponentData
  50.     {
  51.         public StatBlock Value;
  52.     }
  53.  
  54.     [InternalBufferCapacity(10)]
  55.     public struct StatMods : IBufferElementData
  56.     {
  57.         public StatBlock Value;
  58.     }
  59.  
  60.  
  61.     public struct StatsModTotal : IComponentData
  62.     {
  63.         public StatBlock Value;
  64.     }
  65.  
  66.     public struct Stats : IComponentData
  67.     {
  68.         public StatBlock Value;
  69.     }
  70.  
  71.     public struct SomeSkillA : IComponentData
  72.     {
  73.         public int Value;
  74.     }
  75.  
  76.     public struct SomeSkillB : IComponentData
  77.     {
  78.         public int Value;
  79.     }
  80.  
  81.     [UpdateInGroup(typeof(StatUpdateSystemGroup))]
  82.     public partial class SystemCalcMods : SystemBase
  83.     {
  84.         protected override void OnUpdate()
  85.         {
  86.             Entities.WithAll<TagStatsChanged>().ForEach((ref StatsModTotal total, in DynamicBuffer<StatMods> mods) =>
  87.             {
  88.                 total.Value = new StatBlock();
  89.                 for (int i = 0; i < mods.Length; i++)
  90.                     total.Value += mods[i].Value;
  91.             }).ScheduleParallel(Dependency);
  92.         }
  93.     }
  94.  
  95.     [UpdateInGroup(typeof(StatUpdateSystemGroup))]
  96.     [UpdateAfter(typeof(SystemCalcMods))]
  97.     public partial class SystemCalcStats : SystemBase
  98.     {
  99.         protected override void OnUpdate()
  100.         {
  101.             Entities.ForEach((ref Stats total, in StatsModTotal mods, in StatsBase stats) =>
  102.             {
  103.                 total.Value = stats.Value + mods.Value;
  104.             }).ScheduleParallel(Dependency);
  105.         }
  106.     }
  107.  
  108.     [UpdateInGroup(typeof(SkillUpdateSystemGroup))]
  109.     public partial class SystemCalcSkillA : SystemBase
  110.     {
  111.         protected override void OnUpdate()
  112.         {
  113.             Entities.WithAll<TagStatsChanged>().ForEach((ref SomeSkillA skill, in Stats stats) =>
  114.             {
  115.                 skill.Value = 50 + (stats.Value.Str + stats.Value.Int) / 2;
  116.             }).ScheduleParallel(Dependency);
  117.         }
  118.     }
  119.  
  120.     [UpdateInGroup(typeof(SkillUpdateSystemGroup))]
  121.     public partial class SystemCalcSkillB : SystemBase
  122.     {
  123.         protected override void OnUpdate()
  124.         {
  125.             Entities.WithAll<TagStatsChanged>().ForEach((ref SomeSkillB skill, in Stats stats) =>
  126.             {
  127.                 skill.Value = 25 + (stats.Value.Dex + stats.Value.Con + stats.Value.Str) / 3;
  128.             }).ScheduleParallel(Dependency);
  129.         }
  130.     }
  131.  
  132.  
  133.     [UpdateInGroup(typeof(GameLogicSystemGroup))]
  134.     public partial class SystemClearTagStatsChanged : SystemBase
  135.     {
  136.         private StatsEndBufferGroup ecbSystem;
  137.  
  138.         protected override void OnCreate()
  139.         {
  140.             ecbSystem = World.GetOrCreateSystem<StatsEndBufferGroup>();
  141.         }
  142.  
  143.         protected override void OnUpdate()
  144.         {
  145.             var ecb = ecbSystem.CreateCommandBuffer().AsParallelWriter();
  146.             Entities.WithAll<TagStatsChanged>().ForEach((Entity e, int entityInQueryIndex) =>
  147.             {
  148.                 ecb.RemoveComponent<TagStatsChanged>(entityInQueryIndex, e);
  149.             }).ScheduleParallel();
  150.  
  151.             ecbSystem.AddJobHandleForProducer(Dependency);
  152.         }
  153.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement