public ConvertInstruction(uint label, IVariable result, IVariable operand, ConvertOperation operation, ITypeReference conversionType) : base(label, result) { this.Operand = operand; this.Operation = operation; this.ConversionType = conversionType; }
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; }
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); }
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); }
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; }
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); }
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 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()); }
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); }
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); } } }
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); }
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); }
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); }
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); }
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); }
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; } }
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)))); } } }
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); }
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); }
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); }
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); }
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); }
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); } } }
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; }
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; }
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); }
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); }
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); }
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); }
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); }
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; }
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); } } }
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); }
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; }
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; }
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); }
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); } } }
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); }
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; }
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; }
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; }
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; }
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; }
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)))); } } }
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; }
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; }
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; }
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; }
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); }
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); }
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(); }
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; } }
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); }
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; } }
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(); }
public override bool CanConvertFrom(ConvertOperation convert) { return convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateObj) && convert.CanPerform<Material>(); }