Пример #1
0
 public ConvertInstruction(uint label, IVariable result, IVariable operand, ConvertOperation operation, ITypeReference conversionType)
     : base(label, result)
 {
     this.Operand        = operand;
     this.Operation      = operation;
     this.ConversionType = conversionType;
 }
Пример #2
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;
            List<Texture> availData = convert.Perform<Texture>().ToList();

            // Generate objects
            foreach (Texture baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes)) continue;

                // Find target Resource matching the source - or create one.
                Material targetRes =
                    this.FindMatchingResources<Texture,Material>(baseRes, IsMatch)
                    .FirstOrDefault();
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    string resPath = PathHelper.GetFreePath(baseRes.FullName, Resource.GetFileExtByType<Material>());
                    targetRes = new Material(DrawTechnique.Mask, ColorRgba.White, baseRes);
                    targetRes.Save(resPath);
                }

                if (targetRes == null) continue;
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return finishConvertOp;
        }
Пример #3
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;

            GameObject[] draggedObjArray;
            if (convert.Data.TryGetGameObjects(DataObjectStorage.Reference, out draggedObjArray))
            {
                // Filter out GameObjects that are children of others
                draggedObjArray = draggedObjArray.Where(o => !draggedObjArray.Any(o2 => o.IsChildOf(o2))).ToArray();

                // Generate Prefabs
                foreach (GameObject draggedObj in draggedObjArray)
                {
                    if (convert.IsObjectHandled(draggedObj))
                    {
                        continue;
                    }

                    // Create Prefab
                    Prefab prefab = new Prefab(draggedObj);

                    // Add a name hint that may be used as indicator to select a Resource name later
                    prefab.AssetInfo          = new AssetInfo();
                    prefab.AssetInfo.NameHint = draggedObj.Name;

                    // Mark GameObject as handled
                    convert.MarkObjectHandled(draggedObj);
                    convert.AddResult(prefab);
                    finishConvertOp = true;
                }
            }

            return(finishConvertOp);
        }
Пример #4
0
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }
            List <object> results   = new List <object>();
            List <Sprite> availData = convert.Perform <Sprite>().ToList();

            foreach (var sprite in availData)
            {
                GameObject        gameobj  = convert.Result.OfType <GameObject>().FirstOrDefault();
                AdvSpriteRenderer renderer = convert.Result.OfType <AdvSpriteRenderer>().FirstOrDefault();

                if (renderer == null)
                {
                    renderer        = new AdvSpriteRenderer();
                    renderer.Sprite = sprite;
                    results.Add(renderer);
                }
                convert.SuggestResultName(renderer, sprite.Name);
                convert.MarkObjectHandled(sprite);
            }
            convert.AddResult(results);
            return(false);
        }
Пример #5
0
		public override bool Convert(ConvertOperation convert)
		{
			List<object> results = new List<object>();
			List<Font> availData = convert.Perform<Font>().ToList();

			// Generate objects
			foreach (Font font in availData)
			{
				if (convert.IsObjectHandled(font)) continue;

				GameObject gameobj = convert.Result.OfType<GameObject>().FirstOrDefault();
				TextRenderer renderer = convert.Result.OfType<TextRenderer>().FirstOrDefault();
				if (renderer == null && gameobj != null) renderer = gameobj.GetComponent<TextRenderer>();
				if (renderer == null) renderer = new TextRenderer();
				convert.SuggestResultName(renderer, font.Name);
					
				if (!renderer.Text.Fonts.Contains(font))
				{
					var fonts = renderer.Text.Fonts.ToList();
					if (fonts[0] == Font.GenericMonospace10) fonts.RemoveAt(0);
					fonts.Add(font);
					renderer.Text.Fonts = fonts.ToArray();
					renderer.Text.ApplySource();
				}

				results.Add(renderer);
				convert.MarkObjectHandled(font);
			}

			convert.AddResult(results);
			return false;
		}
Пример #6
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;

            List <Sound> availData = convert.Perform <Sound>().ToList();

            // Append objects
            foreach (Sound baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }
                if (baseRes.Data != null)
                {
                    for (int i = 0; i < baseRes.Data.Count; i++)
                    {
                        if (!baseRes.Data[i].IsAvailable)
                        {
                            continue;
                        }
                        convert.AddResult(baseRes.Data[i].Res);
                        finishConvertOp = true;
                    }
                }
                convert.MarkObjectHandled(baseRes);
            }

            return(finishConvertOp);
        }
Пример #7
0
        public override bool Convert(ConvertOperation convert)
        {
            bool          finishConvertOp = false;
            List <Pixmap> availData       = convert.Perform <Pixmap>().ToList();

            // Generate objects
            foreach (Pixmap baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }

                // Find target Resource matching the source - or create one.
                Texture targetRes = this.FindMatch(baseRes);
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    targetRes = Texture.CreateFromPixmap(baseRes).Res;
                }

                if (targetRes == null)
                {
                    continue;
                }
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return(finishConvertOp);
        }
Пример #8
0
        protected override int GetPreviewHash()
        {
            if (this.contentPath == null)
            {
                return(0);
            }

            IContentRef contentRef = new ContentRef <Resource>(null, this.contentPath);

            if (!contentRef.IsAvailable)
            {
                return(0);
            }

            ConvertOperation convOp = new ConvertOperation(new[] { contentRef.Res }, ConvertOperation.Operation.Convert);

            if (convOp.CanPerform <Pixmap>())
            {
                Pixmap       basePx      = convOp.Perform <Pixmap>().FirstOrDefault();
                Pixmap.Layer basePxLayer = basePx != null ? basePx.MainLayer : null;
                return(basePxLayer != null?basePxLayer.GetHashCode() : 0);
            }
            else if (convOp.CanPerform <AudioData>())
            {
                AudioData audioData = convOp.Perform <AudioData>().FirstOrDefault();
                return((audioData != null && audioData.OggVorbisData != null) ? audioData.OggVorbisData.GetHashCode() : 0);
            }

            return(this.contentPath.GetHashCode());
        }
Пример #9
0
        public override bool Convert(ConvertOperation convert)
        {
            bool          finishConvertOp = false;
            List <Pixmap> availData       = convert.Perform <Pixmap>().ToList();

            // Generate objects
            foreach (Pixmap baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }

                // Find target Resource matching the source - or create one.
                Texture targetRes =
                    this.FindMatchingResources <Pixmap, Texture>(baseRes, IsMatch)
                    .FirstOrDefault();
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    string texPath = PathHelper.GetFreePath(baseRes.FullName, Resource.GetFileExtByType <Texture>());
                    targetRes = new Texture(baseRes);
                    targetRes.Save(texPath);
                }

                if (targetRes == null)
                {
                    continue;
                }
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return(finishConvertOp);
        }
Пример #10
0
        protected override void DeserializeFromData(DataObject data)
        {
            ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.Convert);

            if (convert.CanPerform(this.editedCmpType))
            {
                var refQuery = convert.Perform(this.editedCmpType);
                if (refQuery != null)
                {
                    Component[] refArray = refQuery.Cast <Component>().ToArray();
                    this.component = (refArray != null && refArray.Length > 0) ? refArray[0] : null;
                    this.PerformSetValue();
                    this.PerformGetValue();
                    this.OnEditingFinished(FinishReason.LeapValue);
                }
            }
            else if (convert.CanPerform(typeof(GameObject)))
            {
                GameObject obj = convert.Perform <GameObject>().FirstOrDefault();
                Component  cmp = obj != null?obj.GetComponent(this.editedCmpType) : null;

                if (cmp != null)
                {
                    this.component = cmp;
                    this.PerformSetValue();
                    this.PerformGetValue();
                    this.OnEditingFinished(FinishReason.LeapValue);
                }
            }
        }
