Example #1
0
        public void AddEffect(ProductTrigger trigger, Effect effect)
        {
            Entry entry;

            if (!_map.TryGetValue(effect.UniqueID, out entry))
            {
                _map[effect.UniqueID] = entry = new Entry(effect);
            }

            var c = new TriggerConditions(trigger);

            entry.Add(c);
            entry.AddSource(trigger);
        }
Example #2
0
 void ProcessCondition(TriggerConditions cond, Func <MissionCondition, ScriptedTrigger, bool> action)
 {
     lock (_msnLock) {
         foreach (var tr in activeTriggers)
         {
             for (int i = tr.Conditions.Count - 1; i >= 0; i--)
             {
                 if (tr.Conditions[i].Type == cond && action(tr.Conditions[i], tr.Trigger))
                 {
                     tr.Conditions.RemoveAt(i);
                 }
             }
         }
     }
 }
Example #3
0
        /// <summary>
        /// Add a guard to this collection.
        /// </summary>
        /// <param name="tg">The trigger guard to add.</param>
        public void AddGuard(IElementaryTriggerCondition c0, TriggerGuard tg)
        {
            var   name = tg.Guard.Name;
            Entry entry;

            if (!_map.TryGetValue(name, out entry))
            {
                _map[name] = entry = new Entry(tg.Guard);
            }

            // calculate effective conditions for the guard
            var c = new TriggerConditions(c0);

            switch (tg.Guard.Type)
            {
            case GuardType.LEAVE:
                c.PreCondition  = Gate.ComposeAND(c.PreCondition, tg.PreCondition);
                c.PostCondition = Gate.ComposeAND(c.PostCondition, tg.PostCondition);
                break;

            case GuardType.TRANSITION:
                c.PreCondition  = Gate.ComposeAND(c.PreCondition, tg.PreCondition);
                c.PostCondition = Gate.ComposeAND(c.PostCondition, tg.PostCondition);
                break;

            case GuardType.ENTER:
                c.PostCondition = Gate.ComposeAND(c.PostCondition, tg.PostCondition);
                break;

            default:
                throw new ArgumentException("invalid guard type.");
            }

            Log.TraceGuard(c.PreCondition, c.PostCondition, "before join");

            if (!TraceFlags.DisableTriggerJoin)
            {
                // express postconditions by preconditions
                c.JoinTrigger(tg.Trigger);
            }

            Log.TraceGuard(c.PreCondition, c.PostCondition, "add guard");

            // and add to entry
            entry.Add(c);
        }
Example #4
0
 public static extern short SetTriggerChannelConditions(
     short handle,
     TriggerConditions[] conditions,
     short numConditions);
Example #5
0
 public MissionCondition(TriggerConditions cnd, Entry e)
 {
     Type  = cnd;
     Entry = e;
 }
Example #6
0
 static bool CondTrue(TriggerConditions cond)
 {
     return(cond == TriggerConditions.Cnd_True || cond == TriggerConditions.Cnd_SpaceExit ||
            cond == TriggerConditions.Cnd_BaseEnter);
 }
 public void Parse(GameBitBuffer buffer)
 {
     Field0 = buffer.ReadInt(32);
     Field1 = new TriggerConditions();
     Field1.Parse(buffer);
     Field2 = buffer.ReadInt(32);
     Field3 = new SNOName();
     Field3.Parse(buffer);
     Field4 = buffer.ReadInt(32);
     Field5 = buffer.ReadInt(32);
     eRuneType = buffer.ReadInt(32);
     bUseRuneType = buffer.ReadInt(32);
     Field8 = new HardpointLink[2];
     for(int i = 0;i < _Field8.Length;i++)
     {
         _Field8[i] = new HardpointLink();
         _Field8[i].Parse(buffer);
     }
     Field9 = new LookLink();
     Field9.Parse(buffer);
     Field10 = new ConstraintLink();
     Field10.Parse(buffer);
     Field11 = buffer.ReadInt(32);
     Field12 = buffer.ReadFloat32();
     Field13 = buffer.ReadInt(32);
     Field14 = buffer.ReadInt(32);
     Field15 = buffer.ReadInt(32);
     Field16 = buffer.ReadInt(32);
     Field17 = buffer.ReadInt(32);
     Field18 = buffer.ReadFloat32();
     Field19 = buffer.ReadFloat32();
     Field20 = buffer.ReadInt(32);
     Field21 = buffer.ReadFloat32();
     Field22 = buffer.ReadInt(32);
     Field23 = buffer.ReadFloat32();
     Field24 = buffer.ReadInt(32);
     Field25 = buffer.ReadInt(32);
     Field26 = new RGBAColor();
     Field26.Parse(buffer);
     Field27 = buffer.ReadInt(32);
     Field28 = new RGBAColor();
     Field28.Parse(buffer);
     Field29 = buffer.ReadInt(32);
 }