public void Clear() { if (IsTargetValid()) { if (lastCompiledCode != liveCode) { // Uses made un-saved changes. Make sure we save it. target.SetDraftCode(liveCode); } target = null; } waitingOnRetrieveCode = false; // The outstanding call, if any, will know to terminate itself. if (compileRequested) { Debug.LogError($"Editor was cleared while there was still an outstanding compile request. Please poll IsCompilePending() before clearing. The compile request will be ignored."); } compileRequested = false; liveCode = null; lastCompiledCode = null; browser.SetCode(""); }
public ICardAssignmentModel OnAssignCard(ICardModel card, int index = -1) { Debug.Assert(card != null, "Given card was null"); Debug.Assert(this.actorBehaviorsEditor != null, "Null actorBehaviorsEditor?"); using (this.actorBehaviorsEditor.StartUndo($"Add {this.GetCardCategory()} card {card.GetTitle()}")) { UnassignedBehavior behaviorEditor = ((UnassignedCard)card).GetUnassignedBehaviorItem(); AssignedBehavior assigned = this.actorBehaviorsEditor.AddBehavior(behaviorEditor); List <string> deckUseIds = new List <string>((string[])deckEditor.data); if (index >= 0) { if (index > deckUseIds.Count) { throw new System.Exception("OnAssignCard: Index greater than deckUseIds count!"); } deckUseIds.Insert(index, assigned.useId); } else { deckUseIds.Add(assigned.useId); } deckEditor.SetData(deckUseIds.ToArray()); return(new CardAssignment(assigned, this)); } }
public void Set(UnassignedBehavior target, VoosEngine.BehaviorLogItem?error = null) { Clear(); Debug.Assert(target.IsValid(), "Given target was not valid?"); this.target = target; // Use draft code if it's there. liveCode = Util.IsNotNullNorEmpty(target.GetDraftCode()) ? target.GetDraftCode().NormalizeLineEndings() : target.GetCode().NormalizeLineEndings(); lastCompiledCode = target.GetCode().NormalizeLineEndings(); browser.SetCode(liveCode); // Restore scroll pos if this is the same as before if (scrollPosByUri.ContainsKey(target.GetBehaviorUri())) { browser.SetScrollTop(scrollPosByUri[target.GetBehaviorUri()]); } browser.SetReadOnly(target.IsBehaviorReadOnly()); if (error.HasValue) { AddErrorToMonaco(error.Value.lineNum, error.Value.message); } }
public AssignedBehavior AddBehavior(UnassignedBehavior behavior) { OnBeforeAnyChange(); Debug.Assert(!behavior.behaviorUri.IsNullOrEmpty()); string finalBehaviorUri = behavior.behaviorUri; // Alright, some special logic here. If it's a user-library behavior, do not // just use the URI directly. Import it, so turn it into embedded, then use // it. We want VOOS files to be stand-alone, so we can't have any local user // library dependencies. if (BehaviorSystem.IsUserLibraryBehaviorUri(behavior.behaviorUri)) { Behaviors.Behavior importedBehavior = GetBehaviorSystem().GetBehaviorData(behavior.behaviorUri); Debug.Assert(!importedBehavior.userLibraryFile.IsNullOrEmpty()); string importedId = GetBehaviorSystem().GenerateUniqueId(); GetBehaviorSystem().PutBehavior(importedId, importedBehavior); string importedUri = BehaviorSystem.IdToEmbeddedBehaviorUri(importedId); finalBehaviorUri = importedUri; } // Create the use in the database string useId = actor.GetBehaviorSystem().GenerateUniqueId(); var brain = GetBrain(); brain.AddUse(new BehaviorUse { id = useId, behaviorUri = finalBehaviorUri, propertyAssignments = new Behaviors.PropertyAssignment[0] }); GetBehaviorSystem().PutBrain(GetBrainId(), brain); return(new AssignedBehavior(useId, this)); }
void AddNewCard(string category) { // Close(); BehaviorCards.CardMetadata md = BehaviorCards.CardMetadata.DefaultCardMetadata; md.cardSystemCardData.categories = new string[] { category }; string metadataJson = JsonUtility.ToJson(md); UnassignedBehavior newBehavior = behaviorSystem.CreateNewBehavior( BehaviorCards.GetDefaultCodeForCategory(category), metadataJson); // onCodeRequest(newBehavior.GetId()); }
public ICardAssignmentModel CreateAndAssignNewCard() { // Make sure the category is for this slot. CardMetadata md = CardMetadata.DefaultCardMetadata; md.cardSystemCardData.categories = new string[] { deckEditor.cardCategory }; string metadataJson = JsonUtility.ToJson(md); UnassignedBehavior newBehavior = this.actorBehaviorsEditor.CreateNewBehavior(GetDefaultCodeForCategory(deckEditor.cardCategory), metadataJson); return(this.OnAssignCard(new UnassignedCard(newBehavior))); }
private void PopulateContainerWithUri(GameObject containerObj, string cardUri) { UnassignedBehavior unassignedBehavior = new UnassignedBehavior(cardUri, behaviorSystem); ICardModel cardModel = new BehaviorCards.UnassignedCard(unassignedBehavior); if (!cardModel.IsValid()) { return; } Card card = containerObj.GetComponentInChildren <CardContainer>().GetCard(); card.Populate(cardModel); }
public ICardAssignmentModel CreateAndAssignNewCard() { string metaJson = JsonUtility.ToJson(new CardMetadata { cardSystemCardData = new CardMetadata.Data { description = "Describe what your card does here!", isCard = true, title = "Name your card", categories = CUSTOM_CATEGORIES } }); UnassignedBehavior newBehavior = this.actorEditor.CreateNewBehavior(CodeTemplates.MISC, metaJson); return(this.OnAssignCard(new UnassignedCard(newBehavior))); }
public UnassignedBehavior CreateNewBehavior(string initCode, string metadataJson) { string behaviorId = GetBehaviorSystem().GenerateUniqueId(); GetBehaviorSystem().PutBehavior(behaviorId, new Behaviors.Behavior { label = "Custom", metadataJson = metadataJson, javascript = initCode }); UnassignedBehavior newBehavior = new UnassignedBehavior(BehaviorSystem.IdToEmbeddedBehaviorUri(behaviorId), GetBehaviorSystem()); // NOTE: We don't need to add it here, per se. The caller should call AddBehavior on us with this instance. return(newBehavior); }
public void SetupPreview(UnassignedBehavior editor) { TryClearFieldList(); if (editor == null) { return; } var defaultProps = editor.GetDefaultProperties(); foreach (PropEditor propEditor in defaultProps) { if (IsRelevantField(propEditor)) { SpawnField(propEditor); } } SetPreviewSpacerAndOverlay(HasAnyProps()); }
public void Open(string openCardUri = null, VoosEngine.BehaviorLogItem?error = null) { gameObject.SetActive(true); resourceClaimer.Unclaim(); isNewCard = false; this.error = null; // Which card are we editing ? if (openCardUri != null && behaviorSystem.IsBehaviorUriValid(openCardUri)) { cardUri = openCardUri; this.error = error; } else if (cardUri == null || !behaviorSystem.IsBehaviorUriValid(cardUri)) { UnassignedBehavior newBehavior = behaviorSystem.CreateNewBehavior( CodeTemplates.MISC, BehaviorCards.GetMiscMetadataJson()); cardUri = newBehavior.GetBehaviorUri(); isNewCard = true; } resourceClaimer.Claim(UnassignedBehavior.GetClaimResourceId(cardUri), OnClaimStatusChanged); }
public PanelCommon(UnassignedBehavior item) { this.item = item; }
public UnassignedCard(UnassignedBehavior item) { this.item = item; }
public string GetBehaviorMetadataJson(UnassignedBehavior b) { return(GetBehaviorSystem().GetBehaviorData(b.behaviorUri).metadataJson); }
public UnassignedPanel(UnassignedBehavior item, BehaviorCards.ManagerImpl manager) : base(item) { this.item = item; this.manager = manager; }
public void Setup() { Util.FindIfNotSet(this, ref behaviorSystem); Util.FindIfNotSet(this, ref claimKeeper); Util.FindIfNotSet(this, ref undoStack); Util.FindIfNotSet(this, ref voosEngine); Util.FindIfNotSet(this, ref popups); newCardUI.newCardButton.onClick.AddListener(() => { string category = newCardCategoryOptions[newCardUI.newCardCategoryDropdown.value].text; AddNewCard(category); }); cardLibraryUI.closeButton.onClick.AddListener(Close); cardLibraryUI.inputField.onValueChanged.AddListener(OnInputFieldChanged); cardLibraryUI.clearSearchButton.onClick.AddListener(ClearSearch); cardLibraryUI.categoryDropdown.onValueChanged.AddListener((v) => { MatchNewCardCategoryToFilter(); UpdateCards(); }); cardDetail = Instantiate(cardDetailPrefab); cardDetail.Setup(parentRect); cardDetail.onCodeCard += (model, _, container) => { if (!model.IsValid()) { return; } if (model.IsBuiltin()) { // Not embedded, need to copy first string newBehaviorUri = model.MakeCopy().GetUri(); onCodeRequest?.Invoke(newBehaviorUri); } else { onCodeRequest?.Invoke(model.GetUri()); } }; cardDetail.onPreviewCard += (model) => { onCodeRequest?.Invoke(model.GetUri()); }; cardDetail.onTrashCard += (model, _) => { if (!model.IsValid()) { return; } ClaimableUndoUtil.ClaimableUndoItem undoItem = new ClaimableUndoUtil.ClaimableUndoItem(); Behaviors.Behavior behavior = model.GetUnassignedBehaviorItem().GetBehavior(); string uri = model.GetUri(); string id = model.GetId(); undoItem.resourceId = UnassignedBehavior.GetClaimResourceId(id); undoItem.resourceName = model.GetTitle(); undoItem.label = $"Delete {model.GetTitle()}"; undoItem.doIt = () => { behaviorSystem.DeleteBehavior(id); }; undoItem.undo = () => { behaviorSystem.PutBehavior(id, behavior); }; undoItem.cannotDoReason = () => { if (voosEngine.FindOneActorUsing(uri) != null) { return("One or more actors are using this card."); } return(null); }; ClaimableUndoUtil.PushUndoForResource(undoStack, claimKeeper, undoItem); }; behaviorSystem.onBehaviorPut += OnBehaviorPut; behaviorSystem.onBehaviorDelete += OnBehaviorDelete; #if USE_STEAMWORKS uploadDialog = Instantiate(uploadDialogPrefab); uploadDialog.Setup(); workshopMenu = Instantiate(workshopMenuPrefab); workshopMenu.Setup(); #endif cardPackPicker = Instantiate(cardPackPickerPrefab); cardLibraryUI.selectionDoneButton.onClick.AddListener(() => { Debug.Assert(selection != null); selection.selectionFinishedCallback(selection.selectedCards); EndSelection(); }); cardLibraryUI.selectionCancelButton.onClick.AddListener(() => { EndSelection(); }); #if USE_STEAMWORKS cardLibraryUI.exportDropdown.SetOptions(new List <string>() { EXPORT_TO_DISK, EXPORT_TO_WORKSHOP, UPDATE_WORKSHOP_PACK }); #else // cardLibraryUI.exportDropdown.SetOptions(new List<string>() { // EXPORT_TO_DISK // }); cardLibraryUI.exportButton.onClick.AddListener(() => StartSelection(OnFinishSelectionForLocal)); #endif cardLibraryUI.exportDropdown.onOptionClicked += (value) => { if (value == EXPORT_TO_DISK) { StartSelection(OnFinishSelectionForLocal); } #if USE_STEAMWORKS else if (value == UPDATE_WORKSHOP_PACK) { cardPackPicker.Open((res) => { if (res.IsEmpty()) { return; } StartSelection((list) => OnFinishSelectionForWorkshop(list, res), res); }); } else { StartSelection(OnFinishSelectionForWorkshop, Util.Maybe <ulong> .CreateEmpty()); } #endif }; #if USE_STEAMWORKS cardLibraryUI.importDropdown.SetOptions(new List <string>() { IMPORT_FROM_DISK, IMPORT_FROM_WORKSHOP }); #else cardLibraryUI.importButton.onClick.AddListener(ImportLocal); // cardLibraryUI.importDropdown.SetOptions(new List<string>() { // IMPORT_FROM_DISK // }); #endif cardLibraryUI.importDropdown.onOptionClicked += (value) => { if (value == IMPORT_FROM_DISK) { ImportLocal(); } else { workshopMenu.Open(); } }; PopulateCards(); }