Пример #11
0
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Result.OfType <ICmpRenderer>().Any() || convert.Result.OfType <Nebula>().Any())
            {
                return(false);
            }
            List <object>     results   = new List <object>();
            List <NebulaType> availData = convert.Perform <NebulaType>().ToList();

            foreach (var nebula in availData)
            {
                GameObject gameobj    = convert.Result.OfType <GameObject>().FirstOrDefault();
                Nebula     background = convert.Result.OfType <Nebula>().FirstOrDefault();

                if (background == null)
                {
                    background         = new Nebula();
                    background.Nebulae = new ContentRef <NebulaType>[] { nebula };
                    results.Add(background);
                }
                convert.SuggestResultName(background, nebula.Name);
                convert.MarkObjectHandled(nebula);
            }
            convert.AddResult(results);
            return(false);
        }
Пример #12
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            DataObject dragDropData = e.Data as DataObject;

            if (this.HoverEditor == null && dragDropData != null && !this.ReadOnly)
            {
                var batchInfoQuery = new ConvertOperation(dragDropData, ConvertOperation.Operation.All).Perform <BatchInfo>();
                if (batchInfoQuery != null)
                {
                    BatchInfo[] newBatchInfoArray = batchInfoQuery.ToArray();
                    // Accept drop
                    e.Effect = e.AllowedEffect;

                    IEnumerable <object> values    = this.GetValue();
                    BatchInfo[]          newValues = new BatchInfo[Math.Max(1, values.Count())];
                    for (int i = 0; i < newValues.Length; i++)
                    {
                        newValues[i] = new BatchInfo(newBatchInfoArray[0]);
                    }
                    this.SetValues(newValues);
                    this.PerformGetValue();
                    return;
                }
            }

            // Move on to children if failed otherwise
            base.OnDragDrop(e);
        }
Пример #13
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;

            if (convert.Data.ContainsGameObjectRefs())
            {
                GameObject[] draggedObjArray = convert.Data.GetGameObjectRefs();

                // Filter out GameObjects that are children of others
                draggedObjArray = draggedObjArray.Where(o => !draggedObjArray.Any(o2 => o.IsChildOf(o2))).ToArray();

                // Generate Prefabs
                foreach (GameObject draggedObj in draggedObjArray)
                {
                    if (convert.IsObjectHandled(draggedObj))
                    {
                        continue;
                    }

                    // Create Prefab
                    Prefab prefab = new Prefab(draggedObj);
                    prefab.SourcePath = draggedObj.Name;                     // Dummy "source path" that may be used as indicator where to save the Resource later.

                    // Mark GameObject as handled
                    convert.MarkObjectHandled(draggedObj);
                    convert.AddResult(prefab);
                    finishConvertOp = true;
                }
            }

            return(finishConvertOp);
        }
Пример #14
0
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Data.ContainsContentRefs <Prefab>())
            {
                ContentRef <Prefab>[] dropdata = convert.Data.GetContentRefs <Prefab>();

                // Instantiate Prefabs
                foreach (ContentRef <Prefab> pRef in dropdata)
                {
                    if (convert.IsObjectHandled(pRef.Res))
                    {
                        continue;
                    }
                    if (!pRef.IsAvailable)
                    {
                        continue;
                    }
                    GameObject newObj = pRef.Res.Instantiate();
                    if (newObj != null)
                    {
                        convert.AddResult(newObj);
                        convert.MarkObjectHandled(pRef.Res);
                    }
                }
            }
            // Don't finish convert operation - other converters miht contribute to the new GameObjects!
            return(false);
        }
Пример #15
0
        public override bool Convert(ConvertOperation convert)
        {
            bool             finishConvertOp = false;
            List <BatchInfo> availData       = convert.Perform <BatchInfo>().ToList();

            // Generate objects
            foreach (BatchInfo info in availData)
            {
                if (convert.IsObjectHandled(info))
                {
                    continue;
                }

                // Auto-Generate Material
                string matName = "Material";
                if (!info.MainTexture.IsExplicitNull)
                {
                    matName = info.MainTexture.FullName;
                }
                string   matPath = PathHelper.GetFreePath(matName, Material.FileExt);
                Material mat     = new Material(info);
                mat.Save(matPath);

                convert.AddResult(mat);
                finishConvertOp = true;
                convert.MarkObjectHandled(info);
            }

            return(finishConvertOp);
        }
Пример #16
0
        private void DragBeginAction(DragEventArgs e)
        {
            DataObject data         = e.Data as DataObject;
            var        dragObjQuery = new ConvertOperation(data, ConvertOperation.Operation.All).Perform <GameObject>();

            if (dragObjQuery != null)
            {
                List <GameObject> dragObj = dragObjQuery.ToList();

                bool    lockZ      = this.CameraComponent.FocusDist <= 0.0f;
                Point   mouseLoc   = this.PointToClient(new Point(e.X, e.Y));
                Vector3 spaceCoord = this.GetSpaceCoord(new Vector3(
                                                            mouseLoc.X,
                                                            mouseLoc.Y,
                                                            lockZ ? 0.0f : this.CameraObj.Transform.Pos.Z + MathF.Abs(this.CameraComponent.FocusDist)));

                // Setup GameObjects
                CreateGameObjectAction      createAction = new CreateGameObjectAction(null, dragObj);
                DropGameObjectInSceneAction dropAction   = new DropGameObjectInSceneAction(dragObj, spaceCoord, this.CameraObj.Transform.Angle);
                UndoRedoManager.BeginMacro(dropAction.Name);
                UndoRedoManager.Do(createAction);
                UndoRedoManager.Do(dropAction);

                // Select them & begin action
                this.selBeforeDrag = DualityEditorApp.Selection;
                this.SelectObjects(createAction.Result.Select(g => new SelGameObj(g) as SelObj));
                this.BeginAction(ObjectAction.Move);

                // Get focused
                this.Focus();

                e.Effect = e.AllowedEffect;
            }
        }
Пример #17
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            // Check children first. Only accept the drop if they don't
            e.Effect = DragDropEffects.None;
            base.OnDragDrop(e);
            if (e.Effect != DragDropEffects.None)
            {
                return;
            }

            DataObject dragDropData = e.Data as DataObject;

            if (!this.ReadOnly && dragDropData != null)
            {
                ConvertOperation convert = new ConvertOperation(dragDropData, ConvertOperation.Operation.All);
                if (convert.CanPerform <Sound>())
                {
                    // Accept drop
                    e.Effect = e.AllowedEffect;

                    UndoRedoManager.Do(new CreateSoundEmitterSourceAction(
                                           this.GetValue().Cast <SoundEmitter>(),
                                           convert.Perform <Sound>().Select(s => new SoundEmitter.Source(s))));
                }
            }
        }
Пример #18
0
        public override bool Convert(ConvertOperation convert)
        {
            IContentRef[] dropData;
            if (convert.Data.TryGetContentRefs(typeof(Prefab), out dropData))
            {
                // Instantiate Prefabs
                foreach (IContentRef contentRef in dropData)
                {
                    ContentRef <Prefab> prefabRef = contentRef.As <Prefab>();

                    if (convert.IsObjectHandled(prefabRef.Res))
                    {
                        continue;
                    }
                    if (!prefabRef.IsAvailable)
                    {
                        continue;
                    }

                    GameObject newObj = prefabRef.Res.Instantiate();
                    if (newObj != null)
                    {
                        convert.AddResult(newObj);
                        convert.MarkObjectHandled(prefabRef.Res);
                    }
                }
            }
            // Don't finish convert operation - other converters miht contribute to the new GameObjects!
            return(false);
        }
Пример #19
0
        public override bool Convert(ConvertOperation convert)
        {
            bool           finishConvertOp = false;
            List <Texture> availData       = convert.Perform <Texture>().ToList();

            // Generate objects
            foreach (Texture baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }

                // Find target Resource matching the source - or create one.
                Material targetRes = this.FindMatch(baseRes);
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    string resPath = PathHelper.GetFreePath(baseRes.FullName, Resource.GetFileExtByType <Material>());
                    targetRes = new Material(DrawTechnique.Mask, ColorRgba.White, baseRes);
                    targetRes.Save(resPath);
                }

                if (targetRes == null)
                {
                    continue;
                }
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return(finishConvertOp);
        }
