Tanoda
pb_ObjectEditor.cs
Go to the documentation of this file.
1using UnityEngine;
2using System.Collections.Generic;
3using System.Linq;
4using GILES.Interface;
5
6namespace GILES
7{
12 {
13#region Member
14
16 private bool global = true;
17
19 private Transform _mTransform;
20
22 private Transform mTransform
23 {
24 get
25 {
26 if (_mTransform == null)
27 {
28 _mTransform = new GameObject().transform;
29 _mTransform.name = "Handle Transform Parent";
30 }
31 return _mTransform;
32 }
33 }
34
36 pb_Transform handleTransformOrigin;
37
39 pb_Transform[] selectionTransformOrigin;
40#endregion
41
42#region Initialization
43
44 public override void OnEnable()
45 {
46 dragRectStyle.normal.background = pb_BuiltinResource.GetResource<Texture2D>(pb_BuiltinResource.img_WhiteTexture);
47 }
48#endregion
49
50#region Handles
51
52 public override void OnHandleBegin(pb_Transform transform)
53 {
54 handleTransformOrigin = transform;
55 CacheSelectionTransforms();
56
57 List<IUndo> undoGroup = pb_Selection.gameObjects.Select(x => (IUndo) new UndoTransform(x.transform)).ToList();
58 Undo.RegisterStates(undoGroup, handle.GetTool().ToString() + " Tool");
59 }
60
61 public override void OnHandleMove(pb_Transform transform)
62 {
63 pb_Transform delta = (transform - handleTransformOrigin);
64
65 if( global )
66 {
67 mTransform.SetTRS(handleTransformOrigin);
68
69 Transform[] parents = new Transform[pb_Selection.gameObjects.Count];
70
71 for(int i = 0; i < pb_Selection.gameObjects.Count; i++)
72 {
73 GameObject go = pb_Selection.gameObjects[i];
74 go.transform.SetTRS(selectionTransformOrigin[i]);
75 parents[i] = go.transform.parent;
76 go.transform.parent = mTransform;
77 }
78
79 mTransform.SetTRS(transform);
80
81 for(int i = 0; i < pb_Selection.gameObjects.Count; i++)
82 {
83 pb_Selection.gameObjects[i].transform.parent = parents[i];
84 }
85 }
86 else
87 {
88 for(int i = 0; i < pb_Selection.gameObjects.Count; i++)
89 {
90 GameObject go = pb_Selection.gameObjects[i];
91 go.transform.SetTRS( selectionTransformOrigin[i] + delta );
92 }
93 }
94 }
95
99 void CacheSelectionTransforms()
100 {
101 int count = pb_Selection.gameObjects.Count;
102 selectionTransformOrigin = new pb_Transform[count];
103 for(int i = 0; i < count; i++)
104 {
105 selectionTransformOrigin[i] = new pb_Transform(pb_Selection.gameObjects[i].transform);
106 }
107 }
108#endregion
109
110#region Mouse Events
111
112 private Vector2 mMouseOrigin = Vector2.zero;
113 private bool mMouseDragging = false,
114 mMouseIsDown = false,
115 mDragCanceled = false;
116 const float MOUSE_DRAG_DELTA = .2f;
117 private Rect dragRect = new Rect(0,0,0,0);
118 private GUIStyle dragRectStyle = new GUIStyle();
119 public Color dragRectColor = new Color(0f, .75f, 1f, .6f);
120
121 public override void OnGUI()
122 {
123 if (skipOnGUI) return;
125 if(mMouseDragging)
126 {
127 GUI.color = dragRectColor;
128 GUI.Box(dragRect, "", dragRectStyle);
129 GUI.color = Color.white;
130 }
131 }
132
133 public override void OnMouseMove()
134 {
135 if(handle.InUse())
136 return;
137
138 if(mMouseDragging)
139 {
141 {
142 mDragCanceled = true;
143 mMouseDragging = false;
144 return;
145 }
146
147 dragRect.x = Mathf.Min(mMouseOrigin.x, Input.mousePosition.x);
148 dragRect.y = Screen.height - Mathf.Max(mMouseOrigin.y, Input.mousePosition.y);
149 dragRect.width = Mathf.Abs(mMouseOrigin.x - Input.mousePosition.x);
150 dragRect.height = Mathf.Abs(mMouseOrigin.y - Input.mousePosition.y);
151
152 UpdateDragPicker();
153 }
154 else
155 if(mMouseIsDown && !mDragCanceled && Vector2.Distance(mMouseOrigin, Input.mousePosition) > MOUSE_DRAG_DELTA)
156 {
158 Undo.RegisterState(new UndoSelection(), "Change Selection");
159
160 mMouseDragging = true;
161
162 dragRect.x = mMouseOrigin.x;
163 dragRect.y = Screen.height - mMouseOrigin.y;
164 dragRect.width = 0f;
165 dragRect.height = 0f;
166 }
167 }
168
169 public override void OnMouseDown()
170 {
171 if(!handle.InUse())
172 {
173 mMouseOrigin = Input.mousePosition;
174 mDragCanceled = false;
175 mMouseIsDown = true;
176 }
177 }
178
179 public override void OnMouseUp()
180 {
181 if( !handle.InUse() )
182 {
183 if(mMouseDragging || mDragCanceled)
184 {
185 mDragCanceled = false;
186 mMouseDragging = false;
187 }
188 else if( !IsMouseInUse() )
189 {
190 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
191
192 GameObject hit = pb_HandleUtility.ObjectRaycast(ray, pb_Scene.Children(), true);
193
194 if(hit != null)
195 {
196 //if (hit.transform.parent.GetComponent<TagCloud>())
197 //{
198 // hit = hit.transform.parent.gameObject;
199 //}
200 //
201 //if (!hit.GetComponent<TagCloud>())
202 //{
203 // if (hit.GetComponentInParent<TagCloud>())
204 // {
205 // hit = hit.GetComponentInParent<TagCloud>().gameObject;
206 // }
207 //}
208
209
210 Undo.RegisterState(new UndoSelection(), "Change Selection");
211
212 if(!pb_InputExtension.Shift() && !pb_InputExtension.Control())
214 else
216 }
217 else
218 {
219 if( pb_Selection.activeGameObject != null )
220 Undo.RegisterState(new UndoSelection(), "Change Selection");
221
222 if(!pb_InputExtension.Shift() && !pb_InputExtension.Control())
224
225 if(pb_Selection.gameObjects.Count < 1)
226 handle.SetIsHidden(true);
227 }
228 }
229 }
230 }
231#endregion
232
233#region Key Events
234
235 public override void OnKeyDown()
236 {
237
238#if !UNITY_EDITOR
239 if( Input.GetKey(KeyCode.LeftCommand) || Input.GetKey(KeyCode.LeftControl) )
240#endif
241 {
243 //if( Input.GetKey(KeyCode.D) )
244 //{
245 // List<GameObject> newObjects = new List<GameObject>();
246 // List<IUndo> undo = new List<IUndo>() { new UndoSelection() };
247 //
248 // foreach(GameObject go in pb_Selection.gameObjects)
249 // {
250 // GameObject inst = (GameObject) pb_Scene.Instantiate(go);
251 // newObjects.Add(inst);
252 // undo.Add(new UndoInstantiate(inst));
253 // }
254 //
255 // Undo.RegisterStates(undo, "Duplicate Object");
256 //
257 // pb_Selection.SetSelection(newObjects);
258 //}
259 }
260 }
261#endregion
262
263#region Event
264
265 public override void OnSelectionChange(IEnumerable<GameObject> added)
266 {
267 if( pb_Selection.activeGameObject != null )
268 {
269
270 Transform t = pb_Selection.activeGameObject.transform;
271 handle.SetTRS(t.position, t.localRotation, Vector3.one);
272 handle.SetIsHidden(false);
273 }
274 else
275 {
276 handle.SetIsHidden(true);
277 }
278
279 }
280
281 public override void OnFrameSelection()
282 {
285 else
286 pb_SceneCamera.Focus( Vector3.zero );
287 }
288
289 public override bool EnableCameraControls()
290 {
291 return base.EnableCameraControls() || Input.GetKey(KeyCode.Q);
292 }
293#endregion
294
295#region Drag Picking
296
297 void UpdateDragPicker()
298 {
299 Rect screenRect = new Rect(dragRect.x, Screen.height - (dragRect.y + dragRect.height), dragRect.width, dragRect.height);
300
301 List<GameObject> selected = new List<GameObject>();
302
303 foreach(GameObject go in pb_Scene.Children())
304 {
305 Vector2 pos = Camera.main.WorldToScreenPoint(go.transform.position);
306
307 if(screenRect.Contains(pos))
308 {
309 selected.Add(go);
310 }
311 }
312
313 pb_Selection.SetSelection(selected);
314 }
315#endregion
316
317 }
318
319}
UnityEngine.Color Color
Definition: TestScript.cs:32
static void RegisterStates(IEnumerable< IUndo > targets, string message)
Definition: Undo.cs:226
static void RegisterState(IUndo target, string message)
Definition: Undo.cs:214
static GameObject ObjectRaycast(Ray ray, IEnumerable< GameObject > objects, bool ignoreSelection=false)
static bool IsKeyInUse()
static bool IsMouseInUse()
override void OnKeyDown()
override void OnSelectionChange(IEnumerable< GameObject > added)
override void OnHandleMove(pb_Transform transform)
override void OnGUI()
override void OnMouseDown()
override void OnMouseUp()
override void OnMouseMove()
override void OnEnable()
override bool EnableCameraControls()
override void OnFrameSelection()
override void OnHandleBegin(pb_Transform transform)
static void Focus(Vector3 target)
virtual bool IsMouseInUse()
static List< GameObject > Children()
Definition: pb_Scene.cs:1193
void SetTRS(Vector3 position, Quaternion rotation, Vector3 scale)
void SetIsHidden(bool isHidden)
static List< GameObject > gameObjects
A list of the currently selected GameObjects.
Definition: pb_Selection.cs:56
static void AddToSelection(GameObject go)
static void SetSelection(IEnumerable< GameObject > selection)
Definition: pb_Selection.cs:92
static void Clear()
Definition: pb_Selection.cs:61
static GameObject activeGameObject
Definition: pb_Selection.cs:82