123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using System;
- using UnityEngine;
- namespace COM3D2.MeidoPhotoStudio.Plugin
- {
- using Input = InputManager;
- public class DragPointHead : DragPointMeido
- {
- private Quaternion headRotation;
- private Vector3 eyeRotationL;
- private Vector3 eyeRotationR;
- public event EventHandler Select;
- public bool IsIK { get; set; }
- protected override void ApplyDragType()
- {
- if (IsBone)
- {
- DragType current = CurrentDragType;
- bool active = current == DragType.MoveY || current == DragType.MoveXZ || current == DragType.Select;
- ApplyProperties(active, false, false);
- }
- else ApplyProperties(CurrentDragType != DragType.None, false, false);
- }
- protected override void UpdateDragType()
- {
- bool shift = Input.Shift;
- bool alt = Input.Alt;
- if (alt && Input.Control)
- {
- // eyes
- CurrentDragType = shift ? DragType.MoveY : DragType.MoveXZ;
- }
- else if (alt)
- {
- // head
- CurrentDragType = shift ? DragType.RotLocalY : DragType.RotLocalXZ;
- }
- else if (Input.GetKey(MpsKey.DragSelect))
- {
- CurrentDragType = DragType.Select;
- }
- else
- {
- CurrentDragType = DragType.None;
- }
- }
- protected override void OnMouseDown()
- {
- base.OnMouseDown();
- if (CurrentDragType == DragType.Select) Select?.Invoke(this, EventArgs.Empty);
- headRotation = MyObject.rotation;
- eyeRotationL = meido.Body.quaDefEyeL.eulerAngles;
- eyeRotationR = meido.Body.quaDefEyeR.eulerAngles;
- }
- protected override void OnDoubleClick()
- {
- if (CurrentDragType == DragType.MoveXZ || CurrentDragType == DragType.MoveY)
- {
- meido.Body.quaDefEyeL = meido.DefaultEyeRotL;
- meido.Body.quaDefEyeR = meido.DefaultEyeRotR;
- }
- else if (CurrentDragType == DragType.RotLocalY || CurrentDragType == DragType.RotLocalXZ)
- {
- meido.FreeLook = !meido.FreeLook;
- }
- }
- protected override void Drag()
- {
- if (IsIK || CurrentDragType == DragType.Select) return;
- if (!(CurrentDragType == DragType.MoveXZ || CurrentDragType == DragType.MoveY) && isPlaying)
- {
- meido.Stop = true;
- }
- Vector3 mouseDelta = MouseDelta();
- if (CurrentDragType == DragType.RotLocalXZ)
- {
- MyObject.rotation = headRotation;
- MyObject.Rotate(camera.transform.forward, -mouseDelta.x / 3f, Space.World);
- MyObject.Rotate(camera.transform.right, mouseDelta.y / 3f, Space.World);
- }
- if (CurrentDragType == DragType.RotLocalY)
- {
- MyObject.rotation = headRotation;
- MyObject.Rotate(Vector3.right * mouseDelta.x / 3f);
- }
- if (CurrentDragType == DragType.MoveXZ || CurrentDragType == DragType.MoveY)
- {
- int inv = CurrentDragType == DragType.MoveY ? -1 : 1;
- meido.Body.quaDefEyeL.eulerAngles = new Vector3(
- eyeRotationL.x, eyeRotationL.y - (mouseDelta.x / 10f), eyeRotationL.z - (mouseDelta.y / 10f)
- );
- meido.Body.quaDefEyeR.eulerAngles = new Vector3(
- eyeRotationR.x, eyeRotationR.y + (inv * mouseDelta.x / 10f), eyeRotationR.z + (mouseDelta.y / 10f)
- );
- }
- }
- }
- }
|