using System; using System.Collections; using System.Collections.Specialized; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace MyRoomCustom { public class CreativeRoomUIPlacementMaid : MonoBehaviour { private Maid targetMaid { get { if (this.m_TargetMaid == null) { this.m_TargetMaid = this.GetMaid(true); if (this.m_TargetMaid == null) { this.m_TargetMaid = this.GetMaid(false); } if (this.m_TargetMaid) { this.m_TargetMaid.body0.SetBoneHitHeightY(-1000f); } } return this.m_TargetMaid; } } private Maid GetMaid(bool searchLeader = true) { if (this.m_CharaMgr == null) { return null; } Maid maid = null; foreach (Maid maid2 in this.m_CharaMgr.GetStockMaidList()) { if (maid2 != null) { if (!searchLeader || maid2.status.leader) { maid = maid2; break; } } } if (maid == null) { int maidCount = this.m_CharaMgr.GetMaidCount(); for (int i = 0; i < maidCount; i++) { Maid maid3 = this.m_CharaMgr.GetMaid(i); if (maid3 != null) { if (!searchLeader || maid3.status.leader) { maid = maid3; break; } } } } return maid; } public float snapValuePosition { set { if (this.m_GizmoObject == null) { return; } this.m_GizmoObject.snapValuePosition = value; } } private void Awake() { this.m_CharaMgr = GameMain.Instance.CharacterMgr; GameObject gameObject; if (!(gameObject = GameObject.Find("[CreativeRoomUI Placement Maid] GizmoControlObject"))) { gameObject = new GameObject("[CreativeRoomUI Placement Maid] GizmoControlObject"); GizmoObject gizmoObject = gameObject.AddComponent(); gizmoObject.activeAxis = true; gizmoObject.activeRot = false; gizmoObject.snapValuePosition = 0.5f; gizmoObject.snapValueAngles = 15f; gizmoObject.snapValueScale = 0.1f; gameObject.SetActive(false); } this.m_GizmoObject = gameObject.GetComponent(); GizmoObject gizmoObject2 = this.m_GizmoObject; gizmoObject2.onChangePosition = (Action)Delegate.Combine(gizmoObject2.onChangePosition, new Action(this.OnUpdateGizmoPosition)); GizmoObject gizmoObject3 = this.m_GizmoObject; gizmoObject3.onChangeRotation = (Action)Delegate.Combine(gizmoObject3.onChangeRotation, new Action(this.OnUpdateGizmoRotation)); GizmoObject gizmoObject4 = this.m_GizmoObject; gizmoObject4.onChangeScale = (Action)Delegate.Combine(gizmoObject4.onChangeScale, new Action(this.OnUpdateGizmoScale)); this.SetUpUI(); } private void SetUpUI() { this.m_CachedTransformDataDic = new StringDictionary(); this.m_InputFieldPosX.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldPosY.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldPosZ.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldRotX.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldRotY.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldRotZ.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldScale.contentType = InputField.ContentType.DecimalNumber; this.m_InputFieldPosX.text = this.m_GizmoObject.position.x.ToString("f3"); this.m_InputFieldPosY.text = this.m_GizmoObject.position.y.ToString("f3"); this.m_InputFieldPosZ.text = this.m_GizmoObject.position.z.ToString("f3"); this.m_InputFieldRotX.text = this.m_GizmoObject.eulerAngles.x.ToString("f3"); this.m_InputFieldRotY.text = this.m_GizmoObject.eulerAngles.y.ToString("f3"); this.m_InputFieldRotZ.text = this.m_GizmoObject.eulerAngles.z.ToString("f3"); this.m_InputFieldScale.text = this.m_GizmoObject.scale.x.ToString("f3"); this.m_SliderScale.value = this.m_GizmoObject.scale.x; Action, Action> action = delegate(InputField input, Action act_change, Action act_end) { input.onValueChanged.AddListener(delegate(string str) { float obj; if (float.TryParse(str, out obj)) { act_change(obj); } }); input.onEndEdit.AddListener(delegate(string str) { act_end(); }); }; action(this.m_InputFieldPosX, delegate(float value) { Vector3 position = this.m_GizmoObject.position; position.x = value; this.m_GizmoObject.position = position; }, delegate { this.m_InputFieldPosX.text = this.m_GizmoObject.position.x.ToString("f3"); }); action(this.m_InputFieldPosY, delegate(float value) { Vector3 position = this.m_GizmoObject.position; position.y = value; this.m_GizmoObject.position = position; }, delegate { this.m_InputFieldPosY.text = this.m_GizmoObject.position.y.ToString("f3"); }); action(this.m_InputFieldPosZ, delegate(float value) { Vector3 position = this.m_GizmoObject.position; position.z = value; this.m_GizmoObject.position = position; }, delegate { this.m_InputFieldPosZ.text = this.m_GizmoObject.position.z.ToString("f3"); }); action(this.m_InputFieldRotX, delegate(float value) { Vector3 eulerAngles = this.m_GizmoObject.eulerAngles; eulerAngles.x = value; this.m_GizmoObject.eulerAngles = eulerAngles; }, delegate { this.m_InputFieldRotX.text = this.m_GizmoObject.eulerAngles.x.ToString("f3"); }); action(this.m_InputFieldRotY, delegate(float value) { Vector3 eulerAngles = this.m_GizmoObject.eulerAngles; eulerAngles.y = value; this.m_GizmoObject.eulerAngles = eulerAngles; }, delegate { this.m_InputFieldRotY.text = this.m_GizmoObject.eulerAngles.y.ToString("f3"); }); action(this.m_InputFieldRotZ, delegate(float value) { Vector3 eulerAngles = this.m_GizmoObject.eulerAngles; eulerAngles.z = value; this.m_GizmoObject.eulerAngles = eulerAngles; }, delegate { this.m_InputFieldRotZ.text = this.m_GizmoObject.eulerAngles.z.ToString("f3"); }); action(this.m_InputFieldScale, delegate(float value) { Vector3 scale = this.m_GizmoObject.scale; value = Mathf.Clamp(value, this.m_SliderScale.minValue, this.m_SliderScale.maxValue); if (Mathf.Approximately(scale.x, value)) { return; } scale.x = (scale.y = (scale.z = value)); this.m_GizmoObject.scale = scale; this.m_SliderScale.value = value; }, delegate { this.m_InputFieldScale.text = this.m_GizmoObject.scale.x.ToString("f3"); }); this.m_SliderScale.onValueChanged.AddListener(delegate(float value) { if (Mathf.Approximately(this.m_GizmoObject.cachedSnapScale.x, value)) { return; } this.m_GizmoObject.nonCallbackScale = Vector3.one * value; float x = this.m_GizmoObject.cachedSnapScale.x; this.m_SliderScale.value = x; if (!this.m_InputFieldScale.isFocused) { this.m_InputFieldScale.text = x.ToString("f3"); } }); } private void Update() { if (this.targetMaid == null || !this.targetMaid.Visible) { this.m_GizmoObject.gameObject.SetActive(false); return; } if (EventSystem.current != null) { if (NInput.GetMouseButtonDown(0)) { GameObject currentSelectedGameObject = EventSystem.current.currentSelectedGameObject; if (EventSystem.current.IsPointerOverGameObject() && currentSelectedGameObject && currentSelectedGameObject.GetComponent()) { this.m_GizmoObject.gameObject.SetActive(false); } } else if (NInput.GetMouseButtonUp(0)) { this.m_GizmoObject.gameObject.SetActive(true); } } } private void OnUpdateGizmoPosition(Vector3 position) { if (this.targetMaid != null) { this.targetMaid.transform.position = position; if (!this.m_InputFieldPosX.isFocused) { this.m_InputFieldPosX.text = position.x.ToString("f3"); } if (!this.m_InputFieldPosY.isFocused) { this.m_InputFieldPosY.text = position.y.ToString("f3"); } if (!this.m_InputFieldPosZ.isFocused) { this.m_InputFieldPosZ.text = position.z.ToString("f3"); } } } private void OnUpdateGizmoRotation(Quaternion rotation) { if (this.targetMaid != null) { this.targetMaid.transform.rotation = rotation; Vector3 eulerAngles = rotation.eulerAngles; if (!this.m_InputFieldRotX.isFocused) { this.m_InputFieldRotX.text = eulerAngles.x.ToString("f3"); } if (!this.m_InputFieldRotY.isFocused) { this.m_InputFieldRotY.text = eulerAngles.y.ToString("f3"); } if (!this.m_InputFieldRotZ.isFocused) { this.m_InputFieldRotZ.text = eulerAngles.z.ToString("f3"); } } } private void OnUpdateGizmoScale(Vector3 scale) { if (this.targetMaid != null) { this.targetMaid.transform.localScale = scale; if (!this.m_InputFieldScale.isFocused) { this.m_InputFieldScale.text = scale.x.ToString("f3"); } this.m_SliderScale.value = scale.x; } } public void ButtonEvent_GizmoEnableMove() { GizmoObject gizmoObject = this.m_GizmoObject; gizmoObject.activeAxis = true; gizmoObject.activeRot = false; } public void ButtonEvent_GizmoEnableRot() { GizmoObject gizmoObject = this.m_GizmoObject; gizmoObject.activeAxis = false; gizmoObject.activeRot = true; } public void ButtonEvent_GizmoDisable() { GizmoObject gizmoObject = this.m_GizmoObject; gizmoObject.activeAxis = false; gizmoObject.activeRot = false; } public void ButtonEvent_CopyPosition() { Vector3 position = this.m_GizmoObject.position; string text = string.Format("{0},{1},{2}", position.x, position.y, position.z); this.m_CachedTransformDataDic["position"] = text.ToString(); } public void ButtonEvent_PastePosition() { string text = this.m_CachedTransformDataDic["position"]; if (string.IsNullOrEmpty(text)) { Debug.Log("座標データはまだない"); return; } string[] array = text.Split(new char[] { ',' }); if (array.Length != 3) { Debug.LogError("position の文字数が" + array.Length + "でした"); return; } this.m_GizmoObject.position = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); } public void ButtonEvent_ResetPosition() { this.m_GizmoObject.position = Vector3.zero; } public void ButtonEvent_CopyRotation() { Quaternion rotation = this.m_GizmoObject.rotation; string text = string.Format("{0},{1},{2},{3}", new object[] { rotation.x, rotation.y, rotation.z, rotation.w }); this.m_CachedTransformDataDic["rotation"] = text.ToString(); } public void ButtonEvent_PasteRotation() { string text = this.m_CachedTransformDataDic["rotation"]; if (string.IsNullOrEmpty(text)) { Debug.Log("回転データはまだない"); return; } string[] array = text.Split(new char[] { ',' }); if (array.Length != 4) { Debug.LogError("rotation の文字数が" + array.Length + "でした"); return; } this.m_GizmoObject.rotation = new Quaternion(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]), float.Parse(array[3])); } public void ButtonEvent_ResetRotation() { this.m_GizmoObject.rotation = Quaternion.identity; } public void ButtonEvent_CopyScale() { Vector3 scale = this.m_GizmoObject.scale; string text = string.Format("{0},{1},{2}", scale.x, scale.y, scale.z); this.m_CachedTransformDataDic["scale"] = text.ToString(); } public void ButtonEvent_PasteScale() { string text = this.m_CachedTransformDataDic["scale"]; if (string.IsNullOrEmpty(text)) { Debug.Log("スケールデータはまだない"); return; } string[] array = text.Split(new char[] { ',' }); if (array.Length != 3) { Debug.LogError("scale の文字数が" + array.Length + "でした"); return; } this.m_GizmoObject.scale = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); } public void ButtonEvent_ResetScale() { this.m_GizmoObject.scale = Vector3.one; } public void ButtonEvent_CameraFocus() { Maid targetMaid = this.targetMaid; if (!targetMaid) { return; } if (!targetMaid.Visible) { return; } Transform bone = targetMaid.body0.GetBone("Bip01 Head"); WfCameraMoveSupport wfCameraMoveSupport = base.GetComponent(); if (wfCameraMoveSupport == null) { wfCameraMoveSupport = base.gameObject.AddComponent(); } Vector3 position = bone.position; float distance = Mathf.Sqrt(5f) * 2f; Vector2 aroundAngle = new Vector2(-135f, 45f); wfCameraMoveSupport.StartCameraPosition(position, distance, aroundAngle); } public void ButtonEvent_VisibleMaid(bool isVisible) { if (this.m_CharaMgr.IsBusy()) { return; } if (this.targetMaid == null) { return; } if (this.targetMaid.ActiveSlotNo == -1) { this.m_CharaMgr.SetActiveMaid(this.targetMaid, 0); this.targetMaid.AllProcPropSeqStart(); } this.targetMaid.Visible = isVisible; if (isVisible && this.targetMaid.IsBusy) { uGUIUtility.SetActiveEventSystem(false); GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color)); base.StartCoroutine(this.CorMaidLoad(this.targetMaid, new Action(this.OnMaidLoadEnd))); } } public void ButtonEvent_ToggleSnap(bool isEnable) { if (this.m_GizmoObject) { if (isEnable) { this.m_GizmoObject.controlType = GizmoObject.ControlType.Snap; } else { this.m_GizmoObject.controlType = GizmoObject.ControlType.Default; } } } private IEnumerator CorMaidLoad(Maid targetMaid, Action actLoadEnd) { targetMaid.Visible = true; while (targetMaid.IsBusy) { yield return null; } actLoadEnd(); yield break; } private void OnMaidLoadEnd() { GameMain.Instance.MainCamera.FadeIn(0.3f, false, null, true, true, default(Color)); this.targetMaid.CrossFade("maid_stand01.anm", false, true, false, 0.5f, 1f); this.targetMaid.FaceAnime("通常", 0f, 0); this.targetMaid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f); uGUIUtility.SetActiveEventSystem(true); } private void OnDisable() { if (this.m_GizmoObject) { this.m_GizmoObject.gameObject.SetActive(false); } } private void OnEnable() { if (this.m_GizmoObject && this.targetMaid != null && this.targetMaid.Visible) { this.m_GizmoObject.gameObject.SetActive(true); } } private void OnDestroy() { if (this.m_GizmoObject) { UnityEngine.Object.Destroy(this.m_GizmoObject); } if (this.targetMaid) { this.targetMaid.transform.position = Vector3.zero; this.targetMaid.transform.rotation = Quaternion.identity; this.targetMaid.transform.localScale = Vector3.one; this.targetMaid.ResetAll(); this.targetMaid.Visible = false; } } [Header("座標入力欄")] [SerializeField] private InputField m_InputFieldPosX; [SerializeField] private InputField m_InputFieldPosY; [SerializeField] private InputField m_InputFieldPosZ; [Header("回転入力欄")] [SerializeField] private InputField m_InputFieldRotX; [SerializeField] private InputField m_InputFieldRotY; [SerializeField] private InputField m_InputFieldRotZ; [Header("スケール入力欄")] [SerializeField] private InputField m_InputFieldScale; [SerializeField] private Slider m_SliderScale; private CharacterMgr m_CharaMgr; private GizmoObject m_GizmoObject; private Maid m_TargetMaid; private StringDictionary m_CachedTransformDataDic; } }