UObject* UPaperFlipbookFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) { UPaperFlipbook* NewFlipbook = ConstructObject<UPaperFlipbook>(Class, InParent, Name, Flags | RF_Transactional); { FScopedFlipbookMutator EditLock(NewFlipbook); EditLock.KeyFrames = KeyFrames; } return NewFlipbook; }
void SFlipbookKeyframeWidget::OnAssetSelected(const FAssetData& AssetData) { if (UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get()) { FScopedFlipbookMutator EditLock(Flipbook); if (EditLock.KeyFrames.IsValidIndex(FrameIndex)) { UPaperSprite* NewSprite = Cast<UPaperSprite>(AssetData.GetAsset()); EditLock.KeyFrames[FrameIndex].Sprite = NewSprite; } } }
TSharedRef<FFlipbookKeyFrameDragDropOp> FFlipbookKeyFrameDragDropOp::New(int32 InWidth, UPaperFlipbook* InFlipbook, int32 InFrameIndex) { // Create the drag-drop op containing the key TSharedRef<FFlipbookKeyFrameDragDropOp> Operation = MakeShareable(new FFlipbookKeyFrameDragDropOp); Operation->KeyFrameData = InFlipbook->GetKeyFrameChecked(InFrameIndex); Operation->SourceFrameIndex = InFrameIndex; Operation->SourceFlipbook = InFlipbook; Operation->WidgetWidth = InWidth; Operation->Construct(); // Remove the key from the flipbook { InFlipbook->Modify(); FScopedFlipbookMutator EditLock(InFlipbook); EditLock.KeyFrames.RemoveAt(InFrameIndex); } return Operation; }
void SFlipbookTimeline::OnAssetsDropped(const class FAssetDragDropOp& DragDropOp) { //@TODO: Support inserting in addition to dropping at the end TArray<FPaperFlipbookKeyFrame> NewFrames; for (const FAssetData& AssetData : DragDropOp.AssetData) { if (UObject* Object = AssetData.GetAsset()) { if (UPaperSprite* SpriteAsset = Cast<UPaperSprite>(Object)) { // Insert this sprite as a keyframe FPaperFlipbookKeyFrame& NewFrame = *new (NewFrames) FPaperFlipbookKeyFrame(); NewFrame.Sprite = SpriteAsset; } else if (UPaperFlipbook* FlipbookAsset = Cast<UPaperFlipbook>(Object)) { // Insert all of the keyframes from the other flipbook into this one for (int32 KeyIndex = 0; KeyIndex < FlipbookAsset->GetNumKeyFrames(); ++KeyIndex) { const FPaperFlipbookKeyFrame& OtherFlipbookFrame = FlipbookAsset->GetKeyFrameChecked(KeyIndex); FPaperFlipbookKeyFrame& NewFrame = *new (NewFrames) FPaperFlipbookKeyFrame(); NewFrame = OtherFlipbookFrame; } } } } UPaperFlipbook* ThisFlipbook = FlipbookBeingEdited.Get(); if (NewFrames.Num() && (ThisFlipbook != nullptr)) { const FScopedTransaction Transaction(LOCTEXT("DroppedAssetOntoTimeline", "Insert assets as frames")); ThisFlipbook->Modify(); FScopedFlipbookMutator EditLock(ThisFlipbook); EditLock.KeyFrames.Append(NewFrames); } }
void FFlipbookKeyFrameDragDropOp::InsertInFlipbook(UPaperFlipbook* DestinationFlipbook, int32 Index) { DestinationFlipbook->Modify(); FScopedFlipbookMutator EditLock(DestinationFlipbook); EditLock.KeyFrames.Insert(KeyFrameData, Index); }
void FFlipbookKeyFrameDragDropOp::AppendToFlipbook(UPaperFlipbook* DestinationFlipbook) { DestinationFlipbook->Modify(); FScopedFlipbookMutator EditLock(DestinationFlipbook); EditLock.KeyFrames.Add(KeyFrameData); }