using System; using Svelto.ECS; //using Svelto.Context; using Unity.Mathematics; using RobocraftX.Character.Camera; using RobocraftX.Character.Factories; using GamecraftModdingAPI.Commands; namespace ExtraCommands.Basics { [CustomCommand("Rotation")] class RotatePlayerCommandEngine : ICustomCommandEngine { public string Description => "Rotation"; public string Name => "Rotation commands"; public EntitiesDB entitiesDB { set; private get; } public bool isRemovable => true; public void Ready() { CommandRegistrationHelper.Register("RotateAbsolute", RotateAbsoluteCommand, "Rotate the player camera to the entered rotation"); CommandRegistrationHelper.Register("RotateRelative", RotateRelativeCommand, "Rotate the player camera by the entered rotation"); } private void RotateAbsoluteCommand(float vertical, float horizontal) { EntityCollection cameras = entitiesDB.QueryEntities(CameraExclusiveGroups.VisualCameraGroup); uint count = cameras.count; int num2 = 0; while ((long)num2 < (long)((ulong)count)) { cameras[num2].eulerRotation.x = vertical; cameras[num2].eulerRotation.y = horizontal; // TODO: Multiplayer compatibility /* uint num3; InputEntityStruct[] array; if (this.entitiesDB.TryQueryEntitiesAndIndex(item2[num2].ID.entityID, PlayersExclusiveGroups.LocalPlayers, out num3, out array)) { desiredDistance = math.clamp(desiredDistance, 0f, item[num2].maxDistance); array[(int)num3].cameraZoomFactor = math.unlerp(item[num2].minDistance, item[num2].maxDistance, desiredDistance); } */ num2++; } } private void RotateRelativeCommand(float vertical, float horizontal) { float2 angleDelta = new float2(vertical, horizontal); EntityCollection tuple = entitiesDB.QueryEntities(CameraExclusiveGroups.VisualCameraGroup); uint count = tuple.count; EntityCollection settings = tuple.Item1; EntityCollection cameras = tuple.Item2; int num2 = 0; while ((long)num2 < (long)((ulong)count)) { CharacterCameraMovementUtility.UpdateCameraRotationFromDelta(ref cameras[num2], in settings[num2], angleDelta); // TODO: Multiplayer compatibility /* uint num3; InputEntityStruct[] array; if (this.entitiesDB.TryQueryEntitiesAndIndex(item2[num2].ID.entityID, PlayersExclusiveGroups.LocalPlayers, out num3, out array)) { desiredDistance = math.clamp(desiredDistance, 0f, item[num2].maxDistance); array[(int)num3].cameraZoomFactor = math.unlerp(item[num2].minDistance, item[num2].maxDistance, desiredDistance); } */ num2++; } } public void Dispose() { CommandRegistrationHelper.Unregister("RotateAbsolute"); CommandRegistrationHelper.Unregister("RotateRelative"); } } }