Пример #20
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.C && e.Control)
            {
                DataObject data = new DataObject();
                data.SetBatchInfos(new[] { this.DisplayedValue as BatchInfo });
                Clipboard.SetDataObject(data);
                e.Handled = true;
            }
            else if (e.KeyCode == Keys.V && e.Control)
            {
                DataObject              data     = Clipboard.GetDataObject() as DataObject;
                ConvertOperation        convert  = new ConvertOperation(data, ConvertOperation.Operation.All);
                IEnumerable <BatchInfo> refQuery = null;
                if (convert.CanPerform <BatchInfo>() && (refQuery = convert.Perform <BatchInfo>()) != null)
                {
                    this.SetValue(refQuery.FirstOrDefault());
                    this.PerformGetValue();
                    this.OnEditingFinished(FinishReason.LeapValue);
                }
                else
                {
                    System.Media.SystemSounds.Beep.Play();
                }

                e.Handled = true;
            }
            base.OnKeyDown(e);
        }
Пример #21
0
        public override bool Convert(ConvertOperation convert)
        {
            List <Sound> availData = convert.Perform <Sound>().ToList();

            // Generate objects
            foreach (Sound snd in availData)
            {
                if (convert.IsObjectHandled(snd))
                {
                    continue;
                }

                GameObject   gameobj = convert.Result.OfType <GameObject>().FirstOrDefault();
                SoundEmitter emitter = convert.Result.OfType <SoundEmitter>().FirstOrDefault();
                if (emitter == null && gameobj != null)
                {
                    emitter = gameobj.GetComponent <SoundEmitter>();
                }
                if (emitter == null)
                {
                    emitter = new SoundEmitter();
                }
                convert.SuggestResultName(emitter, snd.Name);

                SoundEmitter.Source source = new SoundEmitter.Source(snd);
                emitter.Sources.Add(source);

                convert.AddResult(emitter);
                convert.MarkObjectHandled(snd);
            }
            return(false);
        }
Пример #22
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;

            List <Texture> availData = convert.Perform <Texture>().ToList();

            // Append objects
            foreach (Texture baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }
                if (!baseRes.BasePixmap.IsAvailable)
                {
                    continue;
                }

                convert.AddResult(baseRes.BasePixmap.Res);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return(finishConvertOp);
        }
Пример #23
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;
            List<Pixmap> availData = convert.Perform<Pixmap>().ToList();

            // Generate objects
            foreach (Pixmap baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes)) continue;

                // Find target Resource matching the source - or create one.
                Texture targetRes = this.FindMatch(baseRes);
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    targetRes = Texture.CreateFromPixmap(baseRes).Res;
                }

                if (targetRes == null) continue;
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return finishConvertOp;
        }
 protected override void DeserializeFromData(DataObject data)
 {
     ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.Convert);
     if (convert.CanPerform(this.editedCmpType))
     {
         var refQuery = convert.Perform(this.editedCmpType);
         if (refQuery != null)
         {
             Component[] refArray = refQuery.Cast<Component>().ToArray();
             this.component = (refArray != null && refArray.Length > 0) ? refArray[0] : null;
             this.PerformSetValue();
             this.PerformGetValue();
             this.OnEditingFinished(FinishReason.LeapValue);
         }
     }
     else if (convert.CanPerform(typeof(GameObject)))
     {
         GameObject obj = convert.Perform<GameObject>().FirstOrDefault();
         Component cmp = obj != null ? obj.GetComponent(this.editedCmpType) : null;
         if (cmp != null)
         {
             this.component = cmp;
             this.PerformSetValue();
             this.PerformGetValue();
             this.OnEditingFinished(FinishReason.LeapValue);
         }
     }
 }
Пример #25
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;
            List<Pixmap> availData = convert.Perform<Pixmap>().ToList();

            // Generate objects
            foreach (Pixmap baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes)) continue;

                // Find target Resource matching the source - or create one.
                Texture targetRes = this.FindMatch(baseRes);
                if (targetRes == null && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    string texPath = PathHelper.GetFreePath(baseRes.FullName, Resource.GetFileExtByType<Texture>());
                    targetRes = new Texture(baseRes);
                    targetRes.Save(texPath);
                }

                if (targetRes == null) continue;
                convert.AddResult(targetRes);
                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            return finishConvertOp;
        }
Пример #26
0
		public override bool Convert(ConvertOperation convert)
		{
			bool finishConvertOp = false;

			if (convert.Data.ContainsGameObjectRefs())
			{
				GameObject[] draggedObjArray = convert.Data.GetGameObjectRefs();

				// Filter out GameObjects that are children of others
				draggedObjArray = draggedObjArray.Where(o => !draggedObjArray.Any(o2 => o.IsChildOf(o2))).ToArray();

				// Generate Prefabs
				foreach (GameObject draggedObj in draggedObjArray)
				{
					if (convert.IsObjectHandled(draggedObj)) continue;

					// Create Prefab
					Prefab prefab = new Prefab(draggedObj);

					// Add a name hint that may be used as indicator to select a Resource name later
					prefab.AssetInfo = new AssetInfo();
					prefab.AssetInfo.NameHint = draggedObj.Name;

					// Mark GameObject as handled
					convert.MarkObjectHandled(draggedObj);						
					convert.AddResult(prefab);
					finishConvertOp = true;
				}
			}

			return finishConvertOp;
		}
Пример #27
0
        public override bool Convert(ConvertOperation convert)
        {
            List <object>   results   = new List <object>();
            List <Material> availData = convert.Perform <Material>().ToList();

            // Generate objects
            foreach (Material mat in availData)
            {
                if (convert.IsObjectHandled(mat))
                {
                    continue;
                }
                Texture    mainTex = mat.MainTexture.Res;
                GameObject gameobj = convert.Result.OfType <GameObject>().FirstOrDefault();

                if (mainTex == null || mainTex.AnimFrames == 0)
                {
                    SpriteRenderer sprite = convert.Result.OfType <SpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <SpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new SpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    if (mainTex != null)
                    {
                        sprite.Rect = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight);
                    }
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }
                else
                {
                    AnimSpriteRenderer sprite = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <AnimSpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new AnimSpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    sprite.Rect           = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth / mainTex.AnimCols, mainTex.PixelHeight / mainTex.AnimRows);
                    sprite.AnimDuration   = 5.0f;
                    sprite.AnimFrameCount = mainTex.AnimFrames;
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }

                convert.MarkObjectHandled(mat);
            }

            convert.AddResult(results);
            return(false);
        }
Пример #28
0
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }
            List <object> results = new List <object>();
            List <AtlasViewer.TabItemInfo> availData = convert.Perform <AtlasViewer.TabItemInfo>().ToList();

            foreach (var sprite in availData)
            {
                GameObject         gameobj  = convert.Result.OfType <GameObject>().FirstOrDefault();
                AnimSpriteRenderer renderer = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault();

                if (renderer == null)
                {
                    renderer = new AnimSpriteRenderer();
                    if (sprite.Item.Indexes.Length > 1)
                    {
                        renderer.AnimDuration = (0.1f * sprite.Item.Indexes.Length);
                        renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.Loop;
                    }
                    else
                    {
                        renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.FixedSingle;
                    }

                    renderer.CustomFrameSequence = sprite.Item.Indexes.ToList();
                    var rect = sprite.Pixmap.Res.Atlas[sprite.Item.Indexes[0]];

                    renderer.Rect = new Rect(-rect.W / 2, -rect.H / 2, rect.W, rect.H);
                    var mat = this.FindMatchingResources <Pixmap, Material>(sprite.Pixmap.Res, (s, t) => t.MainTexture.Res?.BasePixmap == s).FirstOrDefault();
                    if (mat == null)
                    {
                        var tex = this.FindMatchingResources <Pixmap, Texture>(sprite.Pixmap.Res, (s, t) => t.BasePixmap == s).FirstOrDefault();
                        if (tex == null)
                        {
                            string texPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Texture>());
                            tex = new Texture(sprite.Pixmap);
                            tex.Save(texPath);
                        }
                        string matPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Material>());
                        mat = new Material()
                        {
                            MainTexture = tex
                        };
                        mat.Save(matPath);
                    }
                    renderer.SharedMaterial = mat;
                    results.Add(renderer);
                }
                convert.SuggestResultName(renderer, sprite.Key.Replace('/', '_'));
                convert.MarkObjectHandled(sprite);
            }
            convert.AddResult(results);
            return(false);
        }
Пример #29
0
        public override bool Convert(ConvertOperation convert)
        {
            List<object> results = new List<object>();
            List<Material> availData = convert.Perform<Material>().ToList();

            // Generate objects
            foreach (Material mat in availData)
            {
                if (convert.IsObjectHandled(mat)) continue;

                DrawTechnique tech = mat.Technique.Res;
                LightingTechnique lightTech = tech as LightingTechnique;
                if (tech == null) continue;

                bool isDynamicLighting = lightTech != null ||
                    tech.PreferredVertexFormat == VertexC1P3T2A4.VertexTypeIndex ||
                    tech.PreferredVertexFormat == VertexC1P3T4A4A1.VertexTypeIndex;
                if (!isDynamicLighting) continue;

                Texture mainTex = mat.MainTexture.Res;
                Pixmap basePixmap = (mainTex != null) ? mainTex.BasePixmap.Res : null;
                GameObject gameobj = convert.Result.OfType<GameObject>().FirstOrDefault();

                if (mainTex == null || basePixmap == null || basePixmap.AnimFrames == 0)
                {
                    LightingSpriteRenderer sprite = convert.Result.OfType<LightingSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null) sprite = gameobj.GetComponent<LightingSpriteRenderer>();
                    if (sprite == null) sprite = new LightingSpriteRenderer();
                    sprite.SharedMaterial = mat;
                    if (mainTex != null) sprite.Rect = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight);
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }
                else
                {
                    LightingAnimSpriteRenderer sprite = convert.Result.OfType<LightingAnimSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null) sprite = gameobj.GetComponent<LightingAnimSpriteRenderer>();
                    if (sprite == null) sprite = new LightingAnimSpriteRenderer();
                    sprite.SharedMaterial = mat;
                    sprite.Rect = Rect.AlignCenter(
                        0.0f,
                        0.0f,
                        (mainTex.PixelWidth / basePixmap.AnimCols) - basePixmap.AnimFrameBorder * 2,
                        (mainTex.PixelHeight / basePixmap.AnimRows) - basePixmap.AnimFrameBorder * 2);
                    sprite.AnimDuration = 5.0f;
                    sprite.AnimFrameCount = basePixmap.AnimFrames;
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }

                convert.MarkObjectHandled(mat);
            }

            convert.AddResult(results);
            return false;
        }
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Result.OfType <ICmpSpriteRenderer>().Any())
            {
                return(false);
            }
            List <object>      results   = new List <object>();
            List <AtlasSprite> availData = convert.Perform <AtlasSprite>().ToList();


            foreach (var sprite in availData)
            {
                if (!sprite.Pixmap.IsAvailable)
                {
                    continue;
                }

                GameObject     gameobj  = convert.Result.OfType <GameObject>().FirstOrDefault();
                SpriteRenderer renderer = convert.Result.OfType <SpriteRenderer>().FirstOrDefault();

                if (renderer == null)
                {
                    var r = sprite.Pixmap.Res.Atlas[sprite.Index];
                    renderer = new SpriteRenderer()
                    {
                        SpriteIndex = sprite.Index,
                        Rect        = new Rect(-r.W / 2, -r.H / 2, r.W, r.H)
                    };

                    var mat = this.FindMatchingResources <Pixmap, Material>(sprite.Pixmap.Res, (s, t) => t.MainTexture.Res?.BasePixmap == s).FirstOrDefault();
                    if (mat == null)
                    {
                        var tex = this.FindMatchingResources <Pixmap, Texture>(sprite.Pixmap.Res, (s, t) => t.BasePixmap == s).FirstOrDefault();
                        if (tex == null)
                        {
                            string texPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Texture>());
                            tex = new Texture(sprite.Pixmap);
                            tex.Save(texPath);
                        }
                        string matPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Material>());
                        mat = new Material()
                        {
                            MainTexture = tex
                        };
                        mat.Save(matPath);
                    }
                    renderer.SharedMaterial = mat;
                    results.Add(renderer);
                    convert.SuggestResultName(renderer, $"{sprite.Pixmap.Name}_{sprite.Index}");
                    convert.MarkObjectHandled(sprite);
                }
            }
            convert.AddResult(results);
            return(false);
        }
Пример #31
0
        public override bool Convert(ConvertOperation convert)
        {
            // If we already have a renderer in the result set, consider generating
            // a tilemap to be not the right course of action.
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }

            List <object>  results   = new List <object>();
            List <Tileset> availData = convert.Perform <Tileset>().ToList();

            // Generate objects
            foreach (Tileset tileset in availData)
            {
                if (convert.IsObjectHandled(tileset))
                {
                    continue;
                }

                // Retrieve previously generated GameObjects and Tilemaps for re-use
                GameObject      gameobj         = convert.Result.OfType <GameObject>().FirstOrDefault();
                Tilemap         tilemap         = convert.Result.OfType <Tilemap>().FirstOrDefault();
                TilemapRenderer tilemapRenderer = convert.Result.OfType <TilemapRenderer>().FirstOrDefault();
                if (tilemap == null && gameobj != null)
                {
                    tilemap = gameobj.GetComponent <Tilemap>();
                }

                // Create a new Tilemap (and TilemapRenderer) if none did exist before
                if (tilemap == null)
                {
                    tilemap = new Tilemap();
                    TilemapsSetupUtility.SetupTilemap(tilemap, tileset);

                    // Add a renderer for this Tilemap to the result list, if there was none before
                    if (tilemapRenderer == null)
                    {
                        results.Add(new TilemapRenderer());
                    }
                }

                // Configure the Tilemap according to the Tileset we're converting
                tilemap.Tileset = tileset;

                // Add the Tilemap to our result set
                results.Add(tilemap);
                convert.SuggestResultName(tilemap, tileset.Name);
                convert.MarkObjectHandled(tileset);
            }

            convert.AddResult(results);
            return(false);
        }
Пример #32
0
        public override bool Convert(ConvertOperation convert)
        {
            bool             finishConvertOp  = false;
            List <AudioData> availData        = convert.Perform <AudioData>().ToList();
            List <AudioData> createDataSource = null;

            // Match objects
            foreach (AudioData baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes))
                {
                    continue;
                }

                // Find target Resource matching the source
                Sound targetRes =
                    this.FindMatchingResources <AudioData, Sound>(baseRes, IsMatch)
                    .OrderBy(sound => sound.Data.Count)
                    .FirstOrDefault();
                if (targetRes != null)
                {
                    convert.AddResult(targetRes);
                }
                else if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    if (createDataSource == null)
                    {
                        createDataSource = new List <AudioData>();
                    }
                    createDataSource.Add(baseRes);
                }
                else
                {
                    // Can't handle this AudioData
                    continue;
                }

                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            // Create objects
            if (createDataSource != null)
            {
                List <ContentRef <Sound> > createdSounds = EditorActions.AudioDataToSound.CreateMultipleFromAudioData(createDataSource.Ref());
                foreach (ContentRef <Sound> sound in createdSounds)
                {
                    convert.AddResult(sound.Res);
                }
            }

            return(finishConvertOp);
        }
