3using System.Collections;
4using System.Collections.Generic;
5using System.Reflection;
12using Valve.VR.InteractionSystem;
22 private Transform _transform;
33 _transform = (Transform)
target;
34 var isStatic = _transform.GetComponent<
StaticGO>() !=
null;
35 var isTool = _transform.GetComponent<
ToolGO>() !=
null;
36 pb_TypeInspector enabled_inspector = pb_InspectorResolver.GetInspector(typeof(
bool));
38 enabled_inspector.Initialize(
"Enabled", UpdateEnabled, OnSetEnabled);
40 enabled_inspector.transform.SetParent(transform);
42 pb_GUIUtility.AddVerticalLayoutGroup(gameObject);
45 pb_TypeInspector type_inspector = pb_InspectorResolver.GetInspector(typeof(
eType));
46 pb_TypeInspector position_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
47 pb_TypeInspector localposition_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
48 pb_TypeInspector rotation_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
49 pb_TypeInspector scale_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
50 pb_TypeInspector bounds_inspector = pb_InspectorResolver.GetInspector(typeof(Bounds));
51 pb_TypeInspector twoHandGrab_inspector = pb_InspectorResolver.GetInspector(typeof(
bool));
53 pb_TypeInspector restArea_inspector = pb_InspectorResolver.GetInspector(typeof(
bool));
57 type_inspector.Initialize(
"Type", UpdateType, OnTypeSet);
58 position_inspector.Initialize(
"Position", UpdateLocalPosition, OnSetPosition);
59 localposition_inspector.Initialize(
"Local Position", UpdatePosition, OnSetLocalPosition);
60 rotation_inspector.Initialize(
"Rotation", UpdateRotation, OnSetRotation);
61 scale_inspector.Initialize(
"Scale", UpdateScale, OnSetScale);
62 bounds_inspector.Initialize(
"Size", UpdateBounds,
null);
63 twoHandGrab_inspector.Initialize(
"Grab with two hand", UpdateTwoHand, OnTwoHandSet);
65 restArea_inspector.Initialize(
"Is Rest Area", UpdateRestArea, OnRestAreaSet);
69 type_inspector.SetDeclaringType(typeof(
eType));
71 position_inspector.onValueBeginChange = () => {
Undo.
RegisterState(
new UndoTransform(_transform),
"Set Position: " + _transform.position.ToString(
"G") ); };
72 localposition_inspector.onValueBeginChange = () => {
Undo.
RegisterState(
new UndoTransform(_transform),
"Set Local Position: " + _transform.localPosition.ToString(
"G") ); };
73 rotation_inspector.onValueBeginChange = () => {
Undo.
RegisterState(
new UndoTransform(_transform),
"Set Rotation: " + _transform.localRotation.eulerAngles.ToString(
"G")); };
74 scale_inspector.onValueBeginChange = () => {
Undo.
RegisterState(
new UndoTransform(_transform),
"Set Scale: " + _transform.localScale.ToString(
"G") ); };
76 type_inspector.transform.SetParent(transform);
77 position_inspector.transform.SetParent(transform);
78 localposition_inspector.transform.SetParent(transform);
79 rotation_inspector.transform.SetParent(transform);
80 scale_inspector.transform.SetParent(transform);
81 bounds_inspector.transform.SetParent(transform);
82 twoHandGrab_inspector.transform.SetParent(transform);
87 var horizontalParent1 =
new GameObject(
"ResetTransformButton");
88 var hlg1 = horizontalParent1.AddComponent<HorizontalLayoutGroup>();
89 var lec1 = horizontalParent1.AddComponent<LayoutElement>();
91 horizontalParent1.transform.SetParent(transform);
93 var buttonGO =
new GameObject(
"ClickButton");
94 var image = buttonGO.AddComponent<
Image>();
95 var button = buttonGO.AddComponent<
Button>();
96 var textGO =
new GameObject(
"LabelGO");
97 var text = textGO.AddComponent<Text>();
98 textGO.GetComponent<RectTransform>().sizeDelta =
new Vector2(65, 14);
99 text.font = Font.CreateDynamicFontFromOSFont(
"Arial", 24);
100 text.alignment = TextAnchor.MiddleCenter;
101 text.text =
Macro.
T(
"Reset Transform");
102 text.horizontalOverflow = HorizontalWrapMode.Overflow;
103 text.verticalOverflow = VerticalWrapMode.Overflow;
104 text.color =
Color.white;
105 text.resizeTextForBestFit =
true;
106 text.resizeTextMaxSize = 16;
107 textGO.transform.SetParent(buttonGO.transform);
108 image.sprite = GameObject.Find(
"DoNOTDelete").transform.Find(
"SaveButton").GetComponent<
Image>().sprite;
110 image.type =
Image.Type.Sliced;
111 image.color =
new Color(255, 255, 255, 40 / 255.0f);
112 image.pixelsPerUnitMultiplier = 2f;
113 buttonGO.transform.SetParent(horizontalParent1.transform);
114 button.onClick.AddListener(() => {
115 var hh = _transform.GetComponent<
HashHolder>();
119 _transform.localPosition = hh.origLocalPos;
125 restArea_inspector.transform.SetParent(transform);
129 var horizontalParent =
new GameObject(
"HorizontalParent");
130 var hlg = horizontalParent.AddComponent<HorizontalLayoutGroup>();
131 var lec = horizontalParent.AddComponent<LayoutElement>();
133 horizontalParent.transform.SetParent(transform);
136 var buttonGO =
new GameObject(
"ClickButton");
137 var image = buttonGO.AddComponent<
Image>();
138 var button = buttonGO.AddComponent<
Button>();
139 var textGO =
new GameObject(
"LabelGO");
140 var text = textGO.AddComponent<Text>();
141 textGO.GetComponent<RectTransform>().sizeDelta =
new Vector2(65, 14);
142 text.font = Font.CreateDynamicFontFromOSFont(
"Arial", 24);
143 text.alignment = TextAnchor.MiddleCenter;
144 text.text =
Macro.
T(
"Copy");
145 text.color =
Color.white;
146 text.resizeTextForBestFit =
true;
147 text.resizeTextMaxSize = 16;
148 textGO.transform.SetParent(buttonGO.transform);
149 image.sprite = GameObject.Find(
"DoNOTDelete").transform.Find(
"SaveButton").GetComponent<
Image>().sprite;
151 image.type =
Image.Type.Sliced;
152 image.color =
new Color(255,255,255, 40/255.0f);
153 image.pixelsPerUnitMultiplier = 2f;
154 buttonGO.transform.SetParent(horizontalParent.transform);
159 var buttonGO =
new GameObject(
"ClickButton");
160 var image = buttonGO.AddComponent<
Image>();
161 var button = buttonGO.AddComponent<
Button>();
162 var textGO =
new GameObject(
"LabelGO");
163 var text = textGO.AddComponent<Text>();
164 textGO.GetComponent<RectTransform>().sizeDelta =
new Vector2(65, 14);
165 text.font = Font.CreateDynamicFontFromOSFont(
"Arial", 24);
166 text.alignment = TextAnchor.MiddleCenter;
167 text.text =
Macro.
T(
"Paste");
168 text.color =
Color.white;
169 text.resizeTextForBestFit =
true;
170 text.resizeTextMaxSize = 16;
171 textGO.transform.SetParent(buttonGO.transform);
172 image.sprite = GameObject.Find(
"DoNOTDelete").transform.Find(
"SaveButton").GetComponent<
Image>().sprite;
174 image.type =
Image.Type.Sliced;
175 image.color =
new Color(255,255,255, 40/255.0f);
176 image.pixelsPerUnitMultiplier = 2f;
177 buttonGO.transform.SetParent(horizontalParent.transform);
207 (type_inspector as
pb_EnumInspector).dropdown.SetValueWithoutNotify(isStatic ? 0 : isTool ? 2 : 1);
209 foreach (var o in ops)
219 private void OnRestAreaSet(
object value)
223 _transform.gameObject.DemandComponent<
RestArea>();
227 Destroy(_transform.gameObject.GetComponent<
RestArea>());
231 private object UpdateRestArea()
233 var ra = _transform.GetComponent<
RestArea>();
234 return ra !=
null ? true :
false;
237 private void OnTwoHandSet(
object value)
241 _transform.gameObject.DemandComponent<
TwoHandGrab>().enabled =
false;
245 Destroy(_transform.gameObject.GetComponent<
TwoHandGrab>());
249 private object UpdateTwoHand()
252 return ra !=
null ? true :
false;
255 Bounds getBounds(GameObject objeto)
258 Renderer childRender;
259 bounds = getRenderBounds(objeto);
260 if (bounds.extents.x == 0)
262 bounds =
new Bounds(objeto.transform.position,
Vector3.zero);
263 foreach (Transform child
in objeto.transform)
265 childRender = child.GetComponent<Renderer>();
268 bounds.Encapsulate(childRender.bounds);
272 bounds.Encapsulate(getBounds(child.gameObject));
280 Bounds getRenderBounds(GameObject objeto)
283 Renderer render = objeto.GetComponent<Renderer>();
286 return render.bounds;
293 private void OnTypeSet(
int value0,
object enumString)
295 foreach (var go
in pb_Selection.gameObjects)
298 if (enumString.ToString() ==
"Static")
301 var isStatic = go.GetComponent<
StaticGO>();
302 var isTool = go.GetComponent<
ToolGO>();
303 var hasRigidbody = go.GetComponent<Rigidbody>();
305 var hasVisualOffsetter = go.GetComponent<
VisualOffset>();
307 var hasInteractable = go.GetComponent<Interactable>();
323 Destroy(hasThrowable);
330 Destroy(hasInteractable);
335 Destroy(hasRigidbody);
341 if (!hasVisualOffsetter)
346 if (enumString.ToString() ==
"Interactive")
349 var isStatic = go.GetComponent<
StaticGO>();
350 var isTool = go.GetComponent<
ToolGO>();
351 var hasRigidbody = go.GetComponent<Rigidbody>();
353 var hasVisualOffsetter = go.GetComponent<
VisualOffset>();
355 var hasInteractable = go.GetComponent<Interactable>();
371 go.AddComponent<Rigidbody>().isKinematic =
true;
377 if(!hasVisualOffsetter)
383 if (!hasInteractable)
385 go.AddComponent<Interactable>();
395 if (enumString.ToString() ==
"Tool")
397 var isStatic = go.GetComponent<
StaticGO>();
398 var isTool = go.GetComponent<
ToolGO>();
399 var hasRigidbody = go.GetComponent<Rigidbody>();
401 var hasVisualOffsetter = go.GetComponent<
VisualOffset>();
403 var blue = Instantiate(go);
406 var hasInteractable = go.GetComponent<Interactable>();
411 Destroy(blue.GetComponent<Interactable>());
412 Destroy(blue.GetComponent<Rigidbody>());
417 var bmrs = blue.GetComponentsInChildren<MeshRenderer>();
418 var bluemat = blueRef.gameObject.GetComponent<MeshRenderer>().material;
419 foreach (var bmr
in bmrs)
421 var bml =
new List<Material>();
422 for (
int i = 0; i < bmr.materials.Length; i++)
427 var currentcoll = bmr.gameObject.GetComponent<Collider>();
428 Destroy(currentcoll);
429 bmr.materials = bml.ToArray();
430 var coll = bmr.gameObject.AddComponent<MeshCollider>();
432 coll.isTrigger =
true;
437 Debug.Log(
"Failed to get and set blue!");
441 blue.SetActive(
false);
449 go.AddComponent<
ToolGO>().blue = blue;
454 go.AddComponent<Rigidbody>().isKinematic =
true;
460 if(!hasVisualOffsetter)
466 if (!hasInteractable)
468 go.AddComponent<Interactable>();
477 if (hasThrowable.onPickUp ==
null)
479 hasThrowable.onPickUp =
new UnityEvent();
481 if (hasThrowable.DelayedOnPickUp ==
null)
483 hasThrowable.DelayedOnPickUp =
new UnityEvent();
485 hasThrowable.onPickUp.AddListener(() =>
487 blue.SetActive(
true);
488 blue.GetComponentInChildren<Collider>(
true).enabled =
false;
491 hasThrowable.onDetachFromHand =
new UnityEvent();
493 hasThrowable.DelayedOnPickUp.AddListener(() =>
495 blue.GetComponentInChildren<Collider>(
true).enabled =
true;
498 var bcoll = blue.GetComponentInChildren<Collider>(
true);
499 var ltm = blue.gameObject.AddComponent<
LerpToMe>();
501 ce.
collisions =
new List<NamedCollisionEvents>();
502 ce.collisions.Add(
new NamedCollisionEvents(){colliderName = bcoll.name, onTriggerEnter =
new UnityEvent()});
503 ce.collisions[0].onTriggerEnter.AddListener(() => { hasThrowable.ForceDrop(); });
504 ce.collisions[0].onTriggerEnter.AddListener(() => { ltm.DoTheLerp(go.gameObject); });
506 ltm.skipDestroy =
true;
507 ltm.onFinished =
new UnityEvent();
508 ltm.onFinished.AddListener(() => { blue.SetActive(
false); });
509 ltm.onFinished.AddListener(() => { go.GetComponentInChildren<Collider>().enabled =
true; });
515 StartCoroutine(LateRebuild());
518 IEnumerator LateRebuild()
520 yield
return new WaitForEndOfFrame();
521 pb_Inspector.instance.RebuildInspector(pb_Selection.activeGameObject);
525 object UpdateEnabled()
527 return _transform.gameObject.activeSelf;
530 void OnSetEnabled(
object value)
532 foreach (var go
in pb_Selection.gameObjects)
534 go.SetActive((
bool) value);
536 _transform.gameObject.SetActive((
bool) value);
542 if(Input.GetMouseButton(0))
544 if(pb_SelectionHandle.instance !=
null && pb_SelectionHandle.instance.InUse())
551 object UpdatePosition(
int index)
553 return _transform.position;
555 object UpdateLocalPosition(
int index)
557 return _transform.localPosition;
560 object UpdateType(
int index)
562 var isStatic = _transform.GetComponent<
StaticGO>() !=
null;
563 var isTool = _transform.GetComponent<
ToolGO>() !=
null;
564 return isStatic ?
eType.Static : isTool ?
eType.Tool :
eType.Interactive;
567 void OnSetPosition(
int index,
object value)
570 foreach (var go
in pb_Selection.gameObjects)
572 go.transform.position = (
Vector3)value;
574 _transform.position = (
Vector3)value;
575 pb_Selection.OnExternalUpdate();
580 void OnSetLocalPosition(
int index,
object value)
583 foreach (var go
in pb_Selection.gameObjects)
585 go.transform.localPosition = (
Vector3)value;
587 _transform.localPosition = (
Vector3)value;
588 pb_Selection.OnExternalUpdate();
593 object UpdateRotation(
int index)
595 return _transform.localEulerAngles;
598 void OnSetRotation(
int index,
object value)
600 foreach (var go
in pb_Selection.gameObjects)
602 go.transform.localRotation =
Quaternion.Euler( (Vector3) value );
604 _transform.localRotation =
Quaternion.Euler( (Vector3) value );
605 pb_Selection.OnExternalUpdate();
608 object UpdateScale(
int index)
610 return _transform.localScale;
613 void OnSetScale(
int index,
object value)
615 foreach (var go
in pb_Selection.gameObjects)
617 go.transform.localScale = (
Vector3)value;
619 _transform.localScale = (
Vector3) value;
620 pb_Selection.OnExternalUpdate();
623 object UpdateBounds(
int index)
625 return getBounds(_transform.gameObject);
UnityEngine.UI.Button Button
System.Drawing.Image Image
List< NamedCollisionEvents > collisions
Component target
The UnityEngine.Component being edited.
static void AddDiff(Component component, string name, object value)
static void RegisterState(IUndo target, string message)
static string T(string key)
static TablePositionSetter instance
Credit Erdener Gonenc - @PixelEnvision.