ECSTest.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using Solana.Unity.Bolt.Test;
  2. using Solana.Unity.Rpc.Models;
  3. using Solana.Unity.Wallet;
  4. using Solana.Unity.Bolt;
  5. using Solana.Unity.Rpc;
  6. using System;
  7. using System.Threading.Tasks;
  8. using Solana.Unity.Wallet.Bip39;
  9. using World.Program;
  10. using System.Diagnostics;
  11. using Solana.Unity.Rpc.Types;
  12. namespace ECSTest {
  13. public class Test {
  14. public static async Task Run(Framework framework) {
  15. await Profiler.Run("AddEntity1", async () => {
  16. await AddEntity1(framework);
  17. });
  18. await Profiler.Run("AddEntity2", async () => {
  19. await AddEntity2(framework);
  20. });
  21. await Profiler.Run("AddEntity3", async () => {
  22. await AddEntity3(framework);
  23. });
  24. await Profiler.Run("AddEntity4WithSeed", async () => {
  25. await AddEntity4WithSeed(framework);
  26. });
  27. await Profiler.Run("InitializeVelocityComponentOnEntity1WithSeed", async () => {
  28. await InitializeVelocityComponentOnEntity1WithSeed(framework);
  29. });
  30. await Profiler.Run("InitializePositionComponentOnEntity1", async () => {
  31. await InitializePositionComponentOnEntity1(framework);
  32. });
  33. await Profiler.Run("InitializePositionComponentOnEntity2", async () => {
  34. await InitializePositionComponentOnEntity2(framework);
  35. });
  36. await Profiler.Run("InitializePositionComponentOnEntity4", async () => {
  37. await InitializePositionComponentOnEntity4(framework);
  38. });
  39. await Profiler.Run("CheckPositionOnEntity1IsDefault", async () => {
  40. await CheckPositionOnEntity1IsDefault(framework);
  41. });
  42. await Profiler.Run("ApplySimpleMovementSystemUpOnEntity1", async () => {
  43. await ApplySimpleMovementSystemUpOnEntity1(framework);
  44. });
  45. await Profiler.Run("ApplySimpleMovementSystemRightOnEntity1", async () => {
  46. await ApplySimpleMovementSystemRightOnEntity1(framework);
  47. });
  48. await Profiler.Run("DestroyVelocityComponentOnEntity1", async () => {
  49. await DestroyVelocityComponentOnEntity1(framework);
  50. });
  51. }
  52. public static async Task AddEntity1(Framework framework) {
  53. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, Commitment.Processed);
  54. framework.Entity1Pda = addEntity.Pda;
  55. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  56. }
  57. public static async Task AddEntity2(Framework framework) {
  58. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, Commitment.Processed);
  59. framework.Entity2Pda = addEntity.Pda;
  60. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  61. }
  62. public static async Task AddEntity3(Framework framework) {
  63. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, Commitment.Processed);
  64. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  65. }
  66. public static async Task AddEntity4WithSeed(Framework framework) {
  67. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, "custom-seed", Commitment.Processed);
  68. framework.Entity4Pda = addEntity.Pda;
  69. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  70. }
  71. public static async Task InitializeVelocityComponentOnEntity1WithSeed(Framework framework) {
  72. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity, "component-velocity", framework.Wallet.Account.PublicKey);
  73. framework.ComponentVelocityEntity1Pda = initializeComponent.Pda;
  74. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  75. }
  76. public static async Task InitializePositionComponentOnEntity1(Framework framework) {
  77. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentPosition);
  78. framework.ComponentPositionEntity1Pda = initializeComponent.Pda;
  79. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  80. }
  81. public static async Task InitializePositionComponentOnEntity2(Framework framework) {
  82. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity2Pda, framework.ExampleComponentPosition);
  83. framework.ComponentPositionEntity2Pda = initializeComponent.Pda;
  84. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  85. }
  86. public static async Task InitializePositionComponentOnEntity4(Framework framework) {
  87. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity4Pda, framework.ExampleComponentPosition);
  88. framework.ComponentPositionEntity4Pda = initializeComponent.Pda;
  89. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  90. }
  91. public static async Task CheckPositionOnEntity1IsDefault(Framework framework) {
  92. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  93. var data = Convert.FromBase64String(accountInfo.Data[0]);
  94. var position = Position.Accounts.Position.Deserialize(data);
  95. Debug.Assert(0 == position.X, "X is not equal to 0");
  96. Debug.Assert(0 == position.Y, "Y is not equal to 0");
  97. Debug.Assert(0 == position.Z, "Z is not equal to 0");
  98. }
  99. public static async Task ApplySimpleMovementSystemUpOnEntity1(Framework framework) {
  100. var apply = new ApplyAccounts() {
  101. Authority = framework.Wallet.Account.PublicKey,
  102. BoltSystem = framework.SystemSimpleMovement,
  103. World = framework.WorldPda,
  104. };
  105. var instruction = WorldProgram.Apply(apply, Bolt.World.SerializeArgs(new { direction = "Up" }));
  106. instruction.Keys.Add(AccountMeta.ReadOnly(framework.ExampleComponentPosition, false));
  107. instruction.Keys.Add(AccountMeta.Writable(framework.ComponentPositionEntity1Pda, false));
  108. await framework.SendAndConfirmInstruction(instruction);
  109. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  110. var data = Convert.FromBase64String(accountInfo.Data[0]);
  111. var position = Position.Accounts.Position.Deserialize(data);
  112. Debug.Assert(0 == position.X, "X is not equal to 0");
  113. Debug.Assert(1 == position.Y, "Y is not equal to 1");
  114. Debug.Assert(0 == position.Z, "Z is not equal to 0");
  115. }
  116. public static async Task ApplySimpleMovementSystemRightOnEntity1(Framework framework) {
  117. var instruction = Bolt.World.ApplySystem(
  118. framework.WorldPda,
  119. framework.SystemSimpleMovement,
  120. new Bolt.World.EntityType[] {
  121. new Bolt.World.EntityType(framework.Entity1Pda, new PublicKey[] { framework.ExampleComponentPosition })
  122. },
  123. new { direction = "Right" },
  124. framework.Wallet.Account.PublicKey
  125. );
  126. await framework.SendAndConfirmInstruction(instruction);
  127. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  128. var data = Convert.FromBase64String(accountInfo.Data[0]);
  129. var position = Position.Accounts.Position.Deserialize(data);
  130. Debug.Assert(1 == position.X, "X is not equal to 1");
  131. Debug.Assert(1 == position.Y, "Y is not equal to 1");
  132. Debug.Assert(0 == position.Z, "Z is not equal to 0");
  133. }
  134. public static async Task DestroyVelocityComponentOnEntity1(Framework framework) {
  135. var receiver = new Wallet(new Mnemonic(WordList.English, WordCount.Twelve));
  136. var componentBalance = await framework.Client.GetBalanceAsync(framework.ComponentVelocityEntity1Pda);
  137. var destroyComponent = await Bolt.World.DestroyComponent(framework.Wallet.Account.PublicKey, receiver.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity, "component-velocity");
  138. await framework.SendAndConfirmInstruction(destroyComponent.Instruction);
  139. var receiverBalance = await framework.Client.GetBalanceAsync(receiver.Account.PublicKey);
  140. Debug.Assert(componentBalance.Result.Value == receiverBalance.Result.Value, "Component balance is not equal to receiver balance");
  141. }
  142. }
  143. }