Пример #33
0
		public override bool Convert(ConvertOperation convert)
		{
			List<Component> availData = convert.Perform<Component>().ToList();
			availData.Sort((Component a, Component b) => a.RequiresComponent(b.GetType()) ? 1 : 0);

			// Generate objects
			foreach (Component cmp in availData)
			{
				if (convert.IsObjectHandled(cmp)) continue;
				Type cmpType = cmp.GetType();

				// Create or retrieve GameObject
				GameObject gameObj = null;
				{
					// First try to get one from the resultset that has an open slot for this kind of Component
					if (gameObj == null)
						gameObj = convert.Result.OfType<GameObject>().FirstOrDefault(g => g.GetComponent(cmpType) == null);
					// Still none? Create a new GameObject
					if (gameObj == null)
					{
						gameObj = new GameObject();

						// Come up with a suitable name
						string nameSuggestion = null;
						{
							// Be open for suggestions
							if (nameSuggestion == null)
								nameSuggestion = convert.TakeSuggestedResultName(cmp);
							// Use a standard name
							if (nameSuggestion == null)
								nameSuggestion = cmpType.Name;
						}

						gameObj.Name = nameSuggestion;
					}
				}

				// Make sure all requirements are met
				foreach (Type t in Component.GetRequiredComponents(cmpType))
					gameObj.AddComponent(t);

				// Make sure no other Component of this Type is already added
				gameObj.RemoveComponent(cmpType);

				// Add Component
				gameObj.AddComponent(cmp.GameObj == null ? cmp : cmp.Clone());

				convert.AddResult(gameObj);
				convert.MarkObjectHandled(cmp);
			}

			return false;
		}
        protected override bool CanDeserializeFromData(DataObject data)
        {
            ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.Convert);
            if (convert.CanPerform(this.editedCmpType)) return true;

            if (convert.CanPerform(typeof(GameObject)))
            {
                GameObject obj = convert.Perform<GameObject>().FirstOrDefault();
                return obj != null && obj.GetComponent(this.editedCmpType) != null;
            }

            return false;
        }
Пример #35
0
		protected override void DeserializeFromData(DataObject data)
		{
			ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.All);
			if (convert.CanPerform(this.editedResType))
			{
				var refQuery = convert.Perform(this.editedResType);
				if (refQuery != null)
				{
					Resource[] refArray = refQuery.Cast<Resource>().ToArray();
					UpdateContentPath((refArray != null && refArray.Length > 0) ? refArray[0].Path : null);
				}
			}
		}
Пример #36
0
        public override bool Convert(ConvertOperation convert)
        {
            // If we already have a renderer in the result set, consider generating
            // another one to be not the right course of action.
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }

            List <object> results   = new List <object>();
            List <Font>   availData = convert.Perform <Font>().ToList();

            // Generate objects
            foreach (Font font in availData)
            {
                if (convert.IsObjectHandled(font))
                {
                    continue;
                }

                GameObject   gameobj  = convert.Result.OfType <GameObject>().FirstOrDefault();
                TextRenderer renderer = convert.Result.OfType <TextRenderer>().FirstOrDefault();
                if (renderer == null && gameobj != null)
                {
                    renderer = gameobj.GetComponent <TextRenderer>();
                }
                if (renderer == null)
                {
                    renderer = new TextRenderer();
                }
                convert.SuggestResultName(renderer, font.Name);

                if (!renderer.Text.Fonts.Contains(font))
                {
                    var fonts = renderer.Text.Fonts.ToList();
                    if (fonts[0] == Font.GenericMonospace10)
                    {
                        fonts.RemoveAt(0);
                    }
                    fonts.Add(font);
                    renderer.Text.Fonts = fonts.ToArray();
                    renderer.Text.ApplySource();
                }

                results.Add(renderer);
                convert.MarkObjectHandled(font);
            }

            convert.AddResult(results);
            return(false);
        }
Пример #37
0
        public override bool Convert(ConvertOperation convert)
        {
            // If we already have a renderer in the result set, consider generating
            // another one to be not the right course of action.
            if (convert.Result.OfType<ICmpRenderer>().Any())
                return false;

            List<object> results = new List<object>();
            List<Material> availData = convert.Perform<Material>().ToList();

            // Generate objects
            foreach (Material mat in availData)
            {
                if (convert.IsObjectHandled(mat)) continue;
                Texture mainTex = mat.MainTexture.Res;
                Pixmap basePixmap = (mainTex != null) ? mainTex.BasePixmap.Res : null;
                GameObject gameobj = convert.Result.OfType<GameObject>().FirstOrDefault();

                if (mainTex == null || basePixmap == null || basePixmap.AnimFrames == 0)
                {
                    SpriteRenderer sprite = convert.Result.OfType<SpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null) sprite = gameobj.GetComponent<SpriteRenderer>();
                    if (sprite == null) sprite = new SpriteRenderer();
                    sprite.SharedMaterial = mat;
                    if (mainTex != null) sprite.Rect = Rect.Align(Alignment.Center, 0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight);
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }
                else
                {
                    AnimSpriteRenderer sprite = convert.Result.OfType<AnimSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null) sprite = gameobj.GetComponent<AnimSpriteRenderer>();
                    if (sprite == null) sprite = new AnimSpriteRenderer();
                    sprite.SharedMaterial = mat;
                    sprite.Rect = Rect.Align(Alignment.Center,
                        0.0f,
                        0.0f,
                        (mainTex.PixelWidth / basePixmap.AnimCols) - basePixmap.AnimFrameBorder * 2,
                        (mainTex.PixelHeight / basePixmap.AnimRows) - basePixmap.AnimFrameBorder * 2);
                    sprite.AnimDuration = 5.0f;
                    sprite.AnimFrameCount = basePixmap.AnimFrames;
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }

                convert.MarkObjectHandled(mat);
            }

            convert.AddResult(results);
            return false;
        }
Пример #38
0
        public override bool CanConvertFrom(ConvertOperation convert)
        {
            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
            {
                return convert.CanPerform<Pixmap>();
            }

            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.Convert))
            {
                List<Pixmap> availData = convert.Perform<Pixmap>(ConvertOperation.Operation.Convert).ToList();
                return availData.Any(t => this.FindMatch(t) != null);
            }

            return false;
        }
Пример #39
0
        public override bool CanConvertFrom(ConvertOperation convert)
        {
            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
            {
                return(convert.CanPerform <Pixmap>());
            }

            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.Convert))
            {
                List <Pixmap> availData = convert.Perform <Pixmap>(ConvertOperation.Operation.Convert).ToList();
                return(availData.Any(t => this.FindMatch(t) != null));
            }

            return(false);
        }
Пример #40
0
        protected override void OnDragEnter(DragEventArgs e)
        {
            base.OnDragEnter(e);
            DataObject data = e.Data as DataObject;
            var        op   = new ConvertOperation(data, ConvertOperation.Operation.All);

            if (op.CanPerform <Pixmap>())
            {
                e.Effect = e.AllowedEffect;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
 protected override void DeserializeFromData(DataObject data)
 {
     ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.Convert);
     if (convert.CanPerform(typeof(GameObject)))
     {
         var refQuery = convert.Perform(typeof(GameObject));
         if (refQuery != null)
         {
             GameObject[] refArray = refQuery.Cast<GameObject>().ToArray();
             this.gameObj = (refArray != null && refArray.Length > 0) ? refArray[0] : null;
             this.PerformSetValue();
             this.PerformGetValue();
             this.OnEditingFinished(FinishReason.LeapValue);
         }
     }
 }
Пример #42
0
        protected override bool CanDeserializeFromData(DataObject data)
        {
            ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.Convert);

            if (convert.CanPerform(this.editedCmpType))
            {
                return(true);
            }

            if (convert.CanPerform(typeof(GameObject)))
            {
                GameObject obj = convert.Perform <GameObject>().FirstOrDefault();
                return(obj != null && obj.GetComponent(this.editedCmpType) != null);
            }

            return(false);
        }
