Пример #1
0
        protected bool TryGenerateEffects(List <IDAndChanges> idAndChangesList,
                                          out Dictionary <int, Effect> effectsByID, out List <int> failedIndices)
        {
            // create a dummy EffectHandler to register possible global Effects
            var globalsEH = new BaseEffectHandler("TempGlobalsEffectHandler", null, null);

            effectsByID   = new Dictionary <int, Effect>();
            failedIndices = null;

            int        lastRemainingCount = int.MaxValue;
            List <int> remainingIndices   = null;

            do
            {
                remainingIndices = GenerateEffects(effectsByID, idAndChangesList,
                                                   globalsEH, remainingIndices);
            }while ((remainingIndices.Count > 0) && (remainingIndices.Count < lastRemainingCount));

            // the still remaining indices failed to be resolved
            if (remainingIndices.Count > 0)
            {
                failedIndices = remainingIndices;
                return(false);
            }

            return(true);
        }
Пример #2
0
        partial void pCTC_Material(BaseEffectHandler eh, TotalChange tc)
        {
            try
            {
                ChangeInitInfo info;
                if (!ValidateChangeInit(ChangeType.Item_Material_Set, out info))
                {
                    return;
                }

                ItemMaterials material;
                if (tc.Components.Count < 1)
                {
                    material = Default_Material;
                }
                else
                {
                    // last entry counts
                    material = (ItemMaterials)tc.Components[0].GetParameters()[0];
                }

                var finalChange = Change.Create(info, new List <object>()
                {
                    material
                });
                tc.SetTotal(finalChange);
            }
            catch (Exception ex) { MakeLogError("Error while caclulating TotalChange via pCTC_Material: " + ex); }
        }
Пример #3
0
        partial void pCTC_CDStatic(BaseEffectHandler eh, TotalChange tc)
        {
            try
            {
                ChangeInitInfo info;
                if (!ValidateChangeInit(ChangeType.Vob_CDStatic_Set, out info))
                {
                    return;
                }

                // use default or value from last Change
                bool val = Default_CDStatic;
                if (tc.Components.Count > 0)
                {
                    val = (bool)tc.Components.Last().GetParameters()[0];
                }

                var finalChange = Change.Create(info, new List <object>()
                {
                    val
                });
                tc.SetTotal(finalChange);
            }
            catch (Exception ex) { MakeLogError("Error while caclulating TotalChange via pCTC_CDStatic: " + ex); }
        }
Пример #4
0
        partial void pCTC_VobType(BaseEffectHandler eh, TotalChange tc)
        {
            try
            {
                // stop here when there are no Changes to process
                if (tc.Components.Count < 1)
                {
                    return;
                }

                ChangeInitInfo info;
                if (!ValidateChangeInit(ChangeType.Vob_VobType_Set, out info))
                {
                    return;
                }

                // TO DO: only change VobType if the linked object is actually able to !!!
                // last entry counts
                var finalChange = Change.Create(info,
                                                new List <object>()
                {
                    tc.Components[tc.Components.Count - 1]
                });
                tc.SetTotal(finalChange);
            }
            catch (Exception ex) { MakeLogError("Error while caclulating TotalChange via pCTC_VobType: " + ex); }
        }
Пример #5
0
 public static bool TryGetTotalChange(BaseEffectHandler effectHandler, ChangeDestination changeDest,
                                      out TotalChange totalChange)
 {
     totalChange = null;
     if (effectHandler.TryGetTotalChange(changeDest, out totalChange))
     {
         return(true);
     }
     return(false);
 }
