void UnionGroupSwapLogicUnits(int unionGroupId,
                                      MegaloScriptModelObjectHandle lhs, MegaloScriptModelObjectHandle rhs)
        {
            var union_group = UnionGroups[unionGroupId];

            union_group.Swap(lhs, rhs);
        }
Beispiel #2
0
        protected override void SerializeValue <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s)
        {
            if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.EmbedObjects) != 0)
            {
                using (s.EnterCursorBookmark("VT"))                 // have to nest or MegaloScriptModelObjectHandle will overwrite our Param ID with the VT's
                    MegaloScriptModelObjectHandle.SerializeForEmbed(s, model, ref mVirtualTriggerHandle);
            }
            else
            {
                if (s.IsReading)
                {
                    int id = TypeExtensions.kNone; s.ReadCursor(ref id);
                    if (id < 0)
                    {
                        throw new System.IO.InvalidDataException(string.Format(Util.InvariantCultureInfo,
                                                                               "VirtualTrigger value #{0} has an invalid value {1}", Id, id));
                    }

                    mVirtualTriggerHandle = model.VirtualTriggers[id].Handle;
                }
                else
                {
                    s.WriteCursor(VirtualTriggerHandle.Id);
                }
            }
        }
Beispiel #3
0
 void NotifyItemsSwapped(int lhsValueIndex, MegaloScriptModelObjectHandle lhsValue,
                         int rhsValueIndex, MegaloScriptModelObjectHandle rhsValue)
 {
     CollectionChanged.SafeNotify(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Move,
                                                                             lhsValue, rhsValueIndex, lhsValueIndex)); // index: new <- old
     CollectionChanged.SafeNotify(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Move,
                                                                             rhsValue, lhsValueIndex, rhsValueIndex)); // index: new <- old
 }
Beispiel #4
0
        internal void TriggerSwapLogicUnits(MegaloScriptModelObjectHandle triggerId,
                                            MegaloScriptModelObjectHandle lhs, MegaloScriptModelObjectHandle rhs)
        {
            Contract.Requires(triggerId.Type == MegaloScriptModelObjectType.Trigger || triggerId.Type == MegaloScriptModelObjectType.VirtualTrigger);
            Contract.Requires(triggerId.IsNotNone);

            var trigger = (MegaloScriptTriggerBase)this[triggerId];

            Contract.Assert(trigger != null);
            ReferencesSwapLogicUnits(trigger.References, lhs, rhs);
        }
Beispiel #5
0
        /// <summary>Creates a new condition object and associates it with <paramref name="unionGroupId"/></summary>
        /// <param name="unionGroupId">The preexisting union group</param>
        /// <param name="evaluationBefore">Condition in the union group to evaluate this condition before, or NONE to just append</param>
        /// <returns></returns>
        public MegaloScriptCondition CreateConditionInUnionGroup(int unionGroupId, MegaloScriptModelObjectHandle evaluationBefore)
        {
            Contract.Requires(unionGroupId.IsNotNone());
            Contract.Requires(evaluationBefore.Type == MegaloScriptModelObjectType.Condition);
            Contract.Requires(evaluationBefore.IsNoneOrPositive);

            var cond = CreateCondition();

            var union_group = UnionGroups[unionGroupId];

            union_group.Insert(cond, evaluationBefore);

            return(cond);
        }
Beispiel #6
0
        public MegaloScriptModelObjectHandle CreateBeginAction(MegaloScriptModelObjectHandle virtualTriggerHandle)
        {
            var vt_action = CreateAction();

            vt_action.InitializeForType(this, Database.BeginAction.DBID);

            var vt_action_arg0 = CreateValue(Database.GetValueType("VirtualTrigger"))
                                 as Megalo.Model.MegaloScriptVirtualTriggerValue;

            vt_action_arg0.VirtualTriggerHandle = virtualTriggerHandle;

            vt_action.Arguments.InitializeValues(vt_action_arg0);

            return(vt_action.Handle);
        }
Beispiel #7
0
        public MegaloScriptModelObjectHandle CreateForEachAction(MegaloScriptModelObjectHandle triggerHandle)
        {
            var activate_action = CreateAction();

            activate_action.InitializeForType(this, Database.ForEachAction.DBID);

            var action_arg0 = CreateValue(Database.GetValueType("TriggerReference"))
                              as Megalo.Model.MegaloScriptIndexValue;

            action_arg0.Value = triggerHandle.Id;

            activate_action.Arguments.InitializeValues(action_arg0);

            return(activate_action.Handle);
        }