Пример #43
0
        public override bool Convert(ConvertOperation convert)
        {
            // If we already have a renderer in the result set, consider generating
            // a tilemap to be not the right course of action.
            if (convert.Result.OfType<ICmpRenderer>().Any())
                return false;

            List<object> results = new List<object>();
            List<Tileset> availData = convert.Perform<Tileset>().ToList();

            // Generate objects
            foreach (Tileset tileset in availData)
            {
                if (convert.IsObjectHandled(tileset)) continue;

                // Retrieve previously generated GameObjects and Tilemaps for re-use
                GameObject gameobj = convert.Result.OfType<GameObject>().FirstOrDefault();
                Tilemap tilemap = convert.Result.OfType<Tilemap>().FirstOrDefault();
                TilemapRenderer tilemapRenderer = convert.Result.OfType<TilemapRenderer>().FirstOrDefault();
                if (tilemap == null && gameobj != null) tilemap = gameobj.GetComponent<Tilemap>();

                // Create a new Tilemap (and TilemapRenderer) if none did exist before
                if (tilemap == null)
                {
                    tilemap = new Tilemap();
                    TilemapsSetupUtility.SetupTilemap(tilemap, tileset);

                    // Add a renderer for this Tilemap to the result list, if there was none before
                    if (tilemapRenderer == null)
                    {
                        results.Add(new TilemapRenderer());
                    }
                }

                // Configure the Tilemap according to the Tileset we're converting
                tilemap.Tileset = tileset;

                // Add the Tilemap to our result set
                results.Add(tilemap);
                convert.SuggestResultName(tilemap, tileset.Name);
                convert.MarkObjectHandled(tileset);
            }

            convert.AddResult(results);
            return false;
        }
Пример #44
0
        public override bool CanConvertFrom(ConvertOperation convert)
        {
            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
            {
                return convert.CanPerform<Texture>();
            }

            if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.Convert))
            {
                List<Texture> availData = convert.Perform<Texture>(ConvertOperation.Operation.Convert).ToList();
                return availData.Any(t =>
                    this.FindMatchingResources<Texture,Material>(t, IsMatch)
                    .Any());
            }

            return false;
        }
Пример #45
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;
            List<AudioData> availData = convert.Perform<AudioData>().ToList();
            List<AudioData> createDataSource = null;

            // Match objects
            foreach (AudioData baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes)) continue;

                // Find target Resource matching the source
                Sound targetRes =
                    this.FindMatchingResources<AudioData,Sound>(baseRes, IsMatch)
                    .OrderBy(sound => sound.Data.Count)
                    .FirstOrDefault();
                if (targetRes != null)
                {
                    convert.AddResult(targetRes);
                }
                else if (convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes))
                {
                    if (createDataSource == null) createDataSource = new List<AudioData>();
                    createDataSource.Add(baseRes);
                }
                else
                {
                    // Can't handle this AudioData
                    continue;
                }

                finishConvertOp = true;
                convert.MarkObjectHandled(baseRes);
            }

            // Create objects
            if (createDataSource != null)
            {
                List<ContentRef<Sound>> createdSounds = EditorActions.AudioDataToSound.CreateMultipleFromAudioData(createDataSource.Ref());
                foreach (ContentRef<Sound> sound in createdSounds)
                    convert.AddResult(sound.Res);
            }

            return finishConvertOp;
        }
Пример #46
0
		public override bool Convert(ConvertOperation convert)
		{
			bool finishConvertOp = false;

			List<Material> availData = convert.Perform<Material>().ToList();

			// Append objects
			foreach (Material mat in availData)
			{
				if (convert.IsObjectHandled(mat)) continue;

				convert.AddResult(new BatchInfo(mat));
				finishConvertOp = true;
				convert.MarkObjectHandled(mat);
			}

			return finishConvertOp;
		}
Пример #47
0
		public override bool Convert(ConvertOperation convert)
		{
			bool finishConvertOp = false;

			List<Texture> availData = convert.Perform<Texture>().ToList();

			// Append objects
			foreach (Texture baseRes in availData)
			{
				if (convert.IsObjectHandled(baseRes)) continue;
				if (!baseRes.BasePixmap.IsAvailable) continue;

				convert.AddResult(baseRes.BasePixmap.Res);
				finishConvertOp = true;
				convert.MarkObjectHandled(baseRes);
			}

			return finishConvertOp;
		}
Пример #48
0
		protected override void OnDragDrop(DragEventArgs e)
		{
			// Check children first. Only accept the drop if they don't
			e.Effect = DragDropEffects.None;
			base.OnDragDrop(e);
			if (e.Effect != DragDropEffects.None) return;

			DataObject dragDropData = e.Data as DataObject;
			if (!this.ReadOnly && dragDropData != null)
			{
				ConvertOperation convert = new ConvertOperation(dragDropData, ConvertOperation.Operation.All);
				if (convert.CanPerform<Sound>())
				{
					// Accept drop
					e.Effect = e.AllowedEffect;

					UndoRedoManager.Do(new CreateSoundEmitterSourceAction(
						this.GetValue().Cast<SoundEmitter>(), 
						convert.Perform<Sound>().Select(s => new SoundEmitter.Source(s))));
				}
			}
		}
Пример #49
0
		public override bool Convert(ConvertOperation convert)
		{
			if (convert.Data.ContainsContentRefs<Prefab>())
			{
				ContentRef<Prefab>[] dropdata = convert.Data.GetContentRefs<Prefab>();

				// Instantiate Prefabs
				foreach (ContentRef<Prefab> pRef in dropdata)
				{
					if (convert.IsObjectHandled(pRef.Res)) continue;
					if (!pRef.IsAvailable) continue;
					GameObject newObj = pRef.Res.Instantiate();
					if (newObj != null)
					{
						convert.AddResult(newObj);
						convert.MarkObjectHandled(pRef.Res);
					}
				}
			}
			// Don't finish convert operation - other converters miht contribute to the new GameObjects!
			return false; 
		}
Пример #50
0
		public override bool Convert(ConvertOperation convert)
		{
			List<Sound> availData = convert.Perform<Sound>().ToList();

			// Generate objects
			foreach (Sound snd in availData)
			{
				if (convert.IsObjectHandled(snd)) continue;

				GameObject gameobj = convert.Result.OfType<GameObject>().FirstOrDefault();
				SoundEmitter emitter = convert.Result.OfType<SoundEmitter>().FirstOrDefault();
				if (emitter == null && gameobj != null) emitter = gameobj.GetComponent<SoundEmitter>();
				if (emitter == null) emitter = new SoundEmitter();
				convert.SuggestResultName(emitter, snd.Name);
					
				SoundEmitter.Source source = new SoundEmitter.Source(snd);
				emitter.Sources.Add(source);

				convert.AddResult(emitter);
				convert.MarkObjectHandled(snd);
			}
			return false;
		}
Пример #51
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;
            List<BatchInfo> availData = convert.Perform<BatchInfo>().ToList();

            // Generate objects
            foreach (BatchInfo info in availData)
            {
                if (convert.IsObjectHandled(info)) continue;

                // Auto-Generate Material
                string matName = "Material";
                if (!info.MainTexture.IsExplicitNull) matName = info.MainTexture.FullName;
                string matPath = PathHelper.GetFreePath(matName, Resource.GetFileExtByType<Material>());
                Material mat = new Material(info);
                mat.Save(matPath);

                convert.AddResult(mat);
                finishConvertOp = true;
                convert.MarkObjectHandled(info);
            }

            return finishConvertOp;
        }
Пример #52
0
        public override bool Convert(ConvertOperation convert)
        {
            bool finishConvertOp = false;

            List<Sound> availData = convert.Perform<Sound>().ToList();

            // Append objects
            foreach (Sound baseRes in availData)
            {
                if (convert.IsObjectHandled(baseRes)) continue;
                if (baseRes.Data != null)
                {
                    for (int i = 0; i < baseRes.Data.Count; i++)
                    {
                        if (!baseRes.Data[i].IsAvailable) continue;
                        convert.AddResult(baseRes.Data[i].Res);
                        finishConvertOp = true;
                    }
                }
                convert.MarkObjectHandled(baseRes);
            }

            return finishConvertOp;
        }
