public override string GetBody(EditorScope scope)
        {
            var op     = (VMRemoveObjectInstanceOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get <STR>(156).GetString((int)op.Target));

            var    flagStr = new StringBuilder();
            string prepend = "";

            if (op.ReturnImmediately)
            {
                flagStr.Append(prepend + "Return Immediately"); prepend = ", ";
            }
            if (op.CleanupAll)
            {
                flagStr.Append(prepend + "Cleanup Multitile"); prepend = ", ";
            }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }
            return(result.ToString());
        }
Exemple #2
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMDropOntoOperand)Operand;
            var result = new StringBuilder();

            result.Append("From slot[");
            if (op.SrcSlotMode == 1)
            {
                result.Append(scope.GetVarName(VMVariableScope.Parameters, (short)op.SrcSlotNum));
            }
            else
            {
                result.Append(op.SrcSlotNum);
            }
            result.Append("] to slot[");
            if (op.DestSlotMode == 1)
            {
                result.Append(scope.GetVarName(VMVariableScope.Parameters, (short)op.DestSlotNum));
            }
            else
            {
                result.Append(op.DestSlotNum);
            }
            result.Append("]");

            return(result.ToString());
        }
Exemple #3
0
        private void SelectStackFrame(int forceFrame)
        {
            if (forceFrame == -1 && StackView.SelectedItems.Count == 0)
            {
                return;
            }
            var frame = DebugEntity.Thread.Stack[(forceFrame != -1) ? forceFrame:StackView.Items.IndexOf(StackView.SelectedItems[0])];

            if (bhav != null && bhav.ChunkID == frame.Routine.Chunk.ChunkID && frame == Editor.DebugFrame)
            {
                return;
            }
            SetActivePrimitive(null);
            this.bhav          = frame.Routine.Chunk;
            Scope              = new EditorScope(frame.CodeOwner, frame.Routine.Chunk);
            Scope.CallerObject = DebugEntity.Object;
            Scope.StackObject  = (frame.StackObject == null)?null:frame.StackObject.Object;

            EditorControl.InitBHAV(bhav, Scope, DebugEntity, frame, SelectionChanged);

            ObjectDataGrid.SelectedObject = new PropGridVMData(Scope, DebugEntity, frame, Editor);
            ObjectDataGrid.Refresh();

            PrimGroupChange(AllBtn, null);
        }
 public ChangeBHAVCommand(BHAV target, EditorScope scope, VMStackFrame frame, BHAVPrimSelect callback)
 {
     Target = target;
     TargetScope = scope;
     Frame = frame;
     SelectCallback = callback;
 }
Exemple #5
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMSubRoutineOperand)Operand;
            var result = new StringBuilder();

            return(result.ToString());
        }
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMSetMotiveChangeOperand)Operand;
            var result = new StringBuilder();

            if (op.ClearAll)
            {
                result.Append("Clear all");
            }
            else
            {
                result.Append(scope.GetVarScopeDataName(VMVariableScope.MyMotives, (short)op.Motive));
                result.Append(" += ");
                result.Append(scope.GetVarName(op.DeltaOwner, op.DeltaData));

                if (!op.Once)
                {
                    result.Append(" (per hr)");
                }

                result.Append("\r\n Stop at ");
                result.Append(scope.GetVarName(op.MaxOwner, op.MaxData));
            }

            return(result.ToString());
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            var content = Content.Content.Get();

            if (Sprites == null)
            {
                Sprites = new IffFile(content.TS1 ?
                                      Path.Combine(content.TS1BasePath, "GameData/Sprites.iff") :
                                      content.GetPath("objectdata/globals/sprites.iff"));
            }

            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Shows a 'Headline' above the specified object; ")));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Category", "Group", new OpStaticNamedPropertyProvider(typeof(VMSetBalloonHeadlineOperandGroup))));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Index", "Index", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Balloon", "Type", new OpStaticNamedPropertyProvider(
                                                      Enumerable.Range(0, 32)
                                                      .ToDictionary(x => x, x => Sprites.Get <SPR>((ushort)(GroupOffsets[(int)VMSetBalloonHeadlineOperandGroup.Balloon] + x))?.ChunkLabel)
                                                      .Where(x => x.Value != null)
                                                      .ToDictionary(x => x.Key, x => x.Value)
                                                      )));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Duration", "Duration", new OpStaticValueBoundsProvider(0, 65535)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Algorithmic", "Algorithmic", new OpStaticValueBoundsProvider(0, 0x7FFF)));

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("Of Stack Object", "OfStackOBJ"),
                new OpFlag("Crossed", "Crossed"),
                new OpFlag("Animate Backwards", "Backwards"),
                new OpFlag("Indexed by Temp[0]", "Indexed"),
                new OpFlag("Duration In Loops", "DurationInLoops"),
            }));
        }
Exemple #8
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMFindLocationForOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get <STR>(239).GetString((int)op.Mode));

            var    flagStr = new StringBuilder();
            string prepend = "";

            if (op.UseLocalAsRef)
            {
                flagStr.Append("Obj in ");
                flagStr.Append(scope.GetVarName(VMVariableScope.Local, op.Local));
                flagStr.Append(" as reference");
                prepend = ",\r\n";
            }
            if (op.PreferNonEmpty)
            {
                flagStr.Append(prepend + "Prefer non-empty"); prepend = ",\r\n";
            }
            if (op.UserEditableTilesOnly)
            {
                flagStr.Append(prepend + "User Editable tiles only"); prepend = ",\r\n";
            }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }
            return(result.ToString());
        }
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMPushInteractionOperand)Operand;
            var result = new StringBuilder();

            result.Append("Interaction #" + op.Interaction + " of object in param[" + op.ObjectLocation + "]\r\n");

            var    flagStr = new StringBuilder();
            string prepend = "";

            if (op.UseCustomIcon)
            {
                flagStr.Append("Use Custom Icon in Local " + op.IconLocation); prepend = ", ";
            }
            if (op.PushTailContinuation)
            {
                flagStr.Append(prepend + "Tail Continuation"); prepend = ", ";
            }
            if (op.PushHeadContinuation)
            {
                flagStr.Append(prepend + "Head Continuation"); prepend = ", ";
            }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }

            return(result.ToString());
        }
Exemple #10
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMSnapOperand)Operand;
            var result = new StringBuilder();


            switch (op.Mode)
            {
            case VMSnapSlotScope.Global:
                var gslots = scope.GetResource <STR>(257, ScopeSource.Global);
                result.Append(gslots?.GetString(op.Index) ?? "Global slot " + op.Index);
                break;

            case VMSnapSlotScope.Literal:
                var slotNs = scope.GetResource <STR>(257, ScopeSource.Private);
                result.Append((slotNs != null && slotNs.GetString(op.Index) != null) ? slotNs.GetString(op.Index) : "Private slot " + op.Index);
                break;

            case VMSnapSlotScope.StackVariable:
                result.Append("Private slot indexed by " + scope.GetVarName(VMVariableScope.Parameters, (short)op.Index));
                break;

            case VMSnapSlotScope.BeContained:
                result.Append("Be contained in Stack Object");
                break;

            case VMSnapSlotScope.InFront:
                result.Append("In front of Stack Object");
                break;
            }

            //if (op.NoFailureTrees) result.Append("\r\n(No Failure Trees)");

            return(result.ToString());
        }
Exemple #11
0
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                                  new OpStaticTextProvider("Show a dialog to the sim in Stack Object (TSO) or the sole player (TS1). " +
                                                                           "This dialog can either block thread execution for a response, or simply show the dialog and ignore the response.")));
            switch (PrimID)
            {
            case 36:
                panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                                      new OpStaticTextProvider("The following strings are sourced from the private STR resource #301.")));
                break;

            case 38:
                panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                                      new OpStaticTextProvider("The following strings are sourced from the global STR resource #301.")));
                break;

            case 39:
                panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                                      new OpStaticTextProvider("The following strings are sourced from the semi-global STR resource #301.")));
                break;
            }
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Title:", "TitleStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Message:", "MessageStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Yes Button:", "YesStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "No Button:", "NoStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Cancel Button:", "CancelStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Icon Name:", "IconNameStringID", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Type:", "Type", new OpStaticNamedPropertyProvider(typeof(VMDialogType))));
            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] { new OpFlag("Non-blocking", "Continue"), new OpFlag("Use Temp XL", "UseTempXL"), new OpFlag("Use Temp 1", "UseTemp1") }));
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                                  new OpStaticTextProvider("Tracks 'relationship' variables of one object to another. Can be used between both objects and avatars, and can optionally persist relationships in the city server. Returns False on failure if 'Fail if too small' is checked.")));

            var old = (Operand is VMOldRelationshipOperand);

            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Get/Set/Adjust:", "SetMode", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(169))));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Mode:", "Mode", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>((ushort)(old ? 170 : 235)))));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Relationship Var:", "RelVar", new OpStaticValueBoundsProvider(0, 255)));

            if (old)
            {
                panel.Controls.Add(new OpComboControl(master, escope, Operand, "Target Parameter:", "VarData", new OpStaticNamedPropertyProvider(escope.GetVarScopeDataNames(VMVariableScope.Parameters))));
            }
            else
            {
                panel.Controls.Add(new OpScopeControl(master, escope, Operand, "Target Variable:", "VarScope", "VarData"));
            }

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("Fail if too small", "FailIfTooSmall"),
                new OpFlag("Use Neighbor", "UseNeighbor"),
            }));

            if (!old)
            {
                panel.Controls.Add(new OpComboControl(master, escope, Operand, "Object in Local:", "Local", new OpStaticNamedPropertyProvider(escope.GetVarScopeDataNames(VMVariableScope.Local))));
            }
        }
