A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.2KB

  1. using RobocraftX.Common;
  2. using Svelto.ECS;
  3. using Svelto.ECS.EntityStructs;
  4. using Unity.Mathematics;
  5. using Unity.Transforms;
  6. using TechbloxModdingAPI.Engines;
  7. using TechbloxModdingAPI.Utility;
  8. namespace TechbloxModdingAPI.Blocks.Engines
  9. {
  10. /// <summary>
  11. /// Engine which executes block movement actions
  12. /// </summary>
  13. public class MovementEngine : IApiEngine
  14. {
  15. public string Name { get; } = "TechbloxModdingAPIMovementGameEngine";
  16. public EntitiesDB entitiesDB { set; private get; }
  17. public bool isRemovable => false;
  18. public bool IsInGame = false;
  19. public void Dispose()
  20. {
  21. IsInGame = false;
  22. }
  23. public void Ready()
  24. {
  25. IsInGame = true;
  26. }
  27. // implementations for Movement static class
  28. internal float3 MoveBlock(Block block, float3 vector)
  29. {
  30. ref PositionEntityStruct posStruct = ref this.entitiesDB.QueryEntityOrDefault<PositionEntityStruct>(block);
  31. ref GridRotationStruct gridStruct = ref this.entitiesDB.QueryEntityOrDefault<GridRotationStruct>(block);
  32. ref LocalTransformEntityStruct transStruct = ref this.entitiesDB.QueryEntityOrDefault<LocalTransformEntityStruct>(block);
  33. ref UECSPhysicsEntityStruct phyStruct = ref this.entitiesDB.QueryEntityOrDefault<UECSPhysicsEntityStruct>(block);
  34. // main (persistent) position
  35. posStruct.position = vector;
  36. // placement grid position
  37. gridStruct.position = vector;
  38. // rendered position
  39. transStruct.position = vector;
  40. // collision position
  41. if (phyStruct.ID != default)
  42. { //It exists
  43. FullGameFields._physicsWorld.EntityManager.SetComponentData(phyStruct.uecsEntity, new Translation
  44. {
  45. Value = posStruct.position
  46. });
  47. }
  48. entitiesDB.QueryEntityOrDefault<GridConnectionsEntityStruct>(block).isProcessed = false;
  49. return posStruct.position;
  50. }
  51. internal float3 GetPosition(Block block)
  52. {
  53. return entitiesDB.QueryEntityOrDefault<PositionEntityStruct>(block).position;
  54. }
  55. }
  56. }