public override void OnHandleMove(pb_Transform transform) { pb_Transform delta = (transform - handleTransformOrigin); if( global ) { mTransform.SetTRS(handleTransformOrigin); Transform[] parents = new Transform[pb_Selection.gameObjects.Count]; for(int i = 0; i < pb_Selection.gameObjects.Count; i++) { GameObject go = pb_Selection.gameObjects[i]; go.transform.SetTRS(selectionTransformOrigin[i]); parents[i] = go.transform.parent; go.transform.parent = mTransform; } mTransform.SetTRS(transform); for(int i = 0; i < pb_Selection.gameObjects.Count; i++) { pb_Selection.gameObjects[i].transform.parent = parents[i]; } } else { for(int i = 0; i < pb_Selection.gameObjects.Count; i++) { GameObject go = pb_Selection.gameObjects[i]; go.transform.SetTRS( selectionTransformOrigin[i] + delta ); } } }
public override void OnHandleBegin(pb_Transform transform) { handleTransformOrigin = transform; CacheSelectionTransforms(); List<IUndo> undoGroup = pb_Selection.gameObjects.Select(x => (IUndo) new UndoTransform(x.transform)).ToList(); Undo.RegisterStates(undoGroup, handle.GetTool().ToString() + " Tool"); }
/** * Deserialization constructor. */ public pb_SceneNode(SerializationInfo info, StreamingContext context) { name = (string) info.GetValue("name", typeof(string)); transform = (pb_Transform) info.GetValue("transform", typeof(pb_Transform)); children = (List<pb_SceneNode>) info.GetValue("children", typeof(List<pb_SceneNode>)); metadata = (pb_MetaData) info.GetValue("metadata", typeof(pb_MetaData)); if( metadata.assetType == AssetType.Instance) components = (List<pb_ISerializable>) info.GetValue("components", typeof(List<pb_ISerializable>)); }
/** * Deserialization constructor. */ public pb_SceneNode(SerializationInfo info, StreamingContext context) { name = (string)info.GetValue("name", typeof(string)); transform = (pb_Transform)info.GetValue("transform", typeof(pb_Transform)); children = (List <pb_SceneNode>)info.GetValue("children", typeof(List <pb_SceneNode>)); metadata = (pb_MetaData)info.GetValue("metadata", typeof(pb_MetaData)); if (metadata.AssetType == AssetType.Instance) { components = (List <pb_ISerializable>)info.GetValue("components", typeof(List <pb_ISerializable>)); } }
/** * Recursively build a scene graph using `root` as the root node. */ public pb_SceneNode(GameObject root) { name = root.name; components = new List <pb_ISerializable>(); pb_MetaDataComponent metadata_component = root.GetComponent <pb_MetaDataComponent>(); if (metadata_component == null) { metadata_component = root.AddComponent <pb_MetaDataComponent>(); } metadata = metadata_component.metadata; if (metadata.AssetType == AssetType.Instance) { foreach (Component c in root.GetComponents <Component>()) { if (c == null || c is Transform || c.GetType().GetCustomAttributes(true).Any(x => x is pb_JsonIgnoreAttribute)) { continue; } components.Add(pb_Serialization.CreateSerializableObject <Component>(c)); } } // avoid calling constructor which automatically rebuilds the matrix transform = new pb_Transform(); transform.SetTRS(root.transform); children = new List <pb_SceneNode>(); foreach (Transform t in root.transform) { if (!t.gameObject.activeSelf) { continue; } children.Add(new pb_SceneNode(t.gameObject)); } }
/** * Called any time a handle is moved. OnHandleBegin will always be called prior, and OnHandleFinish will be called * post. */ public virtual void OnHandleMove(pb_Transform transform) {}
/** * `OnHandleBegin` is called at the start of a handle interaction. `transform` is the handle's transform * prior to any movement. */ public virtual void OnHandleBegin(pb_Transform transform) {}
/** * Set a UnityEngine.Transform with a Runtime.pb_Transform. */ public static void SetTRS(this Transform transform, pb_Transform pbTransform) { transform.position = pbTransform.position; transform.localRotation = pbTransform.rotation; transform.localScale = pbTransform.scale; }
/** * Recursively build a scene graph using `root` as the root node. */ public pb_SceneNode(GameObject root) { name = root.name; components = new List<pb_ISerializable>(); pb_MetaDataComponent metadata_component = root.GetComponent<pb_MetaDataComponent>(); if( metadata_component == null ) metadata_component = root.AddComponent<pb_MetaDataComponent>(); metadata = metadata_component.metadata; if( metadata.assetType == AssetType.Instance ) { foreach(Component c in root.GetComponents<Component>()) { if( c == null || c is Transform || c.GetType().GetCustomAttributes(true).Any(x => x is pb_JsonIgnoreAttribute)) continue; components.Add( pb_Serialization.CreateSerializableObject<Component>(c) ); } } // avoid calling constructor which automatically rebuilds the matrix transform = new pb_Transform(); transform.SetTRS(root.transform); children = new List<pb_SceneNode>(); foreach(Transform t in root.transform) { if(!t.gameObject.activeSelf) continue; children.Add( new pb_SceneNode(t.gameObject) ); } }
/** * Store the transform of each selected gameObject in selectionTransformOrigin array. */ void CacheSelectionTransforms() { int count = pb_Selection.gameObjects.Count; selectionTransformOrigin = new pb_Transform[count]; for(int i = 0; i < count; i++) { selectionTransformOrigin[i] = new pb_Transform(pb_Selection.gameObjects[i].transform); } }