Exemple #13
0
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Changes the Caller's suit to the specified. Can change outfits and add accessories.")));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "Suit Data: ", "SuitData", new OpStaticValueBoundsProvider(0, 255)));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Suit Scope:", "SuitScope", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(227))));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Suit Op:", "Flags", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(228))));
 }
Exemple #14
0
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                           new OpStaticTextProvider("Run a TSO specific function. Can use state from this scope to perform an action.")));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Call:", "Call", new OpStaticNamedPropertyProvider(
                                               Content.GameContent.Get.TS1?typeof(VMGenericTS1CallMode):typeof(VMGenericTSOCallMode))));
 }
Exemple #15
0
 public ChangeBHAVCommand(BHAV target, EditorScope scope, VMStackFrame frame, BHAVPrimSelect callback)
 {
     Target         = target;
     TargetScope    = scope;
     Frame          = frame;
     SelectCallback = callback;
 }
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Allows the stack object to print a string. " +
                                                                                             "In FreeSO, this message prints to chat, and can be used to make NPCs talk.")));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "STR Table:", "StringTable", new OpStaticValueBoundsProvider(0, 65535)));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "String ID:", "StringID", new OpStaticValueBoundsProvider(0, 65535)));
 }
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand,
         new OpStaticTextProvider("Refreshes the specified property of the object on demand.")));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Target Object:", "TargetObject", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get<STR>(211))));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Property:", "RefreshType", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get<STR>(212))));
 }
Exemple #18
0
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Performs the specified expression. Returns the result, which is true only for assignments and true/false for conditionals.")));
     panel.Controls.Add(new OpScopeControl(master, escope, Operand, "LHS: ", "LhsOwner", "LhsData"));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Operator: ", "Operator", new OpStaticNamedPropertyProvider(OperatorStr.Values.ToArray(), 0)));
     panel.Controls.Add(new OpScopeControl(master, escope, Operand, "RHS: ", "RhsOwner", "RhsData"));
 }
 public PropGridVMData(EditorScope scope, VMEntity ent, VMStackFrame frame, UIBHAVEditor editor)
 {
     Scope  = scope;
     Object = ent;
     Frame  = frame;
     Editor = editor;
 }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMPlaySoundOperand)Operand;
            var result = new StringBuilder();

            result.Append("Play \"");
            var fwav = scope.GetResource<FWAV>(op.EventID, ScopeSource.Private);
            result.Append((fwav == null)?"*Event Missing!*":fwav.Name);
            result.Append("\"");

            var flagStr = new StringBuilder();
            string prepend = "";
            if (op.Loop) { flagStr.Append("Loop"); prepend = ", "; }
            if (op.NoPan) { flagStr.Append(prepend + "No Pan"); prepend = ", "; }
            if (op.NoZoom) { flagStr.Append(prepend + "No Zoom"); prepend = ", "; }
            if (op.StackObjAsSource) { flagStr.Append(prepend + "Stack Object as Source"); prepend = ", "; }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }

            return result.ToString();
        }
Exemple #21
0
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                           new OpStaticTextProvider("Sleeps for the ticks specified by the chosen parameter, decrementing it towards zero. "
                                                                    + "Can be interrupted by the Notify Out Of Idle primitive.")));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Ticks in Parameter:", "StackVarToDec", new OpStaticNamedPropertyProvider(escope.GetVarScopeDataNames(VMVariableScope.Parameters))));
 }
Exemple #22
0
        public override string GetBody(EditorScope scope)
        {
            var op = (VMSnapOperand)Operand;
            var result = new StringBuilder();

            switch (op.Mode)
            {
                case VMSnapSlotScope.Global:
                    var gslots = scope.GetResource<STR>(257, ScopeSource.Global);
                    result.Append(gslots.GetString(op.Index));
                    break;
                case VMSnapSlotScope.Literal:
                    var slotNs = scope.GetResource<STR>(257, ScopeSource.Private);
                    result.Append((slotNs != null && slotNs.GetString(op.Index) != null) ? slotNs.GetString(op.Index) : "Private slot " + op.Index);
                    break;
                case VMSnapSlotScope.StackVariable:
                    result.Append("Private slot indexed by " + scope.GetVarName(VMVariableScope.Parameters, (short)op.Index));
                    break;
                case VMSnapSlotScope.BeContained:
                    result.Append("Be contained in Stack Object");
                    break;
                case VMSnapSlotScope.InFront:
                    result.Append("In front of Stack Object");
                    break;
            }

            //if (op.NoFailureTrees) result.Append("\r\n(No Failure Trees)");

            return result.ToString();
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMSetToNextOperand)Operand;
            var result = new StringBuilder();
            var nextObject = EditorScope.Behaviour.Get<STR>(164).GetString((int)op.SearchType);
            result.Append(nextObject);

            if (op.SearchType == VMSetToNextSearchType.ObjectOfType) {
                var obj = Content.Content.Get().WorldObjects.Get(op.GUID);

                result.Append((obj == null) ? ("0x" + Convert.ToString(op.GUID.ToString("x8"))) : obj.OBJ.ChunkLabel);
            }
            else if (op.SearchType == VMSetToNextSearchType.ObjectAdjacentToObjectInLocal) { result.Append(" "); result.Append(op.Local.ToString()); }

            var flagStr = new StringBuilder();
            if (op.TargetData != 0 || op.TargetOwner != VMVariableScope.StackObjectID) { flagStr.Append("Result in "+ scope.GetVarName(op.TargetOwner, (short)op.TargetData)); }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }

            return result.ToString();
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMFindLocationForOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get<STR>(239).GetString((int)op.Mode));

            var flagStr = new StringBuilder();
            string prepend = "";
            if (op.UseLocalAsRef) {
                flagStr.Append("Obj in ");
                flagStr.Append(scope.GetVarName(VMVariableScope.Local, op.Local));
                flagStr.Append(" as reference");
                prepend = ",\r\n";
            }
            if (op.AllowIntersection) { flagStr.Append(prepend + "Allow Intersection"); prepend = ",\r\n"; }
            if (op.UserEditableTilesOnly) { flagStr.Append(prepend + "User Editable tiles only"); prepend = ",\r\n"; }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }
            return result.ToString();
        }
Exemple #25
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMGotoRelativePositionOperand)Operand;
            var result = new StringBuilder();

            var function = EditorScope.Behaviour.Get <STR>(130).GetString((int)op.Location + 2);

            result.Append(function);
            result.Append(", ");
            result.Append(EditorScope.Behaviour.Get <STR>(131).GetString((int)op.Direction + 2));

            var    flagStr = new StringBuilder();
            string prepend = "";

            if (op.AllowDiffAlt)
            {
                flagStr.Append("Allow Different Altitudes"); prepend = ", ";
            }
            if (op.NoFailureTrees)
            {
                flagStr.Append(prepend + "No Failure Trees"); prepend = ", ";
            }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }

            return(result.ToString());
        }
Exemple #26
0
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand,
                                           new OpStaticTextProvider("Refreshes the specified property of the object on demand.")));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Target Object:", "TargetObject", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(211))));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Property:", "RefreshType", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(212))));
 }
Exemple #27
0
        public override string GetBody(EditorScope scope)
        {
            var op = (VMCreateObjectInstanceOperand)Operand;
            var result = new StringBuilder();

            var obj = Content.Content.Get().WorldObjects.Get(op.GUID);
            
            result.Append((obj == null)?("0x" + Convert.ToString(op.GUID.ToString("x8"))):obj.OBJ.ChunkLabel);
            result.Append("\r\n");
            
            result.Append(EditorScope.Behaviour.Get<STR>(167).GetString((int)op.Position));
            if ((int)op.Position > 7) result.Append(op.LocalToUse);

            //TODO: INTERACTION CALLBACK

            var flagStr = new StringBuilder();
            string prepend = "";
            if (op.PassObjectIds) { flagStr.Append(prepend + "Pass Object IDs to main"); prepend = ", "; }
            if (op.PassTemp0) { flagStr.Append(prepend + "Pass Temp 0 to main"); prepend = ", "; }
            if (op.PersistInDB) { flagStr.Append(prepend + "Persist in Database");  prepend = ", "; }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }
            return result.ToString();
        }
Exemple #28
0
        public OpFlagsControl(BHAVEditor master, EditorScope scope, VMPrimitiveOperand operand, string title, OpFlag[] flags)
        {
            InitializeComponent();
            this.FlagsPanel.Controls.Clear();
            Master = master;
            Scope = scope;
            Operand = operand;
            Flags = flags;
            FlagChecks = new CheckBox[flags.Length];

            int i = 0;
            foreach (var flag in flags)
            {
                var check = new CheckBox();
                check.AutoSize = true;
                check.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
                check.Size = new System.Drawing.Size(195, 17);
                check.Text = flag.Title;
                check.UseVisualStyleBackColor = true;
                check.CheckedChanged += Check_CheckedChanged;

                FlagChecks[i++] = check;
                CheckToFlag.Add(check, flag);
                this.FlagsPanel.Controls.Add(check);
            }

            OperandUpdated();
        }
        public override string GetTitle(EditorScope scope)
        {
            var op   = (VMSubRoutineOperand)Operand;
            var name = scope.GetSubroutineName(PrimID);

            return(name);
        }
 public override Dictionary<int, string> GetNamedProperties(EditorScope scope, VMPrimitiveOperand operand)
 {
     var map = new Dictionary<int, string>();
     var op = (VMGotoRoutingSlotOperand)operand;
     switch (op.Type)
     {
         case VMSlotScope.Global:
             var gslots = scope.GetResource<STR>(257, ScopeSource.Global);
             for (int i = 0; i < gslots.Length; i++)
                 map.Add(i, gslots.GetString(i));
             return map;
         case VMSlotScope.Literal:
             var slotNs = scope.GetResource<STR>(257, ScopeSource.Private);
             var slotRes = scope.GetResource<SLOT>(scope.GetOBJD().SlotID, ScopeSource.Private);
             if (slotRes == null) return map;
             var slots = slotRes.Slots[3];
             for (int i = 0; i < slots.Count; i++)
                 map.Add(i, (slotNs != null && slotNs.GetString(i) != null)?slotNs.GetString(i):"slot "+i);
             return map;
         case VMSlotScope.StackVariable:
             var str = scope.GetVarScopeDataNames(VMVariableScope.Parameters);
             for (int i = 0; i < str.Count; i++)
                 map.Add(str[i].Value, str[i].Name);
             return map;
         default:
             return map;
     }
 }
Exemple #31
0
        public OpFlagsControl(BHAVEditor master, EditorScope scope, VMPrimitiveOperand operand, string title, OpFlag[] flags)
        {
            InitializeComponent();
            this.FlagsPanel.Controls.Clear();
            Master     = master;
            Scope      = scope;
            Operand    = operand;
            Flags      = flags;
            FlagChecks = new CheckBox[flags.Length];

            int i = 0;

            foreach (var flag in flags)
            {
                var check = new CheckBox();
                check.AutoSize = true;
                check.Margin   = new System.Windows.Forms.Padding(3, 0, 3, 0);
                check.Size     = new System.Drawing.Size(195, 17);
                check.Text     = flag.Title;
                check.UseVisualStyleBackColor = true;
                check.CheckedChanged         += Check_CheckedChanged;

                FlagChecks[i++] = check;
                CheckToFlag.Add(check, flag);
                this.FlagsPanel.Controls.Add(check);
            }

            OperandUpdated();
        }
 public OpLabelControl(BHAVEditor master, EditorScope scope, VMPrimitiveOperand operand, OpTextProvider textP) : this()
 {
     Scope        = scope;
     Operand      = operand;
     TextProvider = textP;
     OperandUpdated();
 }