Пример #53
0
        private void folderView_DragOver(object sender, DragEventArgs e)
        {
            NodeBase baseTarget = this.DragDropGetTargetBaseNode();
            ResourceNode targetResNode = baseTarget as ResourceNode;
            DirectoryNode targetDirNode = baseTarget as DirectoryNode;
            string baseTargetPath = this.GetInsertActionTargetBasePath(baseTarget);
            DataObject data = e.Data as DataObject;
            ConvertOperation.Operation convOp = data.GetAllowedConvertOp();
            if (data != null)
            {
                // Dragging files around
                if (data.ContainsFileDropList())
                {
                    if (Directory.Exists(baseTargetPath))
                    {
                        // Do not accept drag if target is located in source
                        bool targetInSource = false;
                        foreach (string srcPath in data.GetFileDropList())
                        {
                            if (PathOp.IsPathLocatedIn(baseTargetPath, srcPath))
                            {
                                targetInSource = true;
                                break;
                            }
                        }

                        DragDropEffects effect;
                        if (targetInSource)
                            effect = DragDropEffects.None;
                        else if ((e.KeyState & 2) != 0)		// Right mouse button
                            effect = DragDropEffects.Move | DragDropEffects.Copy;
                        else if ((e.KeyState & 32) != 0)	// Alt key
                            effect = DragDropEffects.Copy;
                        else
                            effect = DragDropEffects.Move;
                        e.Effect = effect & e.AllowedEffect;
                    }
                }
                // Dragging a single GameObject to Prefab
                else if (
                    e.AllowedEffect.HasFlag(DragDropEffects.Link) &&
                    data.ContainsGameObjectRefs() &&
                    targetResNode != null &&
                    targetResNode.ResLink.Is<Duality.Resources.Prefab>() &&
                    data.GetGameObjectRefs().Length == 1)
                {
                    e.Effect = DragDropEffects.Link & e.AllowedEffect;
                }
                // See if we can retrieve Resources from data
                else if (
                    (baseTarget == null || !baseTarget.ReadOnly) &&
                    (e.AllowedEffect.HasFlag(DragDropEffects.Copy) || e.AllowedEffect.HasFlag(DragDropEffects.Move)) &&
                    (convOp.HasFlag(ConvertOperation.Operation.CreateRes) || convOp.HasFlag(ConvertOperation.Operation.CreateObj)))
                {
                    bool canSelectResource = new ConvertOperation(data, ConvertOperation.Operation.All).CanPerform<IContentRef>();
                    if (canSelectResource) e.Effect = DragDropEffects.Copy & e.AllowedEffect;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                }
            }

            this.folderView.HighlightDropPosition = (e.Effect != DragDropEffects.None);
        }
Пример #54
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            DataObject dragDropData = e.Data as DataObject;
            if (this.HoverEditor == null && dragDropData != null && !this.ReadOnly)
            {
                var batchInfoQuery = new ConvertOperation(dragDropData, ConvertOperation.Operation.All).Perform<BatchInfo>();
                if (batchInfoQuery != null)
                {
                    BatchInfo[] newBatchInfoArray = batchInfoQuery.ToArray();
                    // Accept drop
                    e.Effect = e.AllowedEffect;

                    IEnumerable<object> values = this.GetValue();
                    IEnumerable<BatchInfo> batchInfoValues = values.Cast<BatchInfo>().NotNull();
                    if (batchInfoValues.Any())
                    {
                        foreach (BatchInfo info in batchInfoValues) newBatchInfoArray[0].CopyTo(info);
                        // BatchInfos aren't usually referenced, they're nested. Make sure the change notification is passed on.
                        this.SetValues(batchInfoValues);
                    }
                    else
                    {
                        this.SetValue(newBatchInfoArray[0]);
                    }
                    this.PerformGetValue();
                    return;
                }
            }

            // Move on to children if failed otherwise
            base.OnDragDrop(e);
        }
Пример #55
0
        private void folderView_DragDrop(object sender, DragEventArgs e)
        {
            this.folderView.BeginUpdate();

            bool effectMove = (e.Effect & DragDropEffects.Move) != DragDropEffects.None;
            bool effectCopy = (e.Effect & DragDropEffects.Copy) != DragDropEffects.None;

            NodeBase baseTarget = this.DragDropGetTargetBaseNode();
            ResourceNode targetResNode = baseTarget as ResourceNode;
            DirectoryNode targetDirNode = baseTarget as DirectoryNode;
            this.tempDropBasePath = this.GetInsertActionTargetBasePath(baseTarget);
            DataObject data = e.Data as DataObject;
            ConvertOperation.Operation convOp = data.GetAllowedConvertOp();
            if (data != null)
            {
                // Dropping files
                if (data.ContainsFileDropList())
                {
                    IEnumerable<string> incomingFiles = data.GetFileDropList().OfType<string>();

                    // Handle file import operations and filter out files that have been handled that way.
                    incomingFiles = this.HandleFileImport(this.tempDropBasePath, incomingFiles);

                    // Filter out non-Resource files that might have been dropped accidentally into the data directory
                    incomingFiles = incomingFiles.Where(path => Resource.IsResourceFile(path) || Directory.Exists(path));

                    // If there's anything left, proceed with a regular file drop operation
                    if (incomingFiles.Any())
                    {
                        this.tempFileDropList = incomingFiles.ToList();

                        // Display context menu if both moving and copying are availabled
                        if (effectMove && effectCopy)
                            this.contextMenuDragMoveCopy.Show(this, this.PointToClient(new Point(e.X, e.Y)));
                        else if (effectCopy)
                            this.copyHereToolStripMenuItem_Click(this, null);
                        else if (effectMove)
                            this.moveHereToolStripMenuItem_Click(this, null);
                    }
                }
                // Dropping GameObject to Prefab
                else if (
                    e.Effect.HasFlag(DragDropEffects.Link) &&
                    data.ContainsGameObjectRefs() &&
                    targetResNode != null &&
                    targetResNode.ResLink.Is<Duality.Resources.Prefab>() &&
                    data.GetGameObjectRefs().Length == 1)
                {
                    Prefab prefab = targetResNode.ResLink.Res as Prefab;
                    if (prefab != null)
                    {
                        GameObject draggedObj = data.GetGameObjectRefs()[0];

                        UndoRedoManager.BeginMacro();
                        // Prevent recursion
                        UndoRedoManager.Do(new BreakPrefabLinkAction(draggedObj.ChildrenDeep.Where(c => c.PrefabLink != null && c.PrefabLink.Prefab == prefab)));
                        // Inject GameObject to Prefab & Establish PrefabLink
                        UndoRedoManager.Do(new ApplyToPrefabAction(draggedObj, prefab));
                        UndoRedoManager.EndMacro(UndoRedoManager.MacroDeriveName.FromLast);
                    }
                }
                // See if we can retrieve Resources from data
                else if (
                    (baseTarget == null || !baseTarget.ReadOnly) &&
                    (effectCopy || effectMove) &&
                    (convOp.HasFlag(ConvertOperation.Operation.CreateRes) || convOp.HasFlag(ConvertOperation.Operation.CreateObj)))
                {
                    var resQuery = new ConvertOperation(data, ConvertOperation.Operation.All).Perform<IContentRef>();
                    if (resQuery != null)
                    {
                        // Save or move generated Resources
                        List<Resource> resList = resQuery.Res().ToList();
                        this.folderView.ClearSelection();
                        foreach (Resource res in resList)
                        {
                            string desiredName = null;
                            if (string.IsNullOrEmpty(desiredName))
                                desiredName = res.Name;
                            if (string.IsNullOrEmpty(desiredName) && res.AssetInfo != null)
                                desiredName = res.AssetInfo.NameHint;
                            if (string.IsNullOrEmpty(desiredName))
                                desiredName = res.GetType().Name;

                            bool pointsToFile = !res.IsDefaultContent && !res.IsRuntimeResource;
                            string basePath = this.GetInsertActionTargetBasePath(targetDirNode);
                            string nameExt = Resource.GetFileExtByType(res.GetType());
                            string resPath = Path.Combine(basePath, desiredName) + nameExt;
                            if (!pointsToFile || Path.GetFullPath(resPath) != Path.GetFullPath(res.Path))
                                resPath = PathHelper.GetFreePath(Path.Combine(basePath, desiredName), nameExt);
                            resPath = PathHelper.MakeFilePathRelative(resPath);

                            if (pointsToFile && File.Exists(res.Path))
                                File.Move(res.Path, resPath);
                            else
                                res.Save(resPath);

                            this.ScheduleSelect(resPath);
                        }

                        // If we happened to generate a Prefab, link possible existing GameObjects to it
                        if (resList.OfType<Prefab>().Any())
                        {
                            UndoRedoManager.Do(new ApplyToPrefabAction(data.GetGameObjectRefs(), resList.OfType<Prefab>().Ref()));
                        }

                    }
                }
            }

            this.folderView.EndUpdate();
        }