Beispiel #8
0
        public override void Serialize(MegaloScriptModel model, IO.BitStream s)
        {
            MegaloScriptVirtualTrigger trigger;

            if (s.IsReading)
            {
                trigger = model.CreateVirtualTrigger();
                mVirtualTriggerHandle = trigger.Handle;
            }
            else
            {
                trigger = model.VirtualTriggers[VirtualTriggerHandle.Id];
            }

            trigger.Serialize(model, s);
        }
        void ReferencesSwapLogicUnits(MegaloScriptConditionActionReferences refs,
                                      MegaloScriptModelObjectHandle lhs, MegaloScriptModelObjectHandle rhs)
        {
            Contract.Requires(lhs.IsNotNone);
            Contract.Requires(rhs.IsNotNone);

            refs.Swap(lhs, rhs);

            if (lhs.Type == MegaloScriptModelObjectType.Condition && rhs.Type == MegaloScriptModelObjectType.Condition)
            {
                var lhs_cond = Conditions[lhs.Id];
                var rhs_cond = Conditions[rhs.Id];

                if (lhs_cond.UnionGroup == rhs_cond.UnionGroup)
                {
                    UnionGroupSwapLogicUnits(lhs_cond.UnionGroup, lhs, rhs);
                }
            }
        }
Beispiel #10
0
        static void SerializeTriggerReferenceValue <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s,
                                                                   MegaloScriptValueType valueType, ref int value)
            where TDoc : class
            where TCursor : class
        {
            var handle = s.IsWriting ? new MegaloScriptModelObjectHandle(MegaloScriptModelObjectType.Trigger, value) : MegaloScriptModelObjectHandle.Null;

            if (s.IsWriting)
            {
                Contract.Assert(model.Triggers[handle.Id].TriggerType == MegaloScriptTriggerType.InnerLoop);
            }
            using (s.EnterCursorBookmark("T"))             // have to nest or MegaloScriptModelObjectHandle will overwrite our Param ID with the Trigger's
                MegaloScriptModelObjectHandle.SerializeForEmbed(s, model, ref handle);

            if (s.IsReading)
            {
                value = handle.Id;
            }
        }
Beispiel #11
0
        public MegaloScriptModelObject GetModelObjectFromHandle(MegaloScriptModelObjectHandle handle)
        {
            int id = handle.Id;

            switch (handle.Type)
            {
            case MegaloScriptModelObjectType.None:                  return(null);

            case MegaloScriptModelObjectType.Value:                 return(Values[id]);

            case MegaloScriptModelObjectType.UnionGroup:    return(UnionGroups[id]);

            case MegaloScriptModelObjectType.Condition:             return(Conditions[id]);

            case MegaloScriptModelObjectType.Action:                return(Actions[id]);

            case MegaloScriptModelObjectType.Trigger:               return(Triggers[id]);

            case MegaloScriptModelObjectType.VirtualTrigger: return(VirtualTriggers[id]);

            default: throw new KSoft.Debug.UnreachableException(handle.Type.ToString());
            }
        }
Beispiel #12
0
        public MegaloScriptVirtualTriggerValue(MegaloScriptValueType valueType) : base(valueType)
        {
            Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.VirtualTrigger);

            mVirtualTriggerHandle = MegaloScriptModelObjectHandle.Null;
        }
Beispiel #13
0
 public MegaloScriptModelObject this[MegaloScriptModelObjectHandle handle] => GetModelObjectFromHandle(handle);
Beispiel #14
0
 void NotifyItemRemoved(int index, MegaloScriptModelObjectHandle value)
 {
     NotifyPropertyChanged(kCountChanged);
     CollectionChanged.SafeNotify(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove,
                                                                             value, index));
 }
Beispiel #15
0
 void NotifyItemChanged(int index, MegaloScriptModelObjectHandle oldValue, MegaloScriptModelObjectHandle newValue)
 {
     CollectionChanged.SafeNotify(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace,
                                                                             oldValue, newValue, index));
 }