Пример #1
0
        public override void SetupCloneTargets(IEnumerable source, IEnumerable target, ICloneTargetSetup setup)
        {
            ReflectedHashsetData reflectedHashsetData = GetReflectedHashsetData(source.GetType());

            if (!reflectedHashsetData.IsDeepCopyByAssignment)
            {
                if (source == target)
                {
                    foreach (object value in source)
                    {
                        setup.HandleObject(value, value);
                    }
                }
                else
                {
                    // In a hashset, there is no defined item identity, so we cannot find an equivalent
                    // between a source item and a target item. Map the source to null, so a new target will
                    // be created during the clone operation.
                    foreach (object value in source)
                    {
                        setup.HandleObject(value, null);
                    }
                }
            }
        }
Пример #2
0
        void ICloneExplicit.SetupCloneTargets(object target, ICloneTargetSetup setup)
        {
            ExplicitCloneTestObjectA targetCast = target as ExplicitCloneTestObjectA;

            setup.HandleObject(this.ListField, targetCast.ListField);
            setup.HandleObject(this.ListField2, targetCast.ListField2);
            setup.HandleObject(this.DictField, targetCast.DictField);
        }
Пример #3
0
        void ICloneExplicit.SetupCloneTargets(object target, ICloneTargetSetup setup)
        {
            ExplicitCloneTestObjectA targetCast = target as ExplicitCloneTestObjectA;

            setup.HandleObject(this.ListField, targetCast.ListField);
            setup.HandleObject(this.ListField2, targetCast.ListField2);
            setup.HandleObject(this.DictField, targetCast.DictField);
        }
Пример #4
0
        protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            base.OnSetupCloneTargets(targetObj, setup);
            TextRenderer target = targetObj as TextRenderer;

            setup.HandleObject(this.text, target.text);
            setup.HandleObject(this.customMat, target.customMat);
        }
Пример #5
0
        protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            base.OnSetupCloneTargets(targetObj, setup);
            Transform target = targetObj as Transform;

            setup.HandleObject(this.parentTransform, target.parentTransform, CloneBehavior.WeakReference);
        }
Пример #6
0
        protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            base.OnSetupCloneTargets(targetObj, setup);
            AnimSpriteRenderer target = targetObj as AnimSpriteRenderer;

            setup.HandleObject(this.customFrameSequence, target.customFrameSequence);
        }
Пример #7
0
        public override void SetupCloneTargets(IDictionary source, IDictionary target, ICloneTargetSetup setup)
        {
            Type dictType = source.GetType();

            Type[]   genArgs          = dictType.GenericTypeArguments;
            TypeInfo firstGenArgInfo  = genArgs[0].GetTypeInfo();
            TypeInfo secondGenArgInfo = genArgs[1].GetTypeInfo();

            // Handle all keys and values. Reuse existing objects wherever possible.
            if (!firstGenArgInfo.IsPlainOldData())
            {
                if (source == target)
                {
                    foreach (object key in source.Keys)
                    {
                        setup.HandleObject(key, key);
                    }
                }
                else
                {
                    foreach (var key in source.Keys)
                    {
                        setup.HandleObject(key, null);
                    }
                }
            }
            if (!secondGenArgInfo.IsPlainOldData())
            {
                if (source == target)
                {
                    foreach (object val in source.Values)
                    {
                        setup.HandleObject(val, val);
                    }
                }
                else
                {
                    foreach (DictionaryEntry entry in source)
                    {
                        setup.HandleObject(entry.Value, target[entry.Key]);
                    }
                }
            }
        }
Пример #8
0
        public override void SetupCloneTargets(Delegate source, Delegate target, ICloneTargetSetup setup)
        {
            if (source == null)
            {
                return;
            }

            // Flag all invocation targets as weak references.
            Delegate[] invokeList = source.GetInvocationList();
            for (int i = 0; i < invokeList.Length; i++)
            {
                setup.HandleObject(invokeList[i].Target, null, CloneBehavior.WeakReference);
            }
        }
Пример #9
0
        void ICloneExplicit.SetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            FormattedText target = targetObj as FormattedText;

            setup.HandleObject(this.icons, target.icons);
            setup.HandleObject(this.flowAreas, target.flowAreas);
            setup.HandleObject(this.fonts, target.fonts);
        }
Пример #10
0
		protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
		{
			base.OnSetupCloneTargets(targetObj, setup);
			SpriteRenderer target = targetObj as SpriteRenderer;

			setup.HandleObject(this.customMat, target.customMat);
		}
Пример #11
0
 void ICloneExplicit.SetupCloneTargets(object targetObj, ICloneTargetSetup setup)
 {
     setup.HandleObject(this, targetObj);
 }
Пример #12
0
 void ICloneExplicit.SetupCloneTargets(object targetObj, ICloneTargetSetup setup)
 {
     setup.HandleObject(this, targetObj);
 }
Пример #13
0
 /// <summary>
 /// This method prepares the <see cref="CopyTo"/> operation for custom Component Types.
 /// It uses reflection to prepare the cloning operation automatically, but you can implement
 /// this method in order to handle certain fields and cases manually. See <see cref="ICloneExplicit.SetupCloneTargets"/>
 /// for a more thorough explanation.
 /// </summary>
 /// <param name="setup"></param>
 protected virtual void OnSetupCloneTargets(object target, ICloneTargetSetup setup)
 {
     setup.HandleObject(this, target);
 }
Пример #14
0
		protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
		{
			base.OnSetupCloneTargets(targetObj, setup);
			RigidBody target = targetObj as RigidBody;

			// Handle ownership of shapes and joints
			if (this.shapes != null)
			{
				for (int i = 0; i < this.shapes.Count; i++)
				{
					ShapeInfo sourceShape = this.shapes[i];
					ShapeInfo targetShape = (target.shapes != null && target.shapes.Count > i) ? target.shapes[i] : null;
					setup.HandleObject(sourceShape, targetShape, CloneBehavior.ChildObject);
				}
			}
			if (this.joints != null)
			{
				for (int i = 0; i < this.joints.Count; i++)
				{
					JointInfo sourceJoint = this.joints[i];
					JointInfo targetJoint = (target.joints != null && target.joints.Count > i) ? target.joints[i] : null;
					setup.HandleObject(sourceJoint, targetJoint, CloneBehavior.ChildObject);
				}
			}
		}
Пример #15
0
 void ICloneExplicit.SetupCloneTargets(object target, ICloneTargetSetup setup)
 {
     setup.HandleObject(this, target);
     this.OnSetupCloneTargets(target, setup);
 }
Пример #16
0
        protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            base.OnSetupCloneTargets(targetObj, setup);
            Transform target = targetObj as Transform;

            setup.HandleObject(this.parentTransform, target.parentTransform, CloneBehavior.WeakReference);
        }
Пример #17
0
        void ICloneExplicit.SetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            GameObject target        = targetObj as GameObject;
            bool       isPrefabApply = setup.Context is ApplyPrefabContext;

            if (!isPrefabApply)
            {
                // Destroy additional Components in the target GameObject
                if (target.compMap.Count > 0)
                {
                    List <Type> removeComponentTypes = null;
                    foreach (var pair in target.compMap)
                    {
                        if (!this.compMap.ContainsKey(pair.Key))
                        {
                            if (removeComponentTypes == null)
                            {
                                removeComponentTypes = new List <Type>();
                            }
                            removeComponentTypes.Add(pair.Key);
                        }
                    }
                    if (removeComponentTypes != null)
                    {
                        foreach (Type type in removeComponentTypes)
                        {
                            target.RemoveComponent(type);
                        }
                    }
                }
                // Destroy additional child objects in the target GameObject
                if (target.children != null)
                {
                    int thisChildCount = this.children != null ? this.children.Count : 0;
                    for (int i = target.children.Count - 1; i >= thisChildCount; i--)
                    {
                        target.children[i].Dispose();
                    }
                }
            }

            // Create missing Components in the target GameObject
            foreach (var pair in this.compMap)
            {
                Component targetComponent = target.AddComponent(pair.Key);
                setup.HandleObject(pair.Value, targetComponent, CloneBehavior.ChildObject);
            }
            // Create missing child objects in the target GameObject
            if (this.children != null)
            {
                for (int i = 0; i < this.children.Count; i++)
                {
                    GameObject targetChild;
                    if (target.children != null && target.children.Count > i)
                    {
                        targetChild = target.children[i];
                    }
                    else
                    {
                        targetChild = new GameObject(string.Empty, target);
                    }

                    setup.HandleObject(this.children[i], targetChild, CloneBehavior.ChildObject);
                }
            }

            // Handle referenced and child objects
            setup.HandleObject(this.scene, target.scene, CloneBehavior.WeakReference);
            setup.HandleObject(this.prefabLink, target.prefabLink);
        }
Пример #18
0
        protected override void OnSetupCloneTargets(object targetObj, ICloneTargetSetup setup)
        {
            base.OnSetupCloneTargets(targetObj, setup);
            AnimSpriteRenderer target = targetObj as AnimSpriteRenderer;

            setup.HandleObject(this.customFrameSequence, target.customFrameSequence);
        }