Пример #56
0
        private void DragBeginAction(DragEventArgs e)
        {
            DataObject data = e.Data as DataObject;
            var dragObjQuery = new ConvertOperation(data, ConvertOperation.Operation.All).Perform<GameObject>();
            if (dragObjQuery != null)
            {
                List<GameObject> dragObj = dragObjQuery.ToList();

                bool lockZ = this.CameraComponent.FocusDist <= 0.0f;
                Point mouseLoc = this.PointToClient(new Point(e.X, e.Y));
                Vector3 spaceCoord = this.GetSpaceCoord(new Vector3(
                    mouseLoc.X,
                    mouseLoc.Y,
                    lockZ ? 0.0f : this.CameraObj.Transform.Pos.Z + MathF.Abs(this.CameraComponent.FocusDist)));

                // Setup GameObjects
                CreateGameObjectAction createAction = new CreateGameObjectAction(null, dragObj);
                DropGameObjectInSceneAction dropAction = new DropGameObjectInSceneAction(dragObj, spaceCoord, this.CameraObj.Transform.Angle);
                UndoRedoManager.BeginMacro(dropAction.Name);
                UndoRedoManager.Do(createAction);
                UndoRedoManager.Do(dropAction);

                // Select them & begin action
                this.selBeforeDrag = DualityEditorApp.Selection;
                this.SelectObjects(createAction.Result.Select(g => new SelGameObj(g) as SelObj));
                this.BeginAction(ObjectAction.Move);

                // Get focused
                this.Focus();

                e.Effect = e.AllowedEffect;
            }
        }
Пример #57
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.C && e.Control)
            {
                DataObject data = new DataObject();
                data.SetBatchInfos(new[] { this.DisplayedValue as BatchInfo });
                Clipboard.SetDataObject(data);
                e.Handled = true;
            }
            else if (e.KeyCode == Keys.V && e.Control)
            {
                DataObject data = Clipboard.GetDataObject() as DataObject;
                ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.All);
                IEnumerable<BatchInfo> refQuery = null;
                if (convert.CanPerform<BatchInfo>() && (refQuery = convert.Perform<BatchInfo>()) != null)
                {
                    this.SetValue(refQuery.FirstOrDefault());
                    this.PerformGetValue();
                    this.OnEditingFinished(FinishReason.LeapValue);
                }
                else
                    System.Media.SystemSounds.Beep.Play();

                e.Handled = true;
            }
            base.OnKeyDown(e);
        }
Пример #58
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            base.OnDragDrop(e);

            DataObject data = e.Data as DataObject;
            var dragObjQuery = new ConvertOperation(data, ConvertOperation.Operation.All).Perform<Tileset>();
            if (dragObjQuery != null)
            {
                Tileset dragObj = dragObjQuery.FirstOrDefault();

                // Open up the Tilemap setup dialog
                TilemapSetupDialog setupDialog = new TilemapSetupDialog();
                setupDialog.Tileset = dragObj;
                setupDialog.ShowCentered(DualityEditorApp.MainForm);

                e.Effect = e.AllowedEffect;
            }
        }
Пример #59
0
        private void objectView_DragDrop(object sender, DragEventArgs e)
        {
            this.objectView.BeginUpdate();

            bool effectMove = (e.Effect & DragDropEffects.Move) != DragDropEffects.None;
            bool effectCopy = (e.Effect & DragDropEffects.Copy) != DragDropEffects.None;
            DataObject data = e.Data as DataObject;
            if (data != null)
            {
                ConvertOperation convertOp = new ConvertOperation(data, ConvertOperation.Operation.All);
                this.tempDropTarget = this.DragDropGetTargetNode();
                if (data.ContainsGameObjectRefs())
                {
                    this.tempDropData = data.GetGameObjectRefs();

                    // Display context menu if both moving and copying are availabled
                    if (effectMove && effectCopy)
                        this.contextMenuDragMoveCopy.Show(this, this.PointToClient(new Point(e.X, e.Y)));
                    else if (effectCopy)
                        this.copyHereToolStripMenuItem_Click(this, null);
                    else if (effectMove)
                        this.moveHereToolStripMenuItem_Click(this, null);
                }
                else if (data.ContainsComponentRefs())
                {
                    this.tempDropData = data.GetComponentRefs();

                    // Display context menu if both moving and copying are availabled
                    if (effectMove && effectCopy)
                        this.contextMenuDragMoveCopy.Show(this, this.PointToClient(new Point(e.X, e.Y)));
                    else if (effectCopy)
                        this.copyHereToolStripMenuItem_Click(this, null);
                    else if (effectMove)
                        this.moveHereToolStripMenuItem_Click(this, null);
                }
                else if (this.tempDropTarget != null && convertOp.CanPerform<Component>())
                {
                    GameObject dropObj = null;
                    if (this.tempDropTarget is GameObjectNode)
                        dropObj = (this.tempDropTarget as GameObjectNode).Obj;
                    else
                        dropObj = (this.tempDropTarget as ComponentNode).Component.GameObj;

                    var componentQuery = convertOp.Perform<Component>();
                    if (componentQuery != null)
                    {
                        // Create Components
                        CreateComponentAction createAction = new CreateComponentAction(dropObj, componentQuery.Where(c => c.GameObj == null));
                        UndoRedoManager.BeginMacro();
                        UndoRedoManager.Do(new DeleteComponentAction(componentQuery.Select(c => dropObj.GetComponent(c.GetType())).NotNull()));
                        UndoRedoManager.Do(createAction);
                        UndoRedoManager.EndMacro(UndoRedoManager.MacroDeriveName.FromLast);

                        bool selCleared = false;
                        foreach (Component newComponent in createAction.Result)
                        {
                            NodeBase dataNode = this.FindNode(newComponent);
                            if (dataNode == null) continue;
                            TreeNodeAdv viewNode = this.objectView.FindNode(this.objectModel.GetPath(dataNode));
                            if (viewNode == null) continue;
                            if (!selCleared)
                            {
                                this.objectView.ClearSelection();
                                selCleared = true;
                            }
                            viewNode.IsSelected = true;
                            this.objectView.EnsureVisible(viewNode);
                        }
                    }
                }
                else if (convertOp.CanPerform<GameObject>())
                {
                    GameObject dropObj = (this.tempDropTarget is GameObjectNode) ? (this.tempDropTarget as GameObjectNode).Obj : null;
                    var gameObjQuery = convertOp.Perform<GameObject>();
                    if (gameObjQuery != null)
                    {
                        CreateGameObjectAction action = new CreateGameObjectAction(dropObj, gameObjQuery);
                        UndoRedoManager.Do(action);

                        bool selCleared = false;
                        foreach (GameObject newObj in action.Result)
                        {
                            NodeBase dataNode = this.FindNode(newObj);
                            if (dataNode == null) continue;
                            TreeNodeAdv viewNode = this.objectView.FindNode(this.objectModel.GetPath(dataNode));
                            if (viewNode == null) continue;
                            if (!selCleared)
                            {
                                this.objectView.ClearSelection();
                                selCleared = true;
                            }
                            viewNode.IsSelected = true;
                            this.objectView.EnsureVisible(viewNode);
                        }
                    }
                }
            }

            this.objectView.EndUpdate();
        }
Пример #60
0
 public override bool CanConvertFrom(ConvertOperation convert)
 {
     return
         convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateObj) &&
         convert.CanPerform<Material>();
 }