Moar Gamecraft commands!
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.

92 lines
3.5KB

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