Moar Gamecraft commands!
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

86 строки
3.3KB

  1. using System;
  2. using Svelto.ECS;
  3. //using Svelto.Context;
  4. using Unity.Mathematics;
  5. using RobocraftX.Character.Camera;
  6. using RobocraftX.Character.Factories;
  7. using GamecraftModdingAPI.Commands;
  8. namespace ExtraCommands.Basics
  9. {
  10. [CustomCommand("Rotation")]
  11. class RotatePlayerCommandEngine : ICustomCommandEngine
  12. {
  13. public string Description => "Rotation";
  14. public string Name => "Rotation commands";
  15. public EntitiesDB entitiesDB { set; private get; }
  16. public bool isRemovable => true;
  17. public void Ready()
  18. {
  19. CommandRegistrationHelper.Register<float, float>("RotateAbsolute", RotateAbsoluteCommand, "Rotate the player camera to the entered rotation");
  20. CommandRegistrationHelper.Register<float, float>("RotateRelative", RotateRelativeCommand, "Rotate the player camera by the entered rotation");
  21. }
  22. private void RotateAbsoluteCommand(float vertical, float horizontal)
  23. {
  24. EntityCollection<CharacterCameraEntityStruct> cameras = entitiesDB.QueryEntities<CharacterCameraEntityStruct>(CameraExclusiveGroups.VisualCameraGroup);
  25. uint count = cameras.count;
  26. int num2 = 0;
  27. while ((long)num2 < (long)((ulong)count))
  28. {
  29. cameras[num2].eulerRotation.x = vertical;
  30. cameras[num2].eulerRotation.y = horizontal;
  31. // TODO: Multiplayer compatibility
  32. /*
  33. uint num3;
  34. InputEntityStruct[] array;
  35. if (this.entitiesDB.TryQueryEntitiesAndIndex<InputEntityStruct>(item2[num2].ID.entityID, PlayersExclusiveGroups.LocalPlayers, out num3, out array))
  36. {
  37. desiredDistance = math.clamp(desiredDistance, 0f, item[num2].maxDistance);
  38. array[(int)num3].cameraZoomFactor = math.unlerp(item[num2].minDistance, item[num2].maxDistance, desiredDistance);
  39. }
  40. */
  41. num2++;
  42. }
  43. }
  44. private void RotateRelativeCommand(float vertical, float horizontal)
  45. {
  46. float2 angleDelta = new float2(vertical, horizontal);
  47. EntityCollection<CharacterCameraSettingsEntityStruct, CharacterCameraEntityStruct> tuple = entitiesDB.QueryEntities<CharacterCameraSettingsEntityStruct, CharacterCameraEntityStruct>(CameraExclusiveGroups.VisualCameraGroup);
  48. uint count = tuple.count;
  49. EntityCollection<CharacterCameraSettingsEntityStruct> settings = tuple.Item1;
  50. EntityCollection<CharacterCameraEntityStruct> cameras = tuple.Item2;
  51. int num2 = 0;
  52. while ((long)num2 < (long)((ulong)count))
  53. {
  54. CharacterCameraMovementUtility.UpdateCameraRotationFromDelta(ref cameras[num2], in settings[num2], angleDelta);
  55. // TODO: Multiplayer compatibility
  56. /*
  57. uint num3;
  58. InputEntityStruct[] array;
  59. if (this.entitiesDB.TryQueryEntitiesAndIndex<InputEntityStruct>(item2[num2].ID.entityID, PlayersExclusiveGroups.LocalPlayers, out num3, out array))
  60. {
  61. desiredDistance = math.clamp(desiredDistance, 0f, item[num2].maxDistance);
  62. array[(int)num3].cameraZoomFactor = math.unlerp(item[num2].minDistance, item[num2].maxDistance, desiredDistance);
  63. }
  64. */
  65. num2++;
  66. }
  67. }
  68. public void Dispose()
  69. {
  70. CommandRegistrationHelper.Unregister("RotateAbsolute");
  71. CommandRegistrationHelper.Unregister("RotateRelative");
  72. }
  73. }
  74. }