Пример #6
0
 partial void pATC_Name(BaseEffectHandler eh, TotalChange tc)
 {
     // assuming that the EffectName is only set --> set it in the respective effect of each change
     try
     {
         List <Change> components = tc.Components;
         for (int c = 0; c < components.Count; c++)
         {
             components[c].GetEffect().SetEffectName((string)components[c].GetParameters()[0]);
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via ATC_Name: " + ex); }
 }
Пример #7
0
 partial void pATC_CDStatic(BaseEffectHandler eh, TotalChange tc)
 {
     try
     {
         var linkedObj = eh.Host;
         if (linkedObj is VobDef)
         {
             var vobDef = linkedObj as VobDef;
             vobDef.CDStatic = (bool)tc.GetTotal().GetParameters()[0];
         }
         else if (linkedObj is VobInst)
         {
             // TO DO: add similar code as for VobDef when VobSystem supports it
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via pATC_CDStatic: " + ex); }
 }
Пример #8
0
 partial void pATC_Material(BaseEffectHandler eh, TotalChange tc)
 {
     try
     {
         var linkedObj = eh.Host;
         if (linkedObj is ItemDef)
         {
             var vobDef = linkedObj as ItemDef;
             vobDef.Material = (ItemMaterials)tc.GetTotal().GetParameters()[0];
         }
         else if (linkedObj is ItemInst)
         {
             var vobInst = linkedObj as ItemInst;
             // TO DO when there is the possiblity to change the name in VobSystem
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via pATC_Material: " + ex); }
 }
Пример #9
0
 partial void pATC_CodeName(BaseEffectHandler eh, TotalChange tc)
 {
     try
     {
         var linkedObj = eh.Host;
         if (linkedObj is VobDef)
         {
             var vobDef = linkedObj as VobDef;
             vobDef.CodeName = (string)tc.GetTotal().GetParameters()[0];
         }
         else if (linkedObj is VobInst)
         {
             var vobInst = linkedObj as VobInst;
             // ??? TO DO if codeName should be changable for a VobInst
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via ATC_CodeName: " + ex); }
 }
Пример #10
0
 partial void pATC_GlobalID(BaseEffectHandler eh, TotalChange tc)
 {
     try
     {
         Effect effect;
         string globalID;
         var    components = tc.Components;
         int    i;
         for (i = 0; i < components.Count; i++)
         {
             effect   = components[i].GetEffect();
             globalID = (string)components[i].GetParameters()[0];
             if (globalID != null)
             {
                 Effect.AddGlobalEffect(globalID, effect);
             }
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via pATC_GlobalID: " + ex); }
 }
Пример #11
0
        // create and add effects to effectsByID using idAndChangesList
        // returns List of unfinished / postponed / failed indices in idAndChangesList
        protected List <int> GenerateEffects(Dictionary <int, Effect> effectsByID,
                                             List <IDAndChanges> idAndChangesList, BaseEffectHandler globalsEH,
                                             List <int> targetIndices = null)
        {
            var failedIndices = new List <int>();

            if (targetIndices != null)
            {
                // use specified indices to iterate over
                int index;
                for (int i = 0; i < targetIndices.Count; i++)
                {
                    index = targetIndices[i];
                    if ((index < 0) || (index > (idAndChangesList.Count - 1)))
                    {
                        MakeLogWarning("Out of bounds index " + index + " in GenerateEffects!");
                        failedIndices.Add(index);
                        continue;
                    }
                    if (!TryGenerateEffect(effectsByID, idAndChangesList[index],
                                           globalsEH))
                    {
                        failedIndices.Add(index);
                    }
                }
            }
            else
            {
                // whole List will be iterated without any target indices specified
                for (int i = 0; i < idAndChangesList.Count; i++)
                {
                    if (!TryGenerateEffect(effectsByID, idAndChangesList[i],
                                           globalsEH))
                    {
                        failedIndices.Add(i);
                    }
                }
            }

            return(failedIndices);
        }
Пример #12
0
 partial void pATC_Parent(BaseEffectHandler eh, TotalChange tc)
 {
     try
     {
         Effect        effect;
         Effect        parent;
         string        parentGlobalID;
         List <Change> components = tc.Components;
         for (int c = 0; c < components.Count; c++)
         {
             effect         = components[c].GetEffect();
             parentGlobalID = (string)components[c].GetParameters()[0];
             if (!Effect.TryGetGlobalEffect(parentGlobalID, out parent))
             {
                 MakeLogWarning("Did not find effect behind globalID " + parentGlobalID
                                + " to add as parent effect in ATC_Parent");
             }
             effect.AddParent(parent);
         }
     }
     catch (Exception ex) { MakeLogError("Error while applying TotalChange via pATC_Parent: " + ex); }
 }
Пример #13
0
        protected bool TryGenerateEffect(Dictionary <int, Effect> effectsByID, IDAndChanges ec,
                                         BaseEffectHandler globalsEH)
        {
            var effect = new Effect();

            globalsEH = globalsEH ?? new BaseEffectHandler("globalsEH", null, null);

            var dependencies = FindDependencies(ec);

            if (ContainsUnresolvedDependencies(dependencies))
            {
                return(false);
            }

            effect = new Effect();
            effect.AddChanges(ec.Changes);
            effectsByID.Add(ec.ID, effect);
            if (DetectIsGlobal(ec))
            {
                globalsEH.AddEffect(effect);
            }

            return(true);
        }
Пример #14
0
 partial void pCTC_Parent(BaseEffectHandler eh, TotalChange tc)
 {
     // because multiple effects can be registered on one effectHandler,
     // there is no need to actually calculate a TotalChange
     // (see ApplyTotalChange for the individual treatment of each Change in TotalChange.components)
 }
Пример #15
0
 partial void pATC_Material(BaseEffectHandler eh, TotalChange tc);
Пример #16
0
 partial void pATC_Clock_Time(BaseEffectHandler eh, TotalChange tc);
Пример #17
0
 partial void pATC_GlobalID(BaseEffectHandler eh, TotalChange tc);
Пример #18
0
 public void CTC_Clock_Time(BaseEffectHandler eh, TotalChange tc)
 {
     pCTC_Clock_Time(eh, tc);
 }
Пример #19
0
 public void ATC_Clock_Rate(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_Clock_Rate(eh, tc);
 }
Пример #20
0
 partial void pATC_Parent(BaseEffectHandler eh, TotalChange tc);
Пример #21
0
 partial void pATC_Name(BaseEffectHandler eh, TotalChange tc);
Пример #22
0
 partial void pATC_PermanentFlag(BaseEffectHandler eh, TotalChange tc);
Пример #23
0
 public void ATC_GlobalID(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_GlobalID(eh, tc);
 }
Пример #24
0
 public void ATC_Material(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_Material(eh, tc);
 }
Пример #25
0
 public void ATC_Parent(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_Parent(eh, tc);
 }
Пример #26
0
 partial void pATC_Clock_IsRunning(BaseEffectHandler eh, TotalChange tc);
Пример #27
0
 public void ATC_PermanentFlag(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_PermanentFlag(eh, tc);
 }
Пример #28
0
 public void ATC_Clock_IsRunning(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_Clock_IsRunning(eh, tc);
 }
Пример #29
0
 public void ATC_Name(BaseEffectHandler eh, TotalChange tc)
 {
     pATC_Name(eh, tc);
 }
Пример #30
0
 partial void pCTC_Clock_Rate(BaseEffectHandler eh, TotalChange tc);