Exemple #33
0
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMGotoRoutingSlotOperand)Operand;
            var result = new StringBuilder();

            switch (op.Type)
            {
            case VMSlotScope.Global:
                var gslots = scope.GetResource <STR>(257, ScopeSource.Global);
                result.Append(gslots?.GetString(op.Data) ?? ("Global slot " + op.Data));
                break;

            case VMSlotScope.Literal:
                var slotNs = scope.GetResource <STR>(257, ScopeSource.Private);
                result.Append((slotNs != null && slotNs.GetString(op.Data) != null) ? slotNs.GetString(op.Data) : "Private slot " + op.Data);
                break;

            case VMSlotScope.StackVariable:
                result.Append("Private slot indexed by " + scope.GetVarName(VMVariableScope.Parameters, (short)op.Data));
                break;
            }

            if (op.NoFailureTrees)
            {
                result.Append("\r\n(No Failure Trees)");
            }

            return(result.ToString());
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMCreateObjectInstanceOperand)Operand;
            var result = new StringBuilder();

            var obj = Content.Content.Get().WorldObjects.Get(op.GUID);

            result.Append((obj == null)?("0x" + Convert.ToString(op.GUID.ToString("x8"))):obj.OBJ.ChunkLabel);
            result.Append("\r\n");

            result.Append(EditorScope.Behaviour.Get<STR>(167).GetString((int)op.Position));
            if ((int)op.Position > 7) result.Append(op.LocalToUse);

            //TODO: INTERACTION CALLBACK

            var flagStr = new StringBuilder();
            string prepend = "";
            if (op.PassObjectIds) { flagStr.Append(prepend + "Pass Object IDs to main"); prepend = ", "; }
            if (op.PassTemp0) { flagStr.Append(prepend + "Pass Temp 0 to main"); prepend = ", "; }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }
            return result.ToString();
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Creates a new instance of the specified object.")));

            panel.Controls.Add(new OpObjectControl(master, escope, Operand, "Object Type: ", "GUID"));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Position:", "Position", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(167))));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Position Local: ", "LocalToUse", new OpStaticValueBoundsProvider(0, 255)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Interaction Callback: ", "InteractionCallback", new OpStaticValueBoundsProvider(0, 255)));

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("Pass Object IDs", "PassObjectIds"),
                new OpFlag("Pass Temp 0 to Main", "PassTemp0"),
                new OpFlag("Persist in DB", "PersistInDB"),

                new OpFlag("Return Immediately", "ReturnImmediately"),
                new OpFlag("Fail if Non-Empty", "FailIfNonEmpty"),
                new OpFlag("Face StackOBJ Dir", "FaceStackObjDir"),
                new OpFlag("Use Neighbor (TS1)", "UseNeighbor"),
            }));

            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider(
                                                      "Pass Object IDs provides the option to pass both the Stack Object and the Caller Object to the newly " +
                                                      "created object's main routine, as its Stack Object and Temp 0 (ID) respectively.\r\n\r\n" +
                                                      "Return Immediately returns from this interaction and immediately runs it again with the created " +
                                                      "object's ID in parameter 0.")));
        }
Exemple #36
0
        public UIBHAVEditor(BHAV target, EditorScope scope)
        {
            BHAVView = new BHAVContainer(target, scope);

            PlacingName = new UILabel();
            PlacingName.Alignment = TextAlignment.Center;
            PlacingName.Size = new Vector2(1, 1);
            PlacingName.CaptionStyle = TextStyle.DefaultLabel.Clone();
            PlacingName.CaptionStyle.Font = FSO.Client.GameFacade.EdithFont;
            PlacingName.CaptionStyle.Size = 14;
            PlacingName.CaptionStyle.Color = new Color(0, 102, 26);

            PlacingName.Caption = "Placing Report Metric";

            PlacingDesc = new UILabel();
            PlacingDesc.Alignment = TextAlignment.Center;
            PlacingDesc.Size = new Vector2(1, 1);
            PlacingDesc.CaptionStyle = TextStyle.DefaultLabel.Clone();
            PlacingDesc.CaptionStyle.Font = FSO.Client.GameFacade.EdithFont;
            PlacingDesc.CaptionStyle.Size = 12;
            PlacingDesc.CaptionStyle.Color = new Color(0, 102, 26);

            PlacingDesc.Caption = "Press ESC to cancel.";
            this.Add(BHAVView);

            this.Add(PlacingName);
            this.Add(PlacingDesc);
        }
Exemple #37
0
        public override string GetBody(EditorScope scope)
        {
            var op         = (VMSetToNextOperand)Operand;
            var result     = new StringBuilder();
            var nextObject = EditorScope.Behaviour.Get <STR>(164).GetString((int)op.SearchType);

            result.Append(nextObject);

            if (op.SearchType == VMSetToNextSearchType.ObjectOfType)
            {
                var obj = Content.Content.Get().WorldObjects.Get(op.GUID);

                result.Append((obj == null) ? ("0x" + Convert.ToString(op.GUID.ToString("x8"))) : obj.OBJ.ChunkLabel);
            }
            else if (op.SearchType == VMSetToNextSearchType.ObjectAdjacentToObjectInLocal)
            {
                result.Append(" "); result.Append(op.Local.ToString());
            }

            var flagStr = new StringBuilder();

            if (op.TargetData != 0 || op.TargetOwner != VMVariableScope.StackObjectID)
            {
                flagStr.Append("Result in " + scope.GetVarName(op.TargetOwner, (short)op.TargetData));
            }

            if (flagStr.Length != 0)
            {
                result.Append("\r\n(");
                result.Append(flagStr);
                result.Append(")");
            }

            return(result.ToString());
        }
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMAnimateSimOperand)Operand;
            var result = new StringBuilder();

            if (op.AnimationID != 0)
            {
                var animName = (GetAnimationName(scope, op.Source, op.AnimationID));
                switch (op.Mode)
                {
                case 0:
                    result.Append("Play \"");
                    result.Append(animName);
                    result.Append("\"");
                    break;

                case 1:
                    result.Append("Set \"");
                    result.Append(animName);
                    result.Append("\" as Background Animation");
                    break;

                case 2:
                    result.Append("Set \"");
                    result.Append(animName);
                    result.Append("\" as Carry Animation");
                    break;

                case 3:
                    result.Append("Stop Carry, then Play \"");
                    result.Append(animName);
                    result.Append("\"");
                    break;
                }

                var    flagStr = new StringBuilder();
                string prepend = "";
                if (op.PlayBackwards)
                {
                    flagStr.Append("Play Backwards"); prepend = ", ";
                }
                if (op.StoreFrameInLocal)
                {
                    flagStr.Append(prepend + "Place events in Local " + op.LocalEventNumber); prepend = ", ";
                }

                if (flagStr.Length != 0)
                {
                    result.Append("\r\n(");
                    result.Append(flagStr);
                    result.Append(")");
                }
            }
            else
            {
                result.Append("Reset");
            }
            return(result.ToString());
        }
        public static string GetAnimationName(EditorScope escope, VMAnimationScope scope, ushort id)
        {
            STR animTable = GetAnimTable(escope, scope);
            if (animTable == null) return "Unknown animation (bad source)";

            var animationName = animTable.GetString(id);
            return (animationName == null)?"Unknown animation #" + id:animationName;
        }
        public override string GetBody(EditorScope scope)
        {
            var op     = (VMLookTowardsOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get <STR>(216).GetString((int)op.Mode));
            return(result.ToString());
        }
Exemple #41
0
 public OpLabelControl(BHAVEditor master, EditorScope scope, VMPrimitiveOperand operand, OpTextProvider textP)
     : this()
 {
     Scope = scope;
     Operand = operand;
     TextProvider = textP;
     OperandUpdated();
 }
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Runs a named tree in the stack object. The name is sourced from an STR resource (normally 303).")));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "STR Table:", "StringTable", new OpStaticValueBoundsProvider(0, 65535)));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "String ID:", "StringID", new OpStaticValueBoundsProvider(0, 255)));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Destination:", "Destination", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(222), 0)));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Scope:", "StringScope", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get <STR>(159), 0)));
 }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMLookTowardsOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get<STR>(216).GetString((int)op.Mode));
            return result.ToString();
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Drops an object from the specified slot on the Caller to a destination slot on the Stack Object.")));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Source Mode: ", "SrcSlotMode", new OpStaticNamedPropertyProvider(new string[] { "Slot[literal]", "Slot[parameter]" }, 0)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Source ID: ", "SrcSlotNum", new OpStaticValueBoundsProvider(0, 65535)));

            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Destination Mode: ", "DestSlotMode", new OpStaticNamedPropertyProvider(new string[] { "Slot[literal]", "Slot[parameter]" }, 0)));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Destination ID: ", "DestSlotNum", new OpStaticValueBoundsProvider(0, 65535)));
        }
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Specify the parameters passed to the subroutine. -1 passes the corresponding Temp as the parameter.")));
     var provider = new OpStaticValueBoundsProvider(-32767, 32768);
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "Argument 1:", "Arg0", provider));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "Argument 2:", "Arg1", provider));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "Argument 3:", "Arg2", provider));
     panel.Controls.Add(new OpValueControl(master, escope, Operand, "Argument 4:", "Arg3", provider));
 }
Exemple #46
0
        public void InitBHAV(BHAV bhav, EditorScope scope)
        {
            var mainCont = new UIExternalContainer(1024, 768);
            Editor = new UIBHAVEditor(bhav, scope);
            mainCont.Add(Editor);
            GameFacade.Screens.AddExternal(mainCont);

            SetUI(mainCont);
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Runs the specified entry point on the Stack Object, like a subroutine. Returns the result of the tree.")));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Function: ", "Function", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get<STR>(201), 0)));

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("Change Action Icon", "ChangeIcon"),
                }));
        }
 public override void Execute(BHAV bhav, UIBHAVEditor editor)
 {
     Old = editor.BHAVView.EditTarget;
     OldScope = editor.BHAVView.Scope;
     OldFrame = editor.DebugFrame;
     editor.BHAVView.OnSelectedChanged -= SelectCallback;
     editor.SwitchBHAV(Target, TargetScope, Frame);
     editor.BHAVView.OnSelectedChanged += SelectCallback;
 }
 public override Dictionary<int, string> GetNamedProperties(EditorScope scope, VMPrimitiveOperand operand)
 {
     var map = new Dictionary<int, string>();
     var evts = scope.GetAllResource<FWAV>(ScopeSource.Private);
     foreach (var evt in evts)
     {
         map.Add(evt.ChunkID, evt.Name);
     }
     return map;
 }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMRefreshOperand)Operand;
            var result = new StringBuilder();

            result.Append(EditorScope.Behaviour.Get<STR>(211).GetString(op.TargetObject));
            result.Append(" ");
            result.Append(EditorScope.Behaviour.Get<STR>(212).GetString(op.RefreshType));
            return result.ToString();
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Removes the specified object instance.")));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Target Object:", "Target", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get<STR>(156))));

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("Return Immediately", "ReturnImmediately"),
                new OpFlag("Cleanup Multitile", "CleanupAll"),
                }));
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMFindBestObjectForFunctionOperand)Operand;
            var result = new StringBuilder();

            result.Append("Find Best Object For Function: ");
            var function = EditorScope.Behaviour.Get<STR>(201).GetString((int)op.Function);
            result.Append(function);

            return result.ToString();
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMRandomNumberOperand)Operand;
            var result = new StringBuilder();

            result.Append(scope.GetVarName(op.DestinationScope, (short)op.DestinationData));
            result.Append(" := between 0 and ");
            result.Append(scope.GetVarName(op.RangeScope, (short)op.RangeData));

            return result.ToString();
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Cycles the object with ID in the Target location to the next object of a specified type. Returns false when none or no more are available.")));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Search Type: ", "SearchType", new OpStaticNamedPropertyProvider(EditorScope.Behaviour.Get<STR>(164), 0)));

            panel.Controls.Add(new OpScopeControl(master, escope, Operand, "Target Scope: ", "TargetOwner", "TargetData"));

            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Properties for specific search types:")));
            panel.Controls.Add(new OpObjectControl(master, escope, Operand, "Object Type: ", "GUID"));
            panel.Controls.Add(new OpValueControl(master, escope, Operand, "Local: ", "Local", new OpStaticValueBoundsProvider(-32768, 32767)));
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMRunFunctionalTreeOperand)Operand;
            var result = new StringBuilder();
            var nextObject = EditorScope.Behaviour.Get<STR>(201).GetString((int)op.Function);
            result.Append(nextObject);

            if (op.ChangeIcon) result.Append("(Change Action Icon)");

            return result.ToString();
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMBreakPointOperand)Operand;
            var result = new StringBuilder();

            result.Append("when ");
            result.Append(scope.GetVarName(op.Scope, (short)op.Data));
            result.Append(" != 0");

            return result.ToString();
        }
        public override string GetBody(EditorScope scope)
        {
            var op = (VMIdleForInputOperand)Operand;
            var result = new StringBuilder();
            result.Append("for ticks in ");
            result.Append(scope.GetVarScopeDataName(SimAntics.Engine.Scopes.VMVariableScope.Parameters, op.StackVarToDec));

            if (op.AllowPush > 0) result.Append(", Allow Push");

            return result.ToString();
        }
 public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
 {
     panel.Controls.Add(new OpLabelControl(master, escope, Operand,
         new OpStaticTextProvider("Sleeps for the ticks specified by the chosen parameter, decrementing it towards zero. "
         + "Can be interrupted by the user cancelling the interaction, and the Notify Out Of Idle primitive.")));
     panel.Controls.Add(new OpComboControl(master, escope, Operand, "Ticks in Parameter:", "StackVarToDec", new OpStaticNamedPropertyProvider(escope.GetVarScopeDataNames(VMVariableScope.Parameters))));
     panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
         new OpFlag("Allow Push", "AllowPush")
         }));
     panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Allow Push is not well understood, and currently does nothing.")));
 }
Exemple #59
0
        public OpAnimControl(BHAVEditor master, EditorScope scope, VMPrimitiveOperand operand, string title)
        {
            InitializeComponent();
            this.Dock = DockStyle.Fill;
            Master = master;
            Scope = scope;
            Operand = (VMAnimateSimOperand)operand;
            TitleLabel.Text = title;

            OperandUpdated();
        }
        public override void PopulateOperandView(BHAVEditor master, EditorScope escope, TableLayoutPanel panel)
        {
            panel.Controls.Add(new OpLabelControl(master, escope, Operand, new OpStaticTextProvider("Routes the Avatar to the specified Routing Slot, returning True on success and False on failure. Normally upon failure, the Avatar also performs a small explanatory animation, though this can be disabled.")));

            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Source: ", "Type", new OpStaticNamedPropertyProvider(new string[] { "Private[parameter]", "Private", "Global" }, 0)));
            panel.Controls.Add(new OpComboControl(master, escope, Operand, "Slot: ", "Data", new OpRoutingSlotNameProvider()));

            panel.Controls.Add(new OpFlagsControl(master, escope, Operand, "Flags:", new OpFlag[] {
                new OpFlag("No Failure Trees", "NoFailureTrees"),
                }));
        }