Moar Gamecraft commands!
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

89 wiersze
3.4KB

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