diff --git a/HarmonySrc/NecroView.cs b/HarmonySrc/NecroView.cs
index 45c6e85..dfc2ec9 100644
--- a/HarmonySrc/NecroView.cs
+++ b/HarmonySrc/NecroView.cs
@@ -21,6 +21,13 @@ namespace NecromancerTome
static Vector3 _target;
static Camera _cam;
const float TurnSpeed = 60f, ZoomSpeed = 0.4f;
+ /// Мышь облетает руки, персонаж стоит (16.10: «я поворачиваю мышь, а туловище проворачивается следом, и я
+ /// вижу тело только с одной позиции»). Поворот игрока каждый кадр возвращается к снимку при включении.
+ public static bool Mouse = true;
+ public static float MouseSpeed = 3f;
+ static Vector3 _lockRot;
+ static Quaternion _lockCam;
+ static bool _mouseBroken;
public static string Start(float _yaw, float _pitch, float _dist)
{
@@ -47,6 +54,8 @@ namespace NecromancerTome
_cam.nearClipPlane = 0.01f;
_cam.gameObject.SetActive(true);
HandPose.HoldStill = true;
+ _lockRot = pl.rotation;
+ _lockCam = pc.localRotation;
On = true;
return "осмотр включён: вокруг " + Yaw + ", высота " + Pitch + ", расстояние " + Dist;
}
@@ -76,6 +85,22 @@ namespace NecromancerTome
return;
}
float dt = Time.unscaledDeltaTime;
+ EntityPlayerLocal pl = GameManager.Instance?.World?.GetPrimaryPlayer();
+ if (Mouse && pl != null && !_mouseBroken)
+ {
+ try
+ {
+ Yaw += Input.GetAxis("Mouse X") * MouseSpeed;
+ Pitch = Mathf.Clamp(Pitch - Input.GetAxis("Mouse Y") * MouseSpeed, -85f, 85f);
+ }
+ catch (System.Exception e)
+ {
+ _mouseBroken = true; // нет оси мыши в старом вводе - остаётся цифровой блок
+ Debug.LogWarning("[NecromancerTome] necroview: мышь не читается (" + e.Message + ")");
+ }
+ pl.rotation = _lockRot;
+ pc.localRotation = _lockCam;
+ }
if (Input.GetKey(KeyCode.Keypad4)) Yaw -= TurnSpeed * dt;
if (Input.GetKey(KeyCode.Keypad6)) Yaw += TurnSpeed * dt;
if (Input.GetKey(KeyCode.Keypad8)) Pitch = Mathf.Min(85f, Pitch + TurnSpeed * dt);
@@ -103,7 +128,7 @@ namespace NecromancerTome
public class ConsoleCmdNecroView : ConsoleCmdAbstract
{
public override string[] getCommands() => new[] { "necroview" };
- public override string getDescription() => "NecromancerTome: осмотр рук со стороны - on [вокруг высота расстояние]|off|set вокруг высота расстояние|show; цифровой блок 4/6 8/2 +/- 5";
+ public override string getDescription() => "NecromancerTome: осмотр рук со стороны - on [вокруг высота расстояние]|off|set вокруг высота расстояние|mouse [off]|show; мышь или цифровой блок 4/6 8/2 +/- 5";
static bool Num(List _p, int _i, out float _v)
{
@@ -134,6 +159,10 @@ namespace NecromancerTome
NecroView.Pitch = p2;
NecroView.Dist = d2;
break;
+ case "mouse":
+ NecroView.Mouse = !(_params.Count > 1 && _params[1] == "off");
+ Out("мышь " + (NecroView.Mouse ? "облетает руки" : "крутит персонажа, облёт - цифровой блок"));
+ return;
case "show